<?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:series="http://unfoldingneurons.com/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>yukei.net</title>
	
	<link>http://www.yukei.net</link>
	<description>técnica y análisis para un mundo digital</description>
	<lastBuildDate>Fri, 20 Apr 2012 11:30:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<feedburner:info uri="yukei" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.yukei.net/feed/" /><feedburner:emailServiceId>yukei</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Fwww.yukei.net%2Ffeed%2F" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://www.yukei.net/feed/" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fwww.yukei.net%2Ffeed%2F" 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%2Fwww.yukei.net%2Ffeed%2F" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Fwww.yukei.net%2Ffeed%2F" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Fwww.yukei.net%2Ffeed%2F" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:browserFriendly>Este es un feed de contenidos XML, y está diseñado para ser visto con un lector de feeds o para ser sindicado desde otro sitio, bajo las condiciones de copyright y uso justo.</feedburner:browserFriendly><item>
		<title>Por qué y cómo implementar un nombre de dominio canónico</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/l7Q8VDXKaJg/</link>
		<comments>http://www.yukei.net/2012/04/por-que-como-nombre-dominio-canonico/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 11:30:49 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[servidores]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1731</guid>
		<description>Es bastante frecuente que un cliente tenga el registro de más de un nombre de dominio para su sitio web, así como también que desee que su sitio esté accesible a través de cualquiera de sus dominios&amp;#8230; sin embargo, disponibilizar el mismo contenido a través de distintas URL no es una buena idea, sino que [...]</description>
			<content:encoded><![CDATA[<p>Es bastante frecuente que un cliente tenga el registro de más de un nombre de dominio para su sitio web, así como también que desee que su sitio esté accesible a través de cualquiera de sus dominios&#8230; sin embargo, disponibilizar el mismo contenido a través de distintas URL <em>no es una buena idea</em>, sino que siempre debemos preferir <strong>configurar un dominio como el principal.</strong></p>
<p>A continuación, por qué es preferible utilizar solamente un dominio para tu sitio, y cómo configurarlo en distintos servidores web.</p>
<p><span id="more-1731"></span></p>
<h3>¿Por qué se debe utilizar <em>un</em> dominio como el principal?</h3>
<h4>Porque a Google no le gusta ver el mismo contenido en dos direcciones distintas</h4>
<p>La razón que probablemente resulta más convincente a estas alturas es simplemente que utilizar más de una URL para mostrar el mismo contenido significa una penalización en los resultados de buscadores&#8230; sí, por supuesto eso significa que tu sitio va a salir más abajo si puedes ver lo mismo en <code>http://www.dominio.com/noticia/</code> que en <code>http://www.otro-dominio.com/noticia</code>. En otras palabras: mantener tu sitio con más de un dominio es pésimo para tu SEO.</p>
<p>Hasta han inventado un nombre para convencerte de que uses sólo <strong>una URL</strong> para tus contenidos: la dirección &#8220;principal&#8221; es llamada <strong>URL canónica</strong>&#8230; ésa es la que importa y el resto ¡meh!</p>
<p>Por cierto, esto no aplica solamente cuando los dominios son radicalmente distintos, sino también cuando una opción es <code>www.dominio.com</code> y la otra <code>dominio.com</code>&#8230; <strong>con www, o sin www, debes elegir una</strong>.</p>
<h4>Porque las peticiones AJAX entre distintos dominios no funcionan</h4>
<p>&#8230; o al menos habría que decir &#8220;no funcionan del mismo modo que una petición AJAX hecha en el mismo dominio&#8221;. </p>
<p>Esto sucede ya que por seguridad los navegadores restringen las peticiones AJAX a un mismo dominio, y aunque existen formas de saltarse esta medida (en particular, <a href="http://www.funcion13.com/2012/04/12/como-realizar-peticiones-ajax-cross-domain-jsonp-jquery/" title="Cómo realizar peticiones AJAX cross-domain usando JSONP y jQuery">implementar llamadas JSONP</a>), considerarla dentro del desarrollo del proyecto va a agregar una complejidad que de otro modo es innecesaria&#8230; por supuesto que se puede considerar, pero agrega tiempo y ya se sabe, tiempo es dinero</p>
<h4>Porque algunas de las fuentes utilizadas con font-face se restringen a un dominio</h4>
<p>Esto también tiene sus grises: no son todas las fuentes, ni es en todos los navegadores.</p>
<p>Si utilizas solamente las <a href="http://www.google.com/webfonts" title="Google Web Fonts">fuentes disponibilizadas por Google</a>, no tendrás problema pues sus fuentes no tienen restricciones por dominios.</p>
<p>Sin embargo, si tu diseño considera la utilización de otras tipografías como <code>font-face</code> y debes servirlas desde tu propio servicio, lo más probable es que el archivo de la fuente incorpore una protección (para evitar el hot-linking de fuentes sin autorización), que causará que en algunos navegadores la tipografía se muestre correctamente y en otros no:</p>
<p><a href="http://static.yukei.net/wp-content/uploads/2012/04/yukei-restriccion-font-face.opt_.png"><img src="http://static.yukei.net/wp-content/uploads/2012/04/yukei-restriccion-font-face.opt_-500x172.png" alt="" title="Restricción de font-face" width="500" height="172" class="alignnone size-medium wp-image-1740" /></a></p>
<p>&#8230; y cuando digo &#8220;algunos navegadores&#8221;, me refiero a&#8230; ¡no, no es Explorer! En realidad, el único que incorpora esta restricción es Firefox&#8230; pero claro, a estas alturas no lo usan sólo un par de geeks, por lo que no es muy sabio no considerarlo.</p>
<h3>¿Cómo implementar redirecciones para usar dominios canónicos?</h3>
<p>Afortunadamente, implementar la configuración necesaria para utiliza un dominio canónico es relativamente sencillo de ejecutar en los servidores web más usados. Debemos considerar lo siguiente:</p>
<ul>
<li>La redirección debe ser <strong>transparente al usuario</strong>: si intenta acceder a <code>dominio.com/noticias/lorem-ipsum-dolor-sit-amet/</code> y has preferido la versión &#8220;con www&#8221; de tu dominio, le debe llevar automáticamente a <code>www.dominio.com/noticias/lorem-ipsum-dolor-sit-amet/</code> (¡no redirigir todas las direcciones bajo los dominios alternativos a la raíz del sitio!)</li>
<li>La redirección debe ser <strong>clara para los buscadores</strong>, lo que conseguimos enviando una respuesta HTTP con código <code>301 Permanent Redirect</code>, es decir, indicando la URL canónica como definitiva</li>
</ul>
<p>Veamos algunos ejemplos, considerando que nuestra URL canónica será <strong>www.domain.com</strong>:</p>
<p><script src="https://gist.github.com/1780150.js"> </script></p>
<p>&#8230; por supuesto, en cada caso debemos cerciorarnos que los módulos necesarios estén activados.</p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/apache/" title="apache" rel="tag">apache</a>, <a href="http://www.yukei.net/tag/lighttpd/" title="lighttpd" rel="tag">lighttpd</a>, <a href="http://www.yukei.net/tag/nginx/" title="nginx" rel="tag">nginx</a>, <a href="http://www.yukei.net/tag/seo/" title="seo" rel="tag">seo</a>, <a href="http://www.yukei.net/tag/servidores/" title="servidores" rel="tag">servidores</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2009/04/vps-local-con-ubuntu-y-virtualbox/" title="VPS local con Ubuntu y VirtualBox (12 abril, 2009)">VPS local con Ubuntu y VirtualBox</a> (6)</li>
	<li><a href="http://www.yukei.net/2008/11/tres-trucos-para-ojs/" title="Tres trucos para OJS (9 noviembre, 2008)">Tres trucos para OJS</a> (5)</li>
	<li><a href="http://www.yukei.net/2010/02/soporte-para-imagemagick-en-php-con-lampp/" title="Soporte para ImageMagick en PHP con LAMPP (9 febrero, 2010)">Soporte para ImageMagick en PHP con LAMPP</a> (1)</li>
	<li><a href="http://www.yukei.net/2007/05/proximamente-en-wordpress-numeracion-inversa-de-paginas/" title="Próximamente en WordPress: numeración inversa de páginas (30 mayo, 2007)">Próximamente en WordPress: numeración inversa de páginas</a> (1)</li>
	<li><a href="http://www.yukei.net/2008/09/intentando-montar-un-vps/" title="Intentando montar un VPS (16 septiembre, 2008)">Intentando montar un VPS</a> (4)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=l7Q8VDXKaJg:bQWen6yrukY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=l7Q8VDXKaJg:bQWen6yrukY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=l7Q8VDXKaJg:bQWen6yrukY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=l7Q8VDXKaJg:bQWen6yrukY:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=l7Q8VDXKaJg:bQWen6yrukY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=l7Q8VDXKaJg:bQWen6yrukY:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/l7Q8VDXKaJg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2012/04/por-que-como-nombre-dominio-canonico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2012/04/por-que-como-nombre-dominio-canonico/</feedburner:origLink></item>
		<item>
		<title>E-book gratuito sobre WordPress y AJAX</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/jewDdZUQfz8/</link>
		<comments>http://www.yukei.net/2012/03/bajar-ebook-gratis-wordpress-ajax/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 23:49:23 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[descargas]]></category>
		<category><![CDATA[e-book]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1720</guid>
		<description>Hace algunos días me tropecé con un e-book que ofrece una introducción bastante completa al trabajo con AJAX sobre WordPress, adecuadamente titulado WordPress &amp;#38; AJAX. An in-depth guide on using Ajax with WordPress, que se puede descargar gratuitamente en su totalidad, junto con sus ejemplos de código. El libro se enfoca en lograr una buena [...]</description>
			<content:encoded><![CDATA[<p>Hace algunos días me tropecé con un e-book que ofrece una introducción bastante completa al trabajo con AJAX sobre WordPress, adecuadamente titulado <a hreflang="en" href="http://wpajax.com/" title="WordPress &amp; AJAX. An in-depth guide on using Ajax with WordPress">WordPress &amp; AJAX. An in-depth guide on using Ajax with WordPress</a>, que se puede <a href="http://wpajax.com/download" title="Descarga gratuita del libro">descargar gratuitamente en su totalidad</a>, junto con sus ejemplos de código.</p>
<p>El libro se enfoca en lograr una buena base y fomentar buenas prácticas en el desarrollo plugins o funcionalidades con AJAX, y a partir de eso plantea el análisis de tres plugins. Si bien sus explicaciones son bastante detalladas, es necesario tener un conocimiento básico de javascript y WordPress, y algo más acabado de PHP.</p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/ajax/" title="ajax" rel="tag">ajax</a>, <a href="http://www.yukei.net/tag/descargas/" title="descargas" rel="tag">descargas</a>, <a href="http://www.yukei.net/tag/e-book/" title="e-book" rel="tag">e-book</a>, <a href="http://www.yukei.net/tag/javascript/" title="javascript" rel="tag">javascript</a>, <a href="http://www.yukei.net/tag/programacion/" title="programación" rel="tag">programación</a>, <a href="http://www.yukei.net/tag/wordpress/" title="WordPress" rel="tag">WordPress</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2011/04/wordpress-tips-utiliza-el-parametro-action-para-determinar-la-accion-que-estas-realizando/" title="WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando (25 abril, 2011)">WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando</a> (1)</li>
	<li><a href="http://www.yukei.net/2011/06/parametros-variables-en-funciones-wordpress-con-wp_parse_args/" title="Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips) (1 junio, 2011)">Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips)</a> (0)</li>
	<li><a href="http://www.yukei.net/2010/05/tres-usos-para-jquery-extend/" title="Tres usos para jQuery.extend() (18 mayo, 2010)">Tres usos para jQuery.extend()</a> (1)</li>
	<li><a href="http://www.yukei.net/2010/06/trabajar-con-fechas-en-javascript/" title="Trabajar con fechas en Javascript (12 junio, 2010)">Trabajar con fechas en Javascript</a> (2)</li>
	<li><a href="http://www.yukei.net/2011/08/trabajando-con-datos-serializados-en-wordpress/" title="Trabajando con datos serializados en WordPress (23 agosto, 2011)">Trabajando con datos serializados en WordPress</a> (3)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=jewDdZUQfz8:354NQczKGBU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=jewDdZUQfz8:354NQczKGBU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=jewDdZUQfz8:354NQczKGBU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=jewDdZUQfz8:354NQczKGBU:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=jewDdZUQfz8:354NQczKGBU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=jewDdZUQfz8:354NQczKGBU:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/jewDdZUQfz8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2012/03/bajar-ebook-gratis-wordpress-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2012/03/bajar-ebook-gratis-wordpress-ajax/</feedburner:origLink></item>
		<item>
		<title>De políticas de privacidad y burbujas de búsqueda</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/SI1hCezIbk4/</link>
		<comments>http://www.yukei.net/2012/03/de-politicas-de-privacidad-y-burbujas-de-busqueda/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 11:31:31 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Estrategia]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[cultura digital]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[privacidad]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1706</guid>
		<description>A una semana desde que Google comenzara a aplicar su nueva política de privacidad, y aunque a primera vista pareciera que estos cambios no alteran fundamentalmente nuestro trato con el buscador, probablemente recién estamos en la víspera de las transformaciones más profundas. Al respecto, la semana pasada comentaban en TheNextWeb sobre las implicancias que estos [...]</description>
			<content:encoded><![CDATA[<p><img src="http://static.yukei.net/wp-content/uploads/2012/03/bubble-filter.png" alt="" title="Filter Bubble" width="529" height="282" class="aligncenter size-full wp-image-1716" /></p>
<p>A una semana desde que Google comenzara a aplicar su <a href="http://www.google.com/intl/es-419/policies/" title="Google Policies &amp; Principles">nueva política de privacidad</a>, y aunque a primera vista pareciera que <a href="http://www.google.com/intl/es-419/policies/faq/" title="Preguntas Frecuentes sobre la política de privacidad en Google">estos cambios</a> no alteran fundamentalmente nuestro trato con el buscador, probablemente recién estamos en la víspera de las transformaciones más profundas.</p>
<p>Al respecto, la semana pasada comentaban en TheNextWeb sobre las implicancias que estos cambios tendrían en nuestros procesos de búsqueda: <a href="http://thenextweb.com/google/2012/03/01/an-information-paradox-how-googles-new-privacy-policy-may-harm-our-discovery-process/" title="An information paradox: How Google’s new privacy policy may harm our discovery process">An information paradox: How Google’s new privacy policy may harm our discovery process</a>.</p>
<blockquote><p>There’s really nothing we can do. Google is going to change its privacy policy and we’re going to keep using its products. Simply because it’s incredible and addicting to have so much information pouring out of a screen. Google has us by the proverbial (digital) balls. But in a very short while it’s going to be essential we become more responsible searchers, more savvy web surfers. Interneters that actively search for things they disagree with and Googlers that get to the fifth page of their search results. Because soon the world’s information will be filtered through the habits and dependencies of the most biased, unforgiving and scary editor of all: ourselves.</p></blockquote>
<p>Y en el mismo tema, vale la pena recordar la presentación que <cite>Eli Pariser</cite> dio en TED en marzo pasado: <a href="http://www.ted.com/talks/lang/es/eli_pariser_beware_online_filter_bubbles.html" title="Eli Pariser: cuidado con la "burbuja de filtros" en la red | Video en TED.com">cuidado con la &#8220;burbuja de filtros&#8221; en la red</a></p>
<p><object width="526" height="374"><param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"></param><param name="bgColor" value="#ffffff"></param><param name="flashvars" value="vu=http://video.ted.com/talk/stream/2011/Blank/EliPariser_2011-320k.mp4&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/EliPariser-2011.embed_thumbnail.jpg&#038;vw=512&#038;vh=288&#038;ap=0&#038;ti=1091&#038;lang=es&#038;introDuration=15330&#038;adDuration=4000&#038;postAdDuration=830&#038;adKeys=talk=eli_pariser_beware_online_filter_bubbles;year=2011;theme=what_s_next_in_tech;theme=bold_predictions_stern_warnings;event=TED2011;tag=culture;tag=global+issues;tag=journalism;tag=politics;tag=technology;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /><embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2011/Blank/EliPariser_2011-320k.mp4&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/EliPariser-2011.embed_thumbnail.jpg&#038;vw=512&#038;vh=288&#038;ap=0&#038;ti=1091&#038;lang=es&#038;introDuration=15330&#038;adDuration=4000&#038;postAdDuration=830&#038;adKeys=talk=eli_pariser_beware_online_filter_bubbles;year=2011;theme=what_s_next_in_tech;theme=bold_predictions_stern_warnings;event=TED2011;tag=culture;tag=global+issues;tag=journalism;tag=politics;tag=technology;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"></embed></object></p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/cultura-digital/" title="cultura digital" rel="tag">cultura digital</a>, <a href="http://www.yukei.net/tag/google/" title="Google" rel="tag">Google</a>, <a href="http://www.yukei.net/tag/privacidad/" title="privacidad" rel="tag">privacidad</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2007/09/wordpress-23-y-las-preocupaciones-por-la-privacidad/" title="WordPress 2.3 y las preocupaciones por la privacidad (25 septiembre, 2007)">WordPress 2.3 y las preocupaciones por la privacidad</a> (3)</li>
	<li><a href="http://www.yukei.net/2008/12/tareas/" title="Tareas (10 diciembre, 2008)">Tareas</a> (1)</li>
	<li><a href="http://www.yukei.net/2004/02/sin-querer-queriendo/" title="Sin querer queriendo (23 febrero, 2004)">Sin querer queriendo</a> (0)</li>
	<li><a href="http://www.yukei.net/2012/01/mejorando-la-privacidad-en-bittorrent/" title="Mejorando la privacidad en BitTorrent (31 enero, 2012)">Mejorando la privacidad en BitTorrent</a> (1)</li>
	<li><a href="http://www.yukei.net/2010/05/jeff-jarvis-en-tedx/" title="Jeff Jarvis en TEDx (3 mayo, 2010)">Jeff Jarvis en TEDx</a> (1)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=SI1hCezIbk4:3oz2IaDRdNs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=SI1hCezIbk4:3oz2IaDRdNs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=SI1hCezIbk4:3oz2IaDRdNs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=SI1hCezIbk4:3oz2IaDRdNs:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=SI1hCezIbk4:3oz2IaDRdNs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=SI1hCezIbk4:3oz2IaDRdNs:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/SI1hCezIbk4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2012/03/de-politicas-de-privacidad-y-burbujas-de-busqueda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2012/03/de-politicas-de-privacidad-y-burbujas-de-busqueda/</feedburner:origLink></item>
		<item>
		<title>Detectar dispositivos móviles fácilmente con PHP</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/PkMN0j0f5iI/</link>
		<comments>http://www.yukei.net/2012/02/detectar-dispositivos-moviles-facilmente-con-php/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 11:15:33 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[móviles]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1692</guid>
		<description>Si bien existen mil formas de detectar dispositivos móviles, a veces necesitamos algo más sencillo y rápido de implementar, que nos permita diferenciar fácilmente entre las plataformas móviles más populares.. php-mobile-detect es una clase en PHP para detectar las plataformas móviles más importantes: Android, iOS, BlackBerry, Opera Mini, Palm, Windows Mobile y móviles genéricos. Además, [...]</description>
			<content:encoded><![CDATA[<p>Si bien existen mil formas de detectar dispositivos móviles, a veces necesitamos algo más sencillo y rápido de implementar, que nos permita <strong>diferenciar fácilmente entre las plataformas móviles más populares.</strong>.</p>
<p><a href="http://code.google.com/p/php-mobile-detect/" title="php-mobile-detect - PHP class for mobile device detection">php-mobile-detect</a> es una clase en PHP para detectar las plataformas móviles más importantes: Android, iOS, BlackBerry, Opera Mini, Palm, Windows Mobile y móviles genéricos. Además, permite diferenciar entre móviles y tablets.</p>
<p>Su forma de funcionamiento es muy sencilla:</p>
<p><span id="more-1692"></span></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

include('Mobile_Detect.php');
$detect = new Mobile_Detect();

if ( $detect-&gt;isAndroidtablet() || $detect-&gt;isIpad() || $detect-&gt;isBlackberrytablet() ) {
	// mostar versión para tablets
} elseif( $detect-&gt;isAndroid() ) {
	// versión Android
} elseif ( $detect-&gt;isIphone() ) {
	// versión iPhone
} elseif ( $detect-&gt;isMobile() ) {
	// versión para otros móviles
} else{
	// versión &quot;normal&quot;
}

?&gt;
</pre>
<p>La lista completa de métodos es: <code>isAndroid(), isAndroidtablet(), isIphone(), isIpad(), isBlackberry(), isBlackberrytablet(), isPalm(), isWindowsphone(), isWindows(), isGeneric(), isMobile()</code></p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/moviles/" title="móviles" rel="tag">móviles</a>, <a href="http://www.yukei.net/tag/php/" title="php" rel="tag">php</a>, <a href="http://www.yukei.net/tag/programacion/" title="programación" rel="tag">programación</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2011/04/wordpress-tips-utiliza-el-parametro-action-para-determinar-la-accion-que-estas-realizando/" title="WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando (25 abril, 2011)">WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando</a> (1)</li>
	<li><a href="http://www.yukei.net/2011/06/parametros-variables-en-funciones-wordpress-con-wp_parse_args/" title="Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips) (1 junio, 2011)">Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips)</a> (0)</li>
	<li><a href="http://www.yukei.net/2011/08/trabajando-con-datos-serializados-en-wordpress/" title="Trabajando con datos serializados en WordPress (23 agosto, 2011)">Trabajando con datos serializados en WordPress</a> (3)</li>
	<li><a href="http://www.yukei.net/2007/10/php-te-facilita-la-vida/" title="PHP te facilita la vida (25 octubre, 2007)">PHP te facilita la vida</a> (6)</li>
	<li><a href="http://www.yukei.net/2007/09/manuales-de-php/" title="Manuales de PHP (19 septiembre, 2007)">Manuales de PHP</a> (7)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=PkMN0j0f5iI:xH7gYWz15Rs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=PkMN0j0f5iI:xH7gYWz15Rs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=PkMN0j0f5iI:xH7gYWz15Rs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=PkMN0j0f5iI:xH7gYWz15Rs:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=PkMN0j0f5iI:xH7gYWz15Rs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=PkMN0j0f5iI:xH7gYWz15Rs:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/PkMN0j0f5iI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2012/02/detectar-dispositivos-moviles-facilmente-con-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2012/02/detectar-dispositivos-moviles-facilmente-con-php/</feedburner:origLink></item>
		<item>
		<title>Recuperar revisiones perdidas en Bazaar</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/tVzsPBGUuV4/</link>
		<comments>http://www.yukei.net/2012/02/recuperar-revisiones-perdidas-en-bazaar/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 02:00:41 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[bzr]]></category>
		<category><![CDATA[control de versiones]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1681</guid>
		<description>Como saben los regulares de este blog, hace bastante tiempo me he rendido ante Bazaar, el sistema de control de versiones distribuido creado por Canonical y parte del proyecto GNU; más poderoso que SVN, más simple que git&amp;#8230; en fin. Una secuencia de acciones me llevó a una situación terrible: por un momento pensé que [...]</description>
			<content:encoded><![CDATA[<p>Como saben los regulares de este blog, hace bastante tiempo me he rendido ante <a href="http://www.yukei.net/tag/bazaar/" title="Posts sobre Bazaar en yukei.net">Bazaar</a>, el sistema de control de versiones distribuido creado por Canonical y parte del proyecto GNU; más poderoso que SVN, más simple que git&#8230; en fin.</p>
<p>Una secuencia de acciones me llevó a una situación terrible: por un momento pensé que había perdido un conjunto de cambios del historial. La condiciones fueron más o menos las siguientes:</p>
<ol>
<li>Estaba trabajando en una copia local sobre la cual no sabía que estaba <em>bindeada</em> a un repositorio remoto (o sea, un checkout)</li>
<li>Hice commit de un conjunto de cambios (que se grabaron con número de revisión 5)</li>
<li>Ejecuté un <code>bzr bind</code>, con lo se aplicaron una serie de cambios que estaban en el repositorio remoto</li>
<li>La versión del repositorio local bajó a 4&#8230; ¡los cambios realizados en la 5ª versión no estaban en ninguna parte!</li>
</ol>
<p>En resumen, lo que había ocurrido era que había cambiado de línea temporal (al mejor estilo <em>Fringe</em>). Transformar nuevamente la copia en una rama no solucionaba nada, sin embargo suponía que esa revisión debía existir en el repositorio&#8230;. ¿cómo restituirla?</p>
<p><span id="more-1681"></span></p>
<p>La respuesta es conceptualmente sencilla: todo lo que necesitamos hacer es traer los cambios de esa revisión al estado actual de nuestro árbol de trabajo; y a pesar que los números de revisión de bzr son dígitos, en realidad cada commit tiene un identificador único que podemos utilizar para recuperar esos cambios.</p>
<p>En este caso, para recuperar esos cambios debemos ejecutar en primer lugar <code>bzr heads --all</code>, con lo que podremos ver las últimas versiones que conviven en el historial de cambios, por ejemplo:</p>
<pre class="brush: bash; title: ; notranslate">TIP of branch: /var/www/repo.bzr/master/
HEAD: revision-id: user@domain.com-20111220131621-ao5rkri1o80evnhh
  committer: Felipe Lavín &lt;user@domain.com&gt;
  branch nick: master
  timestamp: Tue 2011-12-20 10:16:21 -0300
  message:
    mensaje del commit
</pre>
<p>Luego, <strong>para recuperar los cambios extraviados</strong>:</p>
<pre class="brush: bash; title: ; notranslate">bzr pull . --overwrite -r revid:user@domain.com-20111220131621-ao5rkri1o80evnhh</pre>
<p>&#8230; y podemos seguir trabajando con normalidad.</p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/bazaar/" title="bazaar" rel="tag">bazaar</a>, <a href="http://www.yukei.net/tag/bzr/" title="bzr" rel="tag">bzr</a>, <a href="http://www.yukei.net/tag/control-de-versiones/" title="control de versiones" rel="tag">control de versiones</a>, <a href="http://www.yukei.net/tag/howto/" title="howto" rel="tag">howto</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2011/11/migrar-un-proyecto-desde-svn-a-bazaar/" title="Migrar un proyecto desde SVN a Bazaar (23 noviembre, 2011)">Migrar un proyecto desde SVN a Bazaar</a> (2)</li>
	<li><a href="http://www.yukei.net/2011/03/control-de-versiones-centralizado-con-bazaar/" title="Control de versiones centralizado con Bazaar (24 marzo, 2011)">Control de versiones centralizado con Bazaar</a> (0)</li>
	<li><a href="http://www.yukei.net/2007/09/tres-consejos-para-ser-un-buen-mejor-blogger/" title="Tres consejos para ser un buen (mejor) blogger (27 septiembre, 2007)">Tres consejos para ser un buen (mejor) blogger</a> (11)</li>
	<li><a href="http://www.yukei.net/2009/02/personalizar-las-opciones-del-touchpad-synaptics-en-linux/" title="Personalizar las opciones del TouchPad Synaptics en Linux (28 febrero, 2009)">Personalizar las opciones del TouchPad Synaptics en Linux</a> (7)</li>
	<li><a href="http://www.yukei.net/2005/12/ordenar-elementos-alfabeticamente-en-word/" title="Ordenar elementos alfabéticamente en Word (5 diciembre, 2005)">Ordenar elementos alfabéticamente en Word</a> (100)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=tVzsPBGUuV4:J7oErKSc_yY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=tVzsPBGUuV4:J7oErKSc_yY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tVzsPBGUuV4:J7oErKSc_yY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tVzsPBGUuV4:J7oErKSc_yY:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tVzsPBGUuV4:J7oErKSc_yY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=tVzsPBGUuV4:J7oErKSc_yY:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/tVzsPBGUuV4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2012/02/recuperar-revisiones-perdidas-en-bazaar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2012/02/recuperar-revisiones-perdidas-en-bazaar/</feedburner:origLink></item>
		<item>
		<title>Mejorando la privacidad en BitTorrent</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/tzou5eEIxeA/</link>
		<comments>http://www.yukei.net/2012/01/mejorando-la-privacidad-en-bittorrent/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 12:30:28 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[BitTorrent]]></category>
		<category><![CDATA[P2P]]></category>
		<category><![CDATA[bittorrent]]></category>
		<category><![CDATA[privacidad]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1674</guid>
		<description>Algunos tips para mejorar la privacidad del intercambio de archivos a través de BitTorrent: cómo cifrar el flujo de red y configurar listas de bloqueos de IPs</description>
			<content:encoded><![CDATA[<p>Tras el cierre de MegaUpload y otros servicios para compartir archivos, muchos han optado por volver a visitar a un viejo conocido: <strong>BitTorrent</strong> (el protocolo, no el cliente).</p>
<p>Afortunadamente, los clientes más nuevos y populares han incluido un par de opciones que nos permiten aumentar (aunque sea sólo un poco) el nivel de privacidad de nuestras conexiones.</p>
<p><span id="more-1674"></span></p>
<p>Las opciones que nos interesan son fundamentalmente dos:</p>
<ul>
<li><strong>Activar el cifrado de las conexiones </strong>para evitar la escucha del tráfico por parte de terceros.</li>
<li><strong>Configurar una lista de bloqueo de IPs</strong> para bloquear distribuidores de malware, spyware y otras molestias</li>
</ul>
<p>Adicionalmente, si te sientes especialmente paranoico, puedes desactivar el intercambio de pares a través de <em>DHT</em>, puesto que al activar esta opción vas a compartir tu dirección IP y otros datos a través de una red distribuída — por otra parte, al desactivarla probablemente vas a tener menos pares y vas a depender en mayor medida de los pares que estén registrados en el tracker central.</p>
<h3>En <a href="http://static.yukei.net/wp-content/uploads/2012/01/transmission-privacy.png"><img class="alignright size-thumbnail wp-image-1675" title="Opciones de privacidad en Transmission" src="http://static.yukei.net/wp-content/uploads/2012/01/transmission-privacy-120x120.png" alt="" width="120" height="120" /></a>Transmission</h3>
<p><a title="Transmission - A fast, easy and free bittorrent client" href="http://www.transmissionbt.com/">Transmission</a> es cliente pequeño y sencillo, pero con las opciones justas. Está para varias distribuciones de Linux (en Ubuntu viene preinstalado) y Mac.</p>
<p>Para activar estas opciones, debemos ir a <strong>Editar → Preferencias</strong> y luego a la pestaña <strong>Privacidad</strong>.</p>
<ol>
<li>Activa la opción para <strong>habilitar la lista de bloqueo</strong>. Puedes obtener buenas listas de bloqueo desde <a title="Listas de bloqueo de malware y otras molestias p2p" href="http://www.iblocklist.com/lists.php">I-BlockList</a>; donde encontrarás listas clásicas como las <a href="http://www.iblocklist.com/list.php?list=bt_level1">level-1</a>, <a href="http://www.iblocklist.com/list.php?list=bt_level2">level-2</a> y <a href="http://www.iblocklist.com/list.php?list=bt_level3">level-3</a>, en orden ascendiente según tu nivel de paranoia. Tan solo debes copiar la URL y pegarla en el campo indicado. El programa refrescará automáticamente la lista de bloqueos de modo que permanezca actualizada.</li>
<li>En la sección <strong>Privacidad</strong>, selecciona el modo de cifrado: <em>permitir, preferir o requerir</em>. A estas alturas, me parece que la gran mayoría de clientes de BitTorrent traen alguna opción de cifrado activada por defecto, por lo que la opción de <strong>requerir cifrado</strong> no debería darte mayores problemas.</li>
</ol>
<p>Si deseas desactivar el intercambio de pares por <em>DHT</em>, puedes hacerlo en la misma pestaña.</p>
<h3>En Deluge</h3>
<p><a title="Deluge BitTorrent Client" href="http://deluge-torrent.org/">Deluge</a> es un cliente liviano y multiplataforma, disponible para Linux, Mac y Windows.</p>
<p>Para activar las opciones de privacidad, debes ir a <strong>Editar → Preferencias</strong> y luego</p>
<ol>
<li>En la categoría <strong>Red</strong>, activar las opciones de cifrado: <strong>forzado </strong>tanto para entrante como saliente, <strong>flujo completo</strong> en el nivel y activar la casilla de <strong>cifrar flujo completo</strong></li>
<li>Si aun no lo has activado, anda a la categoría <strong>Complementos </strong>y activa <strong>Blocklist</strong></li>
<li>En la categoría <strong>Lista de bloqueados, </strong>ingresa una de las alternativas disponibles en <a title="Listas de bloqueo de malware y otras molestias p2p" href="http://www.iblocklist.com/lists.php">I-BlockList</a>. Puedes indicar cada cuántos días quieres refrescar la lista de bloqueos (yo lo tengo cada 5) y ya estás listo.</li>
</ol>
<p>Finalmente, si quieres desactivar <em>DHT</em>, debes hacerlo también desde la categoría de <strong>Red, </strong>en la sección de <strong>Extras de red.</strong></p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/bittorrent-2/" title="bittorrent" rel="tag">bittorrent</a>, <a href="http://www.yukei.net/tag/p2p/" title="P2P" rel="tag">P2P</a>, <a href="http://www.yukei.net/tag/privacidad/" title="privacidad" rel="tag">privacidad</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2007/09/wordpress-23-y-las-preocupaciones-por-la-privacidad/" title="WordPress 2.3 y las preocupaciones por la privacidad (25 septiembre, 2007)">WordPress 2.3 y las preocupaciones por la privacidad</a> (3)</li>
	<li><a href="http://www.yukei.net/2005/11/torrents-de-los-conciertos-de-pearl-jam-en-chile/" title="Torrents de los conciertos de Pearl Jam en Chile (25 noviembre, 2005)">Torrents de los conciertos de Pearl Jam en Chile</a> (35)</li>
	<li><a href="http://www.yukei.net/2004/02/sin-querer-queriendo/" title="Sin querer queriendo (23 febrero, 2004)">Sin querer queriendo</a> (0)</li>
	<li><a href="http://www.yukei.net/2009/12/servidor-de-musica-daap-en-ubuntu/" title="Servidor de música DAAP en Ubuntu (28 diciembre, 2009)">Servidor de música DAAP en Ubuntu</a> (0)</li>
	<li><a href="http://www.yukei.net/2003/11/qu-pasa-en-el-negocio-de-la-msica/" title="Qu&eacute; pasa en el negocio de la m&uacute;sica (9 noviembre, 2003)">Qu&eacute; pasa en el negocio de la m&uacute;sica</a> (4)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=tzou5eEIxeA:vkrrVbsy76k:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=tzou5eEIxeA:vkrrVbsy76k:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tzou5eEIxeA:vkrrVbsy76k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tzou5eEIxeA:vkrrVbsy76k:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tzou5eEIxeA:vkrrVbsy76k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=tzou5eEIxeA:vkrrVbsy76k:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/tzou5eEIxeA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2012/01/mejorando-la-privacidad-en-bittorrent/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2012/01/mejorando-la-privacidad-en-bittorrent/</feedburner:origLink></item>
		<item>
		<title>Estorninos, plataforma de gobierno estudiantil</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/EDyw36A0Qiw/</link>
		<comments>http://www.yukei.net/2011/12/estorninos-plataforma-de-gobierno-estudiantil/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 19:34:30 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Estrategia]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[diseño de interacción]]></category>
		<category><![CDATA[estorninos]]></category>
		<category><![CDATA[e[ad]]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[proyectos]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1656</guid>
		<description>La plataforma Estorninos es un espacio diseñado para la conformación de una comunidad desarrollada por los alumnos del Taller de Construcción de Diseño Gráfico 2011 en la Escuela de Arquitectura y Diseño PUCV.</description>
			<content:encoded><![CDATA[<p>A principios de año, <a title="[dp] - doble página (sitio personal de Herbert Spencer)" href="http://www.herbertspencer.net">Herbert</a> me invitó a participar de algunas clases en su curso de <strong>Taller de construcción</strong> para alumnos de 4º año de la <a title="Escuela de Arquitectura y Diseño PUCV" href="http://www.ead.pucv.cl">e[ad]</a>. Lo que en un principio estaría dedicado a algunas lecciones de Javascript como contexto general del diseño de interacción en la Web, pronto mutó a acercarnos mucho más al proyecto que este curso se había planteado como meta.</p>
<p><iframe src="http://player.vimeo.com/video/32510581?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff" frameborder="0" width="500" height="281"></iframe></p>
<p>La <a href="http://estorninos.ead.pucv.cl" title="Sitio de la Plataforma Estorninos">plataforma Estorninos</a> es <q>un espacio diseñado para la conformación de una comunidad, donde los alumnos se puedan formar en un cuerpo organizado, desde el cual participen en el hacer universidad</q>, que se concreta a través de 4 módulos de abierta participación: <strong>proyectos, debates, eventos y notas</strong>.</p>
<p>El desarrollo del proyecto está en un estado <em>alpha funcional</em>, y continuará su marcha durante el próximo año, con el objetivo de convertirse en una solución extensible bajo la forma de un conjunto de un tema y plugins para WordPress, distribuido libremente bajo una licencia <abbr title="Free/Open Source Software">FOSS</abbr>. El proyecto está <a href="http://wiki.ead.pucv.cl/index.php/Plataforma_Estorninos" title="Documentación de la Plataforma Estorninos">ampliamente documentado</a> en la Wiki de e[ad], donde pueden ver sus fundamentos, metas y logros.</p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/diseno/" title="Diseño" rel="tag">Diseño</a>, <a href="http://www.yukei.net/tag/diseno-de-interaccion/" title="diseño de interacción" rel="tag">diseño de interacción</a>, <a href="http://www.yukei.net/tag/estorninos/" title="estorninos" rel="tag">estorninos</a>, <a href="http://www.yukei.net/tag/ead/" title="e[ad]" rel="tag">e[ad]</a>, <a href="http://www.yukei.net/tag/personal/" title="Personal" rel="tag">Personal</a>, <a href="http://www.yukei.net/tag/proyectos/" title="proyectos" rel="tag">proyectos</a>, <a href="http://www.yukei.net/tag/wordpress/" title="WordPress" rel="tag">WordPress</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2008/03/pequena-actualizacion-de-satori/" title="Pequeña actualización de Satori (13 marzo, 2008)">Pequeña actualización de Satori</a> (3)</li>
	<li><a href="http://www.yukei.net/2008/06/edustyle-inspiration-for-campus-web-designers/" title="eduStyle: inspiration for campus web designers (10 junio, 2008)">eduStyle: inspiration for campus web designers</a> (5)</li>
	<li><a href="http://www.yukei.net/2010/11/worpress-no-solo-blogs/" title="WordPress: no sólo blogs (14 noviembre, 2010)">WordPress: no sólo blogs</a> (7)</li>
	<li><a href="http://www.yukei.net/2009/01/un-nuevo-tema-para-yukeinet-ii/" title="Un nuevo tema para yukei.net (II) (24 enero, 2009)">Un nuevo tema para yukei.net (II)</a> (0)</li>
	<li><a href="http://www.yukei.net/2007/08/typographic-un-tema-tipo-tumblelog-para-wordpress/" title="Typographic: un tema tipo-tumblelog para WordPress (15 agosto, 2007)">Typographic: un tema tipo-tumblelog para WordPress</a> (21)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=EDyw36A0Qiw:R7r_lI2qlus:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=EDyw36A0Qiw:R7r_lI2qlus:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=EDyw36A0Qiw:R7r_lI2qlus:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=EDyw36A0Qiw:R7r_lI2qlus:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=EDyw36A0Qiw:R7r_lI2qlus:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=EDyw36A0Qiw:R7r_lI2qlus:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/EDyw36A0Qiw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2011/12/estorninos-plataforma-de-gobierno-estudiantil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2011/12/estorninos-plataforma-de-gobierno-estudiantil/</feedburner:origLink></item>
		<item>
		<title>Migrar un proyecto desde SVN a Bazaar</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/FXBrw4SHaQY/</link>
		<comments>http://www.yukei.net/2011/11/migrar-un-proyecto-desde-svn-a-bazaar/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 11:35:36 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[control de versiones]]></category>
		<category><![CDATA[flujos de trabajo]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1627</guid>
		<description>Bazaar (bzr) permite interoperar cómodamente con Subversion (svn) y permite implementar fácilmente flujos de trabajo adecuados al desarrollo de tus proyectos</description>
			<content:encoded><![CDATA[<p>Hace ya algunos meses estoy utilizando <strong>Bazaar</strong> como sistema de control de versiones para todos mis proyectos nuevos, con resultados muy satisfactorios: me resulta muchísimo más potente que <em>Subversion (SVN)</em> por su funcionamiento como sistema distribuído, y a la vez más sencillo de usar que <em>git</em> (del que sólo le podría faltar la  velocidad).</p>
<p>Uno de estos proyectos ha sido el rediseño de un sitio bastante grande y complejo que hemos desarrollado en <a title="AyerViernes | Estrategia y diseño para tu vida digital" href="http://www.ayerviernes.com">AyerViernes</a> y que hasta ahora se encuentra versionado con <strong>svn</strong>, pero que queremos trasladar a Bazaar por la buena experiencia que hemos tenido. En este proyecto frecuentemente se realizan cambios al modo de funcionamiento de sus diversas características o se agregan nuevas funcionalidades, por lo que no podíamos trabajar bajo el supuesto de congelar el trabajo en el sitio actual y migrar todo inmediatamente a la nueva versión en desarrollo; en síntesis, debíamos ser capaces de:</p>
<ul>
<li>Seguir implementando cambios en la versión en producción</li>
<li>Desarrollar paralelamente la nueva versión, sin interferir con la anterior</li>
<li>Poder incorporar los cambios de la versión en producción a la versión en desarrollo</li>
</ul>
<p>Afortunadamente, <strong>Bazaar puede interoperar con Subversion </strong>gracias a un plugin llamado (adecuadamente) <strong>bzr-svn</strong>, disponible en los repositorios de Ubuntu.</p>
<p>La estrategia que utilizamos demuestra la flexibilidad y potencia de Bazaar. Los pasos a seguir serían aproximadamente los siguientes:</p>
<p><span id="more-1627"></span></p>
<h3>Preparación</h3>
<p>Si aún no lo tienes, lo primero es instalar el plugin <strong>bzr-svn.</strong> En Ubuntu esto se puede lograr con <code>sudo apt-get install bzr-svn</code> desde el terminal.</p>
<p>Luego, crear un <strong>repositorio compartido</strong> bajo el cual almacenaremos tanto la versión online (en producción) como sobre la cual trabajaremos el rediseño (versión de desarrollo), cada una de ellas como una rama <em>(branch)</em>.</p>
<p>Al utilizar un <em>repositorio compartido</em>, las revisiones se almacenan en el repositorio en lugar de en cada rama, lo que permite optimizar drásticamente la utilización de espacio y crear nuevas ramas velozmente. Para inicializar el repositorio compartido, debemos ejecutar <code>bzr init-repo proyecto.repo</code></p>
<h3>Importar el historial de versiones</h3>
<p>Una vez que está creado el repositorio compartido, nuestro objetivo será importar los archivos y el historial del proyecto desde el repositorio SVN donde se está trabajando actualmente, lo que podemos realizar de diversos modos dependiendo de la forma en que esté organizado el repositorio SVN.</p>
<p>Para ello contamos con dos opciones proporcionadas por el plugin: podemos <strong>importar solo una parte del repositorio SVN</strong> (por ejemplo, solamente el <code>trunk</code> o una de las ramas) o bien <em>hacer una copia completa del repositorio</em> (incluyendo todas las ramas y etiquetas además del trunk).</p>
<p>Para el primer caso, tenemos la opción de <strong>crear una nueva rama</strong> a partir de la versión seleccionada <em>tal como si lo estuviésemos haciendo desde una rama de Bazaar:</em> <code>bzr branch svn://servidor.com/proyecto trunk</code>, con lo que Bazaar importará todo el historial de versiones a la nueva rama junto con crear un árbol de trabajo con la última versión de los archivos. Por otra parte, si deseamos que los commits en este árbol siempre se suban al repositorio svn, también contamos con la opción de hacer un <code>checkout</code> (o bien pasar desde una rama a un checkout con <code>bind/unbind</code>).</p>
<p>Para el segundo caso, podemos utilizar el comando <code>bzr svn-import svn://servidor.com/proyecto repositorio</code>. Bazaar importará todo el historial de versiones, pero <em>no creará el árbol de trabajo</em> a menos que agreguemos la opción <code>--trees</code>.</p>
<h3>Trabajo en una nueva rama como &#8220;feature branch&#8221;</h3>
<p>Suponiendo que hemos utilizado la primera de las opciones recién indicadas, tendríamos lo siguiente:</p>
<pre class="brush: bash; title: ; notranslate">$ cd /var/www
# Inicializar el repositorio compartido
$ bzr init-repo proyecto.repo
# Importar el historial del proyecto
$ cd proyecto.repo
$ bzr branch svn://servidor.com/proyecto trunk</pre>
<p>Y llegamos finalmente al momento en que comenzaremos a trabajar en la nueva versión. Para ello, crearemos una nueva rama en el repositorio compartido, donde ejecutaremos todos los cambios necesarios para el desarrollo de la nueva versión.</p>
<pre class="brush: bash; title: ; notranslate"># Crear rama de desarrollo
$ cd /var/www/proyecto.repo
$ bzr branch trunk feature-branch
$ cd feature-branch
# hack, hack, hack...</pre>
<p>A partir de este punto, lo que queda es introducir todas las modificaciones que sean necesarias en nuestra nueva versión — dado que es una rama, los commits de cambios serán locales al repositorio. Nuestro flujo de trabajo sería básicamente el siguiente:</p>
<p><a href="http://static.yukei.net/wp-content/uploads/2011/11/bzrsvn-layout.png"><img class="aligncenter size-medium wp-image-1639" title="BZR-SVN: diagrama de repositorios" src="http://static.yukei.net/wp-content/uploads/2011/11/bzrsvn-layout-500x357.png" alt="" width="500" height="357" /></a></p>
<p>De este modo, la mantención del proyecto puede continuar de forma paralela al nuevo desarrollo, sin cruzarse entre sí a menos que así lo queramos. Si hubiesen cambios en el sitio en producción que se envíen al repositorio SVN, podríamos integrarlos dentro de nuestra versión de desarrollo con los siguientes pasos:</p>
<pre class="brush: bash; title: ; notranslate"># Ingresamos a la rama ligada al sitio en producción
$ cd /var/www/proyecto.repo/trunk
# Obtener los cambios desde el repositorio SVN
$ bzr pull # O bzr up si es un checkout
# Cambiar a la rama en desarrollo
$ cd ../feature-branch
# Incorporar los cambios de producción al nuevo desarrollo
$ bzr merge ../trunk</pre>
<p>Del mismo modo, cuando queramos integrar los cambios de la versión en desarrollo a la rama principal, también recurriremos a <code>bzr merge</code>, de modo de preservar el historial que la rama en producción (el &#8220;trunk&#8221; del ejemplo).</p>
<pre class="brush: bash; title: ; notranslate">$ cd /var/www/proyecto.repo/trunk
# Mezclar cambios de desarrollo en la versión de producción
$ bzr merge ../feature-branch</pre>
<p>Es importante recalcar la utilización de <code>merge</code>, y <strong>no</strong> un <code>push</code> desde <code>feature-branch</code> al <code>trunk</code>, ya que de otro modo sobreescribiremos el historial de versiones del trunk.</p>
<p>Ya en este punto, podremos chequear que todos los cambios que introdujimos se complementan bien con los últimos cambios del sitio en producción. Una vez que se hayan alisado todas las asperezas, podemos enviar finalmente nuestros cambios desde <code>/var/www/proyecto.repo/trunk</code> con un <code>bzr push</code> hacia el repositorio SVN.</p>
<h3>Colaboración con otros desarrolladores</h3>
<p>Hasta acá tenemos la versión simplificada, pero lo más probable es que durante el desarrollo debamos cooperar con compañeros de equipo encargados de otras piezas del puzzle&#8230; a partir de lo anterior, podemos seguir expandiendo el modelo para incorporar estas nuevas posibilidades: nuestros compañeros pueden crear nuevas ramas locales en sus respectivos equipos, o bien montar un checkout donde implementar cambios que luego serán enviados a nuestro repositorio.</p>
<p>De este modo, una versión más completa del esquema anterior sería la siguiente:</p>
<p><a href="http://static.yukei.net/wp-content/uploads/2011/11/bzrsvn-flow.png"><img class="aligncenter size-medium wp-image-1640" title="BZR-SVN: Flujo de trabajo" src="http://static.yukei.net/wp-content/uploads/2011/11/bzrsvn-flow-500x255.png" alt="" width="500" height="255" /></a></p>
<p>Como se puede ver, existen muchas alternativas para organizar el trabajo en la forma que sea mejor para tu equipo; y lo que es mejor aún, es muy fácil implementar otras variantes que vayan siendo más apropiadas según el desarrollo del proyecto.</p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/bazaar/" title="bazaar" rel="tag">bazaar</a>, <a href="http://www.yukei.net/tag/control-de-versiones/" title="control de versiones" rel="tag">control de versiones</a>, <a href="http://www.yukei.net/tag/flujos-de-trabajo/" title="flujos de trabajo" rel="tag">flujos de trabajo</a>, <a href="http://www.yukei.net/tag/programacion/" title="programación" rel="tag">programación</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2011/03/control-de-versiones-centralizado-con-bazaar/" title="Control de versiones centralizado con Bazaar (24 marzo, 2011)">Control de versiones centralizado con Bazaar</a> (0)</li>
	<li><a href="http://www.yukei.net/2012/02/recuperar-revisiones-perdidas-en-bazaar/" title="Recuperar revisiones perdidas en Bazaar (8 febrero, 2012)">Recuperar revisiones perdidas en Bazaar</a> (0)</li>
	<li><a href="http://www.yukei.net/2011/04/wordpress-tips-utiliza-el-parametro-action-para-determinar-la-accion-que-estas-realizando/" title="WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando (25 abril, 2011)">WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando</a> (1)</li>
	<li><a href="http://www.yukei.net/2011/06/parametros-variables-en-funciones-wordpress-con-wp_parse_args/" title="Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips) (1 junio, 2011)">Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips)</a> (0)</li>
	<li><a href="http://www.yukei.net/2010/05/tres-usos-para-jquery-extend/" title="Tres usos para jQuery.extend() (18 mayo, 2010)">Tres usos para jQuery.extend()</a> (1)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=FXBrw4SHaQY:_J2POb4pZvg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=FXBrw4SHaQY:_J2POb4pZvg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=FXBrw4SHaQY:_J2POb4pZvg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=FXBrw4SHaQY:_J2POb4pZvg:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=FXBrw4SHaQY:_J2POb4pZvg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=FXBrw4SHaQY:_J2POb4pZvg:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/FXBrw4SHaQY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2011/11/migrar-un-proyecto-desde-svn-a-bazaar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2011/11/migrar-un-proyecto-desde-svn-a-bazaar/</feedburner:origLink></item>
		<item>
		<title>Trabajando con datos serializados en WordPress</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/tc29O2EbPjM/</link>
		<comments>http://www.yukei.net/2011/08/trabajando-con-datos-serializados-en-wordpress/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 05:19:59 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[rendimiento]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1366</guid>
		<description>WordPress permite trabajar con datos serializados en opciones y meta datos de entradas, comentarios y usuarios, lo que puede ser una muy buena opción al trabajar con datos complejos como arrays u objetos.</description>
			<content:encoded><![CDATA[<p>Supongamos el siguiente escenario: estás desarrollando un <a title="Referencia de la función add_meta_box en el Codex de WordPress" href="http://codex.wordpress.org/Function_Reference/add_meta_box" hreflang="en">metabox</a> para un tipo personalizado de contenido que representa a personas, y en el que debes agregar información de contacto como teléfono, correo electrónico, dirección, etc; la que se mostrará junto a cada persona como una ficha.</p>
<p>Una opción para <em>guardar estos datos</em> sería recurrir a alguna convención de nombres de modo que cada dato se almacena como una fila en la tabla <code>$wpdb-&gt;postmeta</code>; algo como <code>_persona_telefono, _persona_email, _persona_direccion</code>, etc. Luego, al mostrar los datos podríamos hacer una consulta como <code>SELECT * FROM $wpdb-&gt;postmeta WHERE post_id = $post_id AND meta_key LIKE '_persona%'</code>.</p>
<p>Sin embargo, <strong>una mejor alternativa</strong> en este tipo de casos sería recurrir a la utilización de <a title="Serialización en Wikipedia" href="http://es.wikipedia.org/wiki/Serializaci%C3%B3n" rel="help nofollow">datos serializados</a>, ya que nos permitirán guardar <strong>en un solo campo</strong> una estructura compleja de datos como un array (uni o multidimensional) o un objeto; lo que nos puede facilitar de forma importante varias tareas si planificamos con cuidado nuestra estructura de datos.</p>
<p><span id="more-1366"></span></p>
<h3>Por qué y cuándo preferir datos serializados en WordPress</h3>
<p>Me atrevería a decir que en general los especialistas en bases de datos relacionales no miran con muy buenos ojos la utilización de este tipo de técnicas (ya que idealmente, cada objeto debiese estar modelado de acuerdo a un esquema que permita optimizar el rendimiento de la base de datos), sin embargo en WordPress muchas veces nos encontraremos con la necesidad de guardar un <strong>conjunto limitado (no necesariamente fijo) de datos relacionados y sin un esquema inmutable</strong> en la base de datos, ya sea como metadatos de un post (o un tipo de contenido personalizado), de un comentario o un usuario, o bien como opciones de un plugin — convenientemente, WordPress nos provee de APIs para interactuar de forma sencilla con la base de datos en estos casos, en los que la serialización de datos ya está considerada como parte del proceso de lectura/escritura desde/hacia la base de datos.</p>
<p>Por lo tanto, el trabajo con datos serializados nos presenta una serie de ventajas, como:</p>
<ul>
<li><strong>Mejor performance</strong>, al obtener un solo valor desde la base de datos en lugar de múltiples filas</li>
<li><strong>Mayor orden</strong>, al trabajar con una estructura de datos más evidente con el solo hecho de obtener la información requerida</li>
<li><strong>Mayor simplicidad</strong> al momento de guardar o recuperar datos, ya que sólo tendrás que recurrir a un campo</li>
<li><em>Menos posibilidades de tener conflictos</em> con datos insertados por otros desarrolladores, ya que es más fácil utilizar un nombre único para tus claves de búsqueda</li>
</ul>
<h3>Cómo trabajar con los datos serializados</h3>
<p>Como decía anteriormente, WordPress nos hace este trabajo muy simple, ya que las APIs de metadatos para posts, comentarios y usuarios, tanto como el API de opciones ya contemplan la posibilidad de trabajar con datos serializados.</p>
<p>Retomando el ejemplo del principio:</p>
<pre class="brush: php; title: ; notranslate">
// esta es la información sanitizada a partir del envío del formulario
$person_data = array(
	'tel' =&gt; '+1 012 345 678',
	'email' =&gt; 'homero@plantanucleardespringfield.com',
	'adr' =&gt; array(
		'street-address' =&gt; 'Avenida Siempre Viva 742',
		'locality' =&gt; 'Springfield',
		'region' =&gt; '??'
	)
);

// para guardar los datos
// (el &quot;_&quot; antes del nombre de la opción hace que
// no se vea en la lista de campos personalizados)
update_post_meta($post-&gt;ID, '_person_data', $person_data);

// para obtener los datos
// devuelve un array similar a $person_data
get_post_meta($post-&gt;ID, '_person_data', true);
</pre>
<p><strong>No es necesario serializar los datos antes de guardarlos ni des-serializarlos al obtenerlos</strong>, ya que WordPress internamente determinará si es necesario hacerlo (mediante las funciones <code>maybe_serialize</code> y <code>maybe_unserialize</code>, respectivamente).</p>
<h3>Cuándo NO ocupar datos serializados</h3>
<p>Quizás alguien a estas alturas estará pensando <em>&#8220;¿bueno, y cuáles son las desventajas?&#8221;</em>&#8230; muy suspicaz, ¿eh? Quizás no lo suficiente.</p>
<p>Al serializar el array anterior, la información que se guarda en la base de datos corresponde a:</p>
<pre class="brush: php; title: ; notranslate">
a:3:{s:3:&quot;tel&quot;;s:14:&quot;+1 012 345 678&quot;;s:5:&quot;email&quot;;s:36:&quot;homero@plantanucleardepsringield.com&quot;;s:3:&quot;adr&quot;;a:3:{s:14:&quot;street-address&quot;;s:24:&quot;Avenida Siempre Viva 742&quot;;s:8:&quot;locality&quot;;s:11:&quot;Springfield&quot;;s:6:&quot;region&quot;;s:2:&quot;??&quot;;}}
</pre>
<p>En primer lugar, habría que plantear lo obvio: <em>cada vez que obtienes el valor necesitarás transformarlo</em> a su representación correcta (array u objeto). A partir de ello, no tiene mucho sentido usar esta técnica cuando los datos que se almacenan <em>no tienen mucha relación entre sí y se utilizan siempre de forma individual</em>. Por otra parte, <em>tampoco convendría guardar cantidades demasiado grandes de información de este modo</em>, ya que el gasto de procesamiento y memoria sería demasiado alto.</p>
<p>El valor serializado que se guarda en la base de datos es simplemente una cadena de texto &#8230; el problema surge cuando queremos <em>buscar</em> algún dato en particular (ya que no será tan sencillo como buscar en un campo que tiene un texto simple) o bien al utilizar un dato como condición en en <code>SELECT</code> (por ejemplo, cuando se utiliza un campo de la tabla <code>postmeta</code> para obtener un conjunto de posts).</p>
<p>Sin embargo&#8230; aquí si conviene ser más estricto en temas de bases de datos, ya que en todos los casos contemplados (meta datos de posts, usuarios, comentarios; opciones) <strong>el campo donde se almacenan los valores</strong> (meta_value, option_value, etc) <strong>no tiene índice</strong>, por lo que las consultas que utilizan estas condiciones están <em>fatalmente sub-optimizadas</em>: por ejemplo, al hace una consulta como <code>SELECT * FROM $wpdb-&gt;postmeta WHERE meta_key = '_persona_ciudad' AND meta_value = 'Springfield'</code>, la base de datos debe revisar <em>todos</em> los registros de la tabla en busca de coincidencias (esto no ocurre al hacer consultas como <code>SELECT * FROM $wpdb-&gt;postmeta WHERE post_id = $post_id AND meta_key = '_person_data'</code> ya que en esas columnas existen índices que permiten que la base de datos devuelva rápidamente los valores coincidentes con los criterios indicados).</p>
<p>Por lo tanto, si deseas guardar muchos datos que pueden servir como criterios de búsqueda, la mejor opción en ese caso será crear una tabla especial para esa información, que te permita definir los índices adecuados según las necesidades del programa.</p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/performance/" title="performance" rel="tag">performance</a>, <a href="http://www.yukei.net/tag/php/" title="php" rel="tag">php</a>, <a href="http://www.yukei.net/tag/plugins/" title="plugins" rel="tag">plugins</a>, <a href="http://www.yukei.net/tag/programacion/" title="programación" rel="tag">programación</a>, <a href="http://www.yukei.net/tag/rendimiento/" title="rendimiento" rel="tag">rendimiento</a>, <a href="http://www.yukei.net/tag/wordpress/" title="WordPress" rel="tag">WordPress</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2010/11/usando-la-api-de-transients-en-wordpress/" title="Usando la API de Transients en WordPress (8 noviembre, 2010)">Usando la API de Transients en WordPress</a> (0)</li>
	<li><a href="http://www.yukei.net/2011/04/wordpress-tips-utiliza-el-parametro-action-para-determinar-la-accion-que-estas-realizando/" title="WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando (25 abril, 2011)">WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando</a> (1)</li>
	<li><a href="http://www.yukei.net/2011/06/parametros-variables-en-funciones-wordpress-con-wp_parse_args/" title="Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips) (1 junio, 2011)">Usa parámetros variables en tus funciones con wp_parse_args (WordPress Tips)</a> (0)</li>
	<li><a href="http://www.yukei.net/2008/03/phpspeedy-mejora-el-tiempo-de-carga-de-tu-sitio/" title="PHPSpeedy: mejora el tiempo de carga de tu sitio (14 marzo, 2008)">PHPSpeedy: mejora el tiempo de carga de tu sitio</a> (6)</li>
	<li><a href="http://www.yukei.net/2007/10/php-te-facilita-la-vida/" title="PHP te facilita la vida (25 octubre, 2007)">PHP te facilita la vida</a> (6)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=tc29O2EbPjM:yu9Wo9Xl3ks:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=tc29O2EbPjM:yu9Wo9Xl3ks:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tc29O2EbPjM:yu9Wo9Xl3ks:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tc29O2EbPjM:yu9Wo9Xl3ks:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=tc29O2EbPjM:yu9Wo9Xl3ks:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=tc29O2EbPjM:yu9Wo9Xl3ks:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/tc29O2EbPjM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2011/08/trabajando-con-datos-serializados-en-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2011/08/trabajando-con-datos-serializados-en-wordpress/</feedburner:origLink></item>
		<item>
		<title>Tres malas razones para elegir un servicio de hosting</title>
		<link>http://feedproxy.google.com/~r/yukei/~3/42cdPmoTTuw/</link>
		<comments>http://www.yukei.net/2011/08/tres-malas-razones-para-elegir-un-servicio-de-hosting/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 01:29:43 +0000</pubDate>
		<dc:creator>Felipe Lavín Z.</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Estrategia]]></category>
		<category><![CDATA[metodología]]></category>

		<guid isPermaLink="false">http://www.yukei.net/?p=1368</guid>
		<description>Siempre me ha llamado profundamente la atención esa costumbre que tienen algunos clientes de preferir proveedores de hosting nacionales&amp;#8230; no es que tenga nada en contra de los proveedores nacionales por el hecho de ser nacionales, sino porque son comprobadamente y rematadamente pésimos — por cierto, me refiero particularmente al escenario de Chile, desconozco cómo [...]</description>
			<content:encoded><![CDATA[<p>Siempre me ha llamado profundamente la atención esa costumbre que tienen algunos clientes de preferir proveedores de hosting nacionales&#8230; no es que tenga nada en contra de los proveedores nacionales por el hecho de ser nacionales, sino porque son comprobadamente y rematadamente pésimos — por cierto, me refiero particularmente al escenario de Chile, desconozco cómo será el panorama en otros países pero tengo la impresión que puede pasar algo similar.</p>
<p>Pensando un poco por las razones que uno podría tener para dispararse en el pie de este modo, creo que hay al menos tres motivos que podrían influir en esta decisión.</p>
<p><span id="more-1368"></span></p>
<h3>Creer que quien te vende el acceso a internet también debe ser un experto en hosting</h3>
<p>&#8230; después de todo, no es tan descabellado pensar que son expertos en infraestructura y deberían tener las competencias para poder manejar ambos aspectos del negocio&#8230; lo que sabemos que no es necesariamente cierto: en general el servicio de hosting que venden los ISP está atado al paquete de servicios contratados o bien es <em>tan limitado que no aguanta nada que se más que un simple sitio tipo panfleto</em>.</p>
<p>La búsqueda que sigue a partir de este punto suele terminar con alguno de los resultados de la primera página para &#8220;hosting {inserte su país aquí}&#8221; en Google: por lo general con una web que parece un homenaje a los 1990s, y que se preocupa de utilizar términos que parecen muy técnicos pero no aportan nada.</p>
<h3>Que puedes pagar con cheque o transferencia bancaria, en moneda local</h3>
<p>A pesar de que prácticamente todos los navegadores se han preocupado de aumentar y resaltar sus características de seguridad, al tipo de cliente que prefiere contratar un hosting nacional le preocupa más que le puedan hacer un cargo en la tarjeta de crédito (probablemente porque ha visto algún reportaje en las noticias de la televisión o en alguna película de hackers) a que lo estafen mensualmente en su cara, y <em>contratar un servicio malo que puede pagar con un cheque</em> o una transferencia bancaria a uno que debe pagar con tarjeta de crédito en un servicio que le puedas recomendar.</p>
<p>Lo criticable no es el hecho de querer tomar sus decisiones en torno al servicio que quisieran contratar, más bien que de fondo probablemente está la idea que su sitio es simplemente uno más de los gastos de la oficina, como el agua o la electricidad, y que <em>con el solo hecho de pagar la cuenta mensualmente su sitio debiera funcionar por sí mismo</em>, sin preocuparse de crear contenidos ni hacer ningún tipo de mantención — es el tipo de sitio que encuentras con una noticia con más de un año de antigüedad&#8230; sobre su nuevo sitio.</p>
<h3>Que hablan tu idioma y tienes &#8220;a quién llamar&#8221;</h3>
<p>Probablemente el argumento más poderoso a la vez que el más engañoso. En lo personal, me parece inexplicable la especie de fascinación que a algunas personas les produce tener un &#8220;ejecutivo de cuenta&#8221; que les plantee un servicio &#8220;a la medida&#8221;, como si se tratara de una cuenta de banco o un sastre.</p>
<p>Por otra parte, está la confianza ciega en que el personal de servicio técnico hable en tu idioma, lo que difícilmente podría ser una ventaja ya que si hay un fallo en el sitio o si por alguna razón el sitio se ve comprometido, el servicio técnico del hosting no es el que va a responder ni solucionar el problema: si el problema es a nivel de la aplicación, con razón podrían argumentar que no es de su responsabilidad (aunque si es así, no tiene mucho sentido contar con el servicio técnico del hosting, sino más bien con una mantención de quien desarrolló el sitio, ¿no?), pero por otra parte, si el problema es realmente de más bajo nivel y responsabilidad directa del hosting, entonces<strong> la cuestión no debería recaer en que puedas llamar a alguien para que solucione el problema, sino en que esos problemas no se produzcan</strong>, y si bien todo sistema es susceptible a fallos, un buen proveedor no necesita que le digan &#8220;esto está fallando&#8221; para saber que tiene algo que solucionar.</p>
<p>La trampilla del &#8220;tener a quién llamar&#8221; pasa también por vender cosas que no son tal como las pintan: por una parte, están los que promueven a cPanel o Plesk como entornos &#8220;amigables&#8221; o &#8220;autoadministrables&#8221; (vaya a saber uno qué significa esto para ellos) como si cualquier persona fuera a entender mágicamente todas las opciones que se le ofrecen; mientras que por otra están los que se ufanan de tener un panel de control propio y que salvo contadas excepciones suelen ser engendros horripilantes y poco funcionales.</p>
<p>Finalmente, están también los que exhiben como medallas de guerra sus certificaciones de Microsoft, Oracle y Java, pero que te miran como si estuvieras hablando en zulu (o peor, condescendientemente como a un párvulo) cuando planteas que estás trabajando sobre PHP+MySQL, WordPress y &#8220;todas esas cosas hippientas de software libre/código abierto&#8221;. Algunos llegan a afirmar que nadie da soporte a &#8220;esas cosas&#8221;, por lo que ellos sólo garantizan, básicamente, que el servidor está conectado a la electricidad, pero de ahí en más no es su responsabilidad.</p>
<h3>¿Y cuál es la moraleja?</h3>
<p>No estoy tratando de hacer una fábula, pero hay algunas cosas que podemos sacar en limpio:</p>
<ul>
<li>Negocia tus contratos hasta la <strong>entrega</strong> del sitio, no la <em>puesta en producción</em>: muestra el sitio funcionando en tu propio hosting para que tu cliente lo pruebe a sus anchas, pero haz una entrega en CD con los archivos del sitio, base de datos, manual de uso e instalación, etc. Puede que parezca cavernícola, pero te permitirá poder poner fin al proyecto cuando <strong>lo que es de tu responsabilidad</strong> ya se haya dado por cumplido.</li>
<li>Recuérdate y recuérdale a tu cliente que el objetivo de su trabajo conjunto es llegar a tener un sitio funcionando. Plantea la puesta en línea del sitio como un mini-proyecto adicional de acuerdo a las características del hosting que decida contratar, ya que de acuerdo a esto podría ser desde una tarea de un par de horas a días enteros peloteando e-mails con los de soporte.</li>
<li>Aconseja a tu cliente, guíalo y edúcalo en las características del producto que le estás vendiendo. Entrégale la documentación adecuada y la información sobre las condiciones necesarias para que su sitio web funcione correctamente.</li>
</ul>
<p>Siempre trata de anticipar y solucionar los escollos que puedan encontrar en este paso que debería ser un mero trámite. Un desarrollo no implementado le sirve tan poco a tu cliente como a tu portafolio y reputación.</p>

	<p class="tags">Tags: <a href="http://www.yukei.net/tag/desarrollo-web/" title="Desarrollo Web" rel="tag">Desarrollo Web</a>, <a href="http://www.yukei.net/tag/estrategia/" title="Estrategia" rel="tag">Estrategia</a>, <a href="http://www.yukei.net/tag/metodologia/" title="metodología" rel="tag">metodología</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.yukei.net/2010/11/worpress-no-solo-blogs/" title="WordPress: no sólo blogs (14 noviembre, 2010)">WordPress: no sólo blogs</a> (7)</li>
	<li><a href="http://www.yukei.net/2007/10/yui-y-otros-frameworks-css/" title="YUI y otros Frameworks CSS (3 octubre, 2007)">YUI y otros Frameworks CSS</a> (4)</li>
	<li><a href="http://www.yukei.net/2006/07/yo-corazon-wordpress/" title="Yo [corazón] WordPress (24 julio, 2006)">Yo [corazón] WordPress</a> (6)</li>
	<li><a href="http://www.yukei.net/2007/01/y-tenemos-wordpress-21/" title="Y tenemos WordPress 2.1 (26 enero, 2007)">Y tenemos WordPress 2.1</a> (2)</li>
	<li><a href="http://www.yukei.net/2006/07/xhtml-semantico-aplicado-a-listas/" title="XHTML Semántico aplicado a listas (3 julio, 2006)">XHTML Semántico aplicado a listas</a> (11)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/yukei?a=42cdPmoTTuw:sKF3w2qQ2Ho:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yukei?i=42cdPmoTTuw:sKF3w2qQ2Ho:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=42cdPmoTTuw:sKF3w2qQ2Ho:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yukei?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=42cdPmoTTuw:sKF3w2qQ2Ho:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/yukei?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/yukei?a=42cdPmoTTuw:sKF3w2qQ2Ho:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/yukei?i=42cdPmoTTuw:sKF3w2qQ2Ho:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/yukei/~4/42cdPmoTTuw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yukei.net/2011/08/tres-malas-razones-para-elegir-un-servicio-de-hosting/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.yukei.net/2011/08/tres-malas-razones-para-elegir-un-servicio-de-hosting/</feedburner:origLink></item>
	</channel>
</rss><!-- Served from: www.yukei.net @ 2012-04-20 08:31:20 by W3 Total Cache -->

