<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Chuso! &#187; Uncategorized</title>
	<atom:link href="http://chusete.es/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://chusete.es</link>
	<description>A la tercera va la vencida</description>
	<lastBuildDate>Tue, 13 Mar 2012 16:06:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Decoradores en Zend Form</title>
		<link>http://chusete.es/2011/02/17/decoradores-en-zend-form/</link>
		<comments>http://chusete.es/2011/02/17/decoradores-en-zend-form/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 21:00:06 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=956</guid>
		<description><![CDATA[De cuando en cuando, tengo que lidiar con formularios Zend_Form en Zend Framework. Son maravillosos, ya que simplifican enormemente el trabajo, y bien usados pueden aumentar notablemente la calidad de los formularios. Si no estás ya convencido, deja que te cuente alguna de sus ventajas: Separación del formulario de las vistas. Ahora los formularios serán [...]]]></description>
			<content:encoded><![CDATA[<p>De cuando en cuando, tengo que lidiar con formularios <a href="http://framework.zend.com/manual/en/zend.form.html">Zend_Form</a> en <a href="http://framework.zend.com/">Zend Framework</a>. Son maravillosos, ya que simplifican enormemente el trabajo, y bien usados pueden aumentar notablemente la calidad de los formularios. Si no estás ya convencido, deja que te cuente alguna de sus ventajas:</p>
<ul>
<li>Separación del formulario de las vistas. Ahora los formularios serán un objeto sobre el que puedes realizar numerosas operaciones. La clase encargada es <a href="http://framework.zend.com/manual/en/zend.form.forms.html">Zend_Form</a>.</li>
<li>Cada elemento del formulario es también un objeto, que hereda de <a href="http://framework.zend.com/manual/en/zend.form.standardElements.html">Zend_Form_Element</a>. Es decir, si añades un campo de texto, éste será también un objeto que, entre otras propiedades contiene su nombre, valor, etiqueta, descripción, errores, filtros, validadores, etc. Están todos los elementos de un formulario HTML disponibles en la biblioteca de Zend_Framework</li>
<li>Filtros, gracias a <a href="http://framework.zend.com/manual/en/zend.filter.html">Zend_Filter</a>. Podemos hacer que un elemento filtre de forma limpia y elegante su valor, como por ejemplo conversión a mayúsculas. Zend Framework trae un gran número de filtros.</li>
<li>Validaciones, gracias a <a href="http://framework.zend.com/manual/en/zend.validate.html">Zend_Validate</a>. Del mismo modo que podemos filtrar, también podemos añadir validaciones. Por ejemplo, que un valor numérico se encuentre en un determinado rango, que cumpla una determinada expresión regular, o que no exceda un determinado número de caracteres.</li>
<li>Comprobar el formulario. ¿Queremos saber si el formulario que ha completado el usuario es correcto? Simplemente invocamos el método isValid() del formulario, y sabremos si ha sido correcto.</li>
<li>Definir el formulario en un archivo .ini o .xml.</li>
</ul>
<p>Pero volviendo al hilo, cada vez que tengo que retomar Zend_Form, hay un punto en el que me atasco: los decoradores. Su funcionamiento se basa en el <a href="http://en.wikipedia.org/wiki/Decorator_pattern">patrón decorador</a>.</p>
<div class="note">
<h3>Decorator Pattern</h3>
<p>¿Qué hace exactamente? Añadir en tiempo de ejecución una nueva funcionalidad (decorar) a un objeto. Se usa mucho en entornos gráficos. Por ejemplo, para añadir nuevas opciones a una ventana o a un elemento gráfico. Nótese que en lugar de eso, podrían crearse subclases que heredaran unas de otras, pero esto conllevaría un problema: el número de clases total seguiría un crecimiento exponencial del tipo 2^funcionalidades. Precisamente ese problema es el que soluciona ese patrón.</p>
<p>Por ejemplo. Supongamos una clase base &#8216;Cafe&#8217;. Para la clase Cafe creamos 4 decoradores: ConAzucar, ConLeche, ConChocolate, ConEspuma. Si quisiéramos resolver todas las combinaciones posible, creando una clase para cada una de ellas, tendríamos 2^4 clases, es decir, 16. Con decoradores, añadimos estas funcionalidades al vuelo.</p>
</div>
<p>¿Y en qué afecta esto a Zend_Form? Como hemos dicho, tanto el formulario como los campos de éste, son objetos. Al renderizarse en HTML, muy seguramente, queramos modificar el modo en que se muestran por defecto. Y ahí es donde entra en juego el patrón decorador: Añadimos nuevas funcionalidades dinámicamente, para que por ejemplo un campo de texto esté envuelto en un div, que a su vez pertenece a una celda td.</p>
<p><strong>Nota: La mayoría de la información de este artículo, y ejemplos, los he sacado del artículo <a href="http://devzone.zend.com/article/3450">Decorators with Zend Forms</a> de la Zend Developer Zone.</strong></p>
<p>La mayoría de elementos de un formulario (por ejemplo un campo de texto, un textarea o un combo) tiene una serie de decoradores &#8220;de serie&#8221; (el orden importa):</p>
<ol>
<li>ViewHelper &#8211; Es el encargado de renderizar el propio elemento</li>
<li>Errors &#8211; En caso de que haya errores (por ejemplo, el valor introducido supera el tamaño máximo), lo mostraría este decorador.</li>
<li>HtmlTag &#8211; Envoltura, por defecto con la etiqueta &lt;dd&gt; para el ViewHelper y Errors.</li>
<li>Label &#8211; Etiqueta, envuelta en la etiqueta &lt;dt&gt; por defecto.</li>
</ol>
<p>Se invocan (y anidan de dentro a fuera) en orden, de modo que la anterior pila generaría algo similar a lo siguiente:</p>
<pre>$label-&gt;render($htmlTag-&gt;render($errors-&gt;render($viewHelper-&gt;render(''))));</pre>
<p>Visto paso a paso, esto es lo que ocurriría:</p>
<div class="note">
<h3>Punto de partida</h3>
<p>Partimos de una cadena de texto vacía</p>
<pre>''</pre>
</div>
<div class="note">
<h3>Se renderiza ViewHelper</h3>
<p>A continuación se genera el código HTML de la etiqueta. En este ejemplo, al elemento se le había definido como tipo texto con nombre e id igual a &#8220;foo&#8221;</p>
<pre><strong>&lt;input name="foo" id="foo" type="text" value="" /&gt;</strong></pre>
</div>
<div class="note">
<h3>Se renderiza Errors</h3>
<p>Posteriormente se añade el código que muestra los errores. Por defecto se pospone (prepend) al contenido que ya hubiera.</p>
<pre>&lt;input name="foo" id="foo" type="text" value="" /&gt;
<strong>&lt;div&gt;&lt;ul&gt;
    &lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</strong></pre>
</div>
<div class="note">
<h3>Se renderiza HtmlTag</h3>
<p>En este paso, añade una etiqueta dd (por omisión), que, por defecto, envuelve al contenido que ya hubiera.</p>
<pre><strong>&lt;dd&gt;</strong>
    &lt;input name="foo" id="foo" type="text" value="" /&gt;
    &lt;div&gt;&lt;ul&gt;
        &lt;li&gt;...&lt;/li&gt;
    &lt;/ul&gt;&lt;/div&gt;
<strong>&lt;/dd&gt;</strong></pre>
</div>
<div class="note">
<h3>Se renderiza Label</h3>
<p>Y en último lugar, se genera el código HTML de la etiqueta (por omisión viene envuelto en dd), y lo antepone a lo que ya hubiera (append).</p>
<pre><strong>&lt;dt&gt;&lt;label for="foo"&gt;Foo&lt;/label&gt;&lt;dt&gt;</strong>
&lt;dd&gt;
    &lt;input name="foo" id="foo" type="text" value="" /&gt;
    &lt;div&gt;&lt;ul&gt;
        &lt;li&gt;...&lt;/li&gt;
    &lt;/ul&gt;&lt;/div&gt;
&lt;/dd&gt;</pre>
</div>
<p>¿Cómo modificamos la forma en que se genera el código por defecto? Hay dos vías.</p>
<p>La primera nos permite añadir nuevos decoradores al comienzo de la pila, eliminar alguno de ellos, y/o modificar la ubicación en que se muestra alguno de los que ya hay. Por ejemplo, esto extraería el decorador &#8216;label&#8217; de la pila de decoradores del elemento, y modificaría su ubicación (valores posibles appendo o prepend):</p>
<pre>$label = $element-&gt;getDecorator('label');
$label-&gt;setOption('placement', 'append');</pre>
<p>Del mismo modo, podríamos eliminar de la pila de decoradores el decorador &#8216;label&#8217; así:</p>
<p>$element-&gt;removeDecorator(&#8216;label&#8217;);</p>
<p>La segunda es más potente, y nos permite redefinir toda la pila</p>
<div>
<pre>$element-&gt;setDecorators(array(
    'ViewHelper',
    'Description',
    'Errors',
    array(array('elementDiv' =&gt; 'HtmlTag'), array('tag' =&gt; 'div')),
    array(array('td' =&gt; 'HtmlTag'), array('tag' =&gt; 'td')),
    array('Label', array('tag' =&gt; 'td')),
));</pre>
</div>
<p>Cada elemento dentro del array es un decorador, de modo que en este caso tenemos 6: &#8216;ViewHelper&#8217;, &#8216;Description&#8217;, &#8216;Errors&#8217;, &#8216;HtmlTag&#8217;, &#8216;HtmlTag&#8217;, &#8216;Label&#8217;.</p>
<p>A cada elemento le podemos añadir opciones, como por ejemplo el tag a utilizar. En ese caso, en lugar de utilizar sólo su nombre, lo haríamos así:</p>
<pre>array('decorador', array('opción' =&gt; 'valor'))</pre>
<p>Además, si usamos dos veces un mismo decorador, debemos necesariamente etiquetarle con un nombre que lo identifique de manera unívoca, ya que sino, el último decorador de ese tipo que se añada, sustituirá al anterior. Para poner una etiqueta, lo haríamos así:</p>
<pre>array( array('etiqueta' =&gt; 'decorador'), array('opción' =&gt; 'valor'))</pre>
<p>Explicación:</p>
<div>
<ol>
<li>Primero renderiza ViewHelper (V), que es un atajo del elemento (por ejemplo, el campo de entrada). De forma resumida, generaría el siguiente código: <strong>&lt;V&gt;</strong>.</li>
<li>En segundo lugar, renderiza la descripción (D), que por defecto se ubica tras (<strong>prepend</strong>) lo que hubiera, de modo que quedaría: &lt;V&gt;<strong>&lt;D&gt;</strong>.</li>
<li>Ahora con los errores (E), los renderiza por defecto antes (<strong>append</strong>) de lo que hubiera: <strong>&lt;E&gt;</strong>&lt;V&gt;&lt;D&gt;.</li>
<li>En el cuarto paso, creamos un decorador de tipo HtmlTag al que etiquetamos como &#8216;elementDiv&#8217;, y que le pasamos como opciones que use el tag &#8216;div&#8217;. Este decorador, por defecto, envuelve lo que hubiera: <strong>&lt;div&gt;</strong>&lt;E&gt;&lt;V&gt;&lt;D&gt;<strong>&lt;/div&gt;</strong>.</li>
<li>Quinto paso, al igual que en el anterior creamos un decorador de tipo HtmlTag, etiquetado como &#8216;td&#8217;, y que usará el tag &#8216;td&#8217;, quedando así: <strong>&lt;td&gt;</strong>&lt;div&gt;&lt;E&gt;&lt;V&gt;&lt;D&gt;&lt;/div&gt;<strong>&lt;/td&gt;</strong>.</li>
<li>Sexto y último paso, renderizamos la etiqueta (L), cuya ubicación por defecto es antes de lo que hubiera (<strong>append</strong>), y a la que le pasamos una <strong>opción adicional</strong> para que esté contenida dentro de un tag de tipo &#8216;td&#8217;: &lt;td&gt;&lt;div&gt;&lt;E&gt;&lt;V&gt;&lt;D&gt;&lt;/div&gt;&lt;/td&gt;<strong>&lt;td&gt;&lt;L&gt;&lt;/td&gt;</strong>.</li>
</ol>
</div>
<p>Ahora ya conocemos la dinámica de cómo decorar un elemento de un formulario. Hemos visto sólo unos pocos (ViewHelper, Description, Errors, HtmlTag y Label). Por cada tipo de campo (input text, button, file, etc.) hay un decorador, siendo ViewHelper sólo un atajo que deduce cuál de ellos usar. Estos algunos decoradores más (aquí la <a href="http://framework.zend.com/manual/en/zend.form.standardDecorators.html">lista completa</a>):</p>
<ul>
<li><strong>Callback</strong> &#8211; Si no nos queremos complicar, podemos definir una función callback que reciba como parámetro el elemento, para con una sentencia similar a ésta, devolver el nuevo contenido:<br />
return &#8217;&lt;span&gt;&#8217; . $element-&gt;getLabel() . &#8221;&lt;/span&gt;&#8221;;</li>
<li><strong>Form</strong> &#8211; Es el decorador por defecto del propio formulario. No lo hemos dicho, pero no sólo los elementos del formulario tienen decoradores. También los tienen los formularios en sí.</li>
<li><strong>FormElements</strong> &#8211; Este es el encargado de renderizar cada uno de los elementos dentro de un formulario, es decir, es el que envuelve a nuestros elementos.</li>
<li><strong>Image</strong> &#8211; Para renderizar una etiqueta de tipo img en el formulario. Útil por ejemplo cuando queremos mostrar en un formulario de actualizar perfil de usuario su avatar activo.</li>
<li><strong>ViewScript</strong> &#8211; ¿Que todo lo anterior resulta demasiado farragoso para un simple formulario? No hay problemas. ViewScript permite diseñarlo a la antigua usanza, con una plantilla. Todo esto sin tener que dejar de lado toda la potencia y facilidades que nos ofrece utilizar Zend_Form como sustituto de los formularios no gestionados.</li>
</ul>
<p>Hay mucho más que ver sobre los decoradores, como por ejemplo, aprender a definir nuestros propios decoradores, o saber cómo hacer uso de ViewScript. En cualquier caso, Matthew Weier O&#8217;Phinney lo tiene todo explicado de maravilla en el <a href="http://devzone.zend.com/article/3450">artículo del Zend Developer Zone</a> que enlazaba al comienzo.</p>
<p>Gracias por leer este artículo <img src='http://chusete.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2011%2F02%2F17%2Fdecoradores-en-zend-form%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2011%2F02%2F17%2Fdecoradores-en-zend-form%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2011/02/17/decoradores-en-zend-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Requisitos en proyectos a licitación</title>
		<link>http://chusete.es/2010/10/14/requisitos-en-proyectos-a-licitacion/</link>
		<comments>http://chusete.es/2010/10/14/requisitos-en-proyectos-a-licitacion/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 22:46:56 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[licitación]]></category>
		<category><![CDATA[organismos públicos]]></category>
		<category><![CDATA[proyecto]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=884</guid>
		<description><![CDATA[Recientemente, en un proyecto que salió a licitación dependiente del Ministerio de Medio Ambiente, y Medio Rural y marino, vi unos cuantos requisitos que, en mi opinión, merece la pena compartir y revisar con detenimiento. Para entrar en contexto, el proyecto consiste en el diseño, desarrollo, implantación y mantenimiento de una página web. Es normal que [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente, en un proyecto que salió a licitación dependiente del <a href="http://www.marm.es/">Ministerio de Medio Ambiente, y Medio Rural y marino</a>, vi unos cuantos requisitos que, en mi opinión, merece la pena compartir y revisar con detenimiento. Para entrar en contexto, el proyecto consiste en el diseño, desarrollo, implantación y mantenimiento de una página web. Es normal que quieran curarse en salud, todos lo hacemos en nuestros contratos. Pero esto&#8230;</p>
<p>Lo primero que me llama la atención, es un párrafo que dice lo siguiente:</p>
<blockquote><p><em>La herramienta de gestión de contenidos proporcionará a la Fundación Biodiversidad la capacidad de </em><strong><em>modificar en su totalidad el diseño, imagen del portal Web</em></strong><em> y todos sus contenidos. Todo ello </em><strong><em>de una manera sencilla sin requerir conocimientos de programación ni HTML</em></strong><em>.</em></p></blockquote>
<p>Lamentablemente no existe tecnología que permita realizar esto. Existen multitud de editores WYSIWYG, aplicaciones que permiten editar textos de forma enriquecida sin necesidad de lidiar con CSS o HTML. Pero no existe nada que permita modificar el aspecto de toda una web sin necesidad de tener conocimientos de HTML y/o CSS. Ni siquiera aplicaciones como WordPress, Joomla o Blogger, todas ellas conocidas por lo sencillas de manejar que son, permiten nada remotamente parecido. Permiten instalar plantillas, eso sí, desarrolladas por gente que sí tiene conocimientos técnicos.</p>
<p>Pero sigamos. En otro párrafo nos indican esto:</p>
<blockquote><p><em>La propiedad intelectual de los trabajos realizados por el adjudicatario pertenecerá a la Fundación Biodiversidad.</em></p></blockquote>
<p>Todos desarrollamos código reutilizable. Por ejemplo, si un día diseño una página web en la que hay un sistema de gestión de usuarios, procuraré que este código se pueda reutilizar para otros proyectos. Es bastante frecuente contar con un buen número de &#8220;bloques&#8221; de código que reutilizas para <em>ensamblar</em> nuevos proyectos. Esto permite abaratar costes sin perder en calidad.</p>
<p>Pero volvamos con la cita anterior. Si toda la propiedad intelectual (esto incluye el software) pasa a pertenecer a la Fundación Biodiversidad, ¿qué ocurre con nuestros anteriores clientes? ¿Sus aplicaciones serán en parte propiedad de esta fundación? O una pregunta todavía más interesante, ¿y si el software utilizado, bien desarrollado por nosotros, bien por terceros, está licenciado como software libre? Por favor, si me equivoco agradecería alguna explicación, pero hasta donde yo sé, la única solución viable consiste en desarrollar un software desde cero para este proyecto.</p>
<p>Pero hay más puntos interesantes a analizar:</p>
<blockquote><p><em>Además la Fundación Biodiversidad se reserva el derecho a ampliar los contenidos sin que el presupuesto varíe.</em></p></blockquote>
<p>Al definir un proyecto siempre se olvida algún contenido o requisito. Esto es normal. Si presupuesto una web que inicialmente cuenta con 30 documentos, pero finalmente se realizan 33, muy posiblemente el precio no variará con respecto al presupuesto inicial (salvo que se trate de apartados especialmente costosos en tiempo, y siempre indicándoselo con antelación al cliente).</p>
<p>Pero que te obliguen a firmar unas condiciones en las que te comprometes a añadir todos los contenidos extra que te proporcionen, únicamente fiándote de su buena fe, lo veo abusivo. ¿Quién te garantiza que finalmente no será el doble de lo estimado? Personalmente considero una cláusula así como un claro indicativo de la seriedad del cliente con el que vas a trabajar. Por suerte no he tenido ningún cliente así; la gente entiende que si se salen de los requisitos iniciales, es normal pagar por ello.
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2010%2F10%2F14%2Frequisitos-en-proyectos-a-licitacion%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2010%2F10%2F14%2Frequisitos-en-proyectos-a-licitacion%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2010/10/14/requisitos-en-proyectos-a-licitacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diseño personalizado para mapas de Google</title>
		<link>http://chusete.es/2010/05/21/diseno-personalizado-para-mapas-de-google/</link>
		<comments>http://chusete.es/2010/05/21/diseno-personalizado-para-mapas-de-google/#comments</comments>
		<pubDate>Fri, 21 May 2010 14:23:22 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=709</guid>
		<description><![CDATA[Con tanto revuelo que hay con la Google I/O 2010 (La apertura de Wave, Google TV, y la Chrome Web Store), poco se habla del resto de novedades. Una de ellas son los Styled Maps de la API de Google Maps. Gracias a estas cositas, muchos diseñadores que hasta ahora se mostraban reticentes, se animarán a [...]]]></description>
			<content:encoded><![CDATA[<p>Con tanto revuelo que hay con la <a href="http://code.google.com/intl/es/events/io/2010/">Google I/O 2010</a> (La <a href="http://www.informationweek.com/news/infrastructure/traffic_management/showArticle.jhtml?articleID=224900288&amp;cid=RSSfeed_IWK_All">apertura de Wave</a>, <a href="http://www.google.com/tv/">Google TV</a>, y la <a href="https://chrome.google.com/webstore">Chrome Web Store</a>), poco se habla del resto de novedades. Una de ellas son los <a href="http://googlegeodevelopers.blogspot.com/2010/05/add-touch-of-style-to-your-maps.html">Styled Maps</a> de la API de Google Maps.</p>
<p>Gracias a estas cositas, muchos diseñadores que hasta ahora se mostraban reticentes, se animarán a usar esta API para sus páginas.</p>
<p>Aquí tenemos un ejemplo de qué se puede hacer:</p>
<div id="map_canvas" style="width:100%; height:200px;"></div>
<p><script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script><br />
<script type="text/javascript">
var map;
var madrid = new google.maps.LatLng(40.4166909, -3.7003454);
function initialize() {
  var stylez = [{
      featureType: "road.local",
      elementType: "geometry",
      stylers: [{
        hue: "#00ff00"
      },{
        saturation:100  
      }]
    },
    {
      featureType: "landscape",
      elementType: "geometry",
      stylers: [{
        hue: "#000000"
      },{
        saturation: 75
      },{
        lightness: -100
      }]
    }];
  var mapOptions = {
    zoom: 11,
    center: madrid
  };
  map = new google.maps.Map(document.getElementById("map_canvas"),
      mapOptions);
  var styledMapOptions = {
      map: map,
      name: "Hip-Hop"
  }
  var jayzMapType =  new google.maps.StyledMapType(stylez,styledMapOptions);
  map.mapTypes.set('hiphop', jayzMapType);
  map.setMapTypeId('hiphop');
} 
initialize();
</script>
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2010%2F05%2F21%2Fdiseno-personalizado-para-mapas-de-google%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2010%2F05%2F21%2Fdiseno-personalizado-para-mapas-de-google%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2010/05/21/diseno-personalizado-para-mapas-de-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consejos SEO de Bing</title>
		<link>http://chusete.es/2009/07/07/consejos-seo-de-bing/</link>
		<comments>http://chusete.es/2009/07/07/consejos-seo-de-bing/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 00:18:36 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bing]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=444</guid>
		<description><![CDATA[Vía Bing Community os traigo esta serie de consejos SEO que nos proponen. La mayoría me han resultado viejos conocidos, pero otros&#8230; Son sobre los enlaces, y el artículo se titula &#8220;making links work for you&#8220;. Aquí los tenéis: Canonizar la URL de inicio. ¿Con o sin www? ¿Con barra final o sin ella? Sólo [...]]]></description>
			<content:encoded><![CDATA[<p>Vía <a href="http://www.bing.com/community/blogs/webmaster/">Bing Community</a> os traigo esta serie de consejos SEO que nos proponen. La mayoría me han resultado viejos conocidos, pero otros&#8230; Son sobre los enlaces, y el artículo se titula &#8220;<a href="http://www.bing.com/community/blogs/webmaster/archive/2009/07/01/making-links-work-for-you-sem-101.aspx">making links work for you</a>&#8220;. Aquí los tenéis:</p>
<ol>
<li><strong>Canonizar la URL de inicio</strong>. ¿Con o sin www? ¿Con barra final o sin ella? Sólo puede quedar una <img src='http://chusete.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li><strong>Escoger entre enlaces relativos y absolutos</strong>. Nos aconsejan usar siempre enlaces absolutos, sobre todo porque refuerzan nuestra URL.</li>
<li><strong>Utiliza una buena sintaxis en las URLs de los enlaces</strong>. Por ejemplo, debemos omitir el fichero por defecto de una carpeta (Típicamente index).</li>
<li><strong>Utiliza el atributo title en enlaces internos</strong>. En los enlaces que apuntan a tu propia página completa el atributo title con una descripción de la página de destino.</li>
<li><strong>Identifica la URL canónica de cada página</strong>. Ya sabéis, como en el punto 1, pero para todas las páginas.</li>
<li><strong>Minimiza el número de parámetros de URLs dinámicas</strong>. Suelen ser problemáticas para los bots que rastrean la página.</li>
<li><strong>Evita usar IDs de sesiones o cookies</strong>. Dificultarás el rastreo a los bots.</li>
<li><strong>Ten al menos un enlace interno a cada página</strong>. Lógico. Todos los documentos deben ser accesibles.</li>
<li><strong>Limita el número de enlaces de una página</strong>. Nos aconsejan que un documento no contenga más de 100 (Salvo que sea necesario).</li>
<li><strong>Evitar que el rastreador siga un enlace</strong>. Mediante rel=&#8221;nofollow&#8221;. Cuanto más tiempo dedique a las páginas no interesantes, menos dedicará a las que de verdad nos interesan.</li>
</ol>
<p>Sobre los links, también hicieron unos artículos muy interesantes titulados &#8220;El bueno, el feo y el malo&#8221; (<a href="http://www.bing.com/community/blogs/webmaster/archive/2009/06/16/links-the-good-the-bad-and-the-ugly-part-1-sem-101.aspx">Parte 1</a> y <a href="http://www.bing.com/community/blogs/webmaster/archive/2009/06/16/links-the-good-the-bad-and-the-ugly-part-2-sem-101.aspx">Parte 2</a>).</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px;">http://www.bing.com/community/blogs/webmaster/</div>
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2009%2F07%2F07%2Fconsejos-seo-de-bing%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2009%2F07%2F07%2Fconsejos-seo-de-bing%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2009/07/07/consejos-seo-de-bing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google lanza un teclado virtual</title>
		<link>http://chusete.es/2009/06/25/google-lanza-un-teclado-virtual/</link>
		<comments>http://chusete.es/2009/06/25/google-lanza-un-teclado-virtual/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 15:56:09 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[internacionalización]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=368</guid>
		<description><![CDATA[Vía programmable web me entero de que Google acaba de lanzar un teclado virtual especialmente útil para páginas con soporte multi-idioma. ¿Qué vamos a poder hacer con esto? Podremos incluír un teclado en otro idioma directamente en nuestra web sólo con unas pocas líneas de javascript. Actualmente están disponibles: Árabe (العربية) Hindi (हिन्दी) Polaco (Polski) [...]]]></description>
			<content:encoded><![CDATA[<p>Vía <a href="http://blog.programmableweb.com/2009/06/25/google-releases-virtual-keyboard-ajax-api/">programmable web</a> me entero de que Google <a href="http://googleajaxsearchapi.blogspot.com/2009/06/introducing-virtual-keyboard-api.html">acaba de lanzar</a> un teclado virtual especialmente útil para páginas con soporte multi-idioma. ¿Qué vamos a poder hacer con esto? Podremos incluír un teclado en otro idioma directamente en nuestra web sólo con unas pocas líneas de javascript.</p>
<p style="text-align: center;"><img class="alignnone" src="https://docs.google.com/a/google.com/File?id=chj3qbn7_3ccmdkrkf_b" alt="" width="402" height="182" /></p>
<p>Actualmente están disponibles:</p>
<div>
<div>
<ul>
<li>Árabe (<span style="font-family: -webkit-monospace;"><span style="font-size: 100%;">العربية)</span></span></li>
<li> Hindi (<span style="font-family: Arial;"><span style="font-size: 100%;">हिन्दी)</span></span></li>
<li> Polaco (<span style="font-family: -webkit-monospace;"><span style="font-size: 100%;">Polski)</span></span></li>
<li> Ruso (<span style="font-family: -webkit-monospace;"><span style="font-size: 100%;">Русский)</span></span></li>
<li> Tailandés (<span style="font-family: -webkit-monospace;"><span style="font-size: 100%;">ไทย)</span></span></li>
</ul>
</div>
</div>
<p>Estoy seguro que tanto mi hermana Olalla como mi cuñado Samer se alegrarán de tener esta herramienta, y seguro que la utilizarán <img src='http://chusete.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-368"></span><br />
Aquí os dejo un ejemplo en funcionamiento en Árabe:<br />
    <script src="http://www.google.com/jsapi?key=ABQIAAAA3RTvvF0Wm23do8a8R6XDNxQhr18skcGEom7XbuwfkDEq5DTUFhQgN1Z6vVCHRnif6l7W8OrwrjW8Wg"></script><br />
    <script type="text/javascript">
    google.load("elements", "1", {packages: "keyboard"});
    function onLoad() {
        var content = document.getElementById('kb_content');
        content.innerHTML = '<tex'+'tarea id="t1" cols="50" rows="5"></textar'+'ea>';
      var kbd = new google.elements.keyboard.Keyboard(
          [google.elements.keyboard.LayoutCode.ARABIC],
          ['t1']);
    }
    google.setOnLoadCallback(onLoad);
    </script></p>
<div id="kb_content">Cargando&#8230; (Es necesario tener activado JavaScript)</div>
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2009%2F06%2F25%2Fgoogle-lanza-un-teclado-virtual%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2009%2F06%2F25%2Fgoogle-lanza-un-teclado-virtual%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2009/06/25/google-lanza-un-teclado-virtual/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Season finale de Lost</title>
		<link>http://chusete.es/2009/05/16/season-finale-de-lost/</link>
		<comments>http://chusete.es/2009/05/16/season-finale-de-lost/#comments</comments>
		<pubDate>Sat, 16 May 2009 12:49:11 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[lost]]></category>
		<category><![CDATA[perdidos]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=238</guid>
		<description><![CDATA[En este post voy a compartir mis teorías del capítulo que cierra la quinta temporada de Lost, de modo que si no lo has visto, por favor, deja de leer! Y aviso otra vez: HAY SPOILERS, de modo que cuidadito. Lo primero es lo primero; Este capítulo doble es impresionante. Ya desde el primer minuto [...]]]></description>
			<content:encoded><![CDATA[<p>En este post voy a compartir mis teorías del capítulo que cierra la quinta temporada de Lost, de modo que si no lo has visto, por favor, deja de leer! <img src='http://chusete.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Y aviso otra vez: <strong>HAY SPOILERS, de modo que cuidadito</strong>.</p>
<p>Lo primero es lo primero; Este capítulo doble es impresionante. Ya desde el primer minuto nos inunda con respuestas, y cuanto más avanza, más emocionado estás ante la vorágine de aclaraciones que da.</p>
<p>Sin duda lo que más impactado me ha dejado ha sido el hecho de que John Locke esté muerto. ¿Quién ha estado entonces toda la temporada hablando y actuando en su nombre? Pues ni más ni menos que el <a href="http://lostpedia.wikia.com/wiki/Jacob%27s_enemy">némesis de Jacob</a>, como ya le han apodado en lostpedia. Sensacional el momento en que te encajan las piezas y descubres quién es este Locke y cómo ha encontrado &#8220;el agujero&#8221; para matar a Jacob.</p>
<p>Uno de los personajes que más me han intrigado siempre ha sido <a href="http://lostpedia.wikia.com/wiki/Richard_Alpert">Richard Alpert</a>. En este capítulo nos revela que su nombre real es Ricardo. Y yo tengo una teoría&#8230; Al comienzo del episodio vemos un navío, que a mi parecer es de la época de los grandes descubrimientos geográficos, que Jacob ha &#8220;llevado&#8221; a la isla. ¿Quién iba a bordo de dicho navío? Pues yo lo veo claro: Richard. Lo cual despierta en mi cierta esperanza patria; Ricardo es un español a bordo de un navío conquistador de finales del siglo XV.</p>
<p>Por otra parte hemos conocido finalmente la respuesta a &#8220;<em>What lies in the shadow of the statue?</em>&#8220;, cuya respuesta es en latín, el idioma de &#8220;los otros&#8221;. Luego entonces, ¿quiénes son Ilana y Bram? ¿A que grupo pertenecen? ¿Cuáles son sus intereses? ¿Y porqué Jacob dice &#8220;ya vienen&#8221; en su lecho de muerte?</p>
<p>Otro de los momentos estelares es el final, cuando vemos cómo Juliet logra detonar la bomba, aunque tampoco me resulta tan enigmático el momento: Queda una temporada y todos esos personajes (Jack, Kate, Sawyer, Hurley, Jin, Milles, etc) no pueden morir.</p>
<p>Otra de mis teorías es que &#8220;whatever happened, happened&#8221;, de modo que &#8220;el incidente&#8221; es el mismo que ocurrió en la iteración anterior (Porque esto es un bucle, ¿no? <img src='http://chusete.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). No se puede cambiar el pasado, y la detonación de la bomba siempre ha formado parte de la historia de la estación del Cisne.</p>
<p>¿Qué os ha parecido a vosotros? ¿Qué teorías tenéis? No sé si aguantaré 8 meses de espera hasta que llegue la sexta temporada antes de que me haga el hara-kiri.
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2009%2F05%2F16%2Fseason-finale-de-lost%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2009%2F05%2F16%2Fseason-finale-de-lost%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2009/05/16/season-finale-de-lost/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Singleton serializado en sesión de PHP</title>
		<link>http://chusete.es/2009/05/07/singleton-serializado-en-sesion-de-php/</link>
		<comments>http://chusete.es/2009/05/07/singleton-serializado-en-sesion-de-php/#comments</comments>
		<pubDate>Thu, 07 May 2009 15:57:39 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[serialización]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=212</guid>
		<description><![CDATA[Llevo un par de días liado programando desde cero una pequeña tienda online (Sin pasarelas ni florituras). Entre los hitos que tenía para hoy, el más importante es crear el carrito de la compra. He buscado por el todo poderoso, pero todas las soluciones que veía me parecían ineficientes o feas. No quería almacenar el [...]]]></description>
			<content:encoded><![CDATA[<p>Llevo un par de días liado programando desde cero una pequeña tienda online (Sin pasarelas ni florituras). Entre los hitos que tenía para hoy, el más importante es crear el carrito de la compra. He buscado por <a href="http://www.google.com">el todo poderoso</a>, pero todas las soluciones que veía me parecían ineficientes o <em>feas</em>. No quería almacenar el carrito de forma &#8220;permanente&#8221; en la base de datos, de modo que lo lógico me parecía usar la memoria de las sesiones. Evidentemente el carrito debía ser un singleton, pero ¿cómo hacer que se serialice automáticamente en memoria?</p>
<p>Echemos un primer vistazo a un singleton en PHP:</p>
<pre name="code" class="php">class Example
{
    // Hold an instance of the class
    private static $instance;

    // A private constructor; prevents direct creation of object
    private function __construct()
    {
        echo 'I am constructed';
    }

    // The singleton method
    public static function singleton()
    {
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }

        return self::$instance;
    }

    // Example method
    public function bark()
    {
        echo 'Woof!';
    }

    // Prevent users to clone the instance
    public function __clone()
    {
        trigger_error('Clone is not allowed.', E_USER_ERROR);
    }

}</pre>
<p>Sencillo, verdad? <img src='http://chusete.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Pero este es el esqueleto de un singleton básico. Se declara como privado el constructor, de forma que si necesitas una instancia del objeto debas hacerlo necesariamente por el método estático Example::singleton(). Este método construye una nueva instancia, o bien devuelve la que ya había (Almacenada en el atributo estático $instance). Sin embargo la clase que yo necesito debe cargarse por defecto de memoria, y almacenar el objeto de nuevo cuando éste se destruya. La solución aquí:</p>
<pre name="code" class="php">class ShoppingCart
{

    private $_items;
    private static $_instance;
    private static $_namespace = "spp";

    private function __construct()
    {
        $this-&gt;_items = Array();
    }

    public function __destruct()
    {
        $shopping = new Zend_Session_Namespace(self::$_namespace);
        $shopping-&gt;object = serialize(self::$_instance);
    }

    public function __clone() {
        throw new Exception("Cannot clone singleton!");
    }

    public static function singleton()
    {
        $shopping = new Zend_Session_Namespace(self::$_namespace);

        if (!isset(self::$_instance)) {
            if(isset($shopping-&gt;object)) {
                self::$_instance = unserialize($shopping-&gt;object);
            } else {
                $c = __CLASS__;
                self::$_instance = new $c;
            }
        }

        return self::$_instance;
    }

    public function addItem($id, $quantity)
    {
        // Código que añade un nuevo item
    }

    public function removeItem($id)
    {
        // Código que elimina un item
    }

    // Resto de funciones del carrito de la compra
}</pre>
<p>Básicamente funciona igual, excepto que antes de crear un nuevo objeto, comprueba si hay alguno en el espacio de nombres de memoria asignado en el atributo estático $_namespace. Igualmente, cuando el objeto se destruye automáticamente por el recolector de basura, se serializa para guardarse la nueva versión en memoria.</p>
<p>Es importante darse cuenta de esto último: El método __destruct() no funcionará si ya hemos finalizado la sesión del usuario mediante <a href="http://es.php.net/manual/en/function.session-write-close.php">session_write_close()</a>. Por esa razón, en algunos casos tendremos que llamar explícitamente al destructor antes de que se cierre la sesión. Resulta que el método para redirigir a otra página Zend_Controller_Action::_redirect($url) cierra la sesión. Me he vuelto loco hasta que he averiguado la razón. Se corrige simplemente llamando a ShoppingCart::__destructor() antes de hacer la redirección.
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2009%2F05%2F07%2Fsingleton-serializado-en-sesion-de-php%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2009%2F05%2F07%2Fsingleton-serializado-en-sesion-de-php%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2009/05/07/singleton-serializado-en-sesion-de-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pero es que yo no te critico a ti</title>
		<link>http://chusete.es/2009/02/11/pero-es-que-yo-no-te-critico-a-ti/</link>
		<comments>http://chusete.es/2009/02/11/pero-es-que-yo-no-te-critico-a-ti/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 14:40:26 +0000</pubDate>
		<dc:creator>chusete</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chusete.es/?p=116</guid>
		<description><![CDATA[&#8220;Pero es que yo no te critico a ti&#8220;, estoy cansado de que en debates públicos la gente argumente eso. Como si la no-crítica fuera signo de tener más razón. Muchas veces en un debate se enfrentan dos posturas: El individuo &#8216;A&#8217; dice: Lo que yo hago aparentemente es correcto. En cambio tu postura es [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<em>Pero es que yo no te critico a ti</em>&#8220;, estoy cansado de que en debates públicos la gente argumente eso. Como si la no-crítica fuera signo de tener más razón. Muchas veces en un debate se enfrentan dos posturas:</p>
<ol>
<li>El individuo &#8216;A&#8217; dice: <em>Lo que yo hago aparentemente es correcto. En cambio tu postura es perjudicial.</em></li>
<li>El individuo &#8216;B&#8217; argumenta: <em>Tú haz lo que te parezca bien a ti y yo lo que me parezca bien a mi.</em></li>
</ol>
<p>Veamos algunos ejemplos&#8230;</p>
<table style="border:1px solid black" border="0">
<tbody>
<tr>
<th>Asunto</th>
<th>Defensa</th>
</tr>
<tr>
<td>Creacionismo</td>
<td>Yo respeto tu teoría, respeta tú la mia y deja que se enseñe en las aulas también el creacionismo.</td>
</tr>
<tr>
<td>Maltrato animal</td>
<td>Yo respeto tus gustos, respeta tú los mios y deja que continúe la &#8220;fiesta nacional&#8221;.</td>
</tr>
<tr>
<td>Consumismo</td>
<td>Yo respeto tu forma de vida, respeta tú la mia y deja que consuma lo que me de la gana.</td>
</tr>
<tr>
<td>Sexismo en las aulas</td>
<td>Yo respeto tus métodos de enseñanza, respeta tú los mios y deja que mi escuela siga separando en aulas de chicos y de chicas.</td>
</tr>
</tbody>
</table>
<p>Analizando el problema, vemos que en todos estos casos hay un individuo que se siente atacado e intenta justificar sus actos alegando libertad de elección. Pero es que, si tu libertad de decisión perjudica a la sociedad en conjunto, o va en favor de los gustos/ideas/intereses de sólo unos pocos, entonces muy posiblemente no sean aceptables (Aunque sean legales).</p>
<p>Por ejemplo, los defensores del creacionismo dicen que no se puede demostrar que su teoría es falsa. Nos ha jodido, tampoco se puede demostrar que Terelu exista (Quizá es un implante en nuestra psique), ni que sólo somos personajes de un enorme juego de rol. La demostración corre a cargo del que defiende la teoría, del mismo modo que los defensores de la evolución lo justificamos con el método científico. Llegados a este punto en el que queda claro quién actúa en favor de la sociedad, comienza el lamento y lloriqueo de los defensores de lo indefendible.</p>
<p>Ellos lo saben. Los argumentos que van contra sus ideas les dejan desnudos, y en un último intento por defender lo indefendible argumentan ese triste &#8220;<em>Pero es que yo a ti no te critico</em>&#8220;. Pues claro que no me criticas, como que no puedes.</p>
<p>Y es que, aunque lo irracional forme parte del ser humano, no debe formar parte de la sociedad. Por eso no tenemos porqué aceptar vuestras ideas.</p>
<p><strong>Disclaimer</strong>: Como dijo <a href="http://lacroketa.net/">Álex</a> <a href="http://chusete.es/2009/01/23/sobre-el-ministerio-de-igualdad/#comment-37">hace poco</a>, <em><span class="medium">Esto ha sido un vómito de ideas sin masticar demasiado y probablemente alguien me rebata algo y piense “joder, pues tienes razón</span>.</em>
<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fchusete.es%2F2009%2F02%2F11%2Fpero-es-que-yo-no-te-critico-a-ti%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fchusete.es%2F2009%2F02%2F11%2Fpero-es-que-yo-no-te-critico-a-ti%2F&amp;source=chuso&amp;style=normal&amp;service=bit.ly&amp;service_api=R_86054639b9f90148987197dfdc061697&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://chusete.es/2009/02/11/pero-es-que-yo-no-te-critico-a-ti/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

