<?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>Barriblog &#187; Entorno de desarrollo</title>
	<atom:link href="http://www.barriblog.com/index.php/category/entorno-de-desarrollo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.barriblog.com</link>
	<description>Buscando barrios de blogs</description>
	<lastBuildDate>Mon, 30 Jan 2012 16:57:16 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>I ♥ Python</title>
		<link>http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/</link>
		<comments>http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 23:14:13 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=1423</guid>
		<description><![CDATA[0En el mes de marzo va a hacer un año que hice de Python  mi lenguaje de programación predeterminado y creo que tomé una buena decisión. Me encanta programar en este lenguaje, me cunde mucho el  trabajo y puedo resolver cualquier duda en su documentación o en las experiencias de sus entusiastas seguidores. Todo empezó [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-1423'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-1423'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-1423'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/" data-count="horizontal" data-text="I ♥ Python" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-1423'></div><a class='DD_FBSHARE_AJAX_1423' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/')+'&amp;title='+encodeURIComponent('I ♥ Python'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p><a href="http://www.barriblog.com/wp-content/uploads/2011/02/python.png"><img class="aligncenter size-full wp-image-1431" title="python" src="http://www.barriblog.com/wp-content/uploads/2011/02/python.png" alt="" width="458" height="446" /></a>En el mes de marzo va a hacer un año que hice de Python  mi lenguaje de programación predeterminado y creo que tomé una buena decisión. Me encanta programar en este lenguaje, me cunde mucho el  trabajo y puedo resolver cualquier duda en su documentación o en las experiencias de sus entusiastas seguidores.</p>
<p>Todo empezó cuando <a href="http://www.it.uc3m.es/berto/es.html"><strong>Norberto</strong>, <strong>Fernández</strong></a> compañero de mi grupo de investigación, publicó este <em>tweet</em></p>
<p><em><!-- tweet id : 10947232187 --><style type='text/css'>#bbpBox_10947232187 a { text-decoration:none; color:#0084B4; }#bbpBox_10947232187 a:hover { text-decoration:underline; }</style><div id='bbpBox_10947232187' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Google's Python Class: a free class for people with a bit of programming experience who want to learn Python <a href="http://tinyurl.com/yejg432" rel="nofollow">http://tinyurl.com/yejg432</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://www.barriblog.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on March 23, 2010 23:29' href='http://twitter.com/#!/nordez/status/10947232187' target='_blank'>March 23, 2010 23:29</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=10947232187' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=10947232187' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=10947232187' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=nordez'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a1.twimg.com/profile_images/416928389/n1333592428_6300_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=nordez'>@nordez</a><div style='margin:0; padding-top:2px'>nordez</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
</em></p>
<p>Inicié el curso por la mañana y por la tarde ya había hecho los ejercicios. Al día siguiente empecé a programar las herramientas que usé en <a href="http://www.barriblog.com/wiki/index.php/Resultados_manifiesto">el experimento de Manifiesto</a>. Nunca  había tenido una curva de aprendizaje tan rápida con un lenguaje de programación.</p>
<p>El curso de Google es muy básico pero te da ese mínimo que te permite empezar a programar. Las dudas que no me resolvía este curso las solventaba rápidamente consultando <a href="http://www.python.org/doc/">la documentación</a>. Cuando ésta  no era suficiente bastaba buscar en Google “how to…. in python” y ¡voilà!, encontraba la respuesta.</p>
<p>Una de las páginas Web que me han ayudado en conocer más a fondo este lenguaje de programación es <a href="http://mundogeek.net/">mundo geek</a>, un blog escrito por <strong>Raul González Duque</strong>, ex-alumno de la <strong>Universidad Carlos III</strong> y autor también de un <a href="http://mundogeek.net/tutorial-python/">tutorial de Python</a>.  En un post (<a title="Java vs. Python" href="http://mundogeek.net/archivos/2009/06/08/java-vs-python/">Java vs. Python</a>) de su blog encontré con esta cita, con la que estoy totalmente de acuerdo:</p>
<blockquote><p>Tengo la impresión de que Java fue diseñado para hacer que fuera difícil escribir mal código, mientras que Python está diseñado para hacer que sea sencillo escribir buen código.</p>
<p>– Magnus Lycka</p></blockquote>
<p>Otra de las características de Python es el humor, no en vano su nombre proviene de los míticos  <strong>Monty Python’s</strong>.</p>
<blockquote><p><em>By the way, the language is named after the BBC show “Monty Python’s Flying Circus” and has nothing to do with reptiles. Making references to Monty Python skits in documentation is not only allowed, it is encouraged!</em></p></blockquote>
<p>No voy a repetir por qué es tan bueno Python, en su página ya <a href="http://www.python.org/about/">lo explican</a> estupendamente. Pero si además se quiere hacer la prueba del nueve: solo hay que buscar información sobre él y  se aterrice donde se aterrice, siempre se encontrará el latido del entusiasmo.</p>
<p>Resumiendo: Python hace de la programación un placer. I ♥ Python y <a href="http://www.dunbarco.com/python_quotes.htm">muchos más también</a></p>
<p><!-- end of tweet --></p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_1423()',1000);window.setTimeout('loadLinkedin_1423()',1000);window.setTimeout('loadTwitter_1423()',1000);window.setTimeout('loadFBShare_1423()',1000); }); </script><script type="text/javascript"> function loadGoogle1_1423(){ jQuery(document).ready(function($) { $('.dd-google1-1423').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_1423(){ jQuery(document).ready(function($) { $('.dd-linkedin-1423').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_1423(){ jQuery(document).ready(function($) { $('.dd-twitter-1423').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_1423(){ jQuery(document).ready(function($) { $('.dd-fbshare-1423').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2011/02/12/i-%e2%99%a5-python/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Taller de Visualización- Estado del arte y ManyEyes</title>
		<link>http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/</link>
		<comments>http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 08:46:50 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Charlas]]></category>
		<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Experimentos]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Visualizaciones]]></category>
		<category><![CDATA[camon]]></category>
		<category><![CDATA[taller]]></category>
		<category><![CDATA[Visualización]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=1138</guid>
		<description><![CDATA[0 Actualización 20-10-20110:  La grabación de la primera jornada del Taller  disponible aquí Ayer por la tarde nos reunimos en CAMON Madrid unos cuantos entusiastas de la visualización. Como era de esperar ha sido grupo heterogéneo que hemos llegado a la visualización desde distintas profesiones pero con similares necesidades: transmitir información, conocimiento o ideas mediante [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-1138'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-1138'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-1138'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/" data-count="horizontal" data-text="Taller de Visualización- Estado del arte y ManyEyes" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-1138'></div><a class='DD_FBSHARE_AJAX_1138' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/')+'&amp;title='+encodeURIComponent('Taller de Visualización- Estado del arte y ManyEyes'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p style="text-align: center;"><a href="http://www.barriblog.com/wp-content/uploads/2010/10/camon.jpg"><img class="aligncenter size-full wp-image-1101" title="camon" src="http://www.barriblog.com/wp-content/uploads/2010/10/camon.jpg" alt="" width="707" height="243" /></a></p>
<p><strong>Actualización 20-10-20110</strong>:  La grabación de la primera jornada del Taller  <a href="http://www.tucamon.es/contenido/estado-del-arte-y-visualizacion-basica">disponible aquí</a></p>
<p>Ayer por la tarde nos reunimos en <a href="http://www.tucamon.es/">CAMON</a> Madrid unos cuantos entusiastas de la visualización. Como era de esperar ha sido grupo heterogéneo que hemos llegado a la visualización desde distintas profesiones pero con similares necesidades: transmitir  información, conocimiento o ideas mediante un impacto visual. El taller fue emitido en streaming por  <a href="http://www.tucamon.es/directo_mad">Camon</a> y <a href="http://noticias.lainformacion.com/ciencia-y-tecnologia/camon-madrid-taller-de-visualizacion-de-datos_vGB7SlcKsUuh8WAdNI8BC5/">La Información </a>el primer medio español con una <a href="http://graficos.lainformacion.com/">sección de visualización</a>.</p>
<p>En mi caso la visualización me ayuda a analizar los datos que investigo, a validar los algoritmos y a presentar los resultados de una forma más divulgativa. Lo que he aprendido ha sido gracias a Internet y a bastantes horas de autoaprendizaje.</p>
<p>Este primer día de taller  he presentado una visión global del estado del arte de la visualización,  el <a href="http://code.google.com/p/camon/wiki/Datset"><strong><em>data set</em></strong></a> que se va a utilizar en los talleres y he realizado algunas visualizaciones con el servicio <a href="http://manyeyes.alphaworks.ibm.com/manyeyes/">ManyEyes</a>.</p>
<p>Aquí está la presentación:</p>
<div id="__ss_5436772" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Camon visualizar-2010-10-13" href="http://www.slideshare.net/mlcm/camon-visualizar20101013">Camon visualizar-2010-10-13</a></strong><object id="__sse5436772" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=camon-visualizar-2010-10-13-101013154927-phpapp02&amp;stripped_title=camon-visualizar20101013&amp;userName=mlcm" /><param name="name" value="__sse5436772" /><param name="allowfullscreen" value="true" /><embed id="__sse5436772" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=camon-visualizar-2010-10-13-101013154927-phpapp02&amp;stripped_title=camon-visualizar20101013&amp;userName=mlcm" name="__sse5436772" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/mlcm">M. Luz Congosto</a>.</div>
</div>
<p>Aquí las primeras visualizaciones<strong>:</strong></p>
<p>¿Quién fue más mencionado Navarro o Gasol? interactuen y vean..<br />
<script src="http://manyeyes.alphaworks.ibm.com/manyeyes/visualizations/22d04048d71211df8cb6000255111976/comments/22d73092d71211df8cb6000255111976.js?width=425&amp;height=350" type="text/javascript"></script> ¿Cuantas palabras españolas hay entre las más pronunciadas? <script src="http://manyeyes.alphaworks.ibm.com/manyeyes/visualizations/24bb875cd71511dfa25d000255111976/comments/24c12eaad71511dfa25d000255111976.js?width=425&amp;height=350" type="text/javascript"></script></p>
<p>Agudeza visual: ¿qué dos paises se parecen más en sus menciones?<br />
<script src="http://manyeyes.alphaworks.ibm.com/manyeyes/visualizations/e083bdf6d71511dfaa9a000255111976/comments/e08647f6d71511dfaa9a000255111976.js?width=425&amp;height=350" type="text/javascript"></script> ¿Cuantos twitean desde su iPhone?   <script src="http://manyeyes.alphaworks.ibm.com/manyeyes/visualizations/8814e3fad71c11dfb7b2000255111976/comments/88177386d71c11dfb7b2000255111976.js?width=425&amp;height=350" type="text/javascript"></script></p>
<p>¿En que lugar esta España en cuanto menciones en el Turkey2010?<br />
<script src="http://manyeyes.alphaworks.ibm.com/manyeyes/visualizations/2c5bd0d8d76611df80a5000255111976/comments/2c662862d76611df80a5000255111976.js?width=425&amp;height=350" type="text/javascript"></script></p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_1138()',1000);window.setTimeout('loadLinkedin_1138()',1000);window.setTimeout('loadTwitter_1138()',1000);window.setTimeout('loadFBShare_1138()',1000); }); </script><script type="text/javascript"> function loadGoogle1_1138(){ jQuery(document).ready(function($) { $('.dd-google1-1138').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_1138(){ jQuery(document).ready(function($) { $('.dd-linkedin-1138').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_1138(){ jQuery(document).ready(function($) { $('.dd-twitter-1138').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_1138(){ jQuery(document).ready(function($) { $('.dd-fbshare-1138').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2010/10/14/taller-de-visualizacion-estado-del-arte-y-manyeyes-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Como hacer minería de datos de Twitter y no morir en el intento</title>
		<link>http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/</link>
		<comments>http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 20:53:36 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Experimentos]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[data mining]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=1072</guid>
		<description><![CDATA[


Llevo unos meses sin actualizar el blog debido a mi dedicación con pico y pala a extracción y análisis de datos en Twitter, labor nada trivial ni exenta de riesgos como se podrá constatar tras leer los obstáculos más importantes que me he encontrado en el ejercicio del data mining Twitter:

No hay conexión que tres días dure: El uso del streaming API requiere una conexión permanente. Pero esta conexión se puede romper (y se rompe) por unos de los dos extremos: el de Twitter  y el del propio servidor. Dado que la captura de datos para un experimento puede durar meses, es evidente que hay un problema importante que resolver.

Agua que no has de beber, déjala correr: desde que el flujo de tweets es del orden de 700 TPS (Tweets Per Second)  no hay conexión que los soporte ni servidor que lo almacene, aparte de que Twitter no permite la modalidad de statuses/firehose a cualquiera. Por tanto hay que elegir lo que se quiere recibir y consecuentemente renunciar al resto.

¿Qué fue antes la gallina o el huevo? Cuando se quiere monitorizar un evento anunciado no se sabe de antemano cuales serán los hashtag dominantes en ese evento ya que son los usuarios de Twitter los que mandan y marcan las tendencias. Cuando se quiere monitorizar un hashtag que es  trendring es ya too late: con el Streaming API se habrán perdido tolos los tweets que lo auparon a la cima y con el search API solo se obtendrá los 1.500 últimos tweets. Véase el caso de la huelga general del 29-O ¿Quién iba a saber de antemano cual serían los hashtags más usados?

Nunca están todos los tweets que son ni son todos los que están: Cuando se escogen los hashtags para monitorizar la información deseada es como jugar a las siete y media: que te pasas o que no llegas: Si se eligen hashtags que no son muy específicos se corre el riesgo de que haya tweets que no sean relevantes (problemas de ambiguación) y si se opta por otros más específicos se quedarán muchos tweets en el tintero, eso sin contar a la cantidad de tweets que no se etiquetan mediante hashtags. 

El tamaño sí importa. Una captura de continua de tweets durante meses significa un volumen de información muy considerable, tanto para almacenar como para procesar. A 50 TPS, guardando la información en modo texto plano (200bytes), son 10K por segundo, 600K por minuto, 36 Megas por hora, 864 megas, casi un giga, al día.


El datamining en Twitter requiere paciencia, perseverancia e ingenio. Es necesario saber de antemano que se trabaja en un entorno difuso y que hay que adaptarse al medio para capturar la información de la manera más eficiente. Estos son unos consejos para obtener tweets y no morir en el intento:

Para mantener la conexión siempre viva  es necesario realizar una aplicación de captura de tweets robusta y resolver el problema de la disponibilidad de servidores
La aplicación de captura de tweets cuando pierda la conexión con Twitter  debe intentar restablecerla de nuevo hasta que lo consiga y dejar toda la historia de las conexiones en un fichero de log. 
Es preciso crear un deamon para arrancar esta aplicación automáticamente en el inicio del sistema y para pararla de una manera ordenada antes del apagado del servidor. Si la captura de tweets no se realiza en paralelo con un servidor de backup es conveniente que el deamon avise mediante un email de alerta  antes de ser apagado para  activar la captura en un servidor provisional. 


Para seleccionar los hashtags  hay que anticiparse “adivinando” los  hashtags triunfadores, monitorizar por exceso e ir ajustando los hashtags conforme vayan definiéndose. Esto requiere estar pendiente de lo que ocurre en Twitter hasta que se tengan identificados los hashtags relevantes. Por tanto, la aplicación de captura de tweets debe permitir ser reconfigurada sobre la marcha.

Para seleccionar la información relevante hay que posprocesar la información obtenida actuando en tres frentes: crear filtros para eliminar posible spam, suprimir información no relevante, y  refinar la selección que ofrece Twitter:
Filtrar spam es fácil porque los spamers son muy cansinos: Twittean siempre lo mismo y los hacen con algún bot de forma compulsiva. Cuando se selecciona el top de los autores quedan al descubierto. Solo es necesario crear un filtro de tweets con los nombres de usuarios spamers más destacados.
Filtrar información no relevante lo más practico es buscar el top de los hashtags y ver cuales de ellos no son relevantes con los datos que estamos analizando y se les añade al filtro de tweets.
Refinar selección de Twitter: Twitter intenta dar información por exceso, por ejemplo si monitorizamos el hashtags #esp, enviará los tweets que contengan esp o #esp, tanto en mayúsculas como en minúsculas.   En algunos casos esto no es conveniente y se debe hacer un filtrado más estricto de los hashtags.

Almacenar los tweets comprimidos. Se puede aliviar el uso masivo de disco paquetizando los tweets en módulos de un tamaño manejable y comprimiéndolos. Algunos lenguajes como Python son capaces de abrir ficheros comprimidos e incluso leerlos a la mima velocidad que a la de los descomprimidos.


Espero que estos consejos sean de utilidad y si alguien está trabajando con datos de Twitter y quiere compartir experiencias, me encantaría que contactase conmigo.
]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-1072'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-1072'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-1072'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/" data-count="horizontal" data-text="Como hacer minería de datos de Twitter y no morir en el intento" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-1072'></div><a class='DD_FBSHARE_AJAX_1072' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/')+'&amp;title='+encodeURIComponent('Como hacer minería de datos de Twitter y no morir en el intento'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p><a href="http://www.barriblog.com/wp-content/uploads/2010/10/twitter_mining.jpg"><img class="aligncenter size-full wp-image-1075" title="twitter_mining" src="http://www.barriblog.com/wp-content/uploads/2010/10/twitter_mining.jpg" alt="" width="550" height="378" /></a>Llevo unos meses sin actualizar el blog debido a mi dedicación con pico y pala a la <strong>extracción y análisis de datos en Twitter</strong>, labor <strong>nada trivial</strong> <strong>ni exenta de riesgos</strong> como se podrá constatar tras leer los obstáculos más importantes que me he encontrado en el ejercicio del <em>data mining</em> Twitter:</p>
<ol>
<li><strong>No hay conexión que tres días dure</strong>: El uso del <strong>streaming API</strong> requiere una conexión permanente. Pero esta conexión se puede romper (y se rompe) por unos de los dos extremos: el de Twitter  y el del propio servidor. Dado que la captura de datos para un experimento puede durar meses, es evidente que hay un problema importante que resolver.</li>
<li><strong>Agua que no has de beber, déjala correr</strong>: desde que el flujo de tweets es del orden de <strong>700 TPS </strong>(Tweets Per Second)  no hay conexión que los soporte ni servidor que lo almacene, aparte de que Twitter no permite la modalidad de <a href="http://dev.twitter.com/doc/get/statuses/firehose">statuses/firehose</a> a cualquiera. Por tanto, <strong>hay que elegir </strong>lo que se quiere recibir y consecuentemente renunciar al resto.</li>
<li><strong>¿Qué fue antes la gallina o el huevo?</strong> Cuando se quiere monitorizar un evento anunciado no se sabe de antemano cuales serán los hashtag dominantes  ya que son los usuarios de Twitter los que mandan y marcan las tendencias. Cuando se quiere monitorizar un hashtag que es <em> trendring </em>es ya <em>too late</em>: con el <strong>Streaming API </strong>se habrán perdido todos los tweets que lo auparon a la cima y con el <strong>search API</strong> solo se obtendrá los 1.500 últimos tweets. Véase el caso de la huelga general del <strong>29-O</strong> ¿Quién iba a saber de antemano cual serían los hashtags más usados?</li>
<li><strong>Nunca están todos los tweets que son ni son todos los que están:</strong> Cuando se escogen los hashtags para monitorizar la información deseada es como <strong>jugar a las siete y media</strong>: que te pasas o que no llegas: Si se eligen hashtags que no son muy específicos se corre el riesgo de que haya tweets que no sean relevantes (problemas de ambiguación) y si se opta por otros más específicos se quedarán muchos tweets en el tintero, eso sin contar a la cantidad de tweets que no se etiquetan mediante hashtags.</li>
<li><strong>El tamaño sí importa</strong>. Una captura de continua de tweets durante meses significa un volumen de información muy considerable, tanto para almacenar como para procesar. A 50 TPS, guardando la información en modo texto plano (200bytes) son 10K por segundo, 600K por minuto, 36 Megas por hora, 864 megas, casi un giga, al día.</li>
</ol>
<p>El <em>data mining</em> en Twitter requiere paciencia, perseverancia e ingenio. Es necesario saber de antemano que se trabaja en un entorno difuso y que hay que adaptarse al medio para capturar la información de la manera más eficiente. Estos son unos consejos para obtener tweets y no morir en el intento:</p>
<ol>
<li><strong>Para mantener la conexión siempre viva</strong> es necesario realizar una aplicación de captura de tweets robusta y resolver el problema de la disponibilidad de servidores<br />
La aplicación de captura de tweets cuando pierda la conexión con Twitter  debe intentar restablecerla de nuevo hasta que lo consiga y dejar toda la historia de las conexiones en un fichero de log.<br />
Es preciso crear un <em>daemon </em>para arrancar esta aplicación automáticamente en el inicio del sistema y para pararla de una manera ordenada antes del apagado del servidor. Si la captura de tweets no se realiza en paralelo con un servidor de <em>backup </em>es conveniente que el <em>daemon </em>avise mediante un email de alerta  antes de ser apagado para  activar la captura en un servidor provisional.</li>
<li><strong>Para elegir los hashtags</strong> hay que anticiparse “adivinando” los  hashtags triunfadores, monitorizar por exceso e ir ajustando los hashtags conforme vayan definiéndose. Esto requiere estar pendiente de lo que ocurre en Twitter hasta que se tengan identificados los hashtags relevantes  y que la aplicación de captura de tweets permita ser reconfigurada sobre la marcha.</li>
<li><strong>Para seleccionar la información relevante</strong> hay que posprocesar la información obtenida actuando en tres frentes: crear filtros para eliminar posible spam, suprimir información no relevante, y  refinar la selección que ofrece Twitter:
<ul>
<li> <strong>Filtrar spam</strong> es fácil porque los spamers son muy cansinos: Twittean siempre lo mismo y los hacen con algún bot de forma compulsiva. Cuando se selecciona el top de los autores quedan al descubierto. Solo es necesario crear un filtro de tweets con los nombres de usuarios spamers más destacados.</li>
<li> <strong>Filtrar información no relevante</strong> lo más práctico es buscar el top de los hashtags y ver cuales de ellos no son relevantes con los datos que estamos analizando y se les añade al filtro de tweets.</li>
<li> <strong>Refinar selección de Twitter</strong>: Twitter intenta dar información por exceso, por ejemplo si monitorizamos el hashtags #esp, enviará los tweets que contengan esp o #esp, tanto en mayúsculas como en minúsculas.   En algunos casos esto no es conveniente y se debe hacer un filtrado más estricto de los hashtags.</li>
</ul>
</li>
<li><strong>Para aliviar el uso masivo de disco </strong>se pueden almacenar los tweets  en módulos de un tamaño manejable y comprimirlos. Algunos lenguajes como Python son capaces de abrir ficheros comprimidos e incluso leerlos a la misma velocidad que a la de los descomprimidos.</li>
</ol>
<p>Espero que estos consejos sean de utilidad y si alguien está trabajando con datos de Twitter y quiere compartir experiencias, me encantaría que contactase conmigo.</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_1072()',1000);window.setTimeout('loadLinkedin_1072()',1000);window.setTimeout('loadTwitter_1072()',1000);window.setTimeout('loadFBShare_1072()',1000); }); </script><script type="text/javascript"> function loadGoogle1_1072(){ jQuery(document).ready(function($) { $('.dd-google1-1072').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_1072(){ jQuery(document).ready(function($) { $('.dd-linkedin-1072').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_1072(){ jQuery(document).ready(function($) { $('.dd-twitter-1072').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_1072(){ jQuery(document).ready(function($) { $('.dd-fbshare-1072').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2010/10/01/como-hacer-mineria-de-datos-de-twitter-y-no-morir-en-el-intento/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Lo que siempre quiso saber del API de Twitter y nunca se atrevió a preguntar</title>
		<link>http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/</link>
		<comments>http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 09:06:12 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Stremaing]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=1036</guid>
		<description><![CDATA[0Actualmente Twitter es una de las mayores fuentes de información en tiempo real de Internet alimentada por millones de usuarios. Durante el último mes he intentado buscar respuestas estas preguntas: ¿Cuál es la cantidad de tweets? ¿Qué se puede obtener con los APIs de Twitter? ¿Cuáles son las limitaciones del API de Twitter? ¿Qué persistencia [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-1036'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-1036'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-1036'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/" data-count="horizontal" data-text="Lo que siempre quiso saber del API de Twitter y nunca se atrevió a preguntar" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-1036'></div><a class='DD_FBSHARE_AJAX_1036' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/')+'&amp;title='+encodeURIComponent('Lo que siempre quiso saber del API de Twitter y nunca se atrevió a preguntar'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p>Actualmente<strong> Twitter</strong> es una de las mayores fuentes de información en tiempo real de Internet alimentada por millones de usuarios. Durante el último mes he intentado buscar respuestas estas preguntas:</p>
<ul>
<li>¿Cuál es la cantidad de tweets?</li>
<li>¿Qué se puede obtener con los APIs de Twitter?</li>
<li>¿Cuáles son las limitaciones del API de Twitter?</li>
<li>¿Qué persistencia tienen los tweets?</li>
</ul>
<p style="text-align: center;">Lo que he averiguado lo he  representarlo en una infografía para los muy ocupados y en modo textual para los que su curiosidad sea aún mayor.<br />
<a href="http://www.barriblog.com/wp-content/uploads/2010/07/Infografía-tweets.jpg"><img class="aligncenter size-full wp-image-1037" title="Infografía tweets" src="http://www.barriblog.com/wp-content/uploads/2010/07/Infografía-tweets.jpg" alt="" width="583" height="842" /></a></p>
<h4>¿Cuál es la cantidad de tweets?</h4>
<p>El número de usuarios de Twitter  y por tanto el de tweets generados tiene un crecimiento espectacular.  El despegue comenzó en el 2009 y en <a href="http://blog.twitter.com/2010/02/measuring-tweets.html">un año se ha multiplicado por 25</a>.  Con este tráfico de entrada cualquier evento global es una prueba de fuego para Twitter, como ha sido el caso de la Wold Cup que nos ha traído de nuevo a la ballena azul.</p>
<p>Durante la segunda semana de la World Cup se ha alcanzado el <a href="http://blog.twitter.com/2010/06/another-big-record-part-deux.html"><strong>record de  3.283 TPS</strong></a> (<strong>T</strong>weets <strong>P</strong>er <strong>S</strong>econd) y la <strong>media</strong> actual es de <strong>750 TPS</strong>.  Esto hace casi inalcanzable obtener tal cantidad  de información (y almacenarla) por lo que habrá que pensar en  soluciones creativas para poder obtener los datos que se deseen.</p>
<h4>¿Qué se puede obtener con los APIs de Twitter?</h4>
<p>Twitter ofrece <strong>tres</strong> <strong>APIs</strong>:   <a href="http://dev.twitter.com/pages/streaming_api_methods">Streaming API</a>, <a href="http://twitterapi.pbworks.com/Twitter-API-Documentation"> REST API</a> y  <a href="http://twitterapi.pbworks.com/Twitter-API-Documentation">Search API</a> aplicables a necesidades diferentes.</p>
<p>El <strong>Streaming API</strong> proporciona un subset de tweets en casi tiempo real. Se establece una conexión permanente por usuario con los servidores de <strong>Twitter</strong> y mediante una petición http  se recibe un flujo continúo de tweets en formato json.  Se puede obtener una <strong>muestra aleatoria</strong> (statuses/sample), un <strong>filtrado</strong> (statuses/filter) por palabras claves o por usuarios. Sin embargo, los métodos más interesantes cómo obtener <strong>todo el caudal de tweets</strong> (statuses/firehose) o sólo los <strong>tweets que tienen enlaces </strong>(statuses/links) o los tweets con <strong>retweets</strong> (statuses/retweet) &#8220;<strong><em>Is not a generally available resource</em></strong>&#8221; :-(</p>
<p>El <strong>Search API</strong> suministra los tweets con una profundidad en el tiempo de<strong> 7 días</strong> que se ajustan a la query solicitada. Es posible filtrar por, <strong>cliente utilizado</strong>, <strong>lenguaje</strong> y <strong>localización</strong>. No requiere autenticación y los tweets se obtienen en formato <strong>json</strong> o  <strong>atom</strong>.</p>
<p>El <strong>REST API</strong> ofrece a los desarrolladores el acceso al <strong>core </strong>de los datos de <strong>Twitter</strong>. Todas las operaciones que se pueden hacer vía web son posibles realizarlas desde el <strong>API</strong>.  Dependiendo de la operación requiere o no autenticación, con el mismo criterio que en el acceso web. Sopota los formatos: <strong>xml</strong>, <strong>json</strong>, <strong>rss</strong>, <strong>atom</strong>.</p>
<p>El <strong>Search API</strong> ofrece una información más limitada del tweet,  en concreto sobre los datos del autor en el que solo indica el <strong>Id</strong>,  el <strong>screen</strong>_<strong>name</strong> y la url de su <strong>avatar</strong>. Los otros dos <strong>APIs</strong> si ofrecen el perfil completo del autor en el momento de la escritura del tweet.</p>
<h4>¿Cuáles son las limitaciones de  los APIs de Twitter?</h4>
<p>En el <strong>Streaming API</strong> el flujo es continuo y la velocidad de recepción de tweets tendrá fluctuaciones que dependerán del ancho de banda de los dos extremos de la conexión y la sobrecarga de los servidores de Twitter. Actualmente estoy haciendo medidas en dos servidores y publicaré los resultados tan pronto como estén disponibles.</p>
<p>En el <strong>Search API</strong> y en el <strong>REST API</strong> existe una limitación de <strong>150 peticiones a la hora</strong> por usuario o por IP si la llamada no está autenticada.<br />
Es importante saber cómo realizar la  paginación de las  peticiones de una manera óptima para sacarle el  máximo partido.</p>
<table border="0" cellspacing="1" cellpadding="4" width="60%" bgcolor="#cccccc">
<tbody>
<tr>
<td style="text-align: center;" width="15%" bgcolor="#aaaaff"><strong>API</strong></td>
<td style="text-align: center;" width="25%" bgcolor="#aaaaff"><strong>Petición</strong></td>
<td style="text-align: center;" width="35%" bgcolor="#aaaaff"><strong>Max. Tamaño Pagina</strong></td>
<td style="text-align: center;" width="25%" bgcolor="#aaaaff"><strong>Max. Total</strong></td>
</tr>
<tr>
<td bgcolor="#ffffff">Search</td>
<td bgcolor="#ffffff">search</td>
<td style="text-align: right;" bgcolor="#ffffff">200 tweets</td>
<td style="text-align: right;" bgcolor="#ffffff">1500 tweets<strong>-</strong></td>
</tr>
<tr>
<td bgcolor="#ffffff">REST</td>
<td bgcolor="#ffffff">statuses</td>
<td style="text-align: right;" bgcolor="#ffffff">200 tweets</td>
<td style="text-align: right;" bgcolor="#ffffff">3200 tweets</td>
</tr>
<tr>
<td bgcolor="#ffffff">REST</td>
<td bgcolor="#ffffff">friends/ids</td>
<td style="text-align: right;" bgcolor="#ffffff">5.000 id users</td>
<td style="text-align: right;" bgcolor="#ffffff">Los que haya (*)</td>
</tr>
<tr>
<td bgcolor="#ffffff">REST</td>
<td bgcolor="#ffffff">followers/ids</td>
<td style="text-align: right;" bgcolor="#ffffff">5.000 id users</td>
<td style="text-align: right;" bgcolor="#ffffff"><strong> </strong>Los que haya (*)</td>
</tr>
</tbody>
<tbody></tbody>
</table>
<p>(*) hemos obtenido los seguidores de <a href="http://twitter.com/BARACKOBAMA">Barack Obama</a> que sobrepasa los<strong> 4,5 millones de followers</strong></p>
<h4>¿Qué persistencia tienen los tweets?</h4>
<p>Aunque todos los tweets residan en las BB.DD. de Twitter hay una limitación temporal para obtenerlos.</p>
<table border="0" cellspacing="1" cellpadding="4" width="50%" bgcolor="#cccccc">
<tbody>
<tr>
<td style="text-align: center;" width="15%" bgcolor="#aaaaff"><strong>API</strong></td>
<td style="text-align: center;" width="40%" bgcolor="#aaaaff"><strong>Limitación temporal</strong></td>
<td style="text-align: center;" width="45%" bgcolor="#aaaaff"><strong>Limitación tamaño</strong></td>
</tr>
<tr>
<td bgcolor="#ffffff">Streaming</td>
<td style="text-align: center;" bgcolor="#ffffff">Solo tiempo real</td>
<td style="text-align: center;" bgcolor="#ffffff"><strong> -</strong></td>
</tr>
<tr>
<td bgcolor="#ffffff">Search</td>
<td style="text-align: center;" bgcolor="#ffffff">-7 días</td>
<td style="text-align: right;" bgcolor="#ffffff">1500 últimos tweets</td>
</tr>
<tr style="text-align: right;">
<td style="text-align: left;" bgcolor="#ffffff">REST</td>
<td style="text-align: center;" bgcolor="#ffffff">NO</td>
<td style="text-align: center;" bgcolor="#ffffff">3200 últimos tweets</td>
</tr>
</tbody>
<tbody></tbody>
</table>
<p>-</p>
<p>﻿</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_1036()',1000);window.setTimeout('loadLinkedin_1036()',1000);window.setTimeout('loadTwitter_1036()',1000);window.setTimeout('loadFBShare_1036()',1000); }); </script><script type="text/javascript"> function loadGoogle1_1036(){ jQuery(document).ready(function($) { $('.dd-google1-1036').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_1036(){ jQuery(document).ready(function($) { $('.dd-linkedin-1036').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_1036(){ jQuery(document).ready(function($) { $('.dd-twitter-1036').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_1036(){ jQuery(document).ready(function($) { $('.dd-fbshare-1036').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2010/07/06/lo-que-siempre-quiso-saber-del-api-de-twitter-y-nunca-se-atrevio-a-preguntar/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Compartiendo la herramienta tweets_info.py</title>
		<link>http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/</link>
		<comments>http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/#comments</comments>
		<pubDate>Tue, 25 May 2010 10:21:16 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=1013</guid>
		<description><![CDATA[0Tenía pendiente hacer pública la herramienta que utilicé  en el experimento del hashtag #manifiesto y en el resumen visual de la conferencia WWW2010. Me lo ha recordado @paco229 en este tweet: paco229 en su momento @congosto dijo que iba a publicar los scripts que usó para hacerlo #inp 8:01 AM May 19th via TweetChat Le [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-1013'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-1013'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-1013'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/" data-count="horizontal" data-text="Compartiendo la herramienta tweets_info.py" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-1013'></div><a class='DD_FBSHARE_AJAX_1013' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/')+'&amp;title='+encodeURIComponent('Compartiendo la herramienta tweets_info.py'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p>Tenía pendiente <strong>hacer pública</strong> la herramienta que utilicé  en el experimento del hashtag <strong>#manifiesto</strong> y en el resumen visual de la conferencia <strong>WWW2010</strong>. Me lo ha recordado<strong><a href="http://twitter.com/paco229"> @paco229</a></strong> en este tweet:</p>
<p><img class="photo fn" src="http://a3.twimg.com/profile_images/765184145/jfg04_Twitter_normal.jpg" alt="Francisco George" width="48" height="48" align="left" /><strong><a class="tweet-url screen-name" href="http://twitter.com/paco229">paco229</a></strong> en su momento @<a class="tweet-url username" rel="nofollow" href="/congosto">congosto</a> dijo que iba a publicar los scripts que usó para hacerlo <a class="tweet-url hashtag" title="#inp" rel="nofollow" href="/search?q=%23inp">#inp</a><br />
<a class="entry-date" rel="bookmark" href="http://twitter.com/paco229/status/14286120280">8:01 AM May 19th</a> via <a rel="nofollow" href="http://tweetchat.com/">TweetChat</a></p>
<p>Le he sacado un poco de brillo al script y lo he documentado para que lo pueda usar quién esté interesado en sacar información de Twitter.</p>
<p>El script asume que el formato de entrada es el modo texto de la  herramienta <a href="http://tweetbackup.com/">tweetbackup</a>. Está escrito en <a href="http://www.python.org/">python</a> y permite extraer la siguiente información de un conjunto de tweets:</p>
<ul>
<li>los autores y cuantos tweets han escrito</li>
<li>las palabras y el número de veces que se han utilizado (es posible filtrar las palabras irrelevantes)</li>
<li>los hastagh y el número de repeticiones</li>
<li>el número de tweets por cada día</li>
<li>el número de tweets por hora</li>
<li>las urls y el número de repeticiones, el ranking de los sitios web mencionados y de los servicios acortadores de urls.</li>
</ul>
<p><a href="http://barriblog.com/code/tweets_info.py">Descargar tweets_info.py</a></p>
<p>He aprovechado para cambiar el diseño de <a href="http://www.barriblog.com/wiki/index.php/Portada">barriblog-wiki</a> para publicar tambien allí las herramientas que vaya realizando. Espero que sean de utilidad</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_1013()',1000);window.setTimeout('loadLinkedin_1013()',1000);window.setTimeout('loadTwitter_1013()',1000);window.setTimeout('loadFBShare_1013()',1000); }); </script><script type="text/javascript"> function loadGoogle1_1013(){ jQuery(document).ready(function($) { $('.dd-google1-1013').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_1013(){ jQuery(document).ready(function($) { $('.dd-linkedin-1013').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_1013(){ jQuery(document).ready(function($) { $('.dd-twitter-1013').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_1013(){ jQuery(document).ready(function($) { $('.dd-fbshare-1013').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2010/05/25/herramienta-tweet_info-py/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RTs vs. clicks</title>
		<link>http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/</link>
		<comments>http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 11:13:44 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Experimentos]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Visualizaciones]]></category>
		<category><![CDATA[#manifiesto]]></category>
		<category><![CDATA[bit.y]]></category>
		<category><![CDATA[clicks]]></category>
		<category><![CDATA[menciones]]></category>
		<category><![CDATA[RT]]></category>
		<category><![CDATA[urls]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=853</guid>
		<description><![CDATA[0 Correlación entre el nº de clicks y los RTs entre los tweets que se han retransmitido cinco o más veces. Para acceder a la visualización interactiva, pulsar en la imagen Una de las preguntas que me hacía en el análisis del hashtag #manifiesto era si existía alguna correlación entre la retransmisión de una url [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-853'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-853'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-853'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/" data-count="horizontal" data-text="RTs vs. clicks" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-853'></div><a class='DD_FBSHARE_AJAX_853' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/')+'&amp;title='+encodeURIComponent('RTs vs. clicks'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p style="text-align: center;"><a href="http://www.barriblog.com/wp-content/uploads/2010/04/rt-vs-click1.jpg"><img class="aligncenter size-full wp-image-879" title="rt-vs-click" src="http://www.barriblog.com/wp-content/uploads/2010/04/rt-vs-click1.jpg" alt="" width="606" height="373" /></a></p>
<p style="text-align: center;">Correlación entre el nº de <strong>clicks </strong>y los <strong>RTs</strong> entre los tweets que se han retransmitido <strong>cinco o más veces</strong>.</p>
<p style="text-align: center;">Para acceder a la visualización interactiva, pulsar en la imagen</p>
<p>Una de las preguntas que me hacía en el análisis del hashtag <strong>#manifiesto</strong> era si existía alguna correlación entre la <strong>retransmisión</strong> de una url y el número de <strong>clicks </strong>que recibía. He podido comprobarlo analizando los clicks de la urls acordadas por el servicio <a href="http://bit.ly/">bit.ly</a> usando el <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation">API de bit.ly</a></p>
<p>En los datos recogidos hay valores muy extremos, siendo <strong>0,007 </strong>el índice de correlación lineal de la <strong>muestra total</strong>. Aparecen urls con miles de clicks que no se han retransmitido, mientras que otras muy retransmitidas no han llegado a cien clicks. Sin embargo, si se calcula la  correlación segregando la muestra en función del <strong>número de RTs</strong> el índice aumenta hasta el<strong> 0,41</strong> para las urls que han tenido<strong> 5 o más RTs </strong>(caso que ilustra la cabecera del post)<strong>. </strong>La siguiente imagen muestra el <strong>índice de correlación</strong> entre los <strong>clicks</strong> y los <strong>RTs</strong> en función de la <strong>muestra segregada</strong> por nº de RTs.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2010/04/correlacion-rts-clicks.jpg"><img class="aligncenter size-full wp-image-873" title="correlacion-rts-clicks" src="http://www.barriblog.com/wp-content/uploads/2010/04/correlacion-rts-clicks.jpg" alt="" width="445" height="308" /></a></p>
<p><strong>No se puede concluir  nada concreto</strong> de estos datos y es preciso medir otros valores como el <strong>número de seguidores </strong>para intentar aproximarse  a una medida de la <strong>influencia</strong> del emisor del tweet. Para calcularla aún debo esperar un poco.</p>
<h3>Antecedentes</h3>
<p>Cuando analicé las<strong> <a href="http://www.barriblog.com/index.php/2010/04/14/blogs-vs-prensa-en-el-hashtag-manifiesto/">urls </a></strong><a href="http://www.barriblog.com/index.php/2010/04/14/blogs-vs-prensa-en-el-hashtag-manifiesto/">del los tweets del hashtag <strong>#manifiesto</strong></a>, descubrí  que las <strong>urls acortadas</strong> son una barrera para estudiar los enlaces que aparecen en los tweets. De una muestra de <strong>20.236 </strong>tweets que contenían links,  el <strong>82%</strong> estaban acortados. El coste en tiempo que supone expandir la url y la tasa de error dificultan obtener el enlace real. Para alargar una url se precisa <strong>un acceso http </strong>por lo que se dispara el tiempo de tratamiento, pasando a hablar de <strong>unidades de segundo</strong> <strong>por enlace</strong>.</p>
<p>Comentando con mi grupo de investigación esta limitación estuvimos buscando alternativas para solventar el problema, como paralelizar los accesos http o intentar interactuar con los servicios acortadores. Siendo <a href="http://bit.ly/">bit.ly</a> con un <strong>55,76%</strong>. el servicio más extendido parecía el candidato ideal para estudiar qué posibilidades ofrecía. <a href="http://twitter.com/nordez">@nordez,</a> rápidamente vio el <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation">API de bit.ly</a> y me pasó el enlace.</p>
<p>Aunque mi intención era intentar mejorar el tiempo de expansión de los enlaces utilizando el API por su <strong>posibilidad de enviar peticiones de un grupo de urls</strong>, me llamó la atención una opción que permite obtener el <strong>número de clicks de un link dado</strong> y me distrajo del objetivo. La<strong> información</strong> que proporciona el <strong>API </strong>de los clicks está <strong>muy simplificada</strong>, tan solo se obtienen los clicks por usuario y los globales, mucho menos de los que suministra la<strong> interfaz web</strong> cuando <strong>a la url corta de bit.ly se le añade un + al final</strong>, pero supongo que se estarán reservando para opciones premium.</p>
<h3>Metodología<a href="http://www.barriblog.com/wp-content/uploads/2010/04/bitly.jpg"><img class="aligncenter size-full wp-image-854" title="bitly" src="http://www.barriblog.com/wp-content/uploads/2010/04/bitly.jpg" alt="" width="620" height="245" /></a></h3>
<p>He probado el <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation">API de bit.ly</a> con la librería <a href="http://code.google.com/p/python-bitly/">Python-bitly</a> de  <a href="http://code.google.com/u/yoav.aviram/">yoav.aviram</a> para analizar los clicks de las urls acortadas con bit.ly. Procesar <strong>4.331</strong> urls ha llevado <strong>78m 50.546s</strong>. aproximadamente <strong>1,09</strong> segundos por url y se han producido<strong> 37</strong> errores (0,85%).  De los datos obtenidos se han eliminado las urls que se han <strong>comprimido anónimamente</strong> porque no aparece su número de clicks, quedando en <strong>3.636</strong> urls. Todos lo datos obtenidos están disponibles en este <a href="https://spreadsheets.google.com/ccc?key=0AvqG-02OdbLbdFU1SEFIMjV6YmNqeFVEeEVORUd4M0E&amp;hl=en">dataset</a>.</p>
<p><strong>Enlaces relacionados</strong>:</p>
<ul>
<li><a rel="bookmark" href="../index.php/2010/04/14/blogs-vs-prensa-en-el-hashtag-manifiesto/">Blogs vs. Prensa en el hashtag #manifiesto</a></li>
<li><a rel="bookmark" href="../index.php/2010/04/05/analizando-el-tag-manifiesto/">Analizando el hashtag #manifiesto</a></li>
<li><a href="http://www.barriblog.com/wiki/index.php/Resultados_manifiesto">Resultados del estudio del hashtag #manifiesto</a> (versión wiki)</li>
</ul>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_853()',1000);window.setTimeout('loadLinkedin_853()',1000);window.setTimeout('loadTwitter_853()',1000);window.setTimeout('loadFBShare_853()',1000); }); </script><script type="text/javascript"> function loadGoogle1_853(){ jQuery(document).ready(function($) { $('.dd-google1-853').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_853(){ jQuery(document).ready(function($) { $('.dd-linkedin-853').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_853(){ jQuery(document).ready(function($) { $('.dd-twitter-853').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_853(){ jQuery(document).ready(function($) { $('.dd-fbshare-853').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2010/04/26/rts-vs-clicks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Explorando el camino del XHTML</title>
		<link>http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/</link>
		<comments>http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 10:22:37 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[arquitectura]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[html2xhtml]]></category>
		<category><![CDATA[tidy]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=250</guid>
		<description><![CDATA[0 Los errores sintácticos han sido uno de los problemas que me he encontrado al analizar el código HTML de los blogs con el programa  Lestat, como ya  escribí  hace tiempo en el post titulado  El diablo cojuelo.  Hace unas semanas  Norberto Fernández,  profesor de mi Departamento  me sugirió  que convirtiese el HTML de los [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-250'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-250'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-250'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/" data-count="horizontal" data-text="Explorando el camino del XHTML" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-250'></div><a class='DD_FBSHARE_AJAX_250' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/')+'&amp;title='+encodeURIComponent('Explorando el camino del XHTML'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p><img class="alignnone size-full wp-image-254" title="xhtml_logo_medium" src="http://www.barriblog.com/wp-content/uploads/2009/07/xhtml_logo_medium.png" alt="xhtml_logo_medium" width="200" height="180" /></p>
<p>Los errores sintácticos han sido uno de los problemas que me he encontrado al analizar el código <a href="http://en.wikipedia.org/wiki/HTML">HTML</a> de los blogs con el programa  <strong>Lestat</strong>, como ya  escribí  hace tiempo en el post titulado  <a href="../index.php/2008/01/11/el-diablo-cojuelo/">El diablo cojuelo</a>.  Hace unas semanas  <a href="http://www.it.uc3m.es/~berto/es.html">Norberto Fernández</a>,  profesor de mi Departamento  me sugirió  que convirtiese el HTML de los blogs a <a href="http://en.wikipedia.org/wiki/XHTML">XHTML</a> y me indicó dos herramientas para hacerlo: <strong><a href="http://tidy.sourceforge.net/">tidy</a></strong> y <strong><a href="http://www.it.uc3m.es/jaf/html2xhtml/">html2xhtml</a></strong>.</p>
<p>Estas herramientas son capaces de convertir <strong>HTML</strong> en <strong>XHTML</strong>, ordenando, limpiando y corrigiendo los errores de markup.  Las ventajas de trabajar con <strong>XHTML</strong> son múltiples:  es un lenguaje de marcas bien estructurado, permite de recorrer el documento  con <a href="http://en.wikipedia.org/wiki/XPath">XPATH</a> o con <a href="http://en.wikipedia.org/wiki/XSL_Transformations">XSLT</a>.</p>
<p>La herramienta <strong><a href="http://tidy.sourceforge.net/">tidy</a></strong>, disponible en <a href="http://en.wikipedia.org/wiki/C_(programming_language)">lenguaje c</a> y <a href="http://en.wikipedia.org/wiki/Java_%28programming_language%29">java</a>, fue desarrollada por <a href="http://www.w3.org/People/Raggett/">Dave Raggett </a>y como dice su autor:</p>
<blockquote><p><em>Is an open source utility for tidying up HTML. Tidy is composed from an HTML parser and an HTML pretty printer. The parser goes to considerable lengths to correct common markup errors. It also provides advice on how to make your pages more accessible to people with disabilities, and can be used to convert HTML content into XML as XHTML. Tidy is W3C open source and available free. It has been successfully compiled on a large number of platforms, and is being integrated into many HTML authoring tools. Recently the maintenance of Tidy has been taken over by a group of dedicated volunteers on SourceForge</em></p></blockquote>
<p>La herramienta   <strong><a href="http://www.it.uc3m.es/jaf/html2xhtml/">html2xhtml</a></strong> se ofrece como servicio web y su código fuente está  disponible en <a href="http://en.wikipedia.org/wiki/C_(programming_language)">lenguaje c</a> que funciona tanto en plataformas <a href="http://en.wikipedia.org/wiki/GNU/Linux">GNU/Linux</a> como Windows, aunque en su versión compilada sólo se ofrece para Windows, siendo necesario en otras plataformas compilarlo a partir de su código fuente.  Ha sido desarrollada por <a href="http://www.it.uc3m.es/jaf/index.html">Jesús Arias Fisteus</a>, profesor de la <a href="http://www.uc3m.es/">Universidad Carlos III</a> y como dice su autor:</p>
<blockquote><p><em>Is an open-source converter from HTML to XHTML. it converts HTML files into XHTML. It can fix many common errors in HTML files (e.g. missing end tags, elements with incorrect content model, non-standard elements or attributes, etc.) The output document type can be selected among several XHTML DTDs (1.0, 1.1, Basic, etc.).</em></p></blockquote>
<p>He realizado una prueba  de estas dos herramientas <strong>sobre 100 blogs</strong> de la tesis de <a href="http://tiscar.com/">Tíscar Lara</a></p>
<table style="border: medium none; border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="page-break-inside: avoid;">
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; background: #ffff99 none repeat scroll 0% 0%; width: 400.2pt;" width="400" valign="top">Escenario de la prueba:</p>
<ul>
<li> Entorno de ejecución <strong><a href="http://www.cygwin.com/">cygwin</a></strong> bajo Windows</li>
<li> Versión de <strong>tidy</strong> 25 de marzo de 2009</li>
<li> Invocación tidy -asxhtml -numeric &lt; origen.html &gt; destino.xhtml</li>
<li> versión de <strong>html2xhtml</strong> 7 de julio de 2009</li>
<li> Invocación html2xhtml origen.html -o destino.xhtml</li>
<li> Los tiempos de ejecución están medidos realizando la <strong>conversión desde fichero</strong>.</li>
</ul>
<p>Estos han sido los resultados:</p>
<p>La herramienta <strong>tidy</strong> ha podido convertir <strong>88 de los 100</strong> blogs analizados(1) mientras que la herramienta <strong>html2xhtml</strong> ha conseguido   convertir <strong>99 sobre 100 blogs</strong>.  Las herramientas muestran un buen   comportamiento, sobre todo <strong>html2xhtml</strong>, dado que  los errores de sintaxis del   código HTML de los blogs son muy frecuentes.    Esto abre la posibilidad de poder analizar el contenido de los blogs   por otros medios a demás de los clásicos <a href="http://en.wikipedia.org/wiki/Parsing">parsers</a>. Respecto al tiempo de ejecución la herramienta <strong>html2xhtml</strong> ha utilizado<strong> 0 min  48 seg</strong>(2)  mientras que <strong>tidy</strong> ha tardado <strong>3 min 6.629 seg</strong>(3).</td>
</tr>
</tbody>
</table>
<p>Después de esta prueba  se me abren nuevos caminos para continuar el desarrollo de <strong>lestat</strong>. Pero como decía <a href="http://en.wikipedia.org/wiki/Scarlett_O%27Hara">Scarlett O’Hara</a>, &#8220;eso lo pensaré mañana&#8221;.</p>
<p>&#8212;&#8212;&#8211;</p>
<div>(1) Utilizando algunas opciones en <strong>tidy</strong> es posible mejorar este porcentaje, pero para realizar la comparación de herramientas se ha invocado el comando de la manera más elemental</div>
<div>(1)  <strong>html2xhtml</strong> real 0 min  48 seg, user, 0 min 16 seg, sys 0 min 10,685 seg<br />
(2) <strong>tidy</strong> real 3 min 6,629 seg, user 0 min 36,049 seg,  sys 0 min 59,186 seg</div>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_250()',1000);window.setTimeout('loadLinkedin_250()',1000);window.setTimeout('loadTwitter_250()',1000);window.setTimeout('loadFBShare_250()',1000); }); </script><script type="text/javascript"> function loadGoogle1_250(){ jQuery(document).ready(function($) { $('.dd-google1-250').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_250(){ jQuery(document).ready(function($) { $('.dd-linkedin-250').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_250(){ jQuery(document).ready(function($) { $('.dd-twitter-250').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_250(){ jQuery(document).ready(function($) { $('.dd-fbshare-250').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2009/07/17/explorando-el-camino-del-xhtml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Despertando a Lestat</title>
		<link>http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/</link>
		<comments>http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/#comments</comments>
		<pubDate>Wed, 27 May 2009 11:31:39 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[bison]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[lestat]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/?p=185</guid>
		<description><![CDATA[0 He despertado a  Lestat para ampliar y mejorar sus funciones. Es una dura tarea retomar un programa que se ha dejado reposar demasiado tiempo. Con paciencia y perseverancia estoy intentando  volver a entenderlo como el día que lo  dejé aunque esto tiene su precio. Una de las facturas que me ha pasado Lestat por [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-185'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-185'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-185'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/" data-count="horizontal" data-text="Despertando a Lestat" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-185'></div><a class='DD_FBSHARE_AJAX_185' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/')+'&amp;title='+encodeURIComponent('Despertando a Lestat'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p><img class="alignnone size-full wp-image-201" title="bug-lestat-config1" src="http://www.barriblog.com/wp-content/uploads/2009/05/bug-lestat-config1.jpg" alt="bug-lestat-config1" width="450" /></p>
<p>He despertado a  <a href="http://www.barriblog.com/index.php/2007/07/22/la-importancia-de-llamarse-ernesto/">Lestat </a>para ampliar y mejorar sus funciones. Es una dura tarea retomar un programa que se ha dejado reposar demasiado tiempo. Con paciencia y perseverancia estoy intentando  volver a entenderlo como el día que lo  dejé aunque esto tiene su precio.</p>
<p>Una de las facturas que me ha pasado <strong>Lestat</strong> por este abandono ha sido un <em>bug</em> que me ha costado un poco encontrarlo. Estoy falta de reflejos pero en mi favor tengo que decir que el <em>bug </em>tenía  un sentido del humor muy sutil. Aquí lo cuento para que juzgue el lector:</p>
<p>Una de las funciones que le he añadido a <strong>Lestat </strong>es un fichero de configuración para darle más flexibilidad en la ejecución. Para ello he definido una gramática que permita describir la configuración y la he analizado con<a href="http://es.wikipedia.org/wiki/Herramienta_de_programaci%C3%B3n_lex"> lex</a>/<a href="http://es.wikipedia.org/wiki/GNU_Bison">bison</a>.  Además de la  definición del léxico de la gramática puse una expresión regular para descartar caracteres en blanco, tabulaciones y saltos de línea de esta manera <code> [\ \t\n]*</code> y un <em>default </em>para gestionar errores léxicos  que ejecutaba lo siguiente:</p>
<p><code>fprintf(stderr,  "Error lexico en linea %d. Mira a ver si \'%s\' es el culpable.\n",  yylineno, yytext);<br />
fprintf(stderr,"Lestat le desea mejor suerte la proxima vez \n");</code></p>
<p>Al ejecutar el analizador del fichero de configuración obtenía un resultado incomprensible:</p>
<p><code>' es el culpable.inea 1. Mira a ver si '<br />
Lestat le desea mejor suerte la próxima vez</code></p>
<p>Primero sospeché que la función <strong>fprintf </strong>tenía un error en los parámetros y que el stack estaba corrupto. Lo miré con tanta fijeza como incredulidad.  Tras muchas trazas y muchas vueltas encontré la explicación:</p>
<p>El fichero de configuración lo había escrito en Windows por lo que el  salto de línea era <a href="http://es.wikipedia.org/wiki/CRLF">&lt;CR&gt;&lt;LF&gt;</a> (\r\n) en vez de carácter  de salto  de línea &lt;LF&gt; (\n) que utiliza unix. El análisis léxico detectaba el carácter  &lt;CR&gt;  como error léxico y se ejecutaba la sentencia:</p>
<p><code>fprintf(stderr,  "Error lexico en linea %d. Mira a ver si \'%s\' es el culpable.\n",  yylineno, yytext);</code></p>
<p>yytext contenía un &lt;CR&gt; que hacía que cuando se había escrito</p>
<p><code>Error lexico en linea 1. Mira a ver si '</code></p>
<p>Se volviera al inicio de la línea para escribir lo restante:</p>
<p><code> es el culpable.inea 1. Mira a ver si’</code></p>
<p>La solución al problema era tan sencilla como poner la expresión regular <code>[\ \t\r\n]*</code> para filtrar blancos, tabulaciones y salto de línea.</p>
<p>Estas son las cosas que pasan en la programación y que nos hacen perder mucho tiempo</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_185()',1000);window.setTimeout('loadLinkedin_185()',1000);window.setTimeout('loadTwitter_185()',1000);window.setTimeout('loadFBShare_185()',1000); }); </script><script type="text/javascript"> function loadGoogle1_185(){ jQuery(document).ready(function($) { $('.dd-google1-185').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_185(){ jQuery(document).ready(function($) { $('.dd-linkedin-185').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_185(){ jQuery(document).ready(function($) { $('.dd-twitter-185').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_185(){ jQuery(document).ready(function($) { $('.dd-fbshare-185').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2009/05/27/despertando-a-lestat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Llámalo por su nombre: GNU/linux</title>
		<link>http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/</link>
		<comments>http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 17:26:00 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Charlas]]></category>
		<category><![CDATA[Entorno de desarrollo]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/</guid>
		<description><![CDATA[0 El pasado miércoles asistí a una conferencia de Richard Stallman en el Medialab Prado. En un estupendo español, sin ppt que le amparase nos mostró sus ideas  en un discurso estructurado y coherente. Habló de las cuatro libertades, de  cómo surgió GNU,  el impacto de linux en GNU, el conflicto de ideas entre en [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-154'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-154'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-154'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/" data-count="horizontal" data-text="Llámalo por su nombre: GNU/linux" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-154'></div><a class='DD_FBSHARE_AJAX_154' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/')+'&amp;title='+encodeURIComponent('Llámalo por su nombre: GNU/linux'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p><a href="http://www.barriblog.com/wp-content/uploads/2009/03/img00372.jpg" title="img00372.jpg"></a></p>
<p style="text-align: center"><a href="http://www.barriblog.com/wp-content/uploads/2009/03/img00372.jpg" title="img00372.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2009/03/img00372.jpg" title="img00372.jpg" alt="img00372.jpg" width="350" /></a></p>
<p>El pasado miércoles asistí a una conferencia de <a href="http://es.wikipedia.org/wiki/Richard_Stallman">Richard Stallman</a> en el <a href="http://medialab-prado.es/">Medialab Prado</a>. En un estupendo español, sin ppt que le amparase nos mostró sus ideas  en un discurso estructurado y coherente.</p>
<p>Habló de <a href="http://es.wikipedia.org/wiki/C%C3%B3digo_libre">las cuatro libertades</a>, de  cómo surgió <a href="http://es.wikipedia.org/wiki/GNU">GNU</a>,  el impacto de <a href="http://es.wikipedia.org/wiki/Linux">linux</a> en GNU, el conflicto de ideas entre en proyecto GNU y <a href="http://es.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a>,  la importancia de difundir en termino <strong>GNU/linux</strong> y la conveniencia de que en la Administración Pública y en  la educación solo se utilice software libre.</p>
<p>Como una pequeña contribución me hago eco de la  difusión del término <strong>GNU-linux</strong> desde este blog. Al hablar de distribuciones de Software libre se menciona mayoritariamente el nombre de <strong>linux</strong> sin ninguna referencia a <strong>GNU</strong>. <strong>Linux</strong> es el núcleo, una parte muy importante, pero no es el todo. Las distribuciones incluyen<strong> linux</strong> con los componentes <strong>GNU</strong>. Al no mencionarlo no se reconoce la autoría, el esfuerzo ni los ideales de este proyecto. De ahí la importancia de llamarlo <strong>GNU/linux.</strong></p>
<p>Se puede constatar el uso del término buscando en Google por &#8220;<strong>linux</strong>&#8221; o por   &#8220;<strong>GNU/linux</strong>&#8220;. En el primer caso  proporciona 456.000.000 resultados mientras que en el segundo ofrece 21.300.000  resultados, cantidad sensiblemente inferior.</p>
<p>Para ver el uso reciente del término &#8220;<strong>GNU/linux</strong>&#8221; frente a &#8220;<strong>linux</strong>&#8220;  nada mejor que buscar en las conversaciones de <strong>Twitter</strong>. Las visualizaciones que aparecen a continuación están realizadas con la herramienta   <a href="http://www.neoformix.com/Projects/TwitterStreamGraphs/view.php">TwitterStreamGraphs</a> que visualiza en una línea temporal los últimos doscientos posts del <em>topic </em>elegido. Si se pulsa en las imágenes se verán  en su tamaño real.</p>
<p><em>Topic </em><strong><em> </em>GNU/linux</strong>, velocidad <strong>100 tweets/día</strong>. Unos de los <em>topics</em> asociados que sobresale es <strong>linux</strong></p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2009/03/twitter-gnu-linux.jpg" title="twitter-gnu-linux.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2009/03/twitter-gnu-linux.jpg" title="twitter-gnu-linux.jpg" alt="twitter-gnu-linux.jpg" width="450" /></a></p>
<p><em>Topic</em><strong> GNU</strong>: se parece como dos gotas de agua al <em>topic  </em>GNU/linux</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2009/03/twitter-gnu.jpg" title="twitter-gnu.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2009/03/twitter-gnu.jpg" title="twitter-gnu.jpg" alt="twitter-gnu.jpg" width="450" /></a></p>
<p><em>Topic</em><strong> linux</strong>: velocidad <strong>100 tweets/hora</strong>. Tiene asociado testimonialmente el <em>topic</em> GNU</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2009/03/twitter-linux.jpg" title="twitter-linux.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2009/03/twitter-linux.jpg" title="twitter-linux.jpg" alt="twitter-linux.jpg" width="450" /></a></p>
<p>Finalmente, desde aquí mi agradecimiento a <strong>Richard Stallman</strong> que entre sus muchas contribuciones al software libre se encuentra el hacer que <a href="http://www.gnu.org/software/bison/">Bison</a>, programa que utilizo para BarriBlog, sea compatible con <a href="http://es.wikipedia.org/wiki/Yacc">yacc</a>.</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_154()',1000);window.setTimeout('loadLinkedin_154()',1000);window.setTimeout('loadTwitter_154()',1000);window.setTimeout('loadFBShare_154()',1000); }); </script><script type="text/javascript"> function loadGoogle1_154(){ jQuery(document).ready(function($) { $('.dd-google1-154').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_154(){ jQuery(document).ready(function($) { $('.dd-linkedin-154').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_154(){ jQuery(document).ready(function($) { $('.dd-twitter-154').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_154(){ jQuery(document).ready(function($) { $('.dd-fbshare-154').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2009/03/06/llamalo-por-su-nombre-gnulinux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Como usar TouchGraph Navigator y no morir en el intento</title>
		<link>http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/</link>
		<comments>http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 01:09:58 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Visualizaciones]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/</guid>
		<description><![CDATA[0 Como comentaba en el post anterior llevo varias semanas lidiando con TouchGraph Navigator, la versión de pago de Google. Me ha recordado a los programas de Microsoft que son de pago, pero funcionan mal. Esta herramienta se ajusta al estilo minimalista de Google, por ese motivo los mensajes de error son tan transparentes que [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-137'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-137'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-137'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/" data-count="horizontal" data-text="Como usar TouchGraph Navigator y no morir en el intento" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-137'></div><a class='DD_FBSHARE_AJAX_137' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/')+'&amp;title='+encodeURIComponent('Como usar TouchGraph Navigator y no morir en el intento'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p> Como comentaba en el <a href="http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/">post anterior</a> llevo varias semanas lidiando con <strong><a href="http://www.touchgraph.com/navigator.html">TouchGraph Navigator</a></strong>, la versión de pago de <strong>Google</strong>. Me ha recordado a los programas de <strong>Microsoft</strong> que son de pago, pero funcionan mal. Esta herramienta se ajusta al estilo minimalista de <strong>Google</strong>, por ese motivo los mensajes de error son tan transparentes que no se ven. Esta estética no favorece nada a la depuración y hace perder mucho tiempo.</p>
<p>Para poder mostrar que <strong>la visualización no es algo complejo</strong> se utilizará el mismo método de explicación que en las herramientas <a href="http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/">GraphViz</a> y <a href="http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/">Pajek</a>. mediante un procedimiento en tres pasos:</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif" alt="icon_no1.gif" align="left" /></a></p>
<p><strong>Preparar datos de origen</strong>: Los datos del meme recogidos en una <a href="http://barriblog.com/enjuta_mojamuta/xls/estadistica-150-visualizacion.xls">hoja de cálculo</a> se salvan en formato <a href="http://barriblog.com/enjuta_mojamuta/xls/estadistica-150-visualizacion.txt">texto separados por tabulaciones</a>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif" alt="icon_no2.gif" align="left" /></a> <strong>Transformar datos a formato .xml</strong>: Se aplica un filtro <strong><a href="http://es.wikipedia.org/wiki/AWK">awk</a></strong> al fichero de<strong> </strong>texto separado por tabulaciones y se genera un fichero  en formato <strong>xml</strong>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif" alt="icon_no3.gif" align="left" /></a><strong>Generar el gráfico</strong>: Se procesa el fichero <strong>.xml</strong> con el programa <strong><a href="http://www.touchgraph.com/navigator.html">TouchGraph Navigator</a></strong></p>
<p><img src="http://www.barriblog.com/wp-content/uploads/2008/07/flecha.jpg" alt="flecha.jpg" /></p>
<p>El resultado obtenido con <strong>TouchGraph </strong>se puede observar en estas tres imágenes estáticas. Corresponde a la agrupación de los blogs que han participado en el meme de <a href="http://seccionfemenina.blogspot.com/2008/05/informe-del-meme-de-enjut-mojamut.html">Enjut@ Mojamut@ </a>según: <strong>género</strong>, <strong>fecha de la participación</strong> y <strong>grado de influencia en la propagación</strong>. No ha sido posible publicar los resultados de una forma interactiva por razones que se explican más adelante.</p>
<p>Al pulsar en las imágenes aparecerán en su tamaño real.</p>
<table width="100%" align="center" bgcolor="#cccccc" border="0" cellpadding="4" cellspacing="1">
<tr>
<td bgcolor="#ffffff">
<p style="text-align: center"><a href="http://www.barriblog.com/wp-content/uploads/2008/09/touchgrapgnavigator_genero.png" title="touchgrapgnavigator_genero.png"><img src="http://www.barriblog.com/wp-content/uploads/2008/09/touchgrapgnavigator_genero.thumbnail.png" alt="touchgrapgnavigator_genero.png" /></a></p>
</td>
<td bgcolor="#ffffff"><strong>Agrupación por género: </strong>En el halo rosa se encuentran los blogs femeninos y en azul los masculinos</p>
<ul>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/awk/memes_precedencias_touchgraph_navigator_genero.awk">Filtro <strong>awk</strong></a></li>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/touchgraph_navigator/precedencia_navigator_genero.xml">fichero <strong>xml</strong> generado</a></li>
</ul>
<p><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias_touchgraph_navigator.txt">Comando para generar el fichero xml</a></td>
</tr>
<tr>
<td bgcolor="#ffffff"><a href="http://www.barriblog.com/wp-content/uploads/2008/09/touchgrapgnavigator_dia.png" title="touchgrapgnavigator_dia.png"><img src="http://www.barriblog.com/wp-content/uploads/2008/09/touchgrapgnavigator_dia.thumbnail.png" alt="touchgrapgnavigator_dia.png" /></a></td>
<td bgcolor="#ffffff"><strong>Agrupación en torno a la fecha de propagación</strong>: Los blogs aparecen agrupados por su coincidencia temporal en la propagación del meme.</p>
<ul>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/awk/memes_precedencias_touchgraph_navigator_dia.awk">Filtro <strong>awk</strong></a></li>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/touchgraph_navigator/precedencia_navigator_dia.xml">fichero <strong>xml</strong> generado</a></li>
</ul>
<p><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias_touchgraph_navigator.txt">Comando para generar el fichero xml</a></td>
</tr>
<tr>
<td bgcolor="#ffffff"><a href="http://www.barriblog.com/wp-content/uploads/2008/09/touchgrapgnavigator_propagacion.png" title="touchgrapgnavigator_propagacion.png"><img src="http://www.barriblog.com/wp-content/uploads/2008/09/touchgrapgnavigator_propagacion.thumbnail.png" alt="touchgrapgnavigator_propagacion.png" /></a></td>
<td bgcolor="#ffffff"><strong>Agrupación en relación en la influencia en la propagación del meme</strong>: Se han clasificado los blogs en cinco <strong>TIERs</strong> según el número total de memes de los que son origen, directa o indirectamente: <strong>TIER-5 50 o más de 50</strong>, <strong>TIER-4 entre 49 y 25</strong>, <strong>TIER-3 entre 24 y 10,</strong> TIER-2 entre 9 y 5, <strong>TIER-1 entre 4 y 1</strong>  y <strong>TIER 0</strong> los que no ha propagado el meme.</p>
<ul>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/awk/memes_precedencias_touchgraph_navigator_propagacion.awk">Filtro <strong>awk</strong></a></li>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/touchgraph_navigator/precedencia_navigator_propagacion.xml">fichero <strong>xml</strong> generado</a></li>
</ul>
<p><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias_touchgraph_navigator.txt">Comando para generar el fichero xml</a></td>
</tr>
</table>
<p><strong>Entorno de ejecución</strong>:</p>
<table width="100%" align="center" bgcolor="#cccccc" border="0" cellpadding="4" cellspacing="1">
<tr>
<td bgcolor="#ffffff">Local</td>
<td bgcolor="#ffffff">Es necesario bajarse el  <a href="http://gnuwin32.sourceforge.net/packages/gawk.htm">awk para Windows</a>, tener instalada la maquina java y descargarse <strong><a href="http://www.touchgraph.com/navigator.html">TouchGraph Navigator</a></strong></td>
</tr>
<tr>
<td bgcolor="#ffffff">Servidor</td>
<td bgcolor="#ffffff">No apto para una doctoranda sin recursos.<a href="http://www.graphviz.org/Download_windows.php"></a></td>
</tr>
</table>
<p><strong>TouchGraph Navigator </strong>aporta las siguientes mejoras sobre la versión liberada:</p>
<ul>
<li> Permite capturar los datos desde una hoja de cálculo<strong> Excel</strong> además de la opción del fichero <strong>XML</strong>. Esto facilita la captura de datos desde herramientas ofimáticas y no precisa una transformación de los datos a un formato <strong>XML</strong>.</li>
<li>Amplía las posibilidades de visualización y mejora la estética.</li>
</ul>
<p>Cuando empecé a utilizar la herramienta me pareció sencilla hasta que intenté visualizar “<strong>El meme de enjut@ Mojamut@</strong>”. Me llevó una semana descubrir que el tamaño si importa. Para que me funcionara tuve que acortar el número de nodos a 135 (elegí los blogs con una fecha más temprana de publicación del meme). Además, la interfaz <span style="font-weight: bold">Excel </span>producía resultados erróneos aunque afortunadamente la entrada de datos por <span style="font-weight: bold">xml</span> mostró mejor comportamiento.</p>
<p>El segundo tropiezo fue cuando intenté <span style="font-weight: bold">publicar en la web los resultados</span>. Me devolvía el error de que no tenía licencia y me invitaba a pasar por caja. Por este motivo los resultados mostrados de la evaluación de la herramienta son estáticos en vez de dinámicos, como a mi me habría gustado. Por supuesto en la página de descarga de la versión de evaluación no se indicaba las limitaciones de la herramienta en cuanto al tamaño del grafo ni las condiciones para la publicación de los resultados en la Web. Solo me queda pedir una licencia como <strong>betatester </strong>a los de <span style="font-weight: bold">TouchGraph Navigator</span> para poner a prueba su sensibilidad con los <strong>tesistas</strong>.</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_137()',1000);window.setTimeout('loadLinkedin_137()',1000);window.setTimeout('loadTwitter_137()',1000);window.setTimeout('loadFBShare_137()',1000); }); </script><script type="text/javascript"> function loadGoogle1_137(){ jQuery(document).ready(function($) { $('.dd-google1-137').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_137(){ jQuery(document).ready(function($) { $('.dd-linkedin-137').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_137(){ jQuery(document).ready(function($) { $('.dd-twitter-137').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_137(){ jQuery(document).ready(function($) { $('.dd-fbshare-137').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2008/09/22/como-usar-touchgraph-navigator-y-no-morir-en-el-intento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizando con TouchGraph free</title>
		<link>http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/</link>
		<comments>http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 21:21:38 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Visualizaciones]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/</guid>
		<description><![CDATA[0Este post se lo dedico a Loretahur, a la que admiro en sus múltiples facetas y que en un plis-plas me ha solucionado el problema de alojamiento de la visualización en TouchGraph. Muchas gracias Lorena. TouchGraph es un programa escrito en java que permite visualizar y navegar interactivamente por redes de información interrelacionada. Existen dos [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-134'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-134'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-134'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/" data-count="horizontal" data-text="Visualizando con TouchGraph free" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-134'></div><a class='DD_FBSHARE_AJAX_134' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/')+'&amp;title='+encodeURIComponent('Visualizando con TouchGraph free'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p><em>Este post se lo dedico a <strong><a href="http://blog.loretahur.net/">Loretahur</a></strong>, a la que admiro en sus múltiples facetas y que en un plis-plas me ha solucionado el problema de alojamiento de la visualización en <strong>TouchGraph</strong>. Muchas gracias <strong>Lorena</strong>.</em><br />
<strong><br />
TouchGraph</strong> es un programa escrito en <a href="http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java">java</a> que permite visualizar y navegar interactivamente por redes de información interrelacionada. Existen dos modalidades, una versión <a href="http://sourceforge.net/projects/touchgraph">liberada en sourceforge</a> y una <a href="http://www.touchgraph.com/navigator.html">versión de pago</a> propiedad de Google. He querido probar ambas versiones antes de publicar este post.</p>
<p>Aunque en la versión liberada la documentación es escasa, no me costó mucho hacerla funcionar. Sin embargo, <strong>TouchGraph Navigator</strong>, la versión de pago, ha resultado ser muy cansina. Durante dos semanas he intentado hacer que visualizase la propagación de <a href="http://seccionfemenina.blogspot.com/2008/03/el-meme-de-enjut-mojamut.html">El meme de Enjut@ Mojamut@</a> con resultados desconcertantes. Al final he llegado a la conclusión de que <strong>está limitado el numero de nodos de la red</strong>, no sé si en la versión de evaluación que me descargado o si el problema también existe en la versión de pago. Al menos he acotado el problema y he podido ver como funciona.</p>
<p>Por razones de extensión en este post se explicará como visualizar con la <strong>versión liberada de TouchGraph</strong> y dejaré para un segunda parte cómo usar <strong>TouchGraph Navigator</strong> y no morir en el intento.</p>
<p>Pulsando en la siguiente figura se accederá a la visualización de la propagación del meme de Enjut@ Mojamut@. <strong>Pido disculpas, pero solo funciona en <a href="http://www.mozilla-europe.org/es/firefox/">Firefox</a>.</strong><br />
<a href="http://timmy.deusto.es/barriblog/enjuta.html" title="touchgraph-free.jpg"></a></p>
<p style="text-align: center"><a href="http://timmy.deusto.es/barriblog/enjuta.html" target="_blank" title="touchgraph-free.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2008/09/touchgraph-free.jpg" title="touchgraph-free.jpg" alt="touchgraph-free.jpg"  /></a></p>
<p><strong>Ayuda a la navegación</strong>:</p>
<p><strong>Situación inicial</strong>:</p>
<ol>
<li>Aparecen todos los nombres de los blogs agrupados. Situar el ratón encina de los nombres hasta que aparezca la palabra <strong>inicio</strong>.</li>
<li>Pulsar con el botón derecho del ratón y en el menú asociado seleccionar “Expand node”</li>
<li>Se desplegará la visualización.</li>
</ol>
<p><strong>Navegación:</strong></p>
<ul>
<li><strong>B</strong><strong>arra superior</strong>: Controla el zoom. Hacia la derecha aumenta y hacia la izquierda disminuye</li>
<li><strong>Barra inferior</strong>: Controla el scroll</li>
<li><strong>Cursor sobre el nodo</strong>: Aparece información sobre el blog</li>
<li><strong>Botón derecho del ratón</strong>: Permite, expandir, comprimir o seleccionar el nodo</li>
<li><strong>Botón izquierdo del ratón</strong>: Enlaza al blog seleccionado en ese momento.</li>
</ul>
<p><strong>Información de los nodos:</strong></p>
<ul>
<li><strong>Color</strong>: Los nodos morados son de blogueras y los rojos son de Blogueros</li>
<li><strong>Formas</strong>: El rectángulo con esquinas redondeadas representa a los blogs que han propagado el meme y el rectángulo  a los blogs que no lo han propagado.</li>
<li><strong>Tamaño de letra</strong>: Las letras de tamaño grande corresponden a los blogs que han propagado indirectamente más de 10 memes, las letras más pequeñas a los que no han propagado ningún meme y las letras de tamaño mediano al resto.</li>
<li><strong>Número asociado</strong>: indica que el nodo está comprimido y que se puede expandir en n conexiones</li>
</ul>
<p><strong>¿Cómo lo he hecho?</strong></p>
<p>Como ya es costumbre, para poder mostrar que la visualización no es algo complejo se utilizará el mismo método de explicación que en las herramientas <a href="http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/">GraphViz</a> y <a href="http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/">Pajek</a>. mediante un procedimiento en tres pasos:</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif" alt="icon_no1.gif" align="left" /></a></p>
<p><strong>Preparar datos de origen</strong>: Los datos del meme recogidos en una <a href="http://barriblog.com/enjuta_mojamuta/xls/estadistica-150-visualizacion.xls">hoja de cálculo</a> se salvan en formato <a href="http://barriblog.com/enjuta_mojamuta/xls/estadistica-150-visualizacion.txt">texto separados por tabulaciones</a>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif" alt="icon_no2.gif" align="left" /></a> <strong>Transformar datos a formato .xml</strong>: Se aplica un filtro <strong><a href="http://es.wikipedia.org/wiki/AWK">awk</a></strong> al fichero de<strong> </strong>texto separado por tabulaciones y se genera un fichero  en formato <a href="http://es.wikipedia.org/wiki/XML"><strong>xml</strong></a>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif" alt="icon_no3.gif" align="left" /></a><strong>Generar el gráfico</strong>: Se procesa el fichero <strong>.xml</strong> con el programa <strong>TouchGraph</strong><br />
<img src="http://www.barriblog.com/wp-content/uploads/2008/07/flecha.jpg" alt="flecha.jpg" /></p>
<ul>
<li>Filtro <strong>awk</strong>: <a href="http://www.barriblog.com/enjuta_mojamuta/awk/memes_precedencias_touchgraph.awk">memes_precedencias_touchgraph.awk</a></li>
<li>fichero <strong>xml</strong> generado: <a href="http://www.barriblog.com/enjuta_mojamuta/touchgraph/precedencias.xml">precedencias.xml</a></li>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias_touchgraph.txt">Comando para generar el fichero .xml</a></li>
</ul>
<p><strong>Entorno de ejecución local:<br />
</strong></p>
<ul>
<li> Es necesario bajarse el  <a href="http://gnuwin32.sourceforge.net/packages/gawk.htm">awk para Windows</a>, tener instalada la maquina java y descargarse <a href="http://sourceforge.net/projects/touchgraph">Touchgraph libeado. </a></li>
</ul>
<p><strong>Entorno de ejecución en servidor con java</strong>:</p>
<ul>
<li>Subir a un directorio: BrowserLauncher.jar, nanoxml-2.1.1.jar, TGGraphLayout.jar, TGLinkBrowser.jar, <a href="http://www.barriblog.com/enjuta_mojamuta/touchgraph/enjuta.html">el fichero html para lanzar la visualización</a> y el <a href="http://www.barriblog.com/enjuta_mojamuta/touchgraph/precedencias.xml">fichero xml</a>.</li>
</ul>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_134()',1000);window.setTimeout('loadLinkedin_134()',1000);window.setTimeout('loadTwitter_134()',1000);window.setTimeout('loadFBShare_134()',1000); }); </script><script type="text/javascript"> function loadGoogle1_134(){ jQuery(document).ready(function($) { $('.dd-google1-134').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_134(){ jQuery(document).ready(function($) { $('.dd-linkedin-134').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_134(){ jQuery(document).ready(function($) { $('.dd-twitter-134').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_134(){ jQuery(document).ready(function($) { $('.dd-fbshare-134').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2008/09/09/visualizando-con-touchgraph-free/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Matriz geodésica con Pajek</title>
		<link>http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/</link>
		<comments>http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 20:50:13 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Visualizaciones]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/</guid>
		<description><![CDATA[0 Como comentaba en el post anterior, Pajek es más que un visualizador de grafos, es un programa de análisis de redes que nos permite descubrir características de los nodos de la red. Una de las funcionalidades que ofrece Pajek es el cálculo de la matriz geodésica. Esta matriz contiene todos los posibles caminos de [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-132'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-132'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-132'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/" data-count="horizontal" data-text="Matriz geodésica con Pajek" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-132'></div><a class='DD_FBSHARE_AJAX_132' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/')+'&amp;title='+encodeURIComponent('Matriz geodésica con Pajek'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p><a href="http://www.barriblog.com/wp-content/uploads/2008/08/enjuta-geodesic-450.jpg" title="enjuta-geodesic-450.jpg"></a></p>
<p style="text-align: center"><a href="http://www.barriblog.com/enjuta_mojamuta/SVG/enjuta_geodesic.htm" title="enjuta-geodesic-450.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2008/08/enjuta-geodesic-450.jpg" alt="enjuta-geodesic-450.jpg" /></a></p>
<p>Como comentaba en el <a href="http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/">post anterior</a>, <strong>Pajek </strong>es más que un visualizador de grafos, es un programa de análisis de redes que nos permite descubrir características de los nodos de la red.</p>
<p>Una de las funcionalidades que ofrece <strong>Pajek</strong> es el cálculo de la <strong>matriz geodésica</strong>. Esta matriz contiene todos los posibles caminos de <strong>distancia geodésica</strong> entre los nodos de la red.  La distancia geodésica es &#8220;<em>el número mínimo de pasos de un nodo a otro</em>&#8220;.</p>
<p>La figura que encabeza este post   (pulsando en la imagen se puede ver a tamaño real), visualiza la matriz geodésica que nos muestra la conectividad total entre todos los nodos y nos permite apreciar visualmente los nodos que  más  han favorecido  la propagación de <a href="http://seccionfemenina.blogspot.com/2008/03/el-meme-de-enjut-mojamut.html">El meme de Enjut@ Mojamut@</a>: <a href="http://seccionfemenina.blogspot.com/">Seccion Femenina</a>, <a href="http://colgadotel.blogspot.com/">Colgado de las telecomunicaciones</a>, <a href="http://artesaniaenred.blogspot.com/">Consultoria artesana en red</a>, <a href="http://carlos.garciaargos.com/">Carlos Garcia Argos</a> , <a href="http://bricklay.wordpress.com/">El albañil de Software</a>, <a href="http://barriblog.com/">BarriBlog</a>, <a href="http://carmepla.com.cat/">El bloc de Carmen Pla</a>, <a href="http://opcionweb.com/">Opcion Web</a>, <a href="http://gamoia.wordpress.com/">Gamoia</a>,<br />
<a href="http://pisitoenmadrid.com/">Pisito en Madrid</a>, <a href="http://carmenpuras.blogspot.com/">Diario de una profesional con niños</a>, <a href="http://tiscar.com/">Tiscar.com</a>, <a href="http://freakscity.blogspot.com/">Freak s city</a>, <a href="http://hecho-en-marbella.blogspot.com/">Hecho en Marbella</a> y <a href="http://eduardocollado.com/">Eduardo Collado.</a></p>
<p>Alguno de los que han participado en este meme los estoy siguiendo en Twitter, como <a href="http://twitter.com/tiscar">@tiscar</a>, <a href="http://twitter.com/fernand0">@fernand0</a>,<a href="http://twitter.com/carmepla">@carmepla</a>, <a href="http://twitter.com/petezin">@petezin</a>,<a href="http://twitter.com/chiqui">@chiqui</a>, <a href="http://twitter.com/amfumero">@amfumero</a>, <a href="http://twitter.com/davidbs">@davidbs</a>, <a href="http://twitter.com/julen">@julen</a>, <a href="http://twitter.com/pisitoenmadrid">@pisitoenmadrid</a>,<a href="http://twitter.com/ecollado">@ecollado</a>,<a href="http://twitter.com/ebrito">@ebrito</a>, <a href="http://twitter.com/emper">@emper</a>, <a href="http://twitter.com/labambola">@labambola</a>.</p>
<p>Es pequeñito el barrio y coincidimos en muchos sitios.</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_132()',1000);window.setTimeout('loadLinkedin_132()',1000);window.setTimeout('loadTwitter_132()',1000);window.setTimeout('loadFBShare_132()',1000); }); </script><script type="text/javascript"> function loadGoogle1_132(){ jQuery(document).ready(function($) { $('.dd-google1-132').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_132(){ jQuery(document).ready(function($) { $('.dd-linkedin-132').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_132(){ jQuery(document).ready(function($) { $('.dd-twitter-132').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_132(){ jQuery(document).ready(function($) { $('.dd-fbshare-132').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2008/08/21/matriz-geodesica-con-pajek/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Visualizando con Pajek el meme de Enjut@ Mojamut@</title>
		<link>http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/</link>
		<comments>http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 14:56:32 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Visualizaciones]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/</guid>
		<description><![CDATA[0 Este post documenta el uso de la herramienta Pajek para visualizar la propagación del meme de Enjut@ Mojamut@, por tanto continua a la saga: Exprimiendo el meme de Enjut@ Mojamut@, Juntos pero no revueltos y Visualizando con GraphViz el meme de Enjut@ Mojamut@. El proyecto Pajek, traducción del slovenio &#8216;Araña&#8217;, fue creado en 1996 [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-129'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-129'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-129'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/" data-count="horizontal" data-text="Visualizando con Pajek el meme de Enjut@ Mojamut@" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-129'></div><a class='DD_FBSHARE_AJAX_129' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/')+'&amp;title='+encodeURIComponent('Visualizando con Pajek el meme de Enjut@ Mojamut@'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p> <a href="http://www.barriblog.com/wp-content/uploads/2008/08/logo.png" title="logo.png"></a></p>
<p style="text-align: center"><a href="http://www.barriblog.com/wp-content/uploads/2008/08/logo.png" title="logo.png"><img src="http://www.barriblog.com/wp-content/uploads/2008/08/logo.png" alt="logo.png" /></a></p>
<p>Este post documenta el uso de la herramienta <strong><a href="http://pajek.imfm.si/doku.php">Pajek</a></strong> para visualizar la propagación del meme de Enjut@ Mojamut@, por tanto continua a la saga: <a href="http://www.barriblog.com/index.php/2008/06/24/exprimiendo-el-meme-de-enjut-mojamut/">Exprimiendo el meme de Enjut@ Mojamut@</a>,<a href="http://www.barriblog.com/index.php/2008/07/03/juntos-pero-no-revueltos/"> Juntos pero no revueltos</a> y <a href="http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/">Visualizando con GraphViz el meme de Enjut@ Mojamut@</a>.</p>
<p>El proyecto <strong>Pajek</strong>, traducción del slovenio &#8216;Araña&#8217;, fue creado en 1996 por  <a href="https://www.fmf.uni-lj.si/si/imenik/2909/"><strong>Vladimir Batagelj</strong> </a>y <strong><a href="http://mrvar.fdv.uni-lj.si/">Andrej Mrvar</a></strong> de la Universidad de Ljubljana, Slovenia. El Software de <strong>Pajek</strong>  funciona bajo la plataforma de <strong>Windows</strong>    y es de libre distribución para uso no comerciales. Es una herramienta muy completa para los que estudian redes complejas, entre ellas las sociales. <a href="http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/pajekman.pdf">En este manual</a> se describen todas sus posibilidades. Entre sus funciones está la de visualizar grafos, cuyas posibilidades se explicarán a lo largo de este post.</p>
<p><strong>Pajek</strong> trabaja con un formato de entrada <strong>.net</strong>. No tiene definida la gramática formal, pero se se ajusta <a href="http://www.barriblog.com/enjuta_mojamuta/awk/lenguaje_net_BNC.txt">a  esta notación BNF</a>.</p>
<p>Para poder mostrar que <strong>la visualización no es algo complejo</strong> se utilizará el mismo método de explicación que en la herramienta <strong>GraphViz</strong>. mediante un procedimiento en tres pasos:</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif" alt="icon_no1.gif" align="left" /></a></p>
<p><strong>Preparar datos de origen</strong>: Los datos del meme recogidos en una <a href="http://barriblog.com/enjuta_mojamuta/xls/estadistica-150-visualizacion.xls">hoja de cálculo</a> se salvan en formato <a href="http://barriblog.com/enjuta_mojamuta/xls/estadistica-150-visualizacion.txt">texto separados por tabulaciones</a>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif" alt="icon_no2.gif" align="left" /></a> <strong>Transformar datos a formato .net</strong>: Se aplica un filtro <strong><a href="http://es.wikipedia.org/wiki/AWK">awk</a></strong> al fichero de<strong> </strong>texto separado por tabulaciones y se genera un fichero  en formato <strong>net</strong>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif" alt="icon_no3.gif" align="left" /></a><strong>Generar el gráfico</strong>: Se procesa el fichero <strong>.net</strong> con el programa <strong>Pajek</strong></p>
<p><img src="http://www.barriblog.com/wp-content/uploads/2008/07/flecha.jpg" alt="flecha.jpg" /></p>
<p>Al pulsar en las imágenes aparecerán en su tamaño real.</p>
<table width="425" align="center" bgcolor="#cccccc" border="0" cellpadding="4" cellspacing="1">
<tr>
<td bgcolor="#ffffff">
<p style="text-align: center" align="center"><strong>Circular</strong></p>
</td>
<td bgcolor="#ffffff">
<p align="center"><strong><a href="http://www.csse.monash.edu.au/hons/se-projects/2006/Kieran.Simpson/output/html/node10.html">Kamada-Kawai</a></strong></p>
</td>
<td bgcolor="#ffffff">
<p style="text-align: center" align="center"><strong><a href="http://www.csse.monash.edu.au/hons/se-projects/2006/Kieran.Simpson/output/html/node10.html"> </a><a href="http://www.boost.org/doc/libs/1_35_0/libs/graph/doc/fruchterman_reingold.html"><strong>Fruchterman Reingold</strong></a> </strong></p>
</td>
</tr>
<tr>
<td bgcolor="#ffffff">
<p style="text-align: center"><a href="http://www.barriblog.com/enjuta_mojamuta/SVG/enjuta-circular.htm"><img src="http://www.barriblog.com/enjuta_mojamuta/SVG/enjuta-circular.jpg" width="140" border="0" /></a></p>
</td>
<td bgcolor="#ffffff">
<p style="text-align: center"><a href="http://www.barriblog.com/enjuta_mojamuta/SVG/enjuta-Kamada-Kawai.htm"><img src="http://www.barriblog.com/enjuta_mojamuta/SVG/Kamda-kawai.jpg" width="140" border="0" /></a></p>
</td>
<td bgcolor="#ffffff">
<p style="text-align: center"><a href="http://www.barriblog.com/enjuta_mojamuta/SVG/enjuta-Fruchterman%20Reingold.htm"><img src="http://www.barriblog.com/enjuta_mojamuta/SVG/enjuta-Fruchterman%20Reingold.jpg" width="140" border="0" /></a></p>
</td>
</tr>
</table>
<p>Se han realizado tres visualizaciones en <strong>2D</strong>, cada una con un layout distinto.  El filtro <strong>awk</strong> aplicado y el fichero <strong>.net </strong> generado  es el mismo para las los tres layouts:</p>
<ul>
<li>Filtro <strong>awk</strong>: <a href="http://barriblog.com/enjuta_mojamuta/awk/memes_precedencias_pajek.awk">memes_precedencias_pajek.awk</a></li>
<li>fichero <strong>net</strong> generado: <a href="http://barriblog.com/enjuta_mojamuta/net/precedencias.net">precedencias.net</a></li>
<li><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias_pajek.txt">Comando para generar el fichero .net</a></li>
</ul>
<p><strong>Entorno de ejecución es  Windows</strong></p>
<p><span style="font-weight: bold"></span></p>
<table width="100%" align="center" bgcolor="#cccccc" border="0" cellpadding="4" cellspacing="1">
<tr>
<td bgcolor="#ffffff">Es necesario bajarse el <a href="http://gnuwin32.sourceforge.net/packages/gawk.htm">awk para Windows</a> y el <a href="http://pajek.imfm.si/doku.php?id=download">Pajek </a></td>
</tr>
</table>
<p><strong> Pajek</strong> permite generar grafos en dos o tres dimensiones con distintos layouts y exportar a distintos formatos.</p>
<table width="100%" align="center" bgcolor="#cccccc" border="0" cellpadding="4" cellspacing="1">
<tr>
<td colspan="2" bgcolor="#aaaaff">
<p align="center"> <strong>Layout</strong></p>
</td>
</tr>
<tr>
<td colspan="2" bgcolor="#ffffff"><strong>Cicurlar</strong></p>
<ul>
<li> Posición de los vértices en círculo</li>
</ul>
<p><strong>Layout generado automáticamente</strong>.</p>
<ul>
<li><strong><a href="http://www.csse.monash.edu.au/hons/se-projects/2006/Kieran.Simpson/output/html/node10.html"> Kamada-Kawai</a> </strong>– algoritmo de generación automática en un plano</li>
<li><a href="http://www.boost.org/doc/libs/1_35_0/libs/graph/doc/fruchterman_reingold.html"><strong>Fruchterman Reingold</strong></a> – Algoritmo de generación automática en un plano o en el espacio (es más rápido que <strong><a href="http://www.csse.monash.edu.au/hons/se-projects/2006/Kieran.Simpson/output/html/node10.html"> Kamada-Kawai</a>)</strong></li>
</ul>
<p><strong> EigenValues</strong></p>
<p>Dibuja usando <a href="http://en.wikipedia.org/wiki/Eigenvector">eigenvalues/eigenvectors</a> (algoritmo de <a href="http://en.wikipedia.org/wiki/Lanczos_algorithm">Lanczos</a>).</td>
</tr>
<tr>
<td colspan="2" bgcolor="#aaaaff">
<p align="center"> <strong>Formatos de salida    </strong></p>
</td>
</tr>
<tr>
<td bgcolor="#ffffff"><strong>Imágenes en 2D</strong></p>
<ul>
<li><a href="http://es.wikipedia.org/wiki/PostScript_encapsulado">EPS/PS</a> – Se puede incluir en ficheros pdf</li>
<li><a href="http://es.wikipedia.org/wiki/.svg">SVG</a> – Scalable Vector Graphic. Puede ser incluido en un html como un objeto. El plugin se puede obtener de adobe.</li>
<li><a href="http://es.wikipedia.org/wiki/Bitmap">Bitmap</a> – (bmp) para incluir en hatml u otros documentos. Ocupa bastante</li>
</ul>
</td>
<td bgcolor="#ffffff"><strong>Imágenes en 3D</strong></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/X3D">X3D</a> – XML based 3D computer graphics, el sucesor dl formato VRML.</li>
<li><a href="http://kinemage.biochem.duke.edu/kinemage/kinlist.php">Kinemages</a> – precisa un visualizador</li>
<li><a href="http://en.wikipedia.org/wiki/VRML">VRML</a> – Virtual Reality format. Necesita visualizadores tal como  <a href="http://www.parallelgraphics.com/products/cortona/">Cortona</a>  or (older) <a href="http://www.desarrolloweb.com/articulos/341.php">Cosmo player</a></li>
<li><a href="http://cccbdb.nist.gov/mdlmol1.asp">MDL MOL</a> file – Necesita <a href="http://www.umass.edu/microbio/chime/getchime.htm">Chime plugin</a></li>
</ul>
</td>
</tr>
</table>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_129()',1000);window.setTimeout('loadLinkedin_129()',1000);window.setTimeout('loadTwitter_129()',1000);window.setTimeout('loadFBShare_129()',1000); }); </script><script type="text/javascript"> function loadGoogle1_129(){ jQuery(document).ready(function($) { $('.dd-google1-129').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_129(){ jQuery(document).ready(function($) { $('.dd-linkedin-129').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_129(){ jQuery(document).ready(function($) { $('.dd-twitter-129').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_129(){ jQuery(document).ready(function($) { $('.dd-fbshare-129').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2008/08/15/visualizando-con-pajek-el-meme-de-enjut-mojamut/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visualizando con Graphviz el meme de Enjut@ Mojamut@</title>
		<link>http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/</link>
		<comments>http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 00:22:40 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>
		<category><![CDATA[Visualizaciones]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/</guid>
		<description><![CDATA[0Este post es la continuación de la entrada &#8220;Juntos pero no revueltos&#8221; y aquí se publicarán algunas visualizaciones estáticas del meme de Enjut@ Mojamut@ y el proceso que he seguido para obtenerlas. El objetivo es mostrar que visualizar está al alcance de todos los que quieran ponerse a ello. El pasado mes de marzo en [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-116'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-116'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-116'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/" data-count="horizontal" data-text="Visualizando con Graphviz el meme de Enjut@ Mojamut@" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-116'></div><a class='DD_FBSHARE_AJAX_116' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/')+'&amp;title='+encodeURIComponent('Visualizando con Graphviz el meme de Enjut@ Mojamut@'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p>Este post es la continuación de la entrada  &#8220;<a href="http://www.barriblog.com/index.php/2008/07/03/juntos-pero-no-revueltos/">Juntos pero no revueltos</a>&#8221; y aquí se publicarán algunas visualizaciones estáticas del meme de <a href="http://seccionfemenina.blogspot.com/2008/05/informe-del-meme-de-enjut-mojamut.html">Enjut@ Mojamut@</a> y el proceso que he seguido para obtenerlas. El objetivo es mostrar que <strong>visualizar está al alcance de todos los  que quieran ponerse a ello</strong>.</p>
<p>El pasado mes de marzo en un post titulado &#8220;<a href="http://www.barriblog.com/index.php/2008/03/02/graphviz/">Graphviz</a>&#8221;  se describió esta herramienta ilustrándola con varios  ejemplos de visualización realizados por <strong>Gustavo Romero</strong>,  estudiante de Telecomunicaciones en la Universidad Carlos III. Basándome en su experiencia (tuvo la amabilidad de pasarme sus fuentes) la he aplicado al meme de Enjut@ Mojamu@ haciendo algunos cambios en el tipo de herramienta de filtrado de datos. A continuación se describe el procedimiento en tres pasos:</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no1.gif" title="icon_no1.gif" alt="icon_no1.gif" align="left" /></a></p>
<p><strong>Preparar datos de origen</strong>: Los datos del meme recogidos en una <a href="http://barriblog.com/enjuta_mojamuta/xls/estadistica-150-visualizacion.xls">hoja de cálculo</a> se salvan en formato <a href="http://barriblog.com/xls/enjuta_mojamuta%2fxls&amp;file=estadistica-150-visualizacion.txt">texto separados por tabulaciones</a>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no2.gif" title="icon_no2.gif" alt="icon_no2.gif" align="left" /></a> <strong>Transformar datos a formato dot</strong>: Se aplica un filtro <strong><a href="http://es.wikipedia.org/wiki/AWK">awk</a></strong> al fichero de<strong> </strong>texto separado por tabulaciones y se genera un fichero  en formato <a href="http://en.wikipedia.org/wiki/DOT_language"><strong>dot</strong></a>.</p>
<p><a href="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/icon_no3.gif" title="icon_no3.gif" alt="icon_no3.gif" align="left" /></a><strong>Generar el gráfico</strong>: Se procesa el fichero <a href="http://en.wikipedia.org/wiki/DOT_language"><strong>dot</strong></a> con el programa  <a href="http://www.graphviz.org/"><strong>Graphviz.</strong></a></p>
<p><img src="http://www.barriblog.com/wp-content/uploads/2008/07/flecha.jpg" alt="flecha.jpg" /></p>
<p>Se han realizado tres visualizaciones que se presentan a continuación indicando el filtro <strong>awk</strong> aplicado, el fichero <strong>dot </strong>generado<strong> y el tipo de </strong> <strong>visualización</strong> elegida. En el post de <a href="http://www.barriblog.com/index.php/2008/03/02/graphviz/">Graphviz</a> se explican los tipos de visualización de esta herramienta.</p>
<p>Al pulsar en las imágenes aparecerán en su tamaño real.</p>
<table width="100%" align="center" bgcolor="#cccccc" border="0" cellpadding="4" cellspacing="1">
<tr>
<td bgcolor="#ffffff">
<p style="text-align: center"><a href="http://www.barriblog.com/wp-content/uploads/2008/07/precedencias.png" title="precedencias.png"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/precedencias.png" alt="precedencias.png" width="140" /></a></p>
</td>
<td bgcolor="#ffffff"><strong>Grafo libre: </strong>Esta visualización corresponde al dibujo de la propagación del meme sin ninguna restricción.</p>
<ul>
<li>Filtro <strong>awk</strong>: <a href="http://barriblog.com/enjuta_mojamuta/awk/memes_precedencias.awk">memes_precedencias.awk</a></li>
<li>fichero <strong>dot</strong> generado: <a href="http://barriblog.com/enjuta_mojamuta/dot/precedencias.dot">precedencias.dot</a></li>
<li>Formato de <strong>salida</strong>: fdp (implementa el <a href="http://www.boost.org/libs/graph/doc/fruchterman_reingold.html">heurístico Fruchterman-Reingold</a>)</li>
</ul>
<p><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias.txt">Comando para generar el fichero dot</a></td>
</tr>
<tr>
<td bgcolor="#ffffff"><a href="http://www.barriblog.com/wp-content/uploads/2008/07/precedencias_nivel.png" title="precedencias-nivel-mini.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/precedencias-nivel-mini.jpg" title="precedencias-nivel-mini.jpg" alt="precedencias-nivel-mini.jpg" width="140" /></a></td>
<td bgcolor="#ffffff"><strong>Grafo por nivel de propagación: </strong>esta visualización corresponde al dibujo de la propagación del meme en la que se ha forzado a que los nodos se sitúen en su nivel de propagación.</p>
<ul>
<li>Filtro <strong>awk</strong>: <a href="http://barriblog.com/enjuta_mojamuta/awk/memes_precedencias-nivel.awk">memes_precedencias_nivel.awk</a></li>
<li>fichero <strong>dot</strong> generado: <a href="http://barriblog.com/enjuta_mojamuta/dot/precedencias_nivel.dot">precedencias_nivel.dot</a></li>
<li>Formato de <strong>salida</strong>: dot</li>
</ul>
<p><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias_nivel.txt">Comando para generar el fichero dot</a></td>
</tr>
<tr>
<td bgcolor="#ffffff"><a href="http://www.barriblog.com/wp-content/uploads/2008/07/precedencias_tiempo.png" title="precedencias-tiempo-mini1.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2008/07/precedencias-tiempo-mini1.jpg" title="precedencias-tiempo-mini1.jpg" alt="precedencias-tiempo-mini1.jpg" width="140" /></a></td>
<td bgcolor="#ffffff"><strong>Grafo por tiempo de propagación: </strong>esta visualización corresponde al dibujo de la propagación del meme en la que se ha forzado a que los nodos se sitúen en su día publicación.</p>
<ul>
<li>Filtro <strong>awk</strong>: <a href="http://barriblog.com/enjuta_mojamuta/awk/memes_precedencias-tiempo.awk">memes_precedencias_tiempo.awk</a></li>
<li>fichero <strong>dot</strong> generado: <a href="http://barriblog.com/enjuta_mojamuta/dot/precedencias_tiempo.dot">precedencias_tiempo.dot</a></li>
<li>Formato de <strong>salida</strong>: dot</li>
</ul>
<p><a href="http://www.barriblog.com/enjuta_mojamuta/comandos/comando_precedencias_tiempo.txt">Comando para generar el fichero dot</a></td>
</tr>
</table>
<p><strong>Entornos de ejecución</strong></p>
<table width="100%" align="center" bgcolor="#cccccc" border="0" cellpadding="4" cellspacing="1">
<tr>
<td bgcolor="#ffffff">Linux</td>
<td bgcolor="#ffffff">Utilizar el comando awk y bajarse el ejecutable para <a href="http://www.graphviz.org/Download_linux.php">Graphviz para linux</a>.</td>
</tr>
<tr>
<td bgcolor="#ffffff">Windows</td>
<td bgcolor="#ffffff">Bajarse el <a href="http://gnuwin32.sourceforge.net/packages/gawk.htm">awk para Windows</a> y el <a href="http://www.graphviz.org/Download_windows.php">Graphviz para Windows</a></td>
</tr>
</table>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_116()',1000);window.setTimeout('loadLinkedin_116()',1000);window.setTimeout('loadTwitter_116()',1000);window.setTimeout('loadFBShare_116()',1000); }); </script><script type="text/javascript"> function loadGoogle1_116(){ jQuery(document).ready(function($) { $('.dd-google1-116').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_116(){ jQuery(document).ready(function($) { $('.dd-linkedin-116').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_116(){ jQuery(document).ready(function($) { $('.dd-twitter-116').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_116(){ jQuery(document).ready(function($) { $('.dd-fbshare-116').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2008/07/09/visualizando-con-graphviz/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>El diablo Cojuelo</title>
		<link>http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/</link>
		<comments>http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 20:01:46 +0000</pubDate>
		<dc:creator>M.Luz Congosto</dc:creator>
				<category><![CDATA[Entorno de desarrollo]]></category>

		<guid isPermaLink="false">http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/</guid>
		<description><![CDATA[0 Barriblog necesita analizar el código HTML de TODAS las páginas de los blogs para encontrar sus relaciones. Es la única manera de poder establecer los vínculos de vecindad salvo que alguien más astuto este guardando todos los rss de los blogs desde el inicio de la blogosfera. Estoy segura que esa información está en [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-google1-ajax-load dd-google1-61'></div><g:plusone size='medium' href='http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/'></g:plusone></div><div class='dd_button'><div class='dd-linkedin-ajax-load dd-linkedin-61'></div><script type='in/share' data-url='http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/' data-counter='right'></script></div><div class='dd_button'><div class='dd-twitter-ajax-load dd-twitter-61'></div><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/" data-count="horizontal" data-text="El diablo Cojuelo" data-via="" ></a></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-61'></div><a class='DD_FBSHARE_AJAX_61' name='fb_share' type='button_count' share_url='http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd_delicious_compact_image dd_delicious'><a class='dd_delicious_compact_image' href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/')+'&amp;title='+encodeURIComponent('El diablo Cojuelo'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><span id='DD_DELICIOUS_AJAX_POST_ID'><div style='padding-top:3px'>0</div></span></a></div></div></div><div style='clear:both'></div></div><div style='clear:both'></div><p align="center"><a href="http://www.barriblog.com/wp-content/uploads/2008/01/el-diablo-cojuelo.jpg" title="el-diablo-cojuelo.jpg"><img src="http://www.barriblog.com/wp-content/uploads/2008/01/el-diablo-cojuelo.jpg" alt="el-diablo-cojuelo.jpg" /></a></p>
<p>Barriblog necesita analizar el código <a href="http://es.wikipedia.org/wiki/HTML">HTML</a> de TODAS las páginas de los blogs para encontrar sus relaciones. Es la única manera de poder establecer los vínculos de vecindad salvo que alguien más astuto este guardando todos los <a href="http://es.wikipedia.org/wiki/RSS">rss </a>de los blogs desde el inicio de la blogosfera. Estoy segura que esa información está en algún lugar pero no creo que me dieran un <a href="http://es.wikipedia.org/wiki/Application_Programming_Interface">API</a> para acceder a ella ni para una tesis doctoral. El único camino que queda es arremangarse y sacar la información desde fuera.</p>
<p>Llevo un mes dejándome las pestañas en esquivar todos los errores del código HTML de los blogs que estoy analizando. No es fácil  cumplir la <a href="http://www.w3c.es/">W3C</a>, prácticamente nadie la cumple, ni siquiera el código que generan las plataformas de blogs se ajustan al estándar. A esta dificultad hay que añadir la mano de los bloggers incrustando HTML a su libre albedrío, que he podido comprobar cuan diverso es: no cabría ni en la <a href="http://en.wikipedia.org/wiki/The_Long_Tail">long tail</a>.</p>
<p>Mi buen amigo<a href="http://lamusediffuse.com/"> Jesús Sánchez</a> conoce mi capacidad de esquivar los obstáculos en la programación. En el <a href="http://www.barriblog.com/index.php/2007/11/21/primera-semana-en-el-taller-de-visualizacion/">taller de visualización </a>quedó un poco escandalizado de los trucos de una experimentada softwarera. Toda esa capacidad la he desplegado para BarriBlog pero en este momento, tras gestionar siete  flags de contexto para sortear los fallos sintácticos,  he exclamado antes de incluir el octavo: ¡BASTA YA! En su lugar acabo de implementar una rutina de manejo de errores sintácticos: El código HTML que no cubran los siete flags lo desecho y me sincronizo con el siguiente TAG. Ya me duele tirar información pero todo tiene su límite y hoy lo he alcanzado</p>
<p>Me ha venido a la cabeza  el delicioso libro &#8220;<a href="http://www.cervantesvirtual.com/servlet/SirveObras/91371620210248617422202/p0000001.htm#I_6_">El diablo Cojuelo</a>&#8221; que leí en mi juventud mientras entraba en las tripas de los blogs para que <a href="http://en.wikipedia.org/wiki/Lestat_de_Lioncourt">Lestat</a>, el programa raíz de BarriBlog,  les succionara la información para estructurarla. Esto me ha permitido ver el interior de los blogs al margen de su fachada o fama.  Algo parecido lo que vio <strong>Don Cleofás</strong> cuando el <strong>Diablo Cojuelo</strong>, como pago de su a liberación, le mostró  los hogares de <strong>Madrid</strong>  por dentro y qué miserias esconden:<br />
<em><br />
</em><img src="http://www.barriblog.com/wp-content/uploads/2008/01/cita.jpg" alt="cita.jpg" /><em> Y levantando a los techos de los edificios, por arte diabólica, lo hojaldrado, se descubrió la carne del pastelón de Madrid como entonces estaba, patentemente, que por el mucho calor estivo estaba con menos celosías, y tanta variedad de sabandijas racionales en esta arca del mundo, que la del diluvio, comparada con ella, fue de capas y gorras.</em></p>
<p>He analizado los 100 blogs de la tesis de <a href="http://tiscar.com/">Tiscar </a>y de algunos de mis blogs favoritos. Sorprendería lo que he visto y dónde lo he visto, pero como mujer discreta que soy me reservo el secreto como si fuera de confesión y no daré nombres, pero es difícil que olvide a los blogs que me han hecho perder tanto tiempo.</p>
<p>También he descubierto algunas cosas del código HTML que genera <strong>Blogger</strong>, pero eso como <strong>Schehrazada </strong>lo dejaré para otro día</p>
<p>Aún me quedan unas cuantas fases de lestat pero por fin he cerrado el capítulo del adaptarme al medio de sintaxis difusas. Ahora, iré al grano.</p>
<script type="text/javascript"> jQuery(document).ready(function($) { window.setTimeout('loadGoogle1_61()',1000);window.setTimeout('loadLinkedin_61()',1000);window.setTimeout('loadTwitter_61()',1000);window.setTimeout('loadFBShare_61()',1000); }); </script><script type="text/javascript"> function loadGoogle1_61(){ jQuery(document).ready(function($) { $('.dd-google1-61').remove();$.getScript('https://apis.google.com/js/plusone.js'); }); } function loadLinkedin_61(){ jQuery(document).ready(function($) { $('.dd-linkedin-61').remove();$.getScript('http://platform.linkedin.com/in.js'); }); } function loadTwitter_61(){ jQuery(document).ready(function($) { $('.dd-twitter-61').remove();$.getScript('http://platform.twitter.com/widgets.js'); }); } function loadFBShare_61(){ jQuery(document).ready(function($) { $('.dd-fbshare-61').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); }</script><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.barriblog.com/index.php/2008/01/11/el-diablo-cojuelo/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

