<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>AxiaCore Blog</title>
	
	<link>http://axiacore.com/blog</link>
	<description>Implementamos tecnologia y es asi como lo hacemos</description>
	<lastBuildDate>Thu, 05 Nov 2009 02:57:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://axiacore.com</link><url>http://axiacore.com/images/axiacore/axiabanner.png</url><title>AxiaCore</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/AxiacoreBlog" type="application/rss+xml" /><feedburner:emailServiceId>AxiacoreBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FAxiacoreBlog" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FAxiacoreBlog" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FAxiacoreBlog" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Mostrar numero de version en django</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/QWA7olWmWMk/</link>
		<comments>http://axiacore.com/blog/2009/11/mostrar-numero-de-version-en-django/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 13:31:17 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=776</guid>
		<description><![CDATA[En AxiaCore utilizamos subversion para llevar el control de versiones de los proyectos, junto a nuestro esquema de desarrollo ágil manejamos ciclos cortos de lanzamiento de nuevas funcionalidades, por eso para nosotros es necesario conocer el numero de revisión del SVN y publicarlo en un lugar fácilmente accesible para los usuarios, de tal forma que [...]]]></description>
			<content:encoded><![CDATA[<p>En AxiaCore utilizamos subversion para llevar el control de versiones de los proyectos, junto a nuestro esquema de desarrollo ágil manejamos ciclos cortos de lanzamiento de nuevas funcionalidades, por eso para nosotros es necesario conocer el numero de revisión del SVN y publicarlo en un lugar fácilmente accesible para los usuarios, de tal forma que rápidamente nos puedan indicar la versión que están utilizando.</p>
<p>La aproximación inicial es tener un parámetro donde se indique un numero de versión de la aplicación, pero esta fue rápidamente descartada porque no es flexible y se tendría que cambiar la versión manualmente en cada nuevo cambio, así que decidimos manejar el numero de revisión del repositorio como el indicador de la versión. Ahora bien, se necesita una manera automática de obtener dicho numero y publicarlo en una plantilla HTML para verlo en la interfaz de usuario.</p>
<p>Lo resolvimos así:</p>
<p>Partimos de la plantilla donde básicamente django nos permite lo siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">{% load version_tag %}
&lt;p&gt;Version: {% get_version %}&lt;/p&gt;</pre></td></tr></table></div>

<p>Entonces cargamos un &#8216;custom tag&#8217; que nos retorna la versión actual de la aplicación, el cual es:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#! /usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf8 -*-</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">subprocess</span>
<span style="color: #ff7700;font-weight:bold;">from</span> django <span style="color: #ff7700;font-weight:bold;">import</span> template
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">core</span>.<span style="color: black;">cache</span> <span style="color: #ff7700;font-weight:bold;">import</span> cache
&nbsp;
register = template.<span style="color: black;">Library</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
@register.<span style="color: black;">simple_tag</span>
<span style="color: #ff7700;font-weight:bold;">def</span> get_version<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;
    Retorna el numero de version para la aplicacion y lo almacena en
    cache para evitar ser llamado multiples veces y mejorar el rendimiento
    de la aplicacion.
    &quot;&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> cache.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'version'</span><span style="color: black;">&#41;</span>:
        comando = <span style="color: #483d8b;">'svn info | grep Rev | head -1'</span>
        <span style="color: #ff7700;font-weight:bold;">try</span>:
            proc = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span>comando, shell=<span style="color: #008000;">True</span>, 
                stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span>, stderr=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span>
            <span style="color: black;">&#41;</span>
            line = proc.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
            version = line<span style="color: black;">&#91;</span>line.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; &quot;</span><span style="color: black;">&#41;</span>+<span style="color: #ff4500;">1</span>:<span style="color: black;">&#93;</span>.<span style="color: black;">rstrip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span>:
            version = <span style="color: #483d8b;">'---'</span>
&nbsp;
        tiempo = <span style="color: #ff4500;">24</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">60</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">60</span>   <span style="color: #808080; font-style: italic;">#Tiempo en segundos de un dia</span>
        cache.<span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'version'</span>, version, tiempo<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> cache.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'version'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Este archivo (version_tag.py) debe estar dentro de una carpeta llamada &#8216;templatetags&#8217; de alguna aplicación del proyecto.</p>
<p>Lo interesante de esta solución es:</p>
<ol>
<li>Obtiene el numero de versión por el comando &#8217;svn info&#8217;</li>
<li>Reduce las llamadas al comando ubicando la información en cache durante un día</li>
<li>Es totalmente desacoplado del proyecto y se puede reutilizar fácilmente</li>
<li>Se puede adaptar para otros sistemas de control de versiones</li>
</ol>
<p>Que les parece?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=QWA7olWmWMk:ASnBx6Uz3fk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=QWA7olWmWMk:ASnBx6Uz3fk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=QWA7olWmWMk:ASnBx6Uz3fk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=QWA7olWmWMk:ASnBx6Uz3fk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=QWA7olWmWMk:ASnBx6Uz3fk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/QWA7olWmWMk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/11/mostrar-numero-de-version-en-django/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/11/mostrar-numero-de-version-en-django/</feedburner:origLink></item>
		<item>
		<title>Desarrollador PHP 10-2009</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/sXmMNs9nAdo/</link>
		<comments>http://axiacore.com/blog/2009/10/desarrollador-php-10-2009/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 19:15:09 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Trabajo]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/2009/10/desarrollador-php-10-2009/</guid>
		<description><![CDATA[Estamos buscando desarrolladores expertos en PHP.
Mas información: http://axiacore.com/corporativo/vacantes
]]></description>
			<content:encoded><![CDATA[<p>Estamos buscando desarrolladores expertos en PHP.</p>
<p>Mas información: <a href="http://axiacore.com/corporativo/vacantes">http://axiacore.com/corporativo/vacantes</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=sXmMNs9nAdo:ZSSzw1k3-S4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=sXmMNs9nAdo:ZSSzw1k3-S4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=sXmMNs9nAdo:ZSSzw1k3-S4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=sXmMNs9nAdo:ZSSzw1k3-S4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=sXmMNs9nAdo:ZSSzw1k3-S4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/sXmMNs9nAdo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/10/desarrollador-php-10-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/10/desarrollador-php-10-2009/</feedburner:origLink></item>
		<item>
		<title>Django Templates Scribes</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/CsCxNraQGTo/</link>
		<comments>http://axiacore.com/blog/2009/09/django-templates-scribes/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 03:14:05 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Scribes]]></category>
		<category><![CDATA[Templates]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=767</guid>
		<description><![CDATA[Plantillas para Django en el editor Scribes

Python: django.xml
Plantillas: django_template.xml

Espero les sean utiles. Saludos
]]></description>
			<content:encoded><![CDATA[<p>Plantillas para Django en el editor <a href="http://scribes.sourceforge.net/">Scribes</a></p>
<ul>
<li>Python: <a href="http://axiacore.com/blog/wp-content/uploads/2009/09/django.xml">django.xml</a></li>
<li>Plantillas: <a href="http://axiacore.com/blog/wp-content/uploads/2009/09/django_template.xml">django_template.xml</a></li>
</ul>
<p>Espero les sean utiles. Saludos</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=CsCxNraQGTo:qhuxmq_l52E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=CsCxNraQGTo:qhuxmq_l52E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=CsCxNraQGTo:qhuxmq_l52E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=CsCxNraQGTo:qhuxmq_l52E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=CsCxNraQGTo:qhuxmq_l52E:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/CsCxNraQGTo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/09/django-templates-scribes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/09/django-templates-scribes/</feedburner:origLink></item>
		<item>
		<title>Trabajando con filtros en Symfony (II)</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/VTCn0NhAz_8/</link>
		<comments>http://axiacore.com/blog/2009/09/trabajando-con-filtros-en-symfony-ii/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 23:36:22 +0000</pubDate>
		<dc:creator>Juan Pablo Romero Bernal</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=755</guid>
		<description><![CDATA[Esta es una segunda entrega acerca del trabajo con los formularios de filtro en Symfony. He tenido en cuenta los comentarios y sugerencias de  los visitantes del blog,  así que esta entrega integrará el uso de Doctrine.
Antes de comenzar,  aclaro que mucha de la información aquí consignada está basada en el código generado por el [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Esta es una segunda entrega acerca del trabajo con los formularios de filtro en Symfony. He tenido en cuenta los comentarios y sugerencias de  los visitantes del blog,  así que esta entrega integrará el uso de Doctrine.</p>
<p style="text-align: justify;">Antes de comenzar,  aclaro que mucha de la información aquí consignada está basada en el código generado por el generador de administración tanto de Propel como de Doctrine y desde luego en la documentación del API de Symfony 1.2.</p>
<h3 style="text-align: justify;"><strong>Filtros con Doctrine</strong></h3>
<p style="text-align: justify;">En la entrada anterior hablé del uso de los formularios con Propel de manera básica y aunque las forma de trabajar los formularios de filtros con Doctrine no es muy diferente, haré algunas aclaraciones importantes.</p>
<p style="text-align: justify;">Al momento de generar el modelo con Doctrine, con la tarea:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">php symfony doctrine<span style="color: #339933;">:</span>build<span style="color: #339933;">-</span>all</pre></td></tr></table></div>

<p style="text-align: justify;">al igual con con Propel, se genera en el directorio  <strong>lib/filter/doctrine/</strong> el conjunto de clases de formularios de filtro. Tomando como referencia el esquema de datos del tutorial de Jobeet (Día 3 &#8211; <a href="http://www.symfony-project.org/jobeet/1_2/Doctrine/en/03">http://www.symfony-project.org/jobeet/1_2/Doctrine/en/03</a>) los filtros generados son:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">BaseFormFilterDoctrine<span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">.</span>php
JobeetAffiliateFormFilter<span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">.</span>php
JobeetCategoryAffiliateFormFilter<span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">.</span>php
JobeetCategoryFormFilter<span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">.</span>php
JobeetJobFormFilter<span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">.</span>php
base<span style="color: #339933;">/</span></pre></td></tr></table></div>

<p style="text-align: justify;">Estas clases podemos modificarlas según nuestras necesidades, al igual que con los formularios. Ahora, vamos a generar el módulo que permita el CRUD de las ofertas de trabajo (Tabla Jobeet_Job):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">php symfony doctrine<span style="color: #339933;">:</span>generate<span style="color: #339933;">-</span>module frontend job JobeetJob</pre></td></tr></table></div>

<p>Bien, ahora con el módulo generado, vamos a revisar  las acciones y hacer los ajustes para el uso de los filtros. En primera forma, debemos modificar la acción index, para que nos presente el formulario de filtros:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> jobActions <span style="color: #000000; font-weight: bold;">extends</span> sfActions
<span style="color: #666666; font-style: italic;">// apps/frontend/modules/job/actions/actions.class.php</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeIndex<span style="color: #009900;">&#40;</span>sfWebRequest <span style="color: #000088;">$request</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;">jobeet_job_list</span> <span style="color: #339933;">=</span> Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">getTable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'JobeetJob'</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createQuery</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'a'</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</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;">filtro</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JobeetJobFormFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// más código .....</span></pre></td></tr></table></div>

<p>Al igual que con Propel, debemos crear una instancia del filtro, para que sea visualizada en la plantilla:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">// apps/frontend/modules/job/templates/indexSuccess.php
&nbsp;
&lt;h1&gt;Lista de trabajos&lt;/h1&gt;
&lt;h1&gt;Lista de trabajos&lt;/h1&gt;
&lt;form action=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> url_for<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'job/filter'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; method=&quot;post&quot;&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$filtro</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
 &lt;p&gt;
  &lt;input class=&quot;ui-state-default ui-corner-all&quot; type=&quot;submit&quot; value=&quot;Filtrar&quot; /&gt;
  <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> link_to<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Quitar filtro'</span><span style="color: #339933;">,</span> url_for<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'job/filter'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
     <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'query_string'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'_reset'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'method'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'post'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
 &lt;/p&gt;
&lt;/form&gt;
&lt;! -- más código html ... --&gt;</pre></td></tr></table></div>

<p>Creamos nuestra acción encargada de filtrar los resultados (filter):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// apps/frontend/modules/job/actions/actions.class.php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeFilter<span style="color: #009900;">&#40;</span>sfWebRequest <span style="color: #000088;">$request</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;">filtro</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JobeetJobFormFilter<span style="color: #009900;">&#40;</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;">consulta</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">filtro</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">buildQuery</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jobeet_job_filters'</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;">jobeet_job_list</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">consulta</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</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;">setTemplate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Una de las diferencias importantes con Propel, es el método que se encarga de construir la consulta según el valor de los filtros,  que es buildQuery y que recibe una arreglo de valores a partir de los cuales se construirá la consulta. Este método devuelve un objeto de tipo Doctrine_Query, por eso llamamos al método execute en forma posterior.</p>
<p style="text-align: justify;">Con lo anterior tenemos un sistema de filtros muy básico usando Doctrine como ORM.</p>
<h3 style="text-align: justify;">Adaptando el filtro</h3>
<p style="text-align: justify;">Hasta el momento, ya hemos visto como establecer un filtro, tanto si usamos Propel como Doctrine. Sin embargo, la mayoría de las veces los campos por los cuales deseamos filtrar información no corresponden con todos los de la tabla. El filtro por defecto que se genera contempla todos los campos y por ello es necesario que hagamos algunas modificaciones, para filtrar por los campos deseados.</p>
<p style="text-align: justify;">Siguiendo con el ejemplo del tutorial de Jobeet, supongamos que sólo queremos filtrar la lista de trabajos, por categoría  y tipo (campos category y type, respectivamente), para ello debemos modificar el método configure de la clase JobeetJobFormFilter:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// lib/form/doctrine/JobeetJobFormFilter.class.php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> JobeetJobFormFilter <span style="color: #000000; font-weight: bold;">extends</span> BaseJobeetJobFormFilter
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> configure<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;">setWidgets</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'category_id'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormDoctrineChoice<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'model'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'JobeetCategory'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'add_empty'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'type'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormFilterInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setValidators</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'category_id'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorDoctrineChoice<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'model'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'JobeetCategory'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'column'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'type'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorPass<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</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;">widgetSchema</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setNameFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jobeet_job_filters[%s]'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Cómo se puede observar, un formulario de filtro es muy similar a un formulario, con algunas diferencias en cuanto a los widgets que se usan y algunos de los métodos.  Con esta modificación, cuando imprimamos el filtro en la plantilla, ahora sólo los campos de categoría y tipo estarán disponibles.  También podemos usar los métodos setLabel y setLabels para cambiar el nombre de las etiquetas que aparecerán al momento de imprimir el formulario de filtros, por ejemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getWidgetSchema</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setLabels</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
   <span style="color: #0000ff;">'category_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Categoria'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Tipo'</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Uno de los widgets de filtros que considero más útiles es sfWidgetFormFilterDate, ya que con él es posible filtrar información por rangos de fecha, aquí un ejemplo de su uso para el campo de expiración de la oferta de trabajo (campo expires_at):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #0000ff;">'expires_at'</span>   <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormFilterDate<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
                 <span style="color: #0000ff;">'from_date'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormDate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                 <span style="color: #0000ff;">'to_date'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormDate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                 <span style="color: #0000ff;">'with_empty'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>                   <span style="color: #666666; font-style: italic;">// Para que no salga el checkbox</span>
                 <span style="color: #0000ff;">'template'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'desde %from_date% hasta %to_date%'</span>
                <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Bien, hasta aquí esta segunda entrega del trabajo con filtros en Symfony 1.2. Espero que sea  de utilidad.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=VTCn0NhAz_8:MoUYGCG72-A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=VTCn0NhAz_8:MoUYGCG72-A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=VTCn0NhAz_8:MoUYGCG72-A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=VTCn0NhAz_8:MoUYGCG72-A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=VTCn0NhAz_8:MoUYGCG72-A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/VTCn0NhAz_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/09/trabajando-con-filtros-en-symfony-ii/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/09/trabajando-con-filtros-en-symfony-ii/</feedburner:origLink></item>
		<item>
		<title>Trabajando con filtros en Symfony (I)</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/bjPtB_28Zls/</link>
		<comments>http://axiacore.com/blog/2009/09/trabajando-con-filtros-en-symfony-i/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 03:12:32 +0000</pubDate>
		<dc:creator>Juan Pablo Romero Bernal</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=744</guid>
		<description><![CDATA[Esta es una entrada bastante rápida, pero que busca mostrar la forma básica en que se pueden usar los formularios de filtros en Symfony (versión 1.2) para facilitar a los usuarios la clasificación y consulta de información.  El manejo de formularios de filtros es muy similar a los formularios que se usan para el ingreso [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Esta es una entrada bastante rápida, pero que busca mostrar la forma básica en que se pueden usar los formularios de filtros en Symfony (versión 1.2) para facilitar a los usuarios la clasificación y consulta de información.  El manejo de formularios de filtros es muy similar a los formularios que se usan para el ingreso y/o edición de información,  con algunas variaciones. Hago claridad que las pruebas que he realizado han sido usando Propel como ORM.</p>
<p style="text-align: justify;">Bien, empecemos por saber que en Symfony existe una tarea que nos permite construir en forma automática los formularios de filtros, de la siguiente forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">$ php symfony propel<span style="color: #339933;">:</span>build<span style="color: #339933;">-</span>filters</pre></td></tr></table></div>

<p>Después de la ejecución de esta tarea, en el directorio <strong>lib/filters</strong> de nuestro proyecto, se habrán creado (de acuerdo a nuestro modelo) un conjunto de clases cuyo nombre sigue la siguiente nomenclatura:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">ClaseFormFilter<span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">.</span>php</pre></td></tr></table></div>

<p style="text-align: justify;">y al igual que con el modelo y los formularios, tendremos unas clases Base y unas clases que extenderán de esas clases base, las cuales podemos adaptar según nuestras necesidades. Una vez creadas nuestras clases de formularios de filtros, ya podemos usarlas dentro de nuestras acciones. Tomaré como ejemplo, que tenemos un modulo llamado clientes que permite trabajar con el CRUD normal y que cada cliente tiene un nombre, telefono y una ciudad, de modo que nuestra clase base de formulario de filtro lucirá así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> BaseClienteFormFilter <span style="color: #000000; font-weight: bold;">extends</span> BaseFormFilterPropel
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
&nbsp;
  <span style="color: #009900;">&#123;</span>
     <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setWidgets</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
      <span style="color: #0000ff;">'nombre'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormFilterInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'telefono'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormFilterInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'ciudad_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormPropelChoice<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'model'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Ciudad'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'add_empty'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
       <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setValidators</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'nombre'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorPass<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'telefono'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorPass<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'ciudad_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorPropelChoice<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
                                 <span style="color: #0000ff;">'model'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Ciudad'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'column'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">widgetSchema</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setNameFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cliente_filters[%s]'</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;">errorSchema</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorErrorSchema<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">validatorSchema</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   parent<span style="color: #339933;">::</span><span style="color: #004000;">setup</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getModelName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'Cliente'</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getFields<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
     <span style="color: #0000ff;">'id'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Number'</span><span style="color: #339933;">,</span>
     <span style="color: #0000ff;">'nombre'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Text'</span><span style="color: #339933;">,</span>
     <span style="color: #0000ff;">'telefono'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Text'</span><span style="color: #339933;">,</span>
     <span style="color: #0000ff;">'ciudad_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'ForeignKey'</span><span style="color: #339933;">,</span>
   <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Tengamos en cuenta que esta clase es generada automáticamente y podemos hacer las modificaciones necesarias en la clase ClienteFormFilter, como se hace con los formularios.  Ahora bien, vamos a utilizar este formulario de filtro en nuestra acción index de nuestro módulo de clientes, de la siguiente forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> clientesActions <span style="color: #000000; font-weight: bold;">extends</span> sfActions
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeIndex<span style="color: #009900;">&#40;</span>sfWebRequest <span style="color: #000088;">$request</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// creamos el filtro ....</span>
     <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">filtro</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClienteFormFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #666666; font-style: italic;">// .....</span>
     <span style="color: #666666; font-style: italic;">// más código ....</span>
     <span style="color: #666666; font-style: italic;">// Típica consulta  ....</span>
     <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">clientes</span> <span style="color: #339933;">=</span> CientePeer<span style="color: #339933;">::</span><span style="color: #004000;">doSelect</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Criteria<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>En nuestra plantilla: (indexSuccess.php)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">&lt;form action=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> url_for<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'clientes/filtrar'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; method=&quot;post&quot;&gt;
&lt;table&gt;
 &lt;tbody&gt;
  <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$filtro</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;input type=&quot;submit&quot; value=&quot;Filtrar&quot; name=&quot;filtrar&quot;/&gt;
&lt;/form&gt;
// otro codigo html ....</pre></td></tr></table></div>

<p style="text-align: justify;">Bien, hasta aquí nada nuevo, simplemente un formulario más, que aparecerá en nuestra acción index de nuestro módulo de clientes, pero con la diferencia que será procesado por la acción filtrar (o como decida llamarse). En este punto es importante mencionar, que para la ejecución del filtrado, se empleará el método buildCriteria, el cuál recibe como parámetro un arreglo (los campos por  los  cuales se desea hacer el filtro) y se encarga de construir las consultas:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeFiltrar<span style="color: #009900;">&#40;</span>sfWebRequest <span style="color: #000088;">$request</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;">filtro</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClienteFormFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// Construye un objeto criteria con el valor de los filtros</span>
  <span style="color: #000088;">$criteria</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">filtro</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">buildCriteria</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cliente_filters'</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;">clientes</span> <span style="color: #339933;">=</span> ClientePeer<span style="color: #339933;">::</span><span style="color: #004000;">doSelect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$criteria</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;">setTemplate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">El método buildCriteria es el encargado de construir la consulta según el valor de los filtros (revise la clase sfFormFilterPropel y los métodos addXXXCriteria() de la misma clase). Posteriormente pasamos ese objeto criteria a el método doSelect para devolver la consulta filtrada usando la plantilla de la acción index.  Sencillo, no ??</p>
<p style="text-align: justify;">En una próxima entrada se explicará lo referente al manejo de formularios de filtro y el mantenimiento de los resultados obtenidos por el filtro entre páginas.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bjPtB_28Zls:5WzVrfPxOMk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bjPtB_28Zls:5WzVrfPxOMk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=bjPtB_28Zls:5WzVrfPxOMk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bjPtB_28Zls:5WzVrfPxOMk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bjPtB_28Zls:5WzVrfPxOMk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/bjPtB_28Zls" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/09/trabajando-con-filtros-en-symfony-i/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/09/trabajando-con-filtros-en-symfony-i/</feedburner:origLink></item>
		<item>
		<title>Backups con rsync</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/irhkuA_1ers/</link>
		<comments>http://axiacore.com/blog/2009/08/backups-con-rsync/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 18:09:58 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Backups]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=735</guid>
		<description><![CDATA[Para algunos de nuestros clientes tenemos planes de copias de seguridad de sus archivos mas importantes, luego de probar muchas herramientas, hemos descubierto que hay múltiples opciones y que cada una es valida para cada necesidad. Aquellos que requieren una configuración mas especializada pueden recurrir a utilizar varias herramientas y crear un sistema en el [...]]]></description>
			<content:encoded><![CDATA[<p>Para algunos de nuestros clientes tenemos planes de copias de seguridad de sus archivos mas importantes, luego de probar muchas herramientas, hemos descubierto que hay múltiples opciones y que cada una es valida para cada necesidad. Aquellos que requieren una configuración mas especializada pueden recurrir a utilizar varias herramientas y crear un sistema en el cual estas herramientas se concatenen y formen una completa solución de backups.</p>
<p>Entre las herramientas que utilizamos en AxiaCore contamos con rsync, una herramienta de software libe desarrollada para sistemas unix, a modo de introducción, hacer una backup es tan fácil como:</p>
<blockquote><p><code>rsync -axSRzv usuario@192.168.0.1:/home /opt/backups/</code></p></blockquote>
<p>Con dicho comando tendremos una copia incremental (solamente hace copia de los archivos que cambiaron desde el ultimo backup) del directorio /home en la maquina remota en la carpeta local /opt/backups.</p>
<p>En conjunto con otras herramientas, para nosotros, rsync es la mejor opcion.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=irhkuA_1ers:HgOJGMhxpQg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=irhkuA_1ers:HgOJGMhxpQg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=irhkuA_1ers:HgOJGMhxpQg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=irhkuA_1ers:HgOJGMhxpQg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=irhkuA_1ers:HgOJGMhxpQg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/irhkuA_1ers" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/08/backups-con-rsync/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/08/backups-con-rsync/</feedburner:origLink></item>
		<item>
		<title>Nuevo Concepto TechScooter</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/zbEuBY4pESg/</link>
		<comments>http://axiacore.com/blog/2009/06/nuevo-concepto-techscooter/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 14:14:56 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Soporte]]></category>
		<category><![CDATA[TechScooter]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=712</guid>
		<description><![CDATA[Durante estos meses hemos venido trabajando decididamente en crear una opción útil y practica para las personas y empresas que tienen problemas con la tecnología o bien que quieran potencializar y hacer mas con las herramientas disponibles en el mercado.
Es así que con la ayuda de un grupo inversionista, que mencionare mas adelante, construimos un [...]]]></description>
			<content:encoded><![CDATA[<p>Durante estos meses hemos venido trabajando decididamente en crear una opción útil y practica para las personas y empresas que tienen problemas con la tecnología o bien que quieran potencializar y hacer mas con las herramientas disponibles en el mercado.</p>
<p>Es así que con la ayuda de un grupo inversionista, que mencionare mas adelante, construimos un concepto que buscamos nos ayudes a mejorar y a convertirlo en una herramienta ajustada a las necesidades reales de cada cual, para esto ingresa a la pagina de <a href="http://techscooter.com">techscooter</a> y déjanos tu correo electrónico para que tu hagas parte de los primeros 100 usuarios de esta iniciativa.</p>
<p>En pocas palabras nosotros <a href="http://techscooter.com">Solucionamos tus problemas con la tecnología</a> con la misma seriedad y alegría que encuentras en AxiaCore.</p>
<p>Te esperamos.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=zbEuBY4pESg:PtKRDNTAsIE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=zbEuBY4pESg:PtKRDNTAsIE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=zbEuBY4pESg:PtKRDNTAsIE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=zbEuBY4pESg:PtKRDNTAsIE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=zbEuBY4pESg:PtKRDNTAsIE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/zbEuBY4pESg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/06/nuevo-concepto-techscooter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/06/nuevo-concepto-techscooter/</feedburner:origLink></item>
		<item>
		<title>Estamos en Twitter</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/bB4F-k-v3L4/</link>
		<comments>http://axiacore.com/blog/2009/05/estamos-en-twitter/#comments</comments>
		<pubDate>Fri, 29 May 2009 13:03:41 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/2009/05/estamos-en-twitter/</guid>
		<description><![CDATA[Para los que nos quieran seguir en twitter: http://twitter.com/axiacore conforme tengamos mas seguidores por ese medio sera el mas utilizado.
]]></description>
			<content:encoded><![CDATA[<p>Para los que nos quieran seguir en twitter: http://twitter.com/axiacore conforme tengamos mas seguidores por ese medio sera el mas utilizado.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bB4F-k-v3L4:QNZot0Dy_Ow:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bB4F-k-v3L4:QNZot0Dy_Ow:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=bB4F-k-v3L4:QNZot0Dy_Ow:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bB4F-k-v3L4:QNZot0Dy_Ow:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=bB4F-k-v3L4:QNZot0Dy_Ow:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/bB4F-k-v3L4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/05/estamos-en-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/05/estamos-en-twitter/</feedburner:origLink></item>
		<item>
		<title>Ink-mate ahora con Google Apps</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/UZPaG_TV5L0/</link>
		<comments>http://axiacore.com/blog/2009/05/ink-mate-ahora-con-google-apps/#comments</comments>
		<pubDate>Tue, 05 May 2009 16:53:08 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[AxiaHost]]></category>
		<category><![CDATA[Clientes]]></category>
		<category><![CDATA[Precios]]></category>
		<category><![CDATA[Servicio]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=708</guid>
		<description><![CDATA[Ahora contamos con un cliente muy especial en AxiaHost, al igual que otras empresas han logrado valorar el uso de Google Apps y AxiaHost en beneficio de su negocio. Mejorando la comunicación y la colaboración por medio del correo electrónico han mejorado sustancialmente su forma de trabajar.
Ink-mate es una empresa colombiana dedicada a la sublimación, [...]]]></description>
			<content:encoded><![CDATA[<p>Ahora contamos con un cliente muy especial en AxiaHost, al igual que otras empresas han logrado valorar el uso de <a href="http://axiacore.com/axiahost">Google Apps</a> y <a href="http://axiacore.com/axiahost">AxiaHost</a> en beneficio de su negocio. Mejorando la comunicación y la colaboración por medio del correo electrónico han mejorado sustancialmente su forma de trabajar.</p>
<p><a href="http://ink-mate.com.co">Ink-mate</a> es una empresa colombiana dedicada a la <a href="http://ink-mate.com.co/sublimacion.php">sublimación</a>, <a href="http://ink-mate.com.co/recargas.php">venta y recarga de toner y tintas para impresión</a>, entre otros <a href="http://ink-mate.com.co/conozcanos.php">servicios de gran calidad</a>. Tenemos la gran fortuna de contar con otro cliente satisfecho y de continuar cambiando la manera en que las empresas se comunican, <a href="http://axiacore.com">implementando tecnologia a precios accesibles</a>.</p>
<p>Conozca mas <a href="http://axiacore.com/clientes/clientes.html">clientes satisfechos</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=UZPaG_TV5L0:NgatqdI5bS0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=UZPaG_TV5L0:NgatqdI5bS0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=UZPaG_TV5L0:NgatqdI5bS0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=UZPaG_TV5L0:NgatqdI5bS0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=UZPaG_TV5L0:NgatqdI5bS0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/UZPaG_TV5L0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/05/ink-mate-ahora-con-google-apps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/05/ink-mate-ahora-con-google-apps/</feedburner:origLink></item>
		<item>
		<title>Discurso de Bill Gates en Davos 2008</title>
		<link>http://feedproxy.google.com/~r/AxiacoreBlog/~3/Olh8E3o18uw/</link>
		<comments>http://axiacore.com/blog/2009/04/discurso-de-bill-gates-en-davos-2008/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 03:05:38 +0000</pubDate>
		<dc:creator>Camilo Nova</dc:creator>
				<category><![CDATA[AxiaCore]]></category>
		<category><![CDATA[Empresarismo]]></category>
		<category><![CDATA[Innovacion]]></category>

		<guid isPermaLink="false">http://axiacore.com/blog/?p=705</guid>
		<description><![CDATA[Existen personas que merecen ser escuchadas con atención, no solo pre-juzgadas por como se ven o por las cosas que tienen, sino por las cosas que piensan y mas aun las cosas que hacen. Una de esas personas es Bill Gates, como persona del mundo de la tecnologia tiene un perfil especial, satanizado por muchos, [...]]]></description>
			<content:encoded><![CDATA[<p>Existen personas que merecen ser escuchadas con atención, no solo pre-juzgadas por como se ven o por las cosas que tienen, sino por las cosas que piensan y mas aun las cosas que hacen. Una de esas personas es Bill Gates, como persona del mundo de la tecnologia tiene un perfil especial, satanizado por muchos, venerado por otros, pero como persona en el mundo filantrópico tiene cosas muy valiosas que de ser debatidas abiertamente pueden lograr un cambio importante en el mundo, básicamente es el tipo de persona que tiene las ideas y tiene los medios para desarrollarlas.</p>
<p>A continuación les cito el discurso que dio en Davos en el 2008, a propósito de su despedida como empleado de microsoft.</p>
<blockquote>
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Algunos de nosotros somos tan afortunados que nos llega un momento en la vida en que podemos hacer una pausa, reflexionar en nuestro trabajo y decir: &#8220;Esto es una maravilla, divertido, emocionante y útil, lo podría hacer el resto de la vida”. Pero el paso del tiempo nos fuerza a cada uno reflexionar y preguntarnos: ¿Qué he logrado hasta ahora? ¿Qué me falta por lograr?</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Hace treinta, veinte, diez años mi enfoque era completamente en cómo la magia del software podría cambiar el mundo.</span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Pensé que los adelantos tecnológicos podían resolver los problemas clave. Y es verdad que lo hacen en forma creciente para miles y millones de personas. Pero los adelantos le cambian la vida a la gente solamente cuando lo pueden costear y cuando hay demanda económica. Pero la demanda económica no es igual que necesidad económica. Hay miles de millones de personas que necesitan los grandes inventos de la era de los computadores, y además, tienen muchas más necesidades básicas, pero no tienen la forma de expresar sus necesidades de manera significativa para los mercados. Por lo tanto no lo hacen.</span><span style="font-size: 10pt; font-family: Arial;"><span> </span></span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Si vamos a tener una verdadera oportunidad de cambiar nuestras vidas, necesitaremos otro nivel de innovación. No solamente necesitaremos otro nivel de innovación ni sólo de innovación tecnológica, necesitamos innovación en los sistemas también. Eso es lo que quiero discutir con ustedes hoy en Davos.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Déjenme comenzar por expresar una perspectiva que quizá no es ampliamente compartida. El mundo está mejorando. En forma significativa y creciente, el mundo es un mundo mucho mejor que antes. Consideren el estado de la mujer y las minorías en la sociedad, virtualmente cualquier sociedad comparada con cualquier momento en la historia. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Consideren que la expectativa de vida se ha casi duplicado en los últimos 100 años. Consideren la gobernabilidad, el número de personas que están en las elecciones ahora, expresan sus puntos de vista y disfrutan mayor libertad económica comparada con cualquier momento del pasado. En estas áreas cruciales, el mundo está mejorando cada día más.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Estas mejoras se han equiparado y en algunos casos han sido disparadas por los avances en las ciencias, tecnología y medicina. Nos han traído a un punto alto en el bienestar humano. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Estamos al comienzo de una revolución impulsada por la tecnología en cuanto a lo que la gente podrá hacer una por otra. En las próximas décadas, tendremos habilidades nuevas asombrosas para diagnosticar y curar las enfermedades, educar el mundo de los niños, crear oportunidades para los pobres y aprovechar las mentes más brillantes del mundo para resolver nuestros más difíciles problemas. Así es como veo el mundo y esto debe aclarar una cosa: soy un optimista, pero un optimista impaciente.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">El mundo está mejorando, pero no lo suficientemente rápido, y no está mejorando para todos. Los grandes avances en el mundo a menudo han agravado las inequidades en el mundo. Los menos necesitados ven las mayores mejoras y los más necesitados ven menores mejoras, en particular los miles de millones de personas que viven con menos de un dólar al día. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Hay aproximadamente mil millones de personas en el mundo que no tienen suficiente comida, no tienen agua potable, ni electricidad, las cosas que nosotros damos por hecho. Las enfermedades como la malaria matan a más de un millón de personas por año y reciben mucho menos atención que las drogas que ayudan a evitar la calvicie. No solamente pierden estas personas los beneficios de la economía global – sufrirán de los efectos negativos del crecimiento económico que no tuvieron. El cambio climático tendrá el mayor impacto en la gente que ha hecho menos para causarlo.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">¿Por qué será que la gente se beneficia en proporción inversa a sus necesidades?</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Los incentivos del mercado causan esa situación. En un sistema de capitalismo puro, a medida que aumenta la riqueza de la gente, aumenta el incentivo financiero para servirles. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">A medida que la riqueza disminuye, el incentivo financiero para servirle disminuye, hasta que se vuelve cero. Tenemos que encontrar la forma para que los aspectos del capitalismo que sirven a los más ricos sirva a los más pobres igualmente.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">El genio del capitalismo yace en su capacidad de hacer que el interés propio sirva al interés más amplio. El potencial de un gran retorno financiero por la innovación libera a un amplio conjunto de gente talentosa que persigue muchos descubrimientos diferentes. Este sistema impulsado por el interés propio es responsable de las grandes innovaciones que han mejorado las vidas de miles de millones.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Pero para aprovechar este poder para que beneficie a todos, tenemos que refinar el sistema. Como yo lo veo, hay dos grandes fuerzas de la naturaleza humana: el interés propio y el interés de ayudarle a los demás. El capitalismo se apoya en el interés propio en formas útiles y sostenibles, pero solamente a nombre de los que pueden pagar. La filantropía y la ayuda gubernamental canalizan nuestra preocupación por aquellos que no pueden pagar, pero los recursos se agotan antes de satisfacer las necesidades. Pero para darle una mejora rápida a los pobres necesitamos un sistema que nos permita aprovechar los innovadores y las empresas en una manera mucho mejor de lo que hacemos actualmente.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Tal sistema debe tener una misión doble: producir utilidades y mejorar las vidas de aquellos que no se benefician completamente de las fuerzas del mercado. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Para que el sistema sea sostenible, debemos utilizar los incentivos de utilidades siempre que podamos.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Al mismo tiempo las utilidades no siempre son viables cuando la empresa trata de servir a los pobres. En tales casos, debe haber otro incentivo basado en el mercado y ese incentivo es el reconocimiento. El reconocimiento aumenta la reputación de la empresa y atrae a los clientes; por encima de todo atrae gente buena a la organización. Como tal, el reconocimiento active una recompense basada en el Mercado por buen desempeño. En los mercados en que las utilidades no son viables, el reconocimiento es su reemplazo; cuando es posible generar utilidades el reconocimiento es un incentivo agregado. El desafío es diseñar un sistema en que los incentivos del mercado, incluyendo la utilidad y el reconocimiento, impulsen el cambio.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Me gusta llamar este nuevo sistema capitalismo creativo, un enfoque en que los gobiernos, las empresas y las entidades sin ánimos de lucro trabajen juntos para estirar el alcance de las fuerzas del mercado para que más gente pueda generar utilidades o ganar reconocimiento, haciendo el trabajo que suavice las inequidades mundiales.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Algunas personas quizá objeten este tipo de &#8220;cambio social basado en el mercado&#8221;, allegando que si combinamos el sentimiento con el interés propio, no expandiremos el alcance del mercado sino que lo reduciremos. Pero Adam Smith, el padre del capitalismo y el autor de “Wealth of Nations” (Riqueza de las Naciones) quien creía firmemente en el valor del interés propio para la sociedad, comenzó su primer libro con las siguientes líneas: &#8220;Cuán egoísta se pueda suponer que es el hombre, evidentemente hay algunos principios en su naturaleza que lo hacen interesarse en la suerte de los demás, y le dan la felicidad necesaria, aunque no se beneficie en nada, excepto por el placer de verlo suceder&#8221;.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">El capitalismo creativo toma este interés en la riqueza de los demás y lo une a nuestro interés en nuestras propias riquezas, en formas que ayudan a avanzar a ambas. Este motor híbrido del interés propio y la preocupación por los demás sirve a un círculo mucho más amplio de gente del que se puede alcanzar por el sólo interés propio o la sola preocupación por los demás. Mi pensamiento sobre este tema ha sido influido por muchas experiencias diferentes, incluyendo a nuestro trabajo en Microsoft para solucionar la inequidad.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Durante los últimos 20 años Microsoft ha utilizado la filantropía empresarial como forma de llevar la tecnología a la gente que no tiene acceso a ella. Hemos donado más de 3.000 millones en efectivo y software para tratar que la distribución digital sea más equitativa y eso continuará.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Pero nuestro mayor impacto no es solamente software gratis o poco costo de por sí, sino cuando enseñamos a utilizar la tecnología para crear soluciones. Y estamos comprometidos para traer más de esa pericia a la mesa. Nuestros grupos empresariales y de productos en todo el mundo y algunas de nuestras mejores mentes en nuestro laboratorio de investigación en India, están trabajando en nuevos productos, tecnologías y modelos de negocios que pueden hacer la computación más accesible y menos costosa. </span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">En un caso estamos desarrollando una interfaz libre de texto que permitirá a la gente analfabeta o semi-analfabetas utilicen un PC instantáneamente, con mínima capacitación o ayuda. </span></p>
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">En otros estamos viendo cómo la tecnología inalámbrica, junto con el software, puede evitar los costosos costos de conectividad que son un obstáculos para el acceso de la computación en áreas rurales. Hemos considerado una manera más enfocada sobre los problemas que enfrentan los más pobres, dando a nuestros más innovadores pensantes el tiempo y los recursos para que puedan idear las soluciones.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Este tipo de capitalismo creativo une la pericia empresarial con las necesidades del mundo en desarrollo para encontrar mercados que ya existen pero no se han impactado. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Algunas veces las fuerzas del Mercado no tienen impacto en los países en desarrollo porque no hay demanda o porque el dinero hace falta, porque no invertimos suficiente tiempo para estudiar las necesidades y límites de ese mercado.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Este punto se enfatizó de forma elocuente en el libro de CK Prahalad book “The Fortune at the Bottom of the Pyramid” (La fortuna en la parte inferior de la pirámide), y que ha tenido una inmensa influencia en las compañías en términos de expandir la razón de la utilidad a través de innovación especial. </span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Cuando la Organización Mundial de la Salud trató de ampliar la vacunación contra meningitis en África, no fue derecho al fabricante de vacunas, primero fue a África a aprender qué gente podía pagar. Se dieron cuenta que si querían que las madres compraran esta vacuna para sus bebés tenía que costar menos de 50 centavos por dosis. Luego desafiaron a los socios para que no excedieran este precio, y de hecho, el Serum Institute en India encontró una forma nueva de producir<span> </span>las vacunas a 40 centavos cada una. La compañía acordó proporcionar 250 millones de dosis para distribuir a través de sistemas de salud pública durante la próxima década, y tienen la libertad de vender directamente al sector privado también.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">En otro caso, una compañía holandesa, que tiene los derechos sobre la vacuna del cólera, retiene los derechos en el mundo desarrollado, pero comparte esos derechos con fabricantes en países en desarrollo. El resultado es una vacuna contra cólera fabricada en Vietnam que vale menos que $1 dólar por dosis y que incluye el despacho y los costos de una campana de vacunación. Hay varias industrias que pueden aprovechar este tipo de precio en<span> </span>niveles para ofrecer medicina y tecnología valiosas a la gente de pocos recursos.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Estos proyectos son solo una idea leve de lo que podríamos lograr si los expertos en las necesidades del mundo en desarrollo se reunieran varias veces al año con científicos en compañías de software o medicamentos para ayudarles a tratar de encontrar aplicaciones para sus mejores ideas para el mundo pobre.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Otro enfoque del capitalismo creativo incluye un rol directo para los gobiernos. </span><span style="font-size: 10pt; font-family: Arial;">Claro está que los gobiernos hacen mucho para ayudar a los pobres en formas que van mucho más allá de los mercados en maduración: financian la investigación, subsidian la atención de la salud, construyen colegios y hospitales. Pero algo del trabajo al más alto nivel que el gobierno puede hacer es fijar la política y distribuir los fondos en formas que puedan crear incentivos de mercados para la actividad empresarial que mejore las vidas de los pobres.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Bajo una ley firmada por el Presidente Bush el año pasado, cualquier laboratorio que desarrolle un tratamiento para una enfermedad desatendida como malaria o TB podría obtener una revisión prioritaria de la Food and Drug Administration para otro producto que haya fabricado. Si usted desarrolla una nueva droga para la malaria, su rentable medicamento para bajar el colesterol podría salir un año antes al mercado. Esta revisión prioritaria podría costar cientos de millones de dólares.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Otro enfoque del capitalismo creativo es simplemente ayudar las empresas en el mundo pobre para que alcancen los mercados del mundo rico. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Mañana por la mañana les anunciaré una alianza que les da acceso a los agricultores africanos al mercado del café Premium con la meta de duplicar sus ingresos de sus cultivos de café. Este proyecto les ayudará a los agricultores africanos producir café de la mejor calidad y a conectarse con compañías que quieran comprarlo. Esto les ayudará a salir de la pobreza, tanto a ellos como a sus familias y sus comunidades. </span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Finalmente, una de las formas más inventivas del capitalismo creativo tiene que ver con alguien que todos conocemos muy bien. Hace unos años estaba sentado en un bar aquí en Davos con Bono. Después de que Asia, la mayor parte de Europa y África se había ido a acostar, él estaba entusiasmado hablando de cómo podíamos conseguir un porcentaje de las compañías cívicas para ayudar a cambiar el mundo. Él continuamente llamó a diferentes personas, las despertaba y me daba el teléfono. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Sus proyecciones fueron un poco entusiastas al comienzo, pero el principo lo tenía correcto. Si usted le da a la gente la oportunidad de asociarse con la causa que les importa, pagarán más y esa prima marcará una diferencia. Así nación la Campaña RED aquí en Davos.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Los productos RED están disponibles en compañías como Gap, Motorota y Armani. Solamente esta semana Dell y Microsoft se unieron a esta causa. Durante los últimos seis meses y medio, RED ha generado $50 millones para el Global Fund to Fight AIDS, TB, y Malaria. Como resultado, casi 2 millones de personas en África están recibiendo medicamentos que les salva la vida.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Lo que une todas las formas de capitalismo creativo es que son esfuerzos para traerle soluciones que descontamos por hecho a personas que no las pueden obtener. A medida que refinemos y mejoremos este enfoque, tenemos todas las razones para pensar que estos motores de cambio se volverán más grandes, firmes y eficientes.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Hay un creciente entendimiento alrededor del mundo que cuando el cambio se impulsa mediante incentivos basados en el mercado, se tiene un plan sostenible para el cambio, porque las utilidades y el reconocimiento son recursos renovables. </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Klaus Schwab maneja una fundación que ayuda a los empresarios sociales alrededor del mundo, hombres y mujeres que convierten sus ideas para mejorar las vidas en productos o servicios asequibles. El Presidente Clinton demuestra el rol singular que puede jugar una entidad sin ánimo de lucro al igual que un negociador entre los productores del mundo rico y los consumidores del mundo pobre. La revista Fast Company otorga premios por lo que llaman Capitalismo Social.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Estas no son unas pocas historias aisladas; esto es un movimiento mundial, y todos tenemos la capacidad y responsabilidad de acelerarlo.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Me gustaría solicitarles a todos aquí – ya sea que estén en el mundo de negocios, gubernamental o sin ánimo de lucro – que asuman un proyecto de capitalismo creativo el próximo año. No tiene que ser un nuevo proyecto; se puede tomar un proyecto existente, y ver dónde se puede ampliar el alcance de las fuerzas del Mercado para ayudar a avanzar las cosas. Cuando se proporciona ayuda extranjera, cuando se hace caridad, cuando se trata de cambiar el mundo – podrá también encontrar formas de poner el poder de las fuerzas del mercado detrás del esfuerzo de ayudar a los pobres?</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Espero que las empresas consideren donar un porcentaje del tiempo de sus mejores innovadores que pudiera ayudarle a la gente que se quedó por fuera de la economía mundial. Este tipo de aporte es mucho más poderoso que simplemente regalar efectivo u ofrecer a sus empleados el tiempo libre para servir de voluntarios. Es un uso enfocado de lo que mejor hace su compañía. Es una maravillosa forma de capitalismo creativo, porque toma el poder mental que mejora la vida para los más ricos, y lo dedica para mejorar las vidas de todos los demás.</span><span style="font-size: 10pt; font-family: Arial;"> </span></p>
<p align="justify">
<p align="justify"><span style="font-size: 10pt; font-family: Arial;">Hay diversas compañías farmacéuticas &#8211; GlaxoSmithKline en particular – que están poniendo a sus principales innovadores a trabajar en nuevos enfoques para ayudarle a los pobres. </span><span style="font-size: 10pt; font-family: Arial;">Otras companies están hacienda lo mismo – en comida, tecnología, celulares. </span><span style="font-size: 10pt; font-family: Arial;">Si pudiéramos tomar los líderes en estas áreas como modelos, y si logramos que el resto hagan lo mismo, podríamos tener un imapcto dramático contra las inequidades del mundo.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Finalmente, espero que los grandes pensadores que están aquí dediquen algún tiempo para encontrar formas para que las empresas, gobiernos, NGO, y los medios para crear mensajes sobre qué hacen las compañías para usar su poder e inteligencia para servir a un círculo más amplio de gente. Esto a su vez puede convertir las buenas obras en reconocimiento y asegurar que el reconocimiento traiga recompensas basadas en el mercado haga la mayor cantidad de trabajo para servirles al mayor número de personas.</span><span style="font-size: 10pt; font-family: Arial;"> </span><span style="font-size: 10pt; font-family: Arial;">Vivimos en una era fenomenal. Si podemos invertir las primeras décadas del siglo 21 para encontrar enfoques que se ajusten a las necesidades de los pobres en formas que generen rentabilidad, habremos encontrado una forma sostenible de reducir la pobreza en mundo. Esta tarea es infinita, nunca termina, pero el esfuerzo apasionado para responder este desafío ayudará a cambiar el mundo.</span><span style="font-size: 10pt; font-family: Arial;"><br />
</span></p></blockquote>
<p>Enlace: <a href="http://www.microsoft.com/Presspass/exec/billg/speeches/2008/01-24WEFDavos.mspx">http://www.microsoft.com/Presspass/exec/billg/speeches/2008/01-24WEFDavos.mspx</a></p>
<p>Traducción: <a href="http://www.redemprendedoresbavaria.net/angelica/weblog/257.html">http://www.redemprendedoresbavaria.net/angelica/weblog/257.html</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=Olh8E3o18uw:8KggNAxHKZY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=Olh8E3o18uw:8KggNAxHKZY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?i=Olh8E3o18uw:8KggNAxHKZY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=Olh8E3o18uw:8KggNAxHKZY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AxiacoreBlog?a=Olh8E3o18uw:8KggNAxHKZY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AxiacoreBlog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AxiacoreBlog/~4/Olh8E3o18uw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://axiacore.com/blog/2009/04/discurso-de-bill-gates-en-davos-2008/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://axiacore.com/blog/2009/04/discurso-de-bill-gates-en-davos-2008/</feedburner:origLink></item>
	</channel>
</rss>
