<?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>CaChi &#187; CaChi</title>
	<atom:link href="http://cachi.temiga.org/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://cachi.temiga.org</link>
	<description>[ TEMIGA ]</description>
	<lastBuildDate>Mon, 19 Jul 2010 14:10:08 +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>KumbiaPHP + i18N Internacionalización</title>
		<link>http://cachi.temiga.org/2010/07/18/kumbiaphp-i18n-internacionalizacion/</link>
		<comments>http://cachi.temiga.org/2010/07/18/kumbiaphp-i18n-internacionalizacion/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 02:07:21 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[internacionalización]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=678</guid>
		<description><![CDATA[Antes de comenzar este tutorial que es bastante práctico y fácil quiero resaltar algunos conceptos básicos para entender mejor para que sirve la internacionalización i18N. Parto de una premisa: i18n No ES sólo presentar contenido en varios idiomas. ¿Que es la Internacionalización? La Web se ha convertido en la principal herramienta de difusión de información]]></description>
			<content:encoded><![CDATA[<p><a href="http://cachi.temiga.org/wp-content/uploads/i18nIcon.png"><img alt="i18n" src="http://cachi.temiga.org/wp-content/uploads/i18nIcon.png" title="i18N" class="alignleft" width="120" height="120" /></a>Antes de comenzar este tutorial que es bastante práctico y fácil quiero resaltar algunos conceptos básicos para entender mejor para que sirve la internacionalización i18N. Parto de una premisa:<br />
<strong>i18n No ES sólo presentar contenido en varios idiomas.</strong> </p>
<h2>¿Que es la Internacionalización?</h2>
<p>La Web se ha convertido en la principal herramienta de difusión de información para una audiencia variada y de gran tamaño que requiere de un procesamiento de información sencillo. La información que se muestra al usuario está compuesta de partes diferentes que han de trabajar en conjunto de forma coordinada para que la información sea accesible y universal, es decir, estas partes que integran la <strong>Web han de funcionar bajo cualquier circunstancia, en cualquier país, con cualquier idioma y cultura</strong>. Por este motivo la internacionalización podría definirse como un proceso a través del cual se van a diseñar sitios <strong>Web adaptables a diferentes idiomas y regiones sin necesidad de realizar cambios en el código</strong>. La utilización de formatos y protocolos que no establezcan barreras a los diferentes idiomas, sistemas de escritura, códigos y otras convenciones locales, es esencial para hablar de internacionalización en un sitio Web.</p>
<p>La Internacionalización también es conocida como I18N, que es la abreviatura de Internacionalización porque hay 18 letras entre la i y la n. <a href="http://www.w3c.es/divulgacion/guiasbreves/internacionalizacion#intro">Fuente</a>.</p>
<p>Otro aspecto importante es saber <a href="http://www.w3c.es/divulgacion/guiasbreves/internacionalizacion#funcionamiento">como funciona la internacionalización</a>.</p>
<p><strong>Norma N. 1 &#8211; TODO EN UTF-8</strong>: editor, archivos, BD, tablas, campos, es decir todo, esto soluciona el 90% de los problemas de i18n.</p>
<p>Recordar que este ejemplo esta adaptado para <a href="http://kumbiaphp.com" title="KumbiaPHP Framework">KumbiaPHP</a>, aunque la generación de los catalogos es igual en cualquier caso, la recomendación es usar <a href="http://www.gnu.org/software/gettext/">Gettex</a> fácil de usar y estándar, hay un tutorial en la <a href="http://wiki.kumbiaphp.com/" title="Wiki de KumbiaPHP Framework">Wiki de KumbiaPHP</a> (<a href="http://wiki.kumbiaphp.com/KumbiaPHP_y_gettext">KumbiaPHP y Gettext</a>)el cual explica como generar los catalogos con <a href="http://www.poedit.net/" title="Poedit">Poedit</a> y donde ubicarlos dentro de la estructura de directorio de la <a href="http://www.kumbiaphp.com/blog/2009/08/14/kumbiaphp_framework_1_0_beta1_liberada/">versión 1.0 Beta1</a></p>
<p>El autor del blog Matando Tigres ha <a href="http://matandotigres.wordpress.com/2010/07/17/internacionalizacion-i18n-basada-en-url-para-kumbiaphp/">creado su receta</a> que <a href="http://groups.google.com/group/kumbia/msg/97b697ef83ff208c">como comente</a> es bastante simple y funcional, yo traigo otra alternativa tan igual de fácil como esa ;).</p>
<p>Es sumamente importante generar los catalogos tal como se explica en el tutorial <a href="http://wiki.kumbiaphp.com/KumbiaPHP_y_gettext">KumbiaPHP y Gettex</a> ya que la intención de este tutorial es como mediante las URL&#8217;s sabemos el idioma y aplicarlo a nuestra aplicación para que se hagan las traducciones necesarias.</p>
<h3>Lo Primero</h3>
<p>Lo que deseamos es tener una URL como esta http://dominio.com/<strong>$lang</strong>/controller/action/, donde el <em>$lang</em> puede tener tantos idiomas como se hayan considerado.</p>
<p>Siguiendo, hay que editar el archivo <strong>app/public/.htaccess</strong> hay muchos que ignoran el gran potencial que se cuenta con la reescrituras de URL (<a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">mod_rewrite</a>) y para efecto de este tutorial quiero sacar provecho de las reglas de reescritura.</p>
<pre lang=text>
... AQUI ESTA EL DEMAS CONTENIDO...
    # Para peticiones que no son archivos ni directorios
    # Reescribe a index.php?_url=URL
    RewriteRule ^(es|en)/(.*)$ index.php?url=/$2&#038;lang=$1 [QSA,L]
</pre>
<p>Como se aprecia solo hemos cambiado la última regla para agregar el idioma y este luego es enviado como un parámetro <strong>GET['lang']</strong> y como se mencionó la URL tendra este aspecto http://dominio.com/<strong>es</strong>/controller/action/ para efecto del ejemplo solo se han colocado 2 idiomas es (español) y en (ingles) pueden estar todos los que se necesiten.</p>
<h3>Lo Segundo</h3>
<p>Adecuar todos los enlaces, esto lo hacemos editando el FrontController de KumbiaPHP <strong>app/public/index.php</strong> en la definición de la constante <strong>URL_PATH</strong> que es la constante que se colocan en los link, form, etc. generados por los helpers.</p>
<p>La definición de esta constante esta aprox. por la línea 75.<br />
<strong>define(&#8216;URL_PATH&#8217;, PUBLIC_PATH.$_GET['lang'].&#8217;/');</strong></p>
<p>Como se aprecia solo hemos agregando el valor del parámetro <strong>$_GET['lang']</strong> que se definió en el .htaccess con esto ya todos nuestros enlaces tienen el idioma en la URL.</p>
<h3>Por último&#8230;</h3>
<p>Ahora solo queda asignar el valor del lenguaje solicitado para que la aplicación lo cargue y aplique las traducciones necesarias, ¿recuerdan lo que escribí hace un tiempo de <a href="http://cachi.temiga.org/2010/01/31/kumbiaphp-tips-aprovecha-el-metodo-initialize/">aprovechar el método initialize()</a>? para este caso también aplica :).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> ApplicationController <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Array con los idiomas disponibles
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_langs</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'es'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'es_VE'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'en'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'en_US'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$lang</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'lang'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//verifica que el lenguaje sea soportado, sino existe tomamos uno por defecto 'es_VE'</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lang</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_langs<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">//idioma por defecto</span>
            <span style="color: #000088;">$lang</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'es_VE'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$lang</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_langs<span style="color: #009900;">&#91;</span><span style="color: #000088;">$lang</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #990000;">putenv</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;LC_ALL=<span style="color: #006699; font-weight: bold;">$lang</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">setlocale</span><span style="color: #009900;">&#40;</span>LC_ALL<span style="color: #339933;">,</span> <span style="color: #000088;">$lang</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">bindtextdomain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;messages&quot;</span><span style="color: #339933;">,</span> APP_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'locale'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">textdomain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;messages&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Con esto ya deben funcionar las traducciones de nuestra aplicación, los código de idiomas sale del <a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes">ISO 631-1</a></p>
<h3>Conclusiones&#8230;</h3>
<p>i18n es mas que una traducción de texto a un idioma hay que tomar en cuenta las culturas de las traducciones, monedas, fechas, montos, etc. hay muchas cosas por tomar en cuenta que no mencione en este tutorial sin embargo con ir al <a href="http://www.w3.org/International/">sitio oficial de Internacionalización</a> (ingles) de la W3C encontraran bastante insumos para comprender este tema.</p>
<p>Haciendo una pequeña comparación respecto al ejemplo que publico el autor del blog <a href="http://matandotigres.wordpress.com/">Matando Tigres</a> es que en este caso no utilizo el <strong>routes.ini</strong> obviamente esto se traduce en un tema de performance y reducción de trabajo, porque tantas rutas estaticas tenga en mi sistema debo definirla para el idioma.</p>
<p>Como siempre digo es una opción que seguro irá mejorando a medida que ustedes den un feedback, espero sus comentarios.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F07%2F18%2Fkumbiaphp-i18n-internacionalizacion%2F&amp;linkname=KumbiaPHP%20%2B%20i18N%20Internacionalizaci%C3%B3n"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/07/18/kumbiaphp-i18n-internacionalizacion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>KumbiaPHP Tips: Añadir titulo (title) a nuestras páginas&#8230;</title>
		<link>http://cachi.temiga.org/2010/06/14/kumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas/</link>
		<comments>http://cachi.temiga.org/2010/06/14/kumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 01:59:19 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=659</guid>
		<description><![CDATA[Una de las cosas que siempre es importante tomar en cuenta es la de agregar un titulo a la página (title) donde se esta navegando, esto por múltiples factores que van desde SEO, usabilidad, navegación, etc. en este post les quiero dejar un KumbiaPHP Tips (asi los bautice) que les permitirá de forma simple agregar]]></description>
			<content:encoded><![CDATA[<p><a href="http://cachi.temiga.org/wp-content/uploads/helpful_tips_image.jpg"><img class="alignleft" title="Tips and Tricks" src="http://cachi.temiga.org/wp-content/uploads/helpful_tips_image.jpg" alt="Tips and Tricks" width="180" height="182" /></a>Una de las cosas que siempre es importante tomar en cuenta es la de agregar un titulo a la página (<a href="http://www.w3schools.com/tags/tag_title.asp">title</a>) donde se esta navegando, esto por múltiples factores que van desde <a href="http://es.wikipedia.org/wiki/Posicionamiento_en_buscadores" title="Posicionamiento en buscadores (SEO)">SEO</a>, usabilidad, navegación, etc. en este post les quiero dejar un <a href="http://cachi.temiga.org/tag/kumbiaphp-tips/">KumbiaPHP Tips</a> (asi los bautice) que les permitirá de forma simple agregar títulos a las páginas de forma dinámica.</p>
<p>Lo que siempre hay que recordar es que <a title="KumbiaPHP Framework" href="http://kumbiaphp.com">KumbiaPHP</a> es un framework MVC y POO (Programación Orientado a Objetos) si aprendemos a utilizar la arquitectura y el paradigma juntos seremos muy productivo, ademas de los beneficios adicionales que la aplicación de estas conlleva.</p>
<p>Bien, vamos al ejemplo lo primero es saber que <a title="KumbiaPHP Framework" href="http://kumbiaphp.com">KumbiaPHP</a> implementa algo llamado <em>variables de instancia</em>, esto quiere decir que los atributos que son declarado con <a title="Visibilidad POO" href="http://www.php.net/manual/en/language.oop5.visibility.php" target="_blank">modificador acceso</a> público (public) en el controlador serán enviados a la vista, en el <a href="http://wiki.kumbiaphp.com/Hola_Mundo_KumbiaPHP_Framework#Agregando_m.C3.A1s_Contenido" target="_blank">ejemplo de hola mundo</a> puedes apreciarlo. Partiendo de esta premisa jugaremos con eso y vamos a definir un atributo <strong>$pageTitle</strong> con modificador de acceso <em>public</em> en el controlador base, me refiero al <strong><a title="ApplicationController | Controlador Padre" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#application.php" target="_blank">application.php</a></strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009933; font-style: italic;">/**
 * Todas las controladores heredan de esta clase en un nivel superior
 * por lo tanto los metodos aqui definidos estan disponibles para
 * cualquier controlador.
 *
 * @category Kumbia
 * @package Controller
 **/</span>
<span style="color: #000000; font-weight: bold;">class</span> ApplicationController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$pageTitle</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Mi Titulo'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Con esto ya tenemos en las vistas <strong>$pageTitle</strong>, ahora tenemos que colocar esa variable a cumplir su función y tomando el ejemplo de <a title="KumbiaPHP + Ajax + jQuery" href="http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/">KumbiaPHP + Ajax + jQuery</a> este tiene como <a href="http://www.w3schools.com/tags/tag_title.asp">title</a> de la página <strong>&#8220;KumbiaPHP web &amp; app Framework&#8221;</strong>, vamos a editar el <a href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#views.2Ftemplates.2F">Template</a> <strong>app/views/templates/default.phtml</strong> y agregamos en el tag <a href="http://www.w3schools.com/tags/tag_title.asp">title</a> la variable <strong>$pageTitle</strong> como se muestra en el siguiente código.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; 
                   &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
 &lt;head&gt;
  &lt;meta http-equiv='Content-type' content='text/html; charset=<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> APP_CHARSET <span style="color: #000000; font-weight: bold;">?&gt;</span>' /&gt;
  &lt;title&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pageTitle</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    //CONTENIDO BODY
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Lo importante notar en el template es que se agrego la variable <strong>$pageTitle</strong>, con esto todos las páginas tendrán un titulo por defecto, ahora la idea es cambiarlo de acuerdo a donde se encuentre la navegación, siguiendo el ejemplo <a title="KumbiaPHP + Ajax + jQuery" href="http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/">KumbiaPHP + Ajax + jQuery</a> en la acción <strong>acortar()</strong> le vamos agregar un titulo personalizado como se muestra en el siguiente código.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #339933;">...</span> DEFINICIÓN DEL CONTROLLER<span style="color: #339933;">...</span>
   <span style="color: #009933; font-style: italic;">/**
     * Form que se comunica con el API de SigueMiLink
     * para acortar el enlace
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> acortar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">pageTitle</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Crea tu enlace Corto con SigueMiLink'</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//RESTO DEL CÓDIGO</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">...</span> DEFINICIÓN DEL CONTROLLER<span style="color: #339933;">...</span></pre></div></div>

<p>Para finalizar al ir al enlace <a href="http://localhost/kumbiaphp/api/acortar/">http://localhost/kumbiaphp/api/acortar/</a> debe mostrar el siguiente titulo <strong>&#8220;Crea tu enlace Corto con SigueMiLink&#8221;</strong>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F06%2F14%2Fkumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas%2F&amp;linkname=KumbiaPHP%20Tips%3A%20A%C3%B1adir%20titulo%20%28title%29%20a%20nuestras%20p%C3%A1ginas%26%238230%3B"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/06/14/kumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>KumbiaPHP + Ajax + jQuery</title>
		<link>http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/</link>
		<comments>http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 16:04:07 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php framework]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[ShortUrl]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=641</guid>
		<description><![CDATA[Actualizado 11 de Junio 2010 En este tutorial explcaré el comportamiento de KumbiaPHP cuando hacemos aplicaciones ricas en JavaScript, me basare en utilizar jQuery como framework de JavaScript y no daré una explicación muy amplia de que son peticiones asíncronas ni como funcionan estas esto porque hay suficiente información en la red para quienes deseen]]></description>
			<content:encoded><![CDATA[<blockquote><p>Actualizado 11 de Junio 2010</p></blockquote>
<p>En este tutorial explcaré el comportamiento de <a href="http://www.kumbiaphp.com" title="KumbiaPHP Framework">KumbiaPHP</a> cuando hacemos aplicaciones ricas en JavaScript, me basare en utilizar jQuery como framework de JavaScript  y no daré una explicación muy amplia de que son peticiones asíncronas ni como funcionan estas esto porque hay suficiente información en la red para quienes deseen indagar un poco mas, simplemente nos dedicaremos hacer peticiones asíncronas dentro de <a href="http://www.kumbiaphp.com" title="KumbiaPHP Framework">KumbiaPHP</a>.</p>
<p>Como todo ejemplo lo ideal es basarlo en hechos reales y cotidianos en este sentido haremos un cliente que acorte URL utilizando el <a href="http://www.siguemilink.com/api">API</a> del servicio <a href="http://www.siguemilink.com/" title="SigueMiLink » Acorta tus enlaces!">SigueMiLink</a> el cual fue desarrollado con KumbiaPHP :).</p>
<h3>Requisitos</h3>
<p>Antes de continuar hay que verificar lo que necesitamos para llevar acabo el tutorial.</p>
<ul>
<li>Tener funcionando KumbiaPHP <a href="http://www.kumbiaphp.com/blog/manuales-y-descargas/">Beta1</a> (<a href="http://wiki.kumbiaphp.com/Instalar_Kumbia">Instalar KumbiaPHP</a>)</li>
<li><a href="http://code.jquery.com/jquery-1.4.2.min.js">Descargar jQuery</a> y colocarlo en el directorio <strong>app/public/javascript/jquery/jquery-1.4.2.min.js</strong>.</li>
<li>Por lo menos haber hecho el ejemplo <a href="http://wiki.kumbiaphp.com/Hola_Mundo_KumbiaPHP_Framework">Hola Mundo de KumbiaPHP</a> para entender este tutorial.</li>
<li>Leer un poco el <a href="http://www.siguemilink.com/api">API</a> del servicio <a href="http://www.siguemilink.com/" title="SigueMiLink » Acorta tus enlaces!">SigueMiLink</a></li>
<li>Ver funcionamiento básico de <a href="http://wiki.kumbiaphp.com/AJAX">KumbiaPHP con AJAX</a></li>
</ul>
<h3>Empezamos</h3>
<p>Lo primero es crear el controlador para efecto de este tutorial lo llame <strong>api</strong> mirar las <a href="http://wiki.kumbiaphp.com/Preguntas_Frecuentes#.C2.BFCu.C3.A1l_es_la_convenci.C3.B3n_para_nombrar_los_archivos_y_clases_de_modelos_y_controladores.3F">convenciones de nombres de controladores</a> si se te ocurre otro nombre mejor usalo, pero piensa que a lo largo del tutorial haré mención al <strong>controller api</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009933; font-style: italic;">/**
 * Controller para utilizar el API de SigueMiLink
 * @author Deivinson Tejeda &lt;deivinsontejeda@kumbiaphp.com&gt;
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> ApiController <span style="color: #000000; font-weight: bold;">extends</span> ApplicationController
<span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * URL del API de SigueMiLink
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_urlAPI</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://www.siguemilink.com/api/%s/?destination=%s'</span><span style="color: #339933;">;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Callback Before que verifica si la petición es Asíncrona...
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> before_filter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">is_ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_response</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'view'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Form que se comunica con el API de SigueMiLink
     * para acortar el enlace
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> acortar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">has_post</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">//Reemplazo de valores en la URL del API.</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_urlAPI <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_urlAPI<span style="color: #339933;">,</span> <span style="color: #0000ff;">'create'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">response1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_urlAPI<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'response'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ahora se crea la vista <strong>app/views/api/acortar.phtml</strong> que tiene un formulario que envia la URL al controller que será enviada al API de SigueMiLink.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;div style=&quot;margin: auto&quot;&gt;
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> form_tag<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'api/acortar/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'form-remote'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        &lt;label&gt;Acorte tu enlace&lt;/label&gt;
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> text_field_tag<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> submit_tag<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Enviar'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> end_form_tag<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;br /&gt;
    &lt;div id=&quot;update&quot; style=&quot;margin: auto;&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> javascript_include_tag<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery/jquery-1.4.2.min'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;script type=&quot;text/javascript&quot;&gt;
    &lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--
        $(function() {
            $(&quot;.form-remote&quot;).live('submit', function(event){
                event.preventDefault();
			    self = $(this);
			    var button = $('[type=submit]', self);
			    button.attr('disabled', 'disabled');
			    var url = self.attr('action');
			    //var div = self.attr('data-div');
			    $.post(url, self.serialize(), function(data, status){
				    var capa = $('#update');
				    capa.html(data);
				    capa.hide();
				    capa.show('slow');
				    button.attr('disabled', null);
			    });
            });
        });
    //--&gt;&lt;!]]&gt;
&lt;/script&gt;</pre></div></div>

<p>Creamos la vista que tiene la respuesta enviado desde el servicio que acorta la URL <strong>app/views/api/response.phtml</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">code</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
    &lt;a href=&quot;http://smlk.es/<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$response1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #000000; font-weight: bold;">?&gt;</span>/&quot;&gt;http://smlk.es/<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$response1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #000000; font-weight: bold;">?&gt;</span>/&lt;/a&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">else</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    &lt;strong&gt;No se pudo acortar el enlace&lt;/strong&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Lo genial de este ejemplo es que funciona con o sin javascript para promover la <a href="http://cachi.temiga.org/2009/10/27/accesibilidad-web/">accesibilidad web</a>. Ahora explico un poco lo que hace el <strong>controller api</strong>, el método <strong>before_filter()</strong> es un filtro que se ejecuta antes de la acción en este caso verificamos si la petición es asíncrona y de serlo damos respuesta asíncrona, útil para centralizar y si la aplicación es muy rica en javascript no se tendra que tener esta validación en cada action del controller ;).</p>
<p>La action <strong>acortar()</strong> muestra el form y envia la petición (cuando se hace el submit) al servicio <a href="http://www.siguemilink.com/" title="SigueMiLink » Acorta tus enlaces!">SigueMiLink</a> para acortar la URL, con el método <a href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Utilizando_el_m.C3.A9todo_render.28.24view.2C_.5B.24template.5D.29">render()</a> cambiamos de vista a <strong>renpose</strong> y como la petición se ha hecho asíncrona ya saben lo demas :).</p>
<p>En la vista <strong>acortar.phtml</strong> tenemos el formulario y con un JavaScript para enviar la petición asíncrona, en la <a href="http://api.jquery.com/">documentación de jQuery</a> se explican los métodos usados en este ejemplo en los cuales no me enfocare. </p>
<p>Es importante indicar el elemento del <a href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM</a> que se actualizará luego de la petición, en este caso es un div con un identificador (id) <strong>update</strong>.</p>
<p>Es de notar que en la vista <strong>response</strong> no se analizan todos los códigos de error que devuelve el API de SigueMiLink, como tarea pueden hacer esto y dar respuesta al usuario de acuerdo al error retornado del servicio.</p>
<h3>Importante</h3>
<ul>
<li>Si no indicas que la respuesta será asíncrona <a href="http://www.kumbiaphp.com">KumbiaPHP</a> cargará todo el template y por ende habran elementos de la vista que veras repetidos, así que no olvides el <strong>$this->set_response(&#8216;view&#8217;)</strong>.</li>
<li>Saber que elemento del DOM se va actualizar</li>
</ul>
<h3>A probar lo hecho</h3>
<p>Así es, nos queda probar lo que se hizo y mirar que todo ande como lo planeado, es decir un formulario con un campo de texto donde se coloca la URL que deseamos acortar al dar click en el submit si todo estuvo bien nos retorna una URL acortada para compartirla en nuestras redes sociales&#8230;</p>
<p>Asumiendo que tienes una instalación local deberías ver el ejemplo pinchando una URL como esta http://localhost/kumbiaphp/api/acortar/ es importante entender las <a href="http://wiki.kumbiaphp.com/Hola_Mundo_KumbiaPHP_Framework#KumbiaPHP_URLs" title="URL de KumbiaPHP">URL de KumbiaPHP</a></p>
<p>En la <a href="http://wiki.kumbiaphp.com/">Wiki de KumbiaPHP</a> hay un ejemplo mas simple de como <a href="http://wiki.kumbiaphp.com/Integrar_KumbiaPHP_Spirit_con_jQuery">integrar jQuery en KumbiaPHP</a> y puede quedar mucho mejor este tutorial por ejemplo tener un modelo que se consuma todo el web service del API de SigueMiLink, pero ya esto es tarea de lo mas curiosos les dejo un post que escribí sobre los <a href="http://cachi.temiga.org/2009/12/29/que-es-un-modelo-mvc/">modelo dentro del MVC</a></p>
<p>¿dudas? ¿sugerencias? deja tu comentario y ayuda a mejorar este ejemplo&#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F06%2F10%2Fkumbiaphp-ajax-jquery%2F&amp;linkname=KumbiaPHP%20%2B%20Ajax%20%2B%20jQuery"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Introducción a Redis e Instalando PhpRedis &#124; NoSQL</title>
		<link>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/</link>
		<comments>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/#comments</comments>
		<pubDate>Sun, 16 May 2010 03:31:57 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[GNU/linux]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[Redis]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=619</guid>
		<description><![CDATA[Introducción a Redis Como muchos se han enterado desde hace un tiempo esta en la cresta de la ola, el moviento NoSQL el cual es una serie de almacenes de datos no relacionales (ojo no han muertos las BD relaciones), hay multiples proyectos para almacenar este tipo de datos y uno de lo que mas]]></description>
			<content:encoded><![CDATA[<h3><a href="http://cachi.temiga.org/wp-content/uploads/logo-redis.png"><img class="alignright" title="logo de redis" src="http://cachi.temiga.org/wp-content/uploads/logo-redis.png" alt="" width="108" height="82" /></a>Introducción a Redis</h3>
<p>Como muchos se han enterado desde hace un tiempo esta en la cresta de la ola, el moviento <a title="NoSQL" href="http://es.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> el cual es una serie de almacenes de datos <em>no relacionales</em> (ojo no han muertos las BD relaciones), hay multiples proyectos para almacenar este tipo de datos y uno de lo que mas me ha interesado en <a title="Redis" href="http://code.google.com/p/redis/" target="_blank">Redis</a> (REmote DIctionary Server) el cual es un avanzado contenedor de datos del tipo clave-valor (key-value) muy parecido a <a title="memcached" href="http://memcached.org/" target="_blank">memcached</a>, pero a diferencia de esta que los datos <em>no son volatiles</em>, como cultura general Redis es desarrollado por <a title="antirez weblog" href="http://antirez.com/" target="_blank">Salvatore antirez Sanfilippo</a> (@<a title="Twitter Salvatore Antirez" href="http://twitter.com/antirez" target="_blank">antirez</a>)</p>
<p>Redis a diferencia de <a title="memcached" href="http://memcached.org/" target="_blank">memcached</a> cuenta con diversidad de <em>tipos de datos</em>, en Redis hay listas, conjuntos y conjuntos ordenados. Todos estos tipos de datos pueden ser manipulados con operaciones <em>atómicas</em> push/pop, add/remove. Puedes mirar todas las <a title="Características de Redis" href="http://code.google.com/p/redis/wiki/Features">características de Redis</a> en detalle del porque es una alternativa NoSQL muy interesante a valorar.</p>
<p>Redis actualmente esta siendo adoptado por multiples proyectos primordialmente por si <em>perfomance</em> (<a title="Benchmark Redis" href="http://code.google.com/p/redis/wiki/Benchmarks" target="_blank">pueden chequear el siguiente benchmark</a>) entre los cuales figuran <a title="GitHub" href="http://github.com/blog/530-how-we-made-github-fast" target="_blank">GitHub</a> (<a rel="bookmark" href="http://github.com/blog/530-how-we-made-github-fast">How We Made GitHub Fast)</a>, <a title="Vidio Wiki" href="http://vidiowiki.com/" target="_blank">VidioWiki</a>, y otros tantos. Al igual que proyectos existen <a title="Lenguajes de Programación que Soportan Redis" href="http://code.google.com/p/redis/wiki/SupportedLanguages" target="_blank">lenguajes de programación que soportan a Redis</a>.</p>
<p>Como ven hay muchas cosas interesantes en todo esto del <a title="NoSQL" href="http://es.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> y especialmente con Redis, pero es importante acotar que <em>NoSQL</em> no esta pensado para cualquier aplicación, me refiero que esta <em>nueva forma</em> de almacenar datos nace en vista de necesidad que las <a title="Base de datos relacional" href="http://es.wikipedia.org/wiki/Base_de_datos_relacional" target="_blank">Base de Datos Relaciones</a> (las mismas que ofrecen el <a title="Atomicity, Consistency, Isolation and Durability" href="http://es.wikipedia.org/wiki/ACID" target="_blank">ACID</a>) se quedarón cortas para lo que requieren las aplicación de hoy día en cuento al manejo de datos. En pocas palabras no intenten hacer un <span style="text-decoration: line-through;">Blog con NoSQL</span>, lo he visto a diario <em>producto del novísimo</em> de algunos que piensan y/o creen que ahora todo se puede hacer con NoSQL y lo que puede llevarlo <a title="Why NoSQL is bad for startups" href="http://labs.mudynamics.com/2010/04/01/why-nosql-is-bad-for-startups/">al fracaso de un startup</a> :)</p>
<h3>PHP + Redis</h3>
<p>PHP es uno de los lenguaje que ha dado soporte a Redis y hay varios clientes para trabajar con Redis los dos que considerado mas importante es <a title="Rediska (radish on russian) - PHP client for Redis." href="http://rediska.geometria-lab.net/" target="_blank">Rediska</a> la cual tiene características interesantes e integración con varios framework pero y <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> el cual es una libraría nativa de PHP escrita en C.</p>
<p><a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> es la que más me ha llamado la atención y es por tema que es una extensión nativa de PHP la cual supone que será mas rápida que cualquier librería que haga las veces de cliente para trabajar con Redis.</p>
<p>Explicare brevemente como instalar <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a>, en sistemas operativos basado en GNU/Linux en mi caso es Debian, realmente la instanción es bastante simple y lo primero es que debes tener Redis como servidor.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">#aptitude install redis-server</pre></div></div>

<p>Lo anterior solo instala el server, ya podemos trabajar con redis, pero hace falta un cliente en mi caso escogí <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a>, yo la baje directamente de <a title="GitHub" href="http://github.com/blog/530-how-we-made-github-fast" target="_blank">GitHub</a> como proyecto pudíeras solo bajar el .tar.gz.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">#git clone --depth 1 git://github.com/owlient/phpredis.git</pre></div></div>

<p>Ubicados en el directorio donde se descargo <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> hacemos lo siguiente:</p>
<p><em><strong>Nota: como se compilará un módulo de PHP necesitas tener instalado php5-dev</strong></em></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">phpize
./configure
make &amp;&amp; make install</pre></div></div>

<p>Si lo anterior se ejecuto de forma correcta tendrás un mensaje al final lo que indica que todo se instalo como este:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Build complete.
Don't forget to run 'make test'.
&nbsp;
Installing shared extensions:     /usr/lib/php5/20060613+lfs/</pre></div></div>

<p>El próximo paso es cargar el módulo en el php.ini para ubicarlo use <em>php &#8211;ini | grep &#8216;Loaded&#8217;</em> lo editamos y cargamos el módulo con solo añadir <em>extension=redis.so</em> en la sección <em>Dynamic Extensions</em> de su php.ini, ahora verificamos que lo hecho esta bien.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">php -m | grep redis
php -i | grep 'Redis Support'</pre></div></div>

<p>Hay un <a title="redis-glue-test" href="http://gist.github.com/402018" target="_blank">Script de PHP</a> el cual es un test rápido para verificar que hay comunicación entre el servidor redis y la extensión PhpRedis instalada.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">curl -s http://gist.github.com/raw/402018/redis-glue-test.php -o redis-test.php
php redis-glue-test.php</pre></div></div>

<p>Si vez lo siguiente como salida del comando anterior, sientase feliz porque ya tiene andando <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> como cliente de PHP y Redis como servidor :)</p>
<p><a href="http://cachi.temiga.org/wp-content/uploads/test-phpredis.png"><img class="aligncenter" title="Test PhpRedis" src="http://cachi.temiga.org/wp-content/uploads/test-phpredis.png" alt="" width="717" height="159" /></a></p>
<h3>Para terminar&#8230;</h3>
<p>Este post fue una introducción bastante general pero precisa a lo que es Redis como un sistema de almacenamiento key-value, espero pronto escribir algo de código donde se aprecie como guardar y recuperar datos de Redis desde PHP o bien desde la consola pura y cruda :).</p>
<p>Espero las dudas, preguntas y sugerencias sobre el post :)</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F05%2F15%2Fintroduccion-a-redis-e-instalando-phpredis-nosql%2F&amp;linkname=Introducci%C3%B3n%20a%20Redis%20e%20Instalando%20PhpRedis%20%7C%20NoSQL"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Arrastrar (drap) imágenes dentro de nuestro correo Gmail</title>
		<link>http://cachi.temiga.org/2010/05/12/arrastrar-drap-imagenes-dentro-de-nuestro-correo-gmail/</link>
		<comments>http://cachi.temiga.org/2010/05/12/arrastrar-drap-imagenes-dentro-de-nuestro-correo-gmail/#comments</comments>
		<pubDate>Wed, 12 May 2010 14:05:49 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[2.0]]></category>
		<category><![CDATA[anuncios]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=616</guid>
		<description><![CDATA[Hace poco Google nos anunció la funcionalidad de poder hacer Drag &#38; Drop (arrastrar y soltar) para adjuntar archivos en nuestro correo, ahora nos sorprende con un nuevo característica la cual permite arrastrar (drap) imágenes desde nuestro escritorio (o cualquier ubicación) para el cuerpo del mensaje que estamos redactando, recordemos que esta opción estaba disponible en el labs de gmail. Para variar hice la]]></description>
			<content:encoded><![CDATA[<p>Hace poco <a title="Google nos anunció" href="http://cachi.temiga.org/2010/04/17/gmail-drag-and-drop/">Google nos anunció</a> la funcionalidad de poder hacer <em>Drag &amp; Drop </em>(arrastrar y soltar) para adjuntar archivos en nuestro correo, ahora nos sorprende con un nuevo característica la cual permite arrastrar (drap) imágenes desde nuestro escritorio (o cualquier ubicación) para el cuerpo del mensaje que estamos redactando, recordemos que esta opción <a title="Insertar Imagen Gmail Labs" href="http://gmailblog.blogspot.com/2009/04/new-in-labs-inserting-images.html" target="_blank">estaba disponible</a> en el labs de gmail.</p>
<p>Para variar hice la prueba y dejo un screen del resultado (no le presten atención a la imagen :)).</p>
<p style="text-align: center;"><a href="http://cachi.temiga.org/wp-content/uploads/drap-image-into-message.png"><img class="aligncenter" title="Drag image into message" src="http://cachi.temiga.org/wp-content/uploads/drap-image-into-message.png" alt="" width="480" height="437" /></a></p>
<p style="text-align: left;">Importante recordar que estas son características disponibles para navegadores (browser) con soporte <a title="etiqueta HTML5" href="http://cachi.temiga.org/tag/html5/" target="_self">HTML5</a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F05%2F12%2Farrastrar-drap-imagenes-dentro-de-nuestro-correo-gmail%2F&amp;linkname=Arrastrar%20%28drap%29%20im%C3%A1genes%20dentro%20de%20nuestro%20correo%20Gmail"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/05/12/arrastrar-drap-imagenes-dentro-de-nuestro-correo-gmail/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sistema de Enrutamiento en KumbiaPHP</title>
		<link>http://cachi.temiga.org/2010/05/01/sistema-de-enrutamiento-en-kumbiaphp/</link>
		<comments>http://cachi.temiga.org/2010/05/01/sistema-de-enrutamiento-en-kumbiaphp/#comments</comments>
		<pubDate>Sun, 02 May 2010 02:01:35 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[Router]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=581</guid>
		<description><![CDATA[Los enlaces y las URL requieren de un tratamiento especial en cualquier framework para aplicaciones web. El motivo es que la definición de un único punto de entrada a la aplicación y el uso de helpers en las vistas (Views), permiten separar completamente el funcionamiento y el aspecto de las URL. Este mecanismo se conoce]]></description>
			<content:encoded><![CDATA[<p>Los enlaces y las <acronym title="Uniform Resource Locator">URL</acronym> requieren de un tratamiento especial en cualquier <a title="framework para aplicaciones web" href="http://en.wikipedia.org/wiki/Web_application_framework">framework para aplicaciones web</a>. El motivo es que la definición de un único punto de entrada a la aplicación y el uso de <em>helpers</em> en las vistas (Views), permiten separar completamente el funcionamiento y el aspecto de las <acronym title="Uniform Resource Locator">URL</acronym>. Este mecanismo se conoce como &#8220;enrutamiento&#8221; (del inglés <em>&#8220;routing&#8221;</em>). El enrutamiento mas que ser una utilidad curiosa, es una herramienta muy útil para hacer las aplicaciones web más fáciles de usar y más seguras.</p>
<p><!-- pagebreak --></p>
<p>El enrutamiento es un mecanismo que reescribe las <acronym title="Uniform Resource Locator">URL</acronym> para simplificar su aspecto. Antes de poder comprender su importancia, es necesario dedicar unos minutos al estudio de las <acronym title="Uniform Resource Locator">URL</acronym> de las aplicaciones web.</p>
<h3>Ejecutando Acciones en el Servidor mediante URL.</h3>
<p>Las <acronym title="Uniform Resource Locator">URL</acronym> se encargan de enviar la información desde el navegador hasta el servidor. Las <acronym title="Uniform Resource Locator">URL</acronym> tradicionales incluyen la ruta hasta del <em>script</em> del servidor y algunos parámetros necesarios para completar la petición, como se muestra en el siguiente:</p>
<pre>http://www.dominio.com/controlador/noticia.php?id=123456</pre>
<p>La URL anterior revela informacion sobre la arquitectura interna de la aplicacion incluso de la BD, esto es algo que todo desarrollador de software debe evitar, veamos los detalles tecnicos:</p>
<ul>
<li>En la URL anterior, ¿que pasaria si un usuario malicioso (6) cambia el valor del parametro <span style="color: #0000ff;">id</span>? ¿Supone este caso que la aplicación ofrece una interfaz directa a la base de datos?, lo que intento decir que con esta URL nos podemos poner muy &#8220;<em><a href="http://www.wordreference.com/definicion/esot%C3%A9rico">esotérico</a></em>&#8220;, volviendose casi <strong><em>imposible aplicar seguridad</em></strong>.</li>
<li>Una URL como la anterior es muy dificil de leer, y estas no solo se muestran en la barra de direcciones de los browser, ademas son las que se indexan en los principales buscadores cuando los usuarios buscan informacion, por eso es mas simple ofrecer URL sencillas para que sean entendibles.</li>
<li>Si se modifica una <acronym title="Uniform Resource Locator">URL</acronym> (porque cambia el nombre del script u otra cosa), se deben modificar todos los enlaces a esa <acronym title="Uniform Resource Locator">URL</acronym> (esto trae consecuencias <em>terrorificas</em>). De esta forma, las modificaciones en la estructura del controlador son muy pesadas y costosas, lo que contradice la filosofía del desarrollo <em>ágil de aplicaciones</em>.</li>
</ul>
<h3>La URL como Interfaz.</h3>
<p>Una de las ideas del sistema de enrutamiento es utilizar las <acronym title="Uniform Resource Locator">URL</acronym> como parte de la interfaz. Las aplicaciones trasladan información al usuario mediante el formateo de las <acronym title="Uniform Resource Locator">URL</acronym> y el usuario puede utilizar las <acronym title="Uniform Resource Locator">URL</acronym> para acceder a los recursos de la aplicación.</p>
<p>Esto es posible en <a title="KumbiaPHP Framework" href="http://kumbiaphp.com">KumbiaPHP</a> porque la <acronym title="Uniform Resource Locator">URL</acronym> no guarda necesariamente relación con las instrucciones del servidor.  En su lugar, la <acronym title="Uniform Resource Locator">URL</acronym> está relacionada con el recurso solicitado, y su aspecto puede configurarse libremente de manera muy fácil.</p>
<pre>http://blog.temiga.org/noticias/enrutamiento_en_kumbiaphp/</pre>
<p>Esta URL tiene muchas ventajas:</p>
<ul>
<li>Las <acronym title="Uniform Resource Locator">URL</acronym> tienen significado y ayudan a los usuarios a decidir si la página que se cargará al pulsar sobre un enlace contiene lo que esperan. Un enlace puede contener detalles adicionales sobre el recurso que enlaza.</li>
</ul>
<p style="text-align: center;"><img style="border: 0pt none;" title="SEO URL Amigable de KumbiaPHP" src="http://blog.temiga.org/img/upload/url-enrutamiento-kumbiaphp.png" alt="SEO URL Amigable de KumbiaPHP" /></p>
<ul>
<li>Se puede modificar el aspecto de la <acronym title="Uniform Resource Locator">URL</acronym> y el del nombre de la acción o de los parámetros de forma independiente y con una sola modificación.</li>
<li>Aunque se modifique la estructura interna de la aplicación, las <acronym title="Uniform Resource Locator">URL</acronym> pueden mantener su mismo aspecto hacia el exterior.</li>
<li>Son más seguras. Cualquier <acronym title="Uniform Resource Locator">URL</acronym> no reconocida se redirige a una página especificada por el programador y los usuarios no pueden navegar por el directorio raíz del servidor mediante la prueba de diferentes <acronym title="Uniform Resource Locator">URL</acronym>.</li>
</ul>
<h3>Veamos como funciona.</h3>
<p>Como hemos hablado KumbiaPHP no guarda relacion con las URL externas y las <acronym title="Uniform Resource Identifier">URI</acronym> utilizadas internamente (ya conocemos algunas ventajas) la corresponsabilidad entre ambas es trabajo del Sistema de Enrutamiento (Router), esto se simplifica utilizando una sintaxis para <acronym title="Uniform Resource Identifier">URI</acronym> internas muy parecidas a las externas, ejemplo:</p>
<pre>; URI Interna
/articulos/* = controller/action/*

; NOTA controller y action respresentan quienes se encargaran de atender esa regla

;URL externa tendra esta forma
; http://www.dominio.com/articulos/una_noticia_cualquiera/</pre>
<p>El sistema de enrutamiento utiliza un archivo de configuración, llamado <code>routes.ini</code>, en el que se pueden definir las reglas de enrutamiento. Si se considera la regla mostrada arriba, se define un patrón cuyo aspecto es <strong><code>articulos/*</code></strong>.</p>
<p>Todas las peticiones realizadas KumbiaPHP son analizadas en primer lugar por el sistema de enrutamiento. El sistema de enrutamiento busca coincidencias entre la <acronym title="Uniform Resource Locator">URL</acronym> de la petición y los patrones definidos en las reglas de enrutamiento estatico. Si se produce una coincidencia, las partes del patrón que tienen nombre se transforman en parámetros de la petición y se juntan como parametros de la accion del controller.</p>
<pre>// El usuario solicita la siguiente URL externa

http://www.dominio.com/articulos/una_noticia_cualquiera/

// El Router comprueba que coincide con la regla /articulos/*
// El sistema de enrutamiento crea los siguientes parámetros de la petición
  'module'  =&gt; 'null'
  'controller'  =&gt; 'controller'
  'action'  =&gt; 'action'
  'paramater'    =&gt; 'una_noticia_cualquiera'</pre>
<p>Luego que se descompone la URL, se pasa al controller &#8220;<em>controller</em>&#8221; y action &#8220;<em>action</em>&#8221; que recibe un parametro con el valor &#8220;<em>una_noticia_cualquiera</em>&#8220;, que internamente hara lo necesario para obtener esa noticia solicitada.</p>
<pre>class ControllerController extend ApplicationController
{
    //método al cual se enruta
    public function action  ($noticia){
        echo $noticia; //salida una_noticia_cualquiera
   }
}</pre>
<h3>Conclusiones.</h3>
<p>Sin  que utilizar el Sistema de Routing es un gran aliadoy  siempre hay que tener bien claro que una URL no debe guardar relación con la arquitectura de software del lado servidor siendo parte fundamente en el uso de <a title="Etiqueta Buenas Prácticas" href="http://cachi.temiga.org/tag/buenas-practicas/" target="_blank">buenas prácticas</a> de desarrollo</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F05%2F01%2Fsistema-de-enrutamiento-en-kumbiaphp%2F&amp;linkname=Sistema%20de%20Enrutamiento%20en%20KumbiaPHP"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/05/01/sistema-de-enrutamiento-en-kumbiaphp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>FLISoLVE sede caracas todo un ÉXITO!</title>
		<link>http://cachi.temiga.org/2010/04/26/flisolve-sede-caracas-todo-un-exito/</link>
		<comments>http://cachi.temiga.org/2010/04/26/flisolve-sede-caracas-todo-un-exito/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 18:39:33 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[FliSol]]></category>
		<category><![CDATA[FLISoLVE]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=594</guid>
		<description><![CDATA[Ha sido gratificamente participar en un evento como lo fue el FLISoL en Venezuela sede Caracas, donde como siempre nos encontramos esos panas que llevamos meses hablando, coordinando ideas, compartir con la comunidad de software libre, encontrar nuevos amigos, socializar, en fin como somos la comunidad de software libre en Venezuela (a pesar de tantas]]></description>
			<content:encoded><![CDATA[<p>Ha sido gratificamente participar en un evento como lo fue el <a title="site FLISoLVE" href="http://flisol.org.ve/" target="_blank">FLISoL en Venezuela</a> sede Caracas, donde como siempre nos encontramos esos panas que llevamos meses hablando, coordinando ideas, compartir con la comunidad de software libre, encontrar nuevos amigos, socializar, en fin como somos la comunidad de software libre en Venezuela (a pesar de tantas diferencias), siempre encontramos un espacios para hacer converger los ideales.</p>
<p>El <em>FLISoLVE</em> sede caracas dio para todo, cambios de última hora, chinazos, opentrolling, fotografiar, incluso grabar una entrevista de KumbiaPHP al amigo <a title="twitter @willicad" href="http://twitter.com/willicap" target="_blank">@willicab</a> quien maneja un programa de radio llamado &#8220;Cambur Pinto&#8221; por radioGNU.</p>
<p>Las charlas todas estuvieron excelente y la participación del publico mejor aún estuvo bastante movido durante todo el día el evento&#8230; ¿fotos? hay muchísimas dejo algunas que pude capturar&#8230;</p>
<p style="text-align: center;"><a title="Equipo de Trabajo FLISoLVE por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4551314646/"><img class="aligncenter" src="http://farm5.static.flickr.com/4063/4551314646_57d221d7b8.jpg" alt="Equipo de Trabajo FLISoLVE" width="500" height="333" /></a></p>
<p style="text-align: center;">El cerebro detrás de todo esto&#8230; <a title="twitter de tatica" href="http://twitter.com/tatadbb">@tatadbb</a> (<a title="Blog de Tatica" href="http://tatica.org">tatica</a>)</p>
<p><a title="@tatadbb Presidenta xD por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4554719697/"><img class="aligncenter" src="http://farm5.static.flickr.com/4036/4554719697_8c1ca5e800.jpg" alt="@tatadbb Presidenta xD" width="500" height="333" /></a></p>
<p style="text-align: center;">¿Que estaba pidiendo <a title="twitter de @zamuro" href="http://twitter.com/zamuro" target="_blank">@zamuro</a> (<a title="Blog de Manuel Lucena Zamuro" href="http://manuel.venet.com.ve/" target="_blank">blog</a>)?</p>
<p style="text-align: center;"><a title="Pidiendo ayuda al supremo Parte II por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4548769884/"><img class="aligncenter" src="http://farm5.static.flickr.com/4035/4548769884_9bbce6f2cd.jpg" alt="Pidiendo ayuda al supremo Parte II" width="500" height="333" /></a></p>
<p style="text-align: center;">Compartiendo con los panas&#8230;</p>
<p><a title="Team Developers .ve II por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4548786646/"><img class="aligncenter" src="http://farm5.static.flickr.com/4022/4548786646_a908422fa6.jpg" alt="Team Developers .ve II" width="333" height="500" /></a></p>
<p style="text-align: center;">Elemento para Trollear</p>
<p><a title="Elemento para Trollear por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4551591556/"><img class="aligncenter" src="http://farm5.static.flickr.com/4034/4551591556_e11be732fe.jpg" alt="Elemento para Trollear" width="333" height="500" /></a></p>
<p style="text-align: left;">He colgado todas las fotos en mi <a title="Flickr" href="http://www.flickr.com/photos/deivinsontejeda/sets/72157623791441105/" target="_blank">cuenta de flickr donde pueden ver todas</a> y <a title="FLISoLVE" href="http://flisol.org.ve/ciudades/caracas/fotos" target="_blank">tambien todas las que se han recolectado por parte de los asistentes</a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F04%2F26%2Fflisolve-sede-caracas-todo-un-exito%2F&amp;linkname=FLISoLVE%20sede%20caracas%20todo%20un%20%C3%89XITO%21"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/04/26/flisolve-sede-caracas-todo-un-exito/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>GMail Drag and Drop</title>
		<link>http://cachi.temiga.org/2010/04/17/gmail-drag-and-drop/</link>
		<comments>http://cachi.temiga.org/2010/04/17/gmail-drag-and-drop/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 00:04:21 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=591</guid>
		<description><![CDATA[Google sigue con su firme apoyo a la especificacion de HTML5 y ahora en GMail han añadido la funcionalidad Drap and Drop para adjuntar archivos cuando redactamos correos, esta disponible para Google Chrome o Mozilla Firefox 3.6 todo siendo posible utilizando el API File.]]></description>
			<content:encoded><![CDATA[<p>Google sigue con su firme apoyo a la especificacion de <a title="Etiqueta HTML5" href="http://cachi.temiga.org/tag/html5">HTML5</a> y ahora en GMail han añadido la funcionalidad <em>Drap and Drop </em>para <a title="Drag and drop attachments onto messages" href="gmailblog.blogspot.com/2010/04/drag-and-drop-attachments-onto-messages.html" target="_blank">adjuntar archivos</a> cuando redactamos correos,<em> </em>esta disponible para Google Chrome o Mozilla Firefox 3.6 todo siendo posible utilizando el <a title="API File HTML5" href="http://www.w3.org/TR/FileAPI/" target="_blank">API File</a>.</p>
<p><a href="http://cachi.temiga.org/wp-content/uploads/drap-and-drop-gmail.png"><img class="aligncenter" src="http://cachi.temiga.org/wp-content/uploads/drap-and-drop-gmail.png" alt="Drap and Drop Gmail" width="500" height="293" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F04%2F17%2Fgmail-drag-and-drop%2F&amp;linkname=GMail%20Drag%20and%20Drop"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/04/17/gmail-drag-and-drop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>El Ataque del CaChi(camo)</title>
		<link>http://cachi.temiga.org/2010/04/16/el-ataque-del-cachicamo/</link>
		<comments>http://cachi.temiga.org/2010/04/16/el-ataque-del-cachicamo/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 03:47:46 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Fotografías]]></category>
		<category><![CDATA[CaChi]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[hobbies]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=585</guid>
		<description><![CDATA[Como algunos saben ahora desde ha un tiempo me ha apasionado la fotografías (aunque aun estoy en proceso de formación) he jugado algo con varias tomas. Hace unas semanas hay un coleccionable que esta siendo distribuido por el Últimas Noticias sobre monumentos arquitectónicos del mundo, hasta el momento hay 5 (La Torre effield, Opera de Sidney, Torre Pisa, Empire]]></description>
			<content:encoded><![CDATA[<p>Como algunos saben ahora desde ha un tiempo me ha apasionado la fotografías (aunque aun estoy en proceso de formación) he jugado algo con varias tomas.</p>
<p style="text-align: left;">Hace unas semanas hay un coleccionable que esta siendo distribuido por el Últimas Noticias sobre monumentos arquitectónicos del mundo, hasta el momento hay 5 (La Torre effield, Opera de Sidney, Torre Pisa, Empire State y el Arco de Triunfo) coleccionables que ya han sido entregados, donde trabajo nos hemos divertido muchísimo mis compañeros de trabajo tomándole fotos a <a title="CaChi(camo)" href="http://www.flickr.com/photos/deivinsontejeda/tags/cachicamo/" target="_blank">CaChi(camo)</a>.<br />
<a title="Macro CaChi(camo) por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4526032634/"><img class="aligncenter" src="http://farm5.static.flickr.com/4058/4526032634_05344ffd62_m.jpg" alt="Macro CaChi(camo)" width="240" height="151" /></a></p>
<p style="text-align: center;"><a title="El Ataque de CaChi(camo) al Empire State por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4506013477/"><img class="aligncenter" src="http://farm3.static.flickr.com/2700/4506013477_a9565a3575_m.jpg" alt="El Ataque de CaChi(camo) al Empire State" width="221" height="240" /></a><br />
<a title="Empire State por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4505522031/"><img class="aligncenter" src="http://farm3.static.flickr.com/2727/4505522031_a7eaa5636a_m.jpg" alt="Empire State" width="240" height="160" /></a><br />
<a title="CaChi(camo) Contra La Ópera de Sídney por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4506409533/"><img class="aligncenter" src="http://farm3.static.flickr.com/2257/4506409533_fca9fa492b_m.jpg" alt="CaChi(camo) Contra La Ópera de Sídney" width="240" height="160" /></a></p>
<p style="text-align: left;">Esto se baso en el ataque del <a title="CaChi(camo)" href="http://www.flickr.com/photos/deivinsontejeda/tags/cachicamo/" target="_blank">CaChi(camo)</a> a estas obras. La misión es que cada viernes se haga esta sesión fotográfica con CaChi(camo) hasta finalizar todos los armables, pueden ver la <a href="http://www.flickr.com/photos/deivinsontejeda/collections/72157623697524153/">colección en flickr</a> y dejar sus comentarios.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F04%2F16%2Fel-ataque-del-cachicamo%2F&amp;linkname=El%20Ataque%20del%20CaChi%28camo%29"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/04/16/el-ataque-del-cachicamo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gtalk podrá transferir archivos</title>
		<link>http://cachi.temiga.org/2010/03/30/gtalk-podra-transferir-archivos/</link>
		<comments>http://cachi.temiga.org/2010/03/30/gtalk-podra-transferir-archivos/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 18:40:04 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Interes]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Gtalk]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=578</guid>
		<description><![CDATA[Me entero que ahora mediante Gtalk podemos transferir archivos, esto solo esta disponible en iGoogle y orkut. No me quede con las ganas e hice la prueba&#8230;]]></description>
			<content:encoded><![CDATA[<p><a title="File transfer in iGoogle and orkut chat" href="http://googletalk.blogspot.com/2010/03/file-transfer-in-igoogle-and-orkut-chat.html" target="_blank">Me entero</a> que ahora mediante <em><strong>Gtalk</strong></em> podemos transferir archivos, esto solo esta disponible en <a title="iGoogle" href="http://google.com/ig" target="_blank">iGoogle</a> y <a title="orkut" href="http://www.orkut.com/" target="_blank">orkut</a>.</p>
<p>No me quede con las ganas e hice la prueba&#8230;</p>
<p><a href="http://cachi.temiga.org/wp-content/uploads/gtalk-transferencia-de-archivos.png"><img class="aligncenter" title="Gtalk Transferencia de Archivos" src="http://cachi.temiga.org/wp-content/uploads/gtalk-transferencia-de-archivos.png" alt="Gtalk Transferencia de Archivos" width="226" height="223" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F03%2F30%2Fgtalk-podra-transferir-archivos%2F&amp;linkname=Gtalk%20podr%C3%A1%20transferir%20archivos"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/03/30/gtalk-podra-transferir-archivos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
