<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0QGR304cSp7ImA9WhBaEEo.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062</id><updated>2013-05-20T14:12:06.339-04:30</updated><category term="Redes" /><category term="matplotlib" /><category term="Desarrollo guiado por pruebas" /><category term="memory_profiler" /><category term="Bitbucket" /><category term="canaima" /><category term="Mac Book" /><category term="Fedora" /><category term="ZeroMQ" /><category term="DNS" /><category term="Networkx" /><category term="pylint" /><category term="unittest" /><category term="pyQwt" /><category term="Flisol" /><category term="pylab" /><category term="Tareas Periódicas" /><category term="python-twitter" /><category term="Pyprocessing" /><category term="Base de datos" /><category term="Mercurial" /><category term="gnome" /><category term="Touchscreen bematech" /><category term="Empaquetado" /><category term="TDD" /><category term="General" /><category term="Arduino" /><category term="Asus" /><category term="git" /><category term="python" /><category term="PIPA" /><category term="GPG" /><category term="FUDcon Latam" /><category term="Debugging" /><category term="IP" /><category term="doctest" /><category term="SimpleCV" /><category term="control de versiones" /><category term="pendrive" /><category term="csv" /><category term="Simulación de Circuitos Eléctricos" /><category term="Android" /><category term="Raspberry Pi" /><category term="Scipy" /><category term="libpam" /><category term="google maps" /><category term="Camara" /><category term="OpenDocument" /><category term="Debian" /><category term="Profiling" /><category term="Nokia N810" /><category term="señales de frecuencia" /><category term="Asterisk" /><category term="gtk" /><category term="Fritzing" /><category term="ssh" /><category term="FreeBSD" /><category term="scapy" /><category term="grafos" /><category term="Vídeo" /><category term="Acelerometro" /><category term="Aseguramiento de la Calidad" /><category term="Venezuela" /><category term="SOAP" /><category term="Light-emitting diode" /><category term="maemo" /><category term="ipcalc" /><category term="Magnetometro" /><category term="GeoIP" /><category term="numpy" /><category term="glade" /><category term="pyqt" /><category term="Sistemas embebidos" /><category term="Mechanize" /><category term="Descomposicion QR" /><category term="Pyflakes" /><category term="gconf" /><category term="Django" /><category term="Linux" /><category term="twitter" /><category term="ACTA" /><category term="FFT" /><category term="GPS" /><category term="csvkit" /><category term="snmp" /><category term="Seguridad" /><category term="pygame" /><category term="accesibilidad" /><category term="Ubuntu" /><category term="tiflotecnologia" /><category term="Elixir" /><category term="Protesta" /><category term="SOPA" /><category term="código QR" /><category term="Sqlalchemy" /><category term="Sqlite3" /><title>La libertad de desarrollar no tiene  precio...</title><subtitle type="html">Blog dedicado al Software Libre en especial Linux Debian, Android y FreeBSD, a la programación en python con gtk, qt y en Android.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ernesto-ecrespo.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>204</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/LaLibertadDeDesarrollarNoTienePrecio" /><feedburner:info uri="lalibertaddedesarrollarnotieneprecio" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>LaLibertadDeDesarrollarNoTienePrecio</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;CEYASH0zcCp7ImA9WhBbE0w.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-3318297614721746234</id><published>2013-04-27T20:51:00.000-04:30</published><updated>2013-05-11T18:12:29.388-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-11T18:12:29.388-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python-twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Descubriendo trending topics de twitter con python-twitter.</title><content type="html">Recuerdo la presentación de Efrain en el PyDay en Mérida, donde hablo de la librería tweepy (&lt;a href="http://effiejayx.wordpress.com/2010/10/25/jugando-con-las-apis-de-twitter-y-python/" target="_blank"&gt;acá artículo de Efrain sobre el tema&lt;/a&gt;) que permite acceder a una cuenta de twitter, actualizar estado entre otras cosas.&lt;br /&gt;
&lt;br /&gt;
Con el auge de twitter como red social en el país me dispuse a probar otra librería de python para twitter llamada &lt;a href="https://github.com/bear/python-twitter" target="_blank"&gt;python-twitter&lt;/a&gt;, la documentación de la librería se puede acceder desde &lt;a href="https://github.com/bear/python-twitter/wiki" target="_blank"&gt;acá&lt;/a&gt;. Existe una serie de ejemplos de como usar la librería python-twitter en &amp;nbsp;&lt;a href="https://github.com/ideoforms/python-twitter-examples/" target="_blank"&gt;github&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Instalar la librería de twitter:&lt;br /&gt;
Se usará el comando easy_install o pip como root:&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;easy_install twitter&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
ó&lt;br /&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;pip install twitter&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El código que se muestra a continuación lista el ID de los Países, el número ID de cada País. El código original lo pueden ver en el siguiente &lt;a href="https://github.com/ideoforms/python-twitter-examples/blob/master/twitter-trends-available.py" target="_blank"&gt;enlace&lt;/a&gt;:&lt;br /&gt;
Se ejecuta python:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: red;"&gt;(python2.7)ernesto@jewel:~/prueba$ python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;Python 2.7.3 (default, Jan &amp;nbsp;2 2013, 16:53:07)&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;[GCC 4.7.2] on linux2&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
Se importa el módulo python-twitter:&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; import twitter&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Se instancia la clase Twitter pasando el dominio (el url de la api de twitter) y la versión del api que en este caso es la versión 1:&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; twitter_api = twitter.Twitter(domain="api.twitter.com", api_version='1')&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se captura los trends disponibles:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; trends1 = twitter_api.trends.available()&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se lista los ID de los Países:&lt;/div&gt;
&lt;pre&gt;&lt;div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;&amp;gt;&amp;gt;&amp;gt; for location in trends1:&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;... &amp;nbsp; &amp;nbsp; name = location["name"].encode('ascii', 'replace')&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;... &amp;nbsp; &amp;nbsp; print "(%d) %s" % (location["woeid"], name)&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;...&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1) Worldwide&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2972) Winnipeg&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(3369) Ottawa&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(3444) Quebec&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(3534) Montreal&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(4118) Toronto&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(8676) Edmonton&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(8775) Calgary&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(9807) Vancouver&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(12723) Birmingham&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(13911) Brighton&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(13963) Bristol&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(15127) Cardiff&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(19344) Edinburgh&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(21125) Glasgow&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(26042) Leeds&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(26062) Leicester&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(26734) Liverpool&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(28218) Manchester&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(30079) Newcastle&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(30720) Nottingham&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(32452) Portsmouth&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(34503) Sheffield&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(44418) London&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(44544) Belfast&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(76456) Santo Domingo&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(116545) Mexico City&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(124162) Guadalajara&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(131068) Le?n&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(134047) Monterrey&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(137612) Puebla&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(149361) Tijuana&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(332471) Mendoza&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(349859) Santiago&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(349860) Concepcion&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(349861) Valparaiso&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(368148) Bogot?&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;&lt;b&gt;(395269) Caracas&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;&lt;b&gt;(395270) Maracaibo&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;&lt;b&gt;(395272) Valencia&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(418440) Lima&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455819) Bras?lia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455820) Bel?m&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455821) Belo Horizonte&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455822) Curitiba&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455823) Porto Alegre&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455824) Recife&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455825) Rio de Janeiro&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455826) Salvador&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455827) S?o Paulo&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455828) Campinas&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455830) Fortaleza&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455831) Goi?nia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455833) Manaus&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455834) S?o Lu?s&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(455867) Guarulhos&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(466861) C?rdoba&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(466862) Rosario&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;&lt;b&gt;(468382) Barquisimeto&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(468739) Buenos Aires&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(560743) Dublin&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(580778) Bordeaux&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(608105) Lille&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(609125) Lyon&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(610264) Marseille&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(612977) Montpellier&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(613858) Nantes&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(615702) Paris&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(619163) Rennes&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(627791) Strasbourg&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(628886) Toulouse&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(638242) Berlin&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(641142) Bremen&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(645458) Dortmund&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(645686) Dresden&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(646099) Dusseldorf&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(648820) Essen&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(650272) Frankfurt&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(656958) Hamburg&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(667931) Cologne&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(671072) Leipzig&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(676757) Munich&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(698064) Stuttgart&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(718345) Milan&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(719258) Naples&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(721943) Rome&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(725003) Turin&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(726874) Den Haag&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(727232) Amsterdam&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(733075) Rotterdam&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(753692) Barcelona&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(766273) Madrid&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(766356) Malaga&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(774508) Seville&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(776688) Valencia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(779063) Zaragoza&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(906057) Stockholm&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1030077) Bekasi&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1044316) Surabaya&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1047180) Bandung&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1047378) Jakarta&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1062617) Singapore&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1098081) Perth&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1099805) Adelaide&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1100661) Brisbane&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1100968) Canberra&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1101597) Darwin&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1103816) Melbourne&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1105779) Sydney&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1110809) Kitakyushu&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1117034) Chiba&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1117099) Fukuoka&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1117227) Hiroshima&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1117502) Kawasaki&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1117545) Kobe&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1117817) Nagoya&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1118108) Sapporo&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1118129) Sendai&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1118285) Takamatsu&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1118370) Tokyo&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1118550) Yokohama&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1132447) Busan&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1132466) Daegu&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1132481) Gwangju&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1132496) Incheon&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1132567) Suwon&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1132578) Ulsan&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1132599) Seoul&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1154726) Klang&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1154781) Kuala Lumpur&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1167715) Calocan&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1199136) Davao City&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1199477) Manila&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1199682) Quezon City&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1398823) Lagos&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(1582504) Johannesburg&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2077746) Samara&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2112237) Yekaterinburg&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2122265) Moscow&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2122471) Nizhny Novgorod&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2122541) Novosibirsk&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2122641) Omsk&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2123260) Saint Petersburg&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2282863) Nagpur&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295377) Lucknow&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295378) Kanpur&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295386) Kolkata&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295388) Amritsar&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295401) Jaipur&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295402) Ahmedabad&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295408) Indore&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295411) Mumbai&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295412) Pune&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295414) Hyderabad&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295420) Bangalore&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2295424) Chennai&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2343678) Adana&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2343732) Ankara&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2343843) Bursa&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2344116) Istanbul&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2344117) Izmir&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2345896) Okinawa&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2345975) Daejeon&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2357024) Atlanta&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2357536) Austin&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2358820) Baltimore&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2359991) Baton Rouge&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2364559) Birmingham&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2367105) Boston&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2378426) Charlotte&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2379574) Chicago&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2380358) Cincinnati&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2381475) Cleveland&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2383660) Columbus&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2388929) Dallas-Ft. Worth&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2391279) Denver&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2391585) Detroit&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2414469) Greensboro&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2418046) Harrisburg&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2424766) Houston&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2427032) Indianapolis&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2428184) Jackson&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2436704) Las Vegas&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2442047) Los Angeles&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2449323) Memphis&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2450022) Miami&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2451822) Milwaukee&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2452078) Minneapolis&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2457170) Nashville&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2458410) New Haven&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2458833) New Orleans&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2459115) New York&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2460389) Norfolk&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2466256) Orlando&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2471217) Philadelphia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2471390) Phoenix&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2473224) Pittsburgh&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2475687) Portland&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2477058) Providence&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2478307) Raleigh&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2480894) Richmond&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2486340) Sacramento&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2486982) St. Louis&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2487610) Salt Lake City&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2487796) San Antonio&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2487889) San Diego&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2487956) San Francisco&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2490383) Seattle&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2503713) Tallahassee&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2503863) Tampa&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(2514815) Washington&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(15015370) Osaka&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(15015372) Kyoto&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(20070458) Delhi&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424738) United Arab Emirates&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424747) Argentina&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424748) Australia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424768) Brazil&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424775) Canada&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424782) Chile&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424787) Colombia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424800) Dominican Republic&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424801) Ecuador&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424803) Ireland&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424819) France&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424829) Germany&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424834) Guatemala&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424846) Indonesia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424848) India&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424853) Italy&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424856) Japan&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424868) Korea&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424900) Mexico&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424901) Malaysia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424908) Nigeria&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424909) Netherlands&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424916) New Zealand&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424919) Peru&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424922) Pakistan&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424934) Philippines&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424936) Russia&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424942) South Africa&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424948) Singapore&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424950) Spain&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424954) Sweden&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424969) Turkey&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424975) United Kingdom&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(23424977) United States&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;&lt;b&gt;(23424982) Venezuela&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(56013632) Petaling&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;(56013645) Hulu Langat&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
EL ID 1 es para listar los trending topics &amp;nbsp;mundial, para Venezuela se tiene el ID 23424982, se resalta en negrita los IDs de las ciudades de Venezuela.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora se va a desplegar la lista de trending topic global(1):&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Se define el valor 1 a WOE_ID para capturar el trending topic global, se instancia la clase Twitter con el dominio api.twitter.com y se define la versión del api como la versión 1. A continuación se captura los trending topic, se muestra los 10 tópicos del mundo.&lt;/div&gt;
&lt;pre&gt;&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt;WORLD_WOE_ID = 1&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; twitter_api = twitter.Twitter(domain="api.twitter.com", api_version='1')&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; world_trends = twitter_api.trends._(WORLD_WOE_ID)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; trends = world_trends()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; for i in range(10):&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;... &amp;nbsp; &amp;nbsp; print trends[0]['trends'][i][u'name']&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;...&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#ILoveCheese&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#CaprilesVenezuelayELMUNDOestácontigo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#MiMamáDice&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#VamosMaravilla&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#AJuicioCaprilesAsesino&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Sara McMann&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Rene de Calle 13&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Sheila Gaff&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;RDMA&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Rene&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Al cambiar el valor de la variable WORLD_WOE_ID a la de Venezuela (23424982) se tiene:&lt;/div&gt;
&lt;pre&gt;&lt;div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; WORLD_WOE_ID = 23424982&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; twitter_api = twitter.Twitter(domain="api.twitter.com", api_version='1')&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; world_trends = twitter_api.trends._(WORLD_WOE_ID)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; trends = world_trends()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; for i in range(10):&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;... &amp;nbsp; &amp;nbsp; print trends[0]['trends'][i][u'name']&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;...&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#CaprilesVenezuelayELMUNDOestácontigo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#AJuicioCaprilesAsesino&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#MiMamáDice&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#MeArrechoCuando&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#QueVivan&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Feliz Día del Diseñador Gráfico&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Estuvimos 5&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Dayana Mendoza&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Omar Borkan Al Gala&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Antonio Rivero&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Para el caso de Valencia (395272):&lt;/div&gt;
&lt;pre&gt;&lt;div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; WORLD_WOE_ID = 395272&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; twitter_api = twitter.Twitter(domain="api.twitter.com", api_version='1')&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; world_trends = twitter_api.trends._(WORLD_WOE_ID)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; trends = world_trends()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;&amp;gt;&amp;gt;&amp;gt; for i in range(10):&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;... &amp;nbsp; &amp;nbsp; print trends[0]['trends'][i][u'name']&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;...&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#CaprilesVenezuelayELMUNDOestácontigo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#AJuicioCaprilesAsesino&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#MeArrechoCuando&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#MiMamáDice&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Omar Borkan Al Gala&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#TROPA&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Feliz Día del Diseñador Gráfico&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Estuvimos 5&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Dayana Mendoza&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;Antonio Rivero&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
De esta forma se puede listar los 10 tópicos &amp;nbsp;según el País o ciudad utilizando Python.&amp;nbsp;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/WuXbR-jiAVg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/3318297614721746234/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=3318297614721746234" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3318297614721746234?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3318297614721746234?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/WuXbR-jiAVg/descubriendo-trending-topics-de-twitter.html" title="Descubriendo trending topics de twitter con python-twitter." /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Guacara, Venezuela</georss:featurename><georss:point>10.209887824268238 -67.87638140722657</georss:point><georss:box>10.147379324268238 -67.95706240722657 10.272396324268238 -67.79570040722658</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/04/descubriendo-trending-topics-de-twitter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQCRXc-eSp7ImA9WhBVF0w.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2224071031522932420</id><published>2013-04-22T03:00:00.000-04:30</published><updated>2013-04-23T06:06:04.951-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-23T06:06:04.951-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="IP" /><category scheme="http://www.blogger.com/atom/ns#" term="scapy" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="ipcalc" /><title>Descubrir equipos en una Red Local con Python (ipcalc y scapy).</title><content type="html">Si se tiene una red con asignación abierta de IPs, la administración se hace algo complicada, así que se necesita tener un registro de la asignación de IPs a los equipos de la red local.&lt;br /&gt;
&lt;br /&gt;
Una amiga administradora hizo un registro con una herramienta propietaria en Windows. Recordé la librería de python ipcalc que facilita el cálculo de direcciones IP y redes (un artículo de su uso &lt;a href="http://ernesto-ecrespo.blogspot.com/2012/03/calculo-de-direcciones-ip-con-python.html" target="_blank"&gt;acá&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Además existe la librería o herramienta scapy, el cual permite capturar y modificar paquetes de red (la documentación se puede revisar en el siguiente &lt;a href="http://www.secdev.org/projects/scapy/doc/introduction.html#about-scapy" target="_blank"&gt;enlace&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Una alternativa es usar los comandos ping y arp por medio de python con el módulo commands; es preferible usar scapy que permite descubrir la dirección MAC de los equipos que tienen asignado las IPs.&lt;br /&gt;
&lt;br /&gt;
Así que por un lado se usa ipcalc para definir el rango de la red según la mascara y luego con scapy se descubre las direcciones MAC.&lt;br /&gt;
&lt;br /&gt;
A continuación el código que devuelve la dirección MAC de cada IP utilizada en la red:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: red;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#Se importa los modulos necesarios.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;from ipcalc import IP, Network&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;from scapy.all import srp,Ether,ARP,conf&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;#Se desactiva el verbose de la captura y envio de paquetes.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;conf.verb=0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;#Se genera un ciclo con el rango de IPs dando la RED y la mascara&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;for ip in Network('192.168.12.128/25'):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; #Se realiza un broadcast de MAC pasando cada IP el cual devuelve la&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; #direccion MAC de la IP consultada.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=str(ip)),timeout=2)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; for snd,rcv in ans:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Se muestra en pantalla la direccion MAC y la direccion IP&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print rcv.sprintf(r"%Ether.src% y %ARP.psrc%")&lt;/span&gt;&lt;/i&gt;





&lt;/pre&gt;
Al ejecutar el programa se tiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: blue;"&gt;ernesto@jewel:~/bin/python$ sudo ./descubrir.py&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;WARNING: No route found for IPv6 destination :: (no default route?)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:26:35:c6:93:0d y&amp;nbsp;192.168.12.130&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:2e:0b:c5:70:3c y&amp;nbsp;192.168.12.132&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:2e:90:c2:ec:51 y&amp;nbsp;192.168.12.134&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:50:ca:c1:71:8a y&amp;nbsp;192.168.12.136&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:32:57:ce:81:e7 y&amp;nbsp;192.168.12.138&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:2e:90:c4:58:7c y&amp;nbsp;192.168.12.139&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:2c:25:ce:ae:be y&amp;nbsp;192.168.12.140&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;d0:37:88:c4:11:ed y&amp;nbsp;192.168.12.141&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:2e:90:cc:f5:16 y&amp;nbsp;192.168.12.142&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:2c:c4:c4:26:28 y&amp;nbsp;192.168.12.148&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;40:7a:ab:ce:11:c0 y&amp;nbsp;192.168.12.150&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;3c:53:8e:cc:4d:89 y&amp;nbsp;192.168.12.161&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;1c:5b:d6:c9:6d:a9 y&amp;nbsp;192.168.12.169&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:2e:7f:c4:8d:d7 y&amp;nbsp;192.168.12.170&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:24:c2:c8:23:8d y&amp;nbsp;192.168.12.172&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;68:19:ed:c75:44:31 y&amp;nbsp;192.168.12.174&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;74:3f:68:c2:91:d6 y&amp;nbsp;192.168.12.196&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:30:aa:c2:6d:3c y&amp;nbsp;192.168.12.201&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;c8:3c:dc:c8:a9:53 y&amp;nbsp;192.168.12.208&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:34:f2:c5:2f:21 y&amp;nbsp;192.168.12.211&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:34:f2:cc:2e:d0 y&amp;nbsp;192.168.12.212&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:34:f2:c5:35:70 y&amp;nbsp;192.168.12.214&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:34:f2:c3:1a:ee y&amp;nbsp;192.168.12.215&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:34:f2:c3:1b:4c y&amp;nbsp;192.168.12.216&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:34:f2:c5:33:49 y&amp;nbsp;192.168.12.224&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:3c:02:c6:b5:3f y&amp;nbsp;192.168.12.225&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;00:3e:90:c8:bb:d6 y&amp;nbsp;192.168.12.251&lt;/span&gt;&lt;/b&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
Así pues desde Linux y con Python se puede capturar la información de las direcciones MAC de las IPs asignadas con pocas líneas de código.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/D8DaGd6CF70" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2224071031522932420/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2224071031522932420" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2224071031522932420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2224071031522932420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/D8DaGd6CF70/descubrir-equipos-en-una-red-local-con.html" title="Descubrir equipos en una Red Local con Python (ipcalc y scapy)." /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>1</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.644806404018755 -71.13901367187498</georss:point><georss:box>8.519205904018754 -71.30037517187498 8.770406904018756 -70.97765217187498</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/04/descubrir-equipos-en-una-red-local-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08EQXo_fSp7ImA9WhBSFE4.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2010196608662876993</id><published>2013-02-21T03:00:00.000-04:30</published><updated>2013-02-21T03:00:00.445-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-21T03:00:00.445-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Descomposicion QR" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><title>Resolución de sistemas de ecuaciones lineales por descomposión QR usando Numpy</title><content type="html">En Diciembre se &amp;nbsp;publicó un &lt;a href="http://ernesto-ecrespo.blogspot.com/2012/12/resolucion-de-sistemas-de-ecuaciones.html" target="_blank"&gt;artículo&lt;/a&gt; donde se explica como resolver sistemas de ecuaciones.&lt;br /&gt;
&lt;br /&gt;
Este artículo se basa de un artículo en Inglés&amp;nbsp;&lt;a href="http://glowingpython.blogspot.com/2011/05/qr-decomposition-with-numpy.html" target="_blank"&gt;QR descomposition with numpy&lt;/a&gt;&amp;nbsp;.&lt;br /&gt;
&lt;br /&gt;
Si se desea averiguar más sobre la descomposición QR se puede consultar a la página de &lt;a href="http://es.wikipedia.org/wiki/Descomposici%C3%B3n_QR" target="_blank"&gt;wikipedia&lt;/a&gt;&amp;nbsp;ó de la siguiente &lt;a href="http://rkb.home.cern.ch/rkb/AN16pp/node224.html#SECTION0002240000000000000000" target="_blank"&gt;página&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Las ecuaciones que se usaron son:&lt;br /&gt;
&lt;span style="background-color: #8e7cc3; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;span style="color: red;"&gt;3x+9y-10z &amp;nbsp;= &amp;nbsp; 24&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #8e7cc3; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;span style="color: red;"&gt;x-6y+4z &amp;nbsp; &amp;nbsp; &amp;nbsp;= &amp;nbsp; -4&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #8e7cc3; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;span style="color: red;"&gt;10x-2y+8z &amp;nbsp;= &amp;nbsp;20&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #8e7cc3; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;Donde Ax = b.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;A =&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;[[3 9 -10][1 -6 4][10 -2 8]] y&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;B &amp;nbsp;= [[24][-4[[20]]&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;El código se muestra a continuación:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;pre&gt;&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;from numpy import *&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define los valores de la matriz A&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;A = array([[3,9,-10],[1,-6,4],[10,-2,8]])&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;Q,R = linalg.qr(A) # qr decomposition of A&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#Se definen los valores de la matriz B&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;b = array([[24],[-4],[20]])&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#resolver Ax=b usando la funcion estandar numpy&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;x = linalg.solve(A,b)&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#resolver Ax = b usando Q y R.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;y = dot(Q.T,b)&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;xQR = linalg.solve(R,y)&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;print "\nComparacion de Soluciones:"&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;print x.T,'Ax=b'&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;print xQR.T,'Rx=y'&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;Al ejecutar el script se tiene lo siguiente:&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;python qr.py&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;b&gt;&lt;span style="color: #660000;"&gt;Comparacion de Soluciones:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;b&gt;&lt;span style="color: #660000;"&gt;[[ 2.99029126 &amp;nbsp;0.40776699 -1.13592233]] Ax=b&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;b&gt;&lt;span style="color: #660000;"&gt;[[ 2.99029126 &amp;nbsp;0.40776699 -1.13592233]] Rx=y&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;

&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;Como se puede ver, la solución usando la función estándar de numpy y por la descomposición QR generan el mismo resultado.&lt;/span&gt;
&lt;br /&gt;
&lt;div style="line-height: 18px;"&gt;
&lt;span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/lRhWnRvs8vI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2010196608662876993/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2010196608662876993" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2010196608662876993?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2010196608662876993?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/lRhWnRvs8vI/resolucion-de-sistemas-de-ecuaciones.html" title="Resolución de sistemas de ecuaciones lineales por descomposión QR usando Numpy" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.0490945 -68.16117650000001 10.2991595 -67.83845350000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/resolucion-de-sistemas-de-ecuaciones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MEQ344fSp7ImA9WhBSE0k.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1273570602337651044</id><published>2013-02-20T03:00:00.000-04:30</published><updated>2013-02-20T03:00:02.035-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-20T03:00:02.035-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Creación de gráfico de burbujas con matplotlib</title><content type="html">&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;Los gráficos de burbuja presentan los datos como una serie de burbujas, el tamaño de las cuales es proporcional a la cantidad de datos.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;Un gráfico de este tipo resulta muy efectivo para mostrar el número de productos vendidos en cierta región.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;Existe una herramienta que se llama Trendalyzer &amp;nbsp;desarrollada por la Fundación Gapminder, está herramienta permite convertir series de estadísticas en gráficos interactivos.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;Es &lt;a href="http://es.wikipedia.org/wiki/Hans_Rosling" target="_blank"&gt;Hans Rosling&lt;/a&gt; uno de los fundadores de Gapminder quien ha mostrado el potencial de la herramienta.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.16666603088379px;"&gt;El siguiente vídeo es una demostración de la herramienta:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="https://ytimg.googleusercontent.com/vi/-C-hXn2RY3M/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="https://www.youtube.com/v/-C-hXn2RY3M&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="320" height="266"  src="https://www.youtube.com/v/-C-hXn2RY3M&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;Con matplotlib en Python también se pueden crear gráficas de burbuja, el artículo se basa en un artículo en Inglés llamado "&lt;a href="http://glowingpython.blogspot.com/2011/11/how-to-make-bubble-charts-with.html" target="_blank"&gt;How to make Bubble charts with matplotlib&lt;/a&gt;".&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;Los datos se obtendrán de un archivo csv, estos datos son de estadística del crimen en los Estados Unidos por estado del año 2005. El archivo csv se puede bajar &lt;a href="http://datasets.flowingdata.com/crimeRatesByState2005.csv" target="_blank"&gt;aquí&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;La información en el archivo csv se tiene de la siguiente forma (se muestra las primeras líneas del archivo):&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;b&gt;&lt;span style="color: #660000;"&gt;
&lt;pre&gt;state,murder,forcible_rape,robbery,aggravated_assault,burglary,larceny_theft,motor_vehicle_theft,population
United States,5.6,31.7,140.7,291.1,726.7,2286.3,416.7,295753151
Alabama,8.2,34.3,141.4,247.8,953.8,2650,288.3,4545049
Alaska,4.8,81.1,80.9,465.1,622.5,2599.1,391,669488
Arizona,7.5,33.8,144.4,327.4,948.4,2965.2,924.4,5974834
Arkansas,6.7,42.9,91.1,386.8,1084.6,2711.2,262.1,2776221
California,6.9,26,176.1,317.3,693.3,1916.5,712.8,35795255
&lt;/pre&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;Como se ve la primera línea se tiene el título de cada columna, en la segunda línea se tiene la información total de Estados Unidos y luego se muestra la información por Estado.&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;
&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;Para efectos de programación la primera y segunda línea no son relevantes para la gráfica de burbuja.&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;
&lt;/pre&gt;
&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;A continuación el código del programa:&lt;/pre&gt;
&lt;pre style="word-wrap: break-word;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;span style="white-space: pre-wrap;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;pre style="word-wrap: break-word;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;span style="white-space: pre-wrap;"&gt;#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pylab import *
from scipy import *

#Leer los datos desde el archivo csv
#Archivo original
#durl = 'http://datasets.flowingdata.com/crimeRatesByState2005.csv'
#Archivo modificado.
durl = 'http://127.0.0.1/descargas/crimeRatesByState2005-es.csv'
#Se captura los datos del archivo csv.
rdata = genfromtxt(durl,dtype='S8,f,f,f,f,f,f,f,i',delimiter=',')

rdata[0] = zeros(8) # se elimina los titulos 
rdata[1] = zeros(8) # se elimina la estadistica total de estados unidos (2da linea)
x = []
y = []
color = []
area = []

#Se captura los datos de cada fila
for data in rdata:
    x.append(data[1]) # asesinatos
    y.append(data[5]) # robo
    color.append(data[6]) # hurtos
    area.append(sqrt(data[8])) # poblacion
    # graficando las primeras 8 letras del nombre del estado
    text(data[1], data[5],data[0],size=11,horizontalalignment='center')
    

# se crea la grafica
sct = scatter(x, y, c=color, s=area, linewidths=2, edgecolor='w')
sct.set_alpha(0.75)
#Se define los ejes
axis([0,11,200,1280])
#Las etiquetas de cada eje
xlabel('Asesinatos por cada 100.000 habitantes')
ylabel('Robos por cada 100.000 habitantes')
show()&lt;/span&gt;&lt;span style="white-space: pre-wrap;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
La siguiente figura muestra el resultado de la ejecución del programa:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-3MmAwe7Alts/USRI8vCldBI/AAAAAAAAEdc/UqXrMZTHlRY/s1600/Captura+de+pantalla+de+2013-02-19+23:23:33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-3MmAwe7Alts/USRI8vCldBI/AAAAAAAAEdc/UqXrMZTHlRY/s1600/Captura+de+pantalla+de+2013-02-19+23:23:33.png" height="175" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.171875px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/fW81aNr8zPo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1273570602337651044/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1273570602337651044" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1273570602337651044?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1273570602337651044?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/fW81aNr8zPo/creacion-de-grafico-de-burbujas-con.html" title="Creación de gráfico de burbujas con matplotlib" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-3MmAwe7Alts/USRI8vCldBI/AAAAAAAAEdc/UqXrMZTHlRY/s72-c/Captura+de+pantalla+de+2013-02-19+23:23:33.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.0490945 -68.16117650000001 10.2991595 -67.83845350000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/creacion-de-grafico-de-burbujas-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIEQ3k9eyp7ImA9WhBSE08.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-686647218201727222</id><published>2013-02-19T20:55:00.000-04:30</published><updated>2013-02-19T20:55:02.763-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-19T20:55:02.763-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="csv" /><category scheme="http://www.blogger.com/atom/ns#" term="csvkit" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Manejar información de un archivo csv con csvkit</title><content type="html">El programa csvkit es una herramienta desarrollada en Python que facilita la manipulación de la información contenida en un archivo con formato csv.&lt;br /&gt;
&lt;br /&gt;
Se utilizará como ejemplo los datos de la página data.gov. Los datos que se utilizará son del Departamento de Asuntos de Veteranos de beneficios educativos de los Estatos Unidos (disculpen la traducción) del año 2009.&lt;br /&gt;
&lt;br /&gt;
Es necesario instalar csvkit, en este caso se usa el comando pip de python:&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;pip install csvkit&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Obtener los datos:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;mkdir beneficios&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;cd beneficios&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;/pre&gt;
Bajar archivo 2009.csv con el comando wget:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;wget -O 2009.csv -U "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (JHTML, like Gecko) chrome/10.0.648.205 Safari/534.16" http://www.data.gob/download/4029/csv&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;/pre&gt;
Verificar las primeras 5 líneas del archivo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;head -n 5 2009.csv&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;State Name,State Abbreviate,Code,Montgomery GI Bill-Active Duty,Montgomery GI Bill- Selective Reserve,Dependents' Educational Assistance,Reserve Educational Assistance Program,Post-Vietnam Era Veteran's Educational Assistance Program,TOTAL,&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;ALABAMA,AL,01,"6,718","1,728","2,703","1,269",8,"12,426",&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;ALASKA,AK,02,776,154,166,60,2,"1,158",&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;ARIZONA,AZ,04,"26,822","2,005","3,137","2,011",11,"33,986",&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;ARKANSAS,AR,05,"2,061",988,"1,575",886,3,"5,513"&lt;/span&gt;&lt;/b&gt;,

&lt;/pre&gt;
Se puede usar el mismo comando wget para bajar los archivos de los años 2010.csv, 2011.csv y 2012.csv. &lt;br /&gt;
&lt;br /&gt;
Obtener la información de las columnas con csvcut:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -n 2009.csv&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 1: State Name&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 2: State Abbreviate&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 3: Code&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 4: Montgomery GI Bill-Active Duty&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 5: Montgomery GI Bill- Selective Reserve&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 6: Dependents' Educational Assistance&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 7: Reserve Educational Assistance Program&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 8: Post-Vietnam Era Veteran's Educational Assistance Program&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 9: TOTAL&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp;10:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
Como se puede observar, el archivo csv maneja 9 columnas.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Con el comando csvcut se puede obtener información entre la fila 2 y 3 (State Abbreviate y Code), sólo se desea mostrar las primeras 5 líneas del archivo:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -c 2,3 2009.csv | head -n 5&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;State Abbreviate,Code&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;AL,01&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;AK,02&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;AZ,04&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;AR,05&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se puede también manejar estadisticas bajo demanda con csvstat. Se genera la estadistica de la información de las columnas 1,4,9 y 10. Para este caso se utiliza csvcut y se pasa la información a csvstat:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -c 1,4,9,10 2009.csv | csvstat&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 1. State Name&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;lt;type 'unicode'&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Nulls: True&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Unique values: 52&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Max length: 17&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 2. Montgomery GI Bill-Active Duty&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;lt;type 'int'&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Nulls: True&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Min: 435&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Max: 34942&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Sum: 325723&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Mean: 6263.90384615&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Median: 3548.0&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Standard Deviation: 7537.86225373&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Unique values: 52&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 3. TOTAL&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;lt;type 'int'&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Nulls: True&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Min: 768&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Max: 46897&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Sum: 506914&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Mean: 9748.34615385&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Median: 6520.0&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Standard Deviation: 10070.4022127&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Unique values: 52&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; 4. _unnamed&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;lt;type 'NoneType'&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Nulls: True&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Values:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se puede realizar busquedas por filas con csvgrep. En este caso la información total del Estado de Illinois:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -c 1,"TOTAL" 2009.csv | csvgrep -c 1 -m ILLINOIS&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;State Name,TOTAL&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;ILLINOIS,"21,964"&lt;/span&gt;&lt;/b&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
Voltear orden de las columnas con csvcut:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -c 9,1 2009.csv | head -n 5&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;TOTAL,State Name&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;"12,426",ALABAMA&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;"1,158",ALASKA&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;"33,986",ARIZONA&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;"5,513",ARKANSAS&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
En este caso se cambia el orden de las columnas al decirle a csvcut el orden de las columnas.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ordenar con csvsort:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -c 9,1 2009.csv | csvsort -r | head -n 5&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;TOTAL,State Name&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;46897,CALIFORNIA&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;40402,TEXAS&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;36394,FLORIDA&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;33986,ARIZONA&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se puede dar un formato para que sea legible la información con csvlook:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -c 9,1 2009.csv | csvsort -r -l | csvlook&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;|--------------+-------+--------------------|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;line_number | TOTAL | State Name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;|--------------+-------+--------------------|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 46897 | CALIFORNIA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 40402 | TEXAS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 36394 | FLORIDA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 33986 | ARIZONA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;5 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 21964 | ILLINOIS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;6 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 20541 | VIRGINIA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;7 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 18236 | GEORGIA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 15730 | NORTH CAROLINA &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 13967 | NEW YORK &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;10 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 13962 | MISSOURI &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;11 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 13614 | COLORADO &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;12 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 13314 | OHIO &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;13 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 13011 | PENNSYLVANIA &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;14 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 12426 | ALABAMA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;15 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 11492 | WASHINGTON &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;16 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 10085 | MARYLAND &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;17 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 9791 &amp;nbsp;| MINNESOTA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;18 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 9344 &amp;nbsp;| MICHIGAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;19 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 9206 &amp;nbsp;| OKLAHOMA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;20 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 9013 &amp;nbsp;| IOWA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;21 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 8840 &amp;nbsp;| WEST VIRGINIA &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;22 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 8757 &amp;nbsp;| TENNESSEE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;23 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 8081 &amp;nbsp;| WISCONSIN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;24 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 7872 &amp;nbsp;| SOUTH CAROLINA &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;25 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 7809 &amp;nbsp;| INDIANA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;26 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 6652 &amp;nbsp;| LOUISIANA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;27 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 6388 &amp;nbsp;| KENTUCKY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;28 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 6009 &amp;nbsp;| MASSACHUSETTS &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;29 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 5870 &amp;nbsp;| OREGON &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;30 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 5513 &amp;nbsp;| ARKANSAS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;31 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 5511 &amp;nbsp;| NEW JERSEY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;32 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 5416 &amp;nbsp;| NEBRASKA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;33 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 5345 &amp;nbsp;| UTAH &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;34 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 4947 &amp;nbsp;| KANSAS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;35 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 4551 &amp;nbsp;| NEW MEXICO &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;36 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 4424 &amp;nbsp;| PUERTO RICO &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;37 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 4299 &amp;nbsp;| MISSISSIPPI &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;38 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 3728 &amp;nbsp;| NEVADA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;39 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 2997 &amp;nbsp;| CONNECTICUT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;40 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 2751 &amp;nbsp;| IDAHO &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;41 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 2521 &amp;nbsp;| HAWAII &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;42 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1992 &amp;nbsp;| SOUTH DAKOTA &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;43 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1920 &amp;nbsp;| MAINE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;44 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1795 &amp;nbsp;| MONTANA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;45 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1778 &amp;nbsp;| NORTH DAKOTA &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;46 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1326 &amp;nbsp;| NEW HAMPSHIRE &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;47 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1175 &amp;nbsp;| RHODE ISLAND &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;48 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1158 &amp;nbsp;| ALASKA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;49 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1145 &amp;nbsp;| DELAWARE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;50 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1117 &amp;nbsp;| WYOMING &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;51 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1084 &amp;nbsp;| DIST. OF COLUMBIA &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;52 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 768 &amp;nbsp; | VERMONT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;| &amp;nbsp;53 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;|--------------+-------+--------------------|&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Para finalizar se puede salvar el trabajo en un nuevo archivo csv:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;csvcut -c 9,1 2009.csv | csvsort -r -l &amp;gt; 2009_ranking.csv&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Si se desea aprender más de la herramienta csvkit se puede revisar la página de la &lt;a href="http://csvkit.readthedocs.org/en/latest/index.html" target="_blank"&gt;documentación&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En próximo artículo se mostrará como usar csvkit desde un programa en Python.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/oS-i7YsVUBQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/686647218201727222/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=686647218201727222" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/686647218201727222?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/686647218201727222?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/oS-i7YsVUBQ/manejar-informacion-de-un-archivo-csv.html" title="Manejar información de un archivo csv con csvkit" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.174127 -67.99981500000001 10.174127 -67.99981500000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/manejar-informacion-de-un-archivo-csv.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cERH4ycCp7ImA9WhBSEkg.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-8584275282733495801</id><published>2013-02-19T03:00:00.000-04:30</published><updated>2013-02-19T03:00:05.098-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-19T03:00:05.098-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><category scheme="http://www.blogger.com/atom/ns#" term="Scipy" /><title>Teorema de muestreo explicado con numpy</title><content type="html">&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;El teorema demuestra que la reconstrucción exacta de una señal periódica&lt;/span&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;&amp;nbsp;continua en banda base a partir de sus muestras, es matemáticamente posible si la señal está limitada en banda y la tasa de muestreo es superior al doble de su ancho de banda.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;En el artículo se mostrará una tasa de muestreo a diferentes frecuencias, desde el valor doble a la frecuencia base, luego a un valor menor.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: sans-serif; font-size: 13.333333969116211px; line-height: 19.18402862548828px;"&gt;&lt;br /&gt;&lt;/span&gt;
Algo más de teoría:&lt;br /&gt;
El teorema de muestreo de una señal continua que x (t) limitada en banda a B Hz pueden ser recuperados de sus muestras x [n] = x (n * T), donde n es un número entero, si T es mayor que o igual a 1 / (2B) sin pérdida de ninguna información. Y llamamos 2B la tasa de Nyquist.&lt;br /&gt;
&lt;br /&gt;
El muestreo a una tasa inferior a la tasa de Nyquist se denomina submuestreo, se produce el efecto aliasing.&lt;br /&gt;
&lt;br /&gt;
Si se desea más información sobre el Teorema de Muestreo se puede consultar a &lt;a href="http://es.wikipedia.org/wiki/Teorema_de_muestreo_de_Nyquist-Shannon" target="_blank"&gt;wikipedia&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Este artículo se basa en un artículo en Inglés "&lt;a href="http://glowingpython.blogspot.com/2011/09/sampling-theorem-explained-with-numpy.html" target="_blank"&gt;The sampling theorem explained with numpy&lt;/a&gt;" .&lt;br /&gt;
&lt;br /&gt;
El código se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#De numpy se importa lo necesario para graficar la&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#funcion seno&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from numpy import linspace,sin,cos,pi,ceil,floor,arange&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#De pylab se importa plot, show y axis. Lo necesario para crear&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#la grafica&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from pylab import plot,show,axis&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Muestreo de una seganl de ancho de banda 40 hz&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;# con velocidad de muestreo de 80 Hz&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;f = 40; &amp;nbsp;# Hz&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Tiempo minimo y maximo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;tmin = -0.3;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;tmax = 0.3;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define el tiempo de la segnal.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;t = linspace(tmin, tmax, 400);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define la segnal de muestreo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;x = cos(2*pi*t) + cos(2*pi*f*t)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se grafica el tiempo y la segnal.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plot(t, x)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# sampling the signal with a sampling rate of 80 Hz&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;# in this case, we are using the Nyquist rate.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Muestreo de la segnal con una velocidad de muestreo de 80 Hz.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Periodo de muestreo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;T = 1/80.0;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Tiempo minimo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;nmin = ceil(tmin / T);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Tiempo maximo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;nmax = floor(tmax / T);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Tiempo de la segnal.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;n = arange(nmin,nmax);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Segnal a la velocidad de muestreo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;x1 = cos(2*pi*n*T) + cos(2*pi*f*n*T);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se grafica la segnal.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plot(n*T, x1, 'bo')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Muestreo de la segnal con una velocidad de muestreo de 35Hz.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Note que 35Hz esta por debajo de la velocidad de Nyquist.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;T = 1/35.0;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;nmin = ceil(tmin / T);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;nmax = floor(tmax / T);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;n = arange(nmin,nmax);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;x2 = cos(2*pi*n*T) + cos(2*pi*f*n*T);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plot(n*T, x2, '-r.',markersize=15)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;axis([-0.3, 0.3, -1.5, 2.3])&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
La gráfica generada es la siguiente:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-vJDaEcEGKS0/USKnX8llFDI/AAAAAAAAEcg/33qcM6fVGks/s1600/Captura+de+pantalla+de+2013-02-18+17:17:53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-vJDaEcEGKS0/USKnX8llFDI/AAAAAAAAEcg/33qcM6fVGks/s320/Captura+de+pantalla+de+2013-02-18+17:17:53.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Con puntos azules se tiene el muestreo a 80Hz, con puntos rojos se tiene el muestreo a 35 Hz, se nota que el muestreo a 80 Hz es suficiente para capturar la oscilación de la señal.&lt;br /&gt;
&lt;br /&gt;
En la siguiente gráfica se tiene un muestreo a 10 Hz que está por debajo de la frecuencia base de la señal (40 Hz).&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-pdbBt2DerlY/USKpDNVkg8I/AAAAAAAAEco/Ieh3y4KveGk/s1600/Captura+de+pantalla+de+2013-02-18+17:14:02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://4.bp.blogspot.com/-pdbBt2DerlY/USKpDNVkg8I/AAAAAAAAEco/Ieh3y4KveGk/s320/Captura+de+pantalla+de+2013-02-18+17:14:02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora se muestra la frecuencia de muestreo a 20 Hz:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-jc3-I-mox7U/USKpTcmj0DI/AAAAAAAAEcw/VwGS6Sfg62c/s1600/Captura+de+pantalla+de+2013-02-18+17:14:27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-jc3-I-mox7U/USKpTcmj0DI/AAAAAAAAEcw/VwGS6Sfg62c/s320/Captura+de+pantalla+de+2013-02-18+17:14:27.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Para terminar se muestra la frecuencia de muestreo a 30 Hz:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-8xaKeI_HzLU/USKpk_fhMFI/AAAAAAAAEc4/Ac74b4NAz4E/s1600/Captura+de+pantalla+de+2013-02-18+17:14:57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://3.bp.blogspot.com/-8xaKeI_HzLU/USKpk_fhMFI/AAAAAAAAEc4/Ac74b4NAz4E/s320/Captura+de+pantalla+de+2013-02-18+17:14:57.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Para terminar se muestra la gráfica a una frecuencia de muestreo de 320 Hz:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-zBDO8DQZkPQ/USKqL6vBOHI/AAAAAAAAEdA/jeAvGowI_xE/s1600/Captura+de+pantalla+de+2013-02-18+17:16:23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-zBDO8DQZkPQ/USKqL6vBOHI/AAAAAAAAEdA/jeAvGowI_xE/s320/Captura+de+pantalla+de+2013-02-18+17:16:23.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Como puede notarse, mientras menor es la frecuencia de muestreo con respecto a la frecuencia base de la señal no se puede generar la señal original a partir de la muestra, mientras se va a aumentando la señal hasta llegar a la frecuencia base, se nota que se tiene más muestras para dicha recuperación pero sigue sin ser suficiente, es a partir del doble de la frecuencia base que la muestra puede ser generada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/ph2ExFdwnWg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/8584275282733495801/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=8584275282733495801" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8584275282733495801?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8584275282733495801?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/ph2ExFdwnWg/teorema-de-muestreo-explicado-con-numpy.html" title="Teorema de muestreo explicado con numpy" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-vJDaEcEGKS0/USKnX8llFDI/AAAAAAAAEcg/33qcM6fVGks/s72-c/Captura+de+pantalla+de+2013-02-18+17:17:53.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.174127 -67.99981500000001 10.174127 -67.99981500000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/teorema-de-muestreo-explicado-con-numpy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ECQng5fyp7ImA9WhBSEUQ.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-3249391539065595808</id><published>2013-02-18T09:24:00.001-04:30</published><updated>2013-02-18T09:24:23.627-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-18T09:24:23.627-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pylab" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Scipy" /><title>Encontrar el mínimo de una función usando fmin de scipy</title><content type="html">Este artículo muestra como se encuentra el valor mínimo de una función con la función fmin de scipy.&lt;br /&gt;
&lt;br /&gt;
El artículo es una versión en Español del artículo en Inglés "&lt;a href="http://glowingpython.blogspot.com/2011/04/how-to-find-minimum-of-function-using.html" target="_blank"&gt;How to find the minimum of a function using fmin from scipy&lt;/a&gt;".&lt;br /&gt;
&lt;br /&gt;
El código se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Importar numpy,pylab y la función fmin de scipy.optimize.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import numpy&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import pylab&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from scipy.optimize import fmin&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# Se define la funcion a partir de lambda.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;rsinc = lambda x: -1 * numpy.sin(x)/x&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define un valor x0 de -5.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;x0 = -5&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se calcula el valor minimo de la funcion en el punto x0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;xmin0 = fmin(rsinc,x0)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define el punto x1 con valor -4&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;x1 = -4&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se calcula el valor minimo de la funcion en el punto x1&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;xmin1 = fmin(rsinc,x1)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# se grafica la funcion.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;x = numpy.linspace(-15,15,100)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;y = rsinc(x)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.plot(x,y)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define el punto x0 en la grafica de la funcion&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.plot(x0,rsinc(x0),'bd',xmin0,rsinc(xmin0),'bo')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define el punto x1 en la grafica de la funcion&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.plot(x1,rsinc(x1),'rd',xmin1,rsinc(xmin1),'ro')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.axis([-15,15,-1.3,0.3])&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.show()&lt;/span&gt;&lt;/i&gt;



&lt;/pre&gt;
La figura a continuación muestra la gráfica de la función:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-TE8QYclPfWY/USIwhI_0nJI/AAAAAAAAEcI/mQ7InUjQViU/s1600/Captura+de+pantalla+de+2013-02-18+09:14:39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-TE8QYclPfWY/USIwhI_0nJI/AAAAAAAAEcI/mQ7InUjQViU/s320/Captura+de+pantalla+de+2013-02-18+09:14:39.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
El punto azul es el mínimo encontrado al inicio desde diamante azul &amp;nbsp;(x= -5), el punto rojo es el mínimo encontrado iniciando desde diamante rojo. Este punto es el mínimo global encontrado en la función.&lt;br /&gt;
&lt;br /&gt;
Además de la gráfica se genera la siguiente salida que genera la función fmin:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;Optimization terminated successfully.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Current function value: -0.128375&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterations: 18&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Function evaluations: 36&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;Optimization terminated successfully.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Current function value: -1.000000&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterations: 19&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Function evaluations: 38&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/zguvFNtnNcc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/3249391539065595808/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=3249391539065595808" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3249391539065595808?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3249391539065595808?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/zguvFNtnNcc/encontrar-el-minimo-de-una-funcion.html" title="Encontrar el mínimo de una función usando fmin de scipy" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-TE8QYclPfWY/USIwhI_0nJI/AAAAAAAAEcI/mQ7InUjQViU/s72-c/Captura+de+pantalla+de+2013-02-18+09:14:39.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.0490945 -68.16117650000001 10.2991595 -67.83845350000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/encontrar-el-minimo-de-una-funcion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMEQH8yfSp7ImA9WhBTGUw.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-3116606247540969068</id><published>2013-02-15T03:00:00.000-04:30</published><updated>2013-02-15T03:00:01.195-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-15T03:00:01.195-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="Scipy" /><title>Graficar la intercepción de 2 funciones</title><content type="html">En este artículo se explica como encontrar la intercepción de 2 funciones, en este caso una función senoidal con una cosenoidal.&lt;br /&gt;
&lt;br /&gt;
El artículo se basa en uno en Inglés que se llama "&lt;a href="http://glowingpython.blogspot.com/2011/05/hot-to-find-intersection-of-two.html" target="_blank"&gt;How to find the intersection of two functions&lt;/a&gt;".&lt;br /&gt;
&lt;br /&gt;
La gráfica mostrará la intercepción de las funciones sin(x) y cos(x) desde el valor inicial de x igual a cero. Se utilizará la función fsolve la cual devuelve la raíz de una ecuación (no lineal ) definida por func(x) = 0.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra el código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;from scipy.optimize import fsolve&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Importar pylab&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import pylab&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Importar numpy&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import numpy&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define la funcion que calcula la intercepcion&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#de 2 funciones.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;def EncontrarIntercepcion(fun1,fun2,x0):&lt;/span&gt;&lt;/i&gt;
    &lt;i&gt;&lt;span style="color: blue;"&gt;#Se usa la función lambda de la diferencia de ambas funciones con&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;    #valor inicial x0
&amp;nbsp; &amp;nbsp; return fsolve(lambda x : fun1(x) - fun2(x),x0)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #se calcula el resultado de la intercepcion de 2 funciones&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #sin y cos con valor inicial de 0.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; resultado = EncontrarInterseccion(numpy.sin,numpy.cos,0.0)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #se genera el rango de -2 a 2.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; x = numpy.linspace(-2,2,50)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se genera la grafica,&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; pylab.plot(x,numpy.sin(x),x,numpy.cos(x),result,numpy.sin(result),'ro')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #se muestra la grafica.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; pylab.show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
La gráfica se muestra a continuación:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-dIOUx_qhD6c/URw4NL2D9lI/AAAAAAAAESQ/Kv6xpvJV7pI/s1600/Captura+de+pantalla+de+2013-02-13+20:34:00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://1.bp.blogspot.com/-dIOUx_qhD6c/URw4NL2D9lI/AAAAAAAAESQ/Kv6xpvJV7pI/s320/Captura+de+pantalla+de+2013-02-13+20:34:00.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
La función seno se encuentra en color azul,la gráfica del coseno en color verde y la intercepción es un punto de color rojo.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;
&lt;a class="zemanta-pixie-a" href="http://www.zemanta.com/?px" title="Enhanced by Zemanta"&gt;&lt;img alt="Enhanced by Zemanta" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_h.png?x-id=0edb26bb-a8c3-4357-9031-62fd2feda88e" style="border: none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/qjGuiZLyGrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/3116606247540969068/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=3116606247540969068" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3116606247540969068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3116606247540969068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/qjGuiZLyGrc/graficar-la-intercepcion-de-2-funciones.html" title="Graficar la intercepción de 2 funciones" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-dIOUx_qhD6c/URw4NL2D9lI/AAAAAAAAESQ/Kv6xpvJV7pI/s72-c/Captura+de+pantalla+de+2013-02-13+20:34:00.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.0490945 -68.16117650000001 10.2991595 -67.83845350000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/graficar-la-intercepcion-de-2-funciones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABSHw9fCp7ImA9WhBTGEU.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-130053535079880950</id><published>2013-02-14T20:09:00.000-04:30</published><updated>2013-02-14T20:09:19.264-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-14T20:09:19.264-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Fedora" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="Scipy" /><title>Encontrar la raíz de una función con fsolve</title><content type="html">Este artículo explica como calcular la raíz de una función utilizando la función fsolve.&lt;br /&gt;
&lt;br /&gt;
El artículo se basa en un artículo en Inglés "&lt;a href="http://glowingpython.blogspot.com/2011/05/how-to-find-roots-of-function-with.html" target="_blank"&gt;How to find the rooots of a function with fsolve&lt;/a&gt;".&lt;br /&gt;
&lt;br /&gt;
La función fsolve retorna la raíces de una ecuación no lineal definida por f(x) = 0.&lt;br /&gt;
Para este caso se calculará la raíz de la función f(x) = x^3.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra el código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Import fsolve para calcular la raiz de la funcion x^3&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from scipy.optimize import fsolve&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Importar pylab&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import pylab&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#importar numpy&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import numpy&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#se calcula la potencia 3 de x con la funcion lambda&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;potencia3 = lambda x : x**3&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se calcula la raiz de x^3 iniciando con x = 10&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;resultado = fsolve(potencia3,10) # starting from x = 10&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;print resultado&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define 400 valores de x entre -4 a 4&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;x = numpy.linspace(-4,4,400)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se genera la grafica, pasando el valor de x&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#la potencia 3era de x, el valor de resultado, la potencia 3era de resultado&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.plot(x,potencia3(x),resultado,potencia3(resultado),'ro')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define el grid&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.grid(b=1)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se muestra la grafica&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;pylab.show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
La gráfica muestra el punto donde se encuentra la raíz de la función:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-hMrTThNIAX8/UR2CiYtm8BI/AAAAAAAAEUI/WVFB8UR1Aoo/s1600/Captura+de+pantalla+de+2013-02-14+19:54:01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://4.bp.blogspot.com/-hMrTThNIAX8/UR2CiYtm8BI/AAAAAAAAEUI/WVFB8UR1Aoo/s320/Captura+de+pantalla+de+2013-02-14+19:54:01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;. &lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/fZLKLGd2Ha8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/130053535079880950/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=130053535079880950" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/130053535079880950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/130053535079880950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/fZLKLGd2Ha8/encontrar-la-raiz-de-una-funcion-con.html" title="Encontrar la raíz de una función con fsolve" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-hMrTThNIAX8/UR2CiYtm8BI/AAAAAAAAEUI/WVFB8UR1Aoo/s72-c/Captura+de+pantalla+de+2013-02-14+19:54:01.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.0490945 -68.16117650000001 10.2991595 -67.83845350000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/encontrar-la-raiz-de-una-funcion-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcERXc9eip7ImA9WhBTGE8.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1110508970530848079</id><published>2013-02-14T03:00:00.000-04:30</published><updated>2013-02-14T03:00:04.962-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-14T03:00:04.962-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Fedora" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Graficar una función de 2 variables con matplotlib</title><content type="html">Este artículo se basa en el artículo en Ingles "&lt;a href="http://glowingpython.blogspot.com/2012/01/how-to-plot-two-variable-functions-with.html" target="_blank"&gt;How to plot a function of two variables with matplotlib&lt;/a&gt;" .&lt;br /&gt;
&lt;br /&gt;
Se tendrá 2 gráficas de una función de 2 variables, la primera será la gráfica de intensidad y la segunda gráfica será una gráfica 3D.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra el código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#De numpy se explorta arange y exp&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from numpy import exp,arange&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#De pylab se importa meshgrid, cm, imshow, contour, clabel, clorbar, axis, title y show&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from pylab import meshgrid,cm,imshow,contour,clabel,colorbar,axis,title,show&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;from mpl_toolkits.mplot3d import Axes3D&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from matplotlib import cm&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from matplotlib.ticker import LinearLocator, FormatStrFormatter&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import matplotlib.pyplot as plt&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define la funcion que se va a graficar&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;def z_func(x,y):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; return (1-(x**2+y**3))*exp(-(x**2+y**2)/2)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;def graficaIntencidad(Z):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se dibuja la funcion&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; im = imshow(Z,cmap=cm.RdBu)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se agrega el contorno de lineas con sus etiquetas&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; cset = contour(Z,arange(-1,1.5,0.2),linewidths=2,cmap=cm.Set2)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; clabel(cset,inline=True,fmt='%1.1f',fontsize=10)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se agrega la barra de colores a la derecha&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; colorbar(im)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se crea el titulo de la grafica con estilo latex&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; title('$z=(1-x^2+y^3) e^{-(x^2+y^3)/2}$')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se muestra la grafica&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; show()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;def grafica3D(X,Y,Z):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; fig = plt.figure()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; ax = fig.gca(projection='3d')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1,&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cmap=cm.RdBu,linewidth=0, antialiased=False)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; ax.zaxis.set_major_locator(LinearLocator(10))&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; fig.colorbar(surf, shrink=0.5, aspect=5)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; plt.show()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #rango de valores para x y y.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; x = arange(-3.0,3.0,0.1)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; y = arange(-3.0,3.0,0.1)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se define la grilla de puntos&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; X,Y = meshgrid(x, y)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se evalua la funcion segun los valores de X y Y&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; Z = z_func(X, Y)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; graficaIntencidad(Z)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; grafica3D(X,Y,Z)&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
Al ejecutar el script se mostrará la primera gráfica, al cerrarla aparecerá la segunda gráfica.&lt;br /&gt;
&lt;br /&gt;
La gráfica de intensidad se muestra a continuación:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-VPNZgLe6wYQ/URr1NsoYosI/AAAAAAAAEQE/U1PxEIJPEag/s1600/Captura+de+pantalla+de+2013-02-12+21:31:45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/-VPNZgLe6wYQ/URr1NsoYosI/AAAAAAAAEQE/U1PxEIJPEag/s320/Captura+de+pantalla+de+2013-02-12+21:31:45.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
La gráfica 3D se muestra a continuación:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-LU_KdeTbNNM/URr13pKSZZI/AAAAAAAAEQM/pJNvIRHE6sA/s1600/Captura+de+pantalla+de+2013-02-12+21:32:05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://3.bp.blogspot.com/-LU_KdeTbNNM/URr13pKSZZI/AAAAAAAAEQM/pJNvIRHE6sA/s320/Captura+de+pantalla+de+2013-02-12+21:32:05.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/4bnddJl09EU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1110508970530848079/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1110508970530848079" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1110508970530848079?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1110508970530848079?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/4bnddJl09EU/graficar-una-funcion-de-2-variables-con.html" title="Graficar una función de 2 variables con matplotlib" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-VPNZgLe6wYQ/URr1NsoYosI/AAAAAAAAEQE/U1PxEIJPEag/s72-c/Captura+de+pantalla+de+2013-02-12+21:31:45.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.174127 -67.99981500000001 10.174127 -67.99981500000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/graficar-una-funcion-de-2-variables-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEERX0-eip7ImA9WhBTF0k.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-4689172001252635377</id><published>2013-02-13T03:00:00.000-04:30</published><updated>2013-02-13T03:00:04.352-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-13T03:00:04.352-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="grafos" /><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Fedora" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Networkx" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Creación de grafos con networkx. Parte 3.</title><content type="html">En el &lt;a href="http://ernesto-ecrespo.blogspot.com/2013/02/creacion-de-grafos-con-networkx-parte-2.html" target="_blank"&gt;artículo anterior se muestra como crear grafos a partir del contenido de un archivo&lt;/a&gt;, &lt;a href="http://ernesto-ecrespo.blogspot.com/2012/11/creacion-de-grafos-con-networkx-parte-1.html" target="_blank"&gt;en el primero se explica lo básico en la creación de grafo&lt;/a&gt;s, en este se tocará el tema de analizar los grafos, de extraer información de los mismos.&lt;br /&gt;
&lt;br /&gt;
El ejemplo a continuación se crea un grafo con varios nodos (de la "a" a la "z"), se enlazan todos los nodos, luego se muestra la cantidad de nodos, la cantidad de relaciones entre nodos, se le asigna un atributo a un nodo, un atributo entre 2 nodos, se averigua los vecinos de un nodo, el valor del atributo de un nodo, entre 2 nodos, se muestra también la ruta más corta para llegar del nodo m al b; cual es el promedio de la ruta más corta, se muestra la relación de los nodos con respecto a m, cual es la ruta más corta utilizando el &lt;a href="http://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra" target="_blank"&gt;Algoritmo de&amp;nbsp;Dijkstra&lt;/a&gt; entre m y b. Para terminar se genera el grafo con varios métodos (espectral, aleatoria, circular y normal).&lt;br /&gt;
&lt;br /&gt;
A continuación el código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;import networkx as net&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa la libreria pyplot de matplotlib como plt&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;import matplotlib.pyplot as plt&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crea la instancia vacia del grafo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g=net.Graph()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crean los nodos con sus relaciones&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('a','b')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('b','c')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('c','a')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('a','d')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('f','d')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('g','f')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('h','b')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('i','h')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('i','g')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('j','c')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('k','j')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('l','k')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('m','l')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('k','h')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('i','d')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('f','k')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('m','g')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('n','m')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('o','m')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('p','o')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('q','h')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('r','q')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('s','r')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('t','a')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('u','t')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('v','u')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('j','b')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('w','f')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('x','w')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('y','i')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('z','y')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('n','p')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('z','x')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('z','v')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('s','x')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('p','v')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.add_edge('r','u')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;print "Nodos: ",g.nodes()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;print "Relaciones: ",g.edges()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define un tamagno al nodo a y un peso a la relacion entre el nodo a y b&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g.node['a']['size']=1&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;g['a']['b']['weight']=1&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;print "Vecinos de m: ", g.neighbors('m')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;print "Valor del nodo a: ",g['a']&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;print "Peso de la relacion entre a y b: ", g['a']['b']&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;print "Ruta mas corta entre m y b: ",net.algorithms.shortest_path(g,'m','b')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;print "Promedio de la ruta mas corta ",net.algorithms.average_shortest_path_length(g)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;print "Muestra la relacion de ruta mas corta entre pares de nodos relacionado con m: ", net.algorithms.all_pairs_shortest_path(g)['m']&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;print "Ruta mas corta usando el algoritmo de Dijkstra entre m y b:",net.algorithms.dijkstra_path(g, 'm', 'b')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se dibuja el grafo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;net.draw(g)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#net.draw_spectral(g)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#net.draw_circular(g)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#net.draw_random(g)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se muestra el grafico&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
&lt;br /&gt;
Para generar el grafo de forma espectral, circular o aleatoria se comenta el anterior y se descomenta el que se desea generar.&lt;br /&gt;
&lt;br /&gt;
El grafo normal se muestra en la siguiente figura:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-HfcZFd8p23U/URrek5z4rYI/AAAAAAAAEPE/Eo7AGCH-45w/s1600/Captura+de+pantalla+de+2013-02-12+19:58:08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-HfcZFd8p23U/URrek5z4rYI/AAAAAAAAEPE/Eo7AGCH-45w/s320/Captura+de+pantalla+de+2013-02-12+19:58:08.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
A continuación se muestra el grafo espectral:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-uOtAhmrojCY/URre-HI1tKI/AAAAAAAAEPM/WwZwVF0bMqE/s1600/Captura+de+pantalla+de+2013-02-12+20:01:09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/-uOtAhmrojCY/URre-HI1tKI/AAAAAAAAEPM/WwZwVF0bMqE/s320/Captura+de+pantalla+de+2013-02-12+20:01:09.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
A continuación se muestra el grafo circular:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-EFlh-s53-e4/URrfmFxmmfI/AAAAAAAAEPU/g0QSlX0bvO0/s1600/Captura+de+pantalla+de+2013-02-12+20:03:36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://4.bp.blogspot.com/-EFlh-s53-e4/URrfmFxmmfI/AAAAAAAAEPU/g0QSlX0bvO0/s320/Captura+de+pantalla+de+2013-02-12+20:03:36.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
A continuación se muestra el grafo aleatorio:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-uoUgOXwpd2Q/URrgxRmWNUI/AAAAAAAAEPg/ixT59YXmOS0/s1600/Captura+de+pantalla+de+2013-02-12+20:04:48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/-uoUgOXwpd2Q/URrgxRmWNUI/AAAAAAAAEPg/ixT59YXmOS0/s320/Captura+de+pantalla+de+2013-02-12+20:04:48.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
A parte de las gráficas se imprime lo siguiente en pantalla:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Nodos: &amp;nbsp;['a', 'c', 'b', 'd', 'g', 'f', 'i', 'h', 'k', 'j', 'm', 'l', 'o', 'n', 'q', 'p', 's', 'r', 'u', 't', 'w', 'v', 'y', 'x', 'z']&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Relaciones: &amp;nbsp;[('a', 'c'), ('a', 'b'), ('a', 'd'), ('a', 't'), ('c', 'b'), ('c', 'j'), ('b', 'h'), ('b', 'j'), ('d', 'i'), ('d', 'f'), ('g', 'i'), ('g', 'm'), ('g', 'f'), ('f', 'w'), ('f', 'k'), ('i', 'y'), ('i', 'h'), ('h', 'q'), ('h', 'k'), ('k', 'j'), ('k', 'l'), ('m', 'o'), ('m', 'l'), ('m', 'n'), ('o', 'p'), ('n', 'p'), ('q', 'r'), ('p', 'v'), ('s', 'x'), ('s', 'r'), ('r', 'u'), ('u', 't'), ('u', 'v'), ('w', 'x'), ('v', 'z'), ('y', 'z'), ('x', 'z')]&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Vecinos de m: &amp;nbsp;['o', 'l', 'g', 'n']&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Valor del nodo a: &amp;nbsp;{'c': {}, 'b': {'weight': 1}, 'd': {}, 't': {}}&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Peso de la relacion entre a y b: &amp;nbsp;{'weight': 1}&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Ruta mas corta entre m y b: &amp;nbsp;['m', 'l', 'k', 'h', 'b']&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Promedio de la ruta mas corta &amp;nbsp;2.99&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Muestra la relacion de ruta mas corta entre pares de nodos relacionado con m: &amp;nbsp;{'a': ['m', 'g', 'i', 'd', 'a'], 'c': ['m', 'l', 'k', 'j', 'c'], 'b': ['m', 'g', 'i', 'h', 'b'], 'd': ['m', 'g', 'i', 'd'], 'g': ['m', 'g'], 'f': ['m', 'g', 'f'], 'i': ['m', 'g', 'i'], 'h': ['m', 'g', 'i', 'h'], 'k': ['m', 'l', 'k'], 'j': ['m', 'l', 'k', 'j'], 'm': ['m'], 'l': ['m', 'l'], 'o': ['m', 'o'], 'n': ['m', 'n'], 'q': ['m', 'g', 'i', 'h', 'q'], 'p': ['m', 'o', 'p'], 's': ['m', 'g', 'f', 'w', 'x', 's'], 'r': ['m', 'g', 'i', 'h', 'q', 'r'], 'u': ['m', 'o', 'p', 'v', 'u'], 't': ['m', 'g', 'i', 'd', 'a', 't'], 'w': ['m', 'g', 'f', 'w'], 'v': ['m', 'o', 'p', 'v'], 'y': ['m', 'g', 'i', 'y'], 'x': ['m', 'g', 'f', 'w', 'x'], 'z': ['m', 'o', 'p', 'v', 'z']}&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Ruta mas corta usando el algoritmo de Dijkstra entre m y b: ['m', 'g', 'i', 'h', 'b']&lt;/span&gt;&lt;/b&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
De esta forma se puede extraer información del grafo como la ruta más corta entre m y b (m,g,i,h y b) que se tiene el mismo resultado usando el Algoritmo de Dijkstra.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/idnGQdT8weU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/4689172001252635377/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=4689172001252635377" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/4689172001252635377?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/4689172001252635377?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/idnGQdT8weU/creacion-de-grafos-con-networkx-parte-3.html" title="Creación de grafos con networkx. Parte 3." /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-HfcZFd8p23U/URrek5z4rYI/AAAAAAAAEPE/Eo7AGCH-45w/s72-c/Captura+de+pantalla+de+2013-02-12+19:58:08.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.0490945 -68.16117650000001 10.2991595 -67.83845350000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/creacion-de-grafos-con-networkx-parte-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAARHgyeip7ImA9WhBTEUQ.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-3125658092192216469</id><published>2013-02-06T20:05:00.000-04:30</published><updated>2013-02-06T20:12:25.692-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-06T20:12:25.692-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="señales de frecuencia" /><category scheme="http://www.blogger.com/atom/ns#" term="FFT" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><category scheme="http://www.blogger.com/atom/ns#" term="Scipy" /><title>Graficar el espectro de frecuencia con Numpy</title><content type="html">En este artículo se explicará como generar una gráfica de una señal que se tiene en el dominio del tiempo a generar la gráfica en el dominio de la frecuencia.&lt;br /&gt;
&lt;br /&gt;
Esté artículo se basa de un artículo en Inglés &amp;nbsp;llamado&amp;nbsp;&lt;a href="http://glowingpython.blogspot.com/search?updated-max=2011-08-05T17:10:00%2B01:00&amp;amp;max-results=3&amp;amp;start=42&amp;amp;by-date=false" target="_blank"&gt;"How to plot the frequency spectrum with scipy"&lt;/a&gt;&amp;nbsp;.&lt;br /&gt;
&lt;br /&gt;
El análisis de frecuencia es el proceso de determinar la representación en el dominio de una señal de dominio del tiempo y comunmente empleando la &lt;a href="http://es.wikipedia.org/wiki/Transformada_de_fourier" target="_blank"&gt;Transformada de Fourier&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
La &lt;a href="http://es.wikipedia.org/wiki/Transformada_discreta_de_Fourier" target="_blank"&gt;Transformada Discreta de Fourier&lt;/a&gt;&amp;nbsp;(DFT) se usa para determinar el contenido de frecuencias de las señales &amp;nbsp;y la &lt;a href="http://es.wikipedia.org/wiki/Transformada_r%C3%A1pida_de_Fourier" target="_blank"&gt;Transformada Rápida de Fourier&lt;/a&gt;&amp;nbsp;(FFT) es un método eficiente para calcular la Transformada Discreta de Fourier. Scipy implemente &amp;nbsp;FFT y se usará para analizar el espectro de frecuencias.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra el código que gráfica la amplitud en el dominio de frecuencia de la función coseno del dominio del tiempo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Importa &amp;nbsp;coseno, linspace y pi&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from numpy import cos, linspace, pi&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Importa plot, show, title, xlabel, ylabel y subplot para graficar&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from pylab import plot, show, title, xlabel, ylabel, subplot&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Importa fft y arange&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from scipy import fft, arange&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;def plotSpectrum(y,Fs):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;"""&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;grafica la amplitud del espectro de y(t)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;"""&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;n = len(y) # longitud de la señal&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;k = arange(n)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;T = n/Fs&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;frq = k/T # 2 lados del rango de frecuancia&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;frq = frq[range(n/2)] # Un lado del rango de frecuencia&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;Y = fft(y)/n # fft calcula la normalizacion&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;Y = Y[range(n/2)]&lt;/span&gt;&lt;/i&gt;



&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;plot(frq,abs(Y),'r') # grafica el espectro de frecuencia&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;xlabel('Frecuencia (Hz)')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;ylabel('|Y(f)|')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; Fs = 150.0; &amp;nbsp;# rata de muestreo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; Ts = 1.0/Fs; # intevalo de muestreo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; t = arange(0,1,Ts) # vector tiempo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; ff = 5; &amp;nbsp; # frecuencia de la señal&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; y = cos(5*pi*ff*t)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Proceso de graficar la señal&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; subplot(2,1,1)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; plot(t,y)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; xlabel('Tiempo')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; ylabel('Amplitud')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; subplot(2,1,2)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se llama a la funcion con la señal y la rata de muestreo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; plotSpectrum(y,Fs)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
Al ejecutar el script se genera la siguiente gráfica:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-f3bsABUV61k/URL1VhgRZbI/AAAAAAAAENo/zpwpY3QRGtw/s1600/Captura+de+pantalla+de+2013-02-06+19:54:42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="271" src="http://1.bp.blogspot.com/-f3bsABUV61k/URL1VhgRZbI/AAAAAAAAENo/zpwpY3QRGtw/s320/Captura+de+pantalla+de+2013-02-06+19:54:42.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/vbY6lg_A4A4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/3125658092192216469/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=3125658092192216469" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3125658092192216469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3125658092192216469?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/vbY6lg_A4A4/graficar-el-espectro-de-frecuencia-con.html" title="Graficar el espectro de frecuencia con Numpy" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-f3bsABUV61k/URL1VhgRZbI/AAAAAAAAENo/zpwpY3QRGtw/s72-c/Captura+de+pantalla+de+2013-02-06+19:54:42.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.646164090820541 -71.11772766113279</georss:point><georss:box>8.646164090820541 -71.11772766113279 8.646164090820541 -71.11772766113279</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/graficar-el-espectro-de-frecuencia-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08EQX85eip7ImA9WhBTEU4.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-5861633404508653725</id><published>2013-02-06T03:00:00.000-04:30</published><updated>2013-02-06T03:00:00.122-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-06T03:00:00.122-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Raspberry Pi" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><title>Obtener número de serial y número de versión de Raspberry Pi con Python</title><content type="html">El Raspberry Pi tiene información de número del número de revisión del PCB, este número indica que se tiene pequeños cambios en el PCB. Estos cambios pueden afectar en el funcionamiento de los programas Python e incluso como está distribuido los pines (alimentación, entrada/salida, etc) en la placa.&lt;br /&gt;
&lt;br /&gt;
Está información se puede obtener desde el archivo /proc/cpuinfo como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: red;"&gt;&lt;b&gt;ernesto@raspberrypi ~ $ cat /proc/cpuinfo&amp;nbsp;&lt;/b&gt;&lt;/span&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;Processor&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: ARMv6-compatible processor rev 7 (v6l)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;BogoMIPS&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: 697.95&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;Features&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: swp half thumb fastmult vfp edsp java tls&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;CPU implementer&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: 0x41&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;CPU architecture: 7&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;CPU variant&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: 0x0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;CPU part&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: 0xb76&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;CPU revision&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: 7&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Hardware&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: BCM2708&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;Revision&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;: 000f&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: #660000;"&gt;Serial&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;: 00000000bcd34f5e&lt;/span&gt;&lt;/b&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
El número de Revisión es 00f y el serial es 00000000bcd34f5e.&lt;/div&gt;
&lt;div&gt;
Las variantes del Raspberry Pi según número versión se tiene a continuación (tomado de &lt;a href="http://www.raspberrypi-spy.co.uk/2012/09/checking-your-raspberry-pi-board-version/" target="_blank"&gt;acá&lt;/a&gt;):&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Modelo B Revisión 1.0: El valor de cpuinfo es 0002.&lt;/li&gt;
&lt;li&gt;Modelo B Revisión 1.0+ECN001(sin fusible, D14 se removió): El valor de cpuinfo es 0003.&lt;/li&gt;
&lt;li&gt;Modelo B Revisión 2.0: El valor de cpuinfo es 0004,0005, 0006...&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
El sitio&amp;nbsp;&lt;a href="http://www.raspberrypi-spy.co.uk/" target="_blank"&gt;Raspberrypi spy&lt;/a&gt;&amp;nbsp;tiene un par de scripts para obtener el número de revisión y el serial de la placa.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A continuación se muestra el script (con una pequeña corrección):&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;"""&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;Script que busca la informacion del serial y numero de revision en el Raspberry Pi.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;Este script se obtiene de los siguientes enlaces:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;Numero de Revision:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;http://www.raspberrypi-spy.co.uk/2012/09/getting-your-raspberry-pi-revision-number-using-python/#more-574&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;Numero de Serial:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;http://www.raspberrypi-spy.co.uk/2012/09/getting-your-raspberry-pi-serial-number-using-python/#more-570&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;"""&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;def getrevision():&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; # Extrae la informacion del numero de revision del raspberry pi&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se asigna a revision un string de 4 ceros.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; revision = "0000"&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se abre el archivo cpuinfo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; try:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; f = open('/proc/cpuinfo','r')&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Se recorre el archivo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for linea in f:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Si existe el contenido Revision en una linea&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if linea[0:8]=='Revision':&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Se toma la longitud de la linea&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; longitud =len(linea)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Se agrega la informacion completa de la revision&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; revision = linea[11:longitud-1]&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Se cierra el archivo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; f.close()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Si no abre el archivo se asigna 4 ceros a revision&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; except IOError:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; revision = "0000"&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se retorna el valor de revision&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; return revision&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;def getserial():&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; # Extrae la informacion del serial desde cpuinfo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se asigna un string con ceros a cpuserial&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; cpuserial = "00000000"&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se intenta a capturar la informacion del archivo cpuinfo,&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #si no se tiene un mensaje de error.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; try:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; f = open('/proc/cpuinfo','r')&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #se recorre el archivo linea a linea&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for linea in f:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Si existe el contenido Serial en la linea&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if linea[0:6]=='Serial':&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Se agrega la informacion completa del serial del cpu&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cpuserial = linea[10:-1]&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Se cierra el archivo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; f.close()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Si no abre el archivo se asigna el valor de error al serial&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; except IOError:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cpuserial = "ERROR000000000"&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #retorna el valor del serial del cpu&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; return cpuserial&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; print u"El número de Serial del Raspberry Pi es: %s " %getserial()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; print u"El número de Revision del Raspberry Pi es: %s" %getrevision()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Al ejecutar el script se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;ernesto@raspberrypi ~ $ ./versionSerial.py&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;span style="color: #660000;"&gt;El número de Serial del Raspberry Pi es: 00000000bcd34f5e&amp;nbsp;&lt;/span&gt;

&lt;span style="color: #660000;"&gt;El número de Revision del Raspberry Pi es: 000f&lt;/span&gt;

&lt;/pre&gt;
Ya con esta información se tiene que el Raspberry Pi es de la revisón 2.0.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la organización de los pines de la revisión 1.0:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-ztmOpa2-2DM/URBN6dgViVI/AAAAAAAAEMA/GeeXCTkec2Y/s1600/Raspberry-Pi-GPIO-Layout-Revision-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/-ztmOpa2-2DM/URBN6dgViVI/AAAAAAAAEMA/GeeXCTkec2Y/s320/Raspberry-Pi-GPIO-Layout-Revision-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Y la organización de los pines de la revisión 2.0:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-MmYtQOz_7pA/URBOB_dNVSI/AAAAAAAAEMI/P_WQnuMm1jc/s1600/Raspberry-Pi-GPIO-Layout-Revision-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-MmYtQOz_7pA/URBOB_dNVSI/AAAAAAAAEMI/P_WQnuMm1jc/s320/Raspberry-Pi-GPIO-Layout-Revision-2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Con esta información ya se conoce como realizar las conexiones de los circuitos con el Rasberry Pi.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/aWtYSfIv_h0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/5861633404508653725/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=5861633404508653725" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5861633404508653725?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5861633404508653725?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/aWtYSfIv_h0/obtener-numero-de-serial-y-numero-de.html" title="Obtener número de serial y número de versión de Raspberry Pi con Python" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-ztmOpa2-2DM/URBN6dgViVI/AAAAAAAAEMA/GeeXCTkec2Y/s72-c/Raspberry-Pi-GPIO-Layout-Revision-1.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.647861192443251 -71.12253417968748</georss:point><georss:box>8.61646369244325 -71.16287467968748 8.679258692443252 -71.08219367968748</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/obtener-numero-de-serial-y-numero-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MERH0-eSp7ImA9WhBTEEk.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1544787695948351910</id><published>2013-02-05T03:00:00.000-04:30</published><updated>2013-02-05T03:00:05.351-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-05T03:00:05.351-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Raspberry Pi" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><title>Instalación de Raspbian en un Raspberry Pi.</title><content type="html">&amp;nbsp;Raspberry Pi es una placa de computadora de bajo costo (Más información en &lt;a href="http://es.wikipedia.org/wiki/Raspberry_Pi" target="_blank"&gt;wikipedia&lt;/a&gt;) desarrollada por el Reino Unido.&lt;br /&gt;
&lt;br /&gt;
En la siguiente figura se muestra un esquema de la placa:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-ZOfC_Uuh2g0/UQlBgTkqZhI/AAAAAAAAEAY/UPLH8fiG6Fc/s1600/220px-Raspberrypi_pcb_overview_v03.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-ZOfC_Uuh2g0/UQlBgTkqZhI/AAAAAAAAEAY/UPLH8fiG6Fc/s1600/220px-Raspberrypi_pcb_overview_v03.svg.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación 2 fotos del unboxing &amp;nbsp;del Raspberry Pi que me llegó hace una semana:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-HYC4wqovjYE/UQlD5OSCF2I/AAAAAAAAEAg/gidygdXVklw/s1600/raspberrypi1+(1).jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-HYC4wqovjYE/UQlD5OSCF2I/AAAAAAAAEAg/gidygdXVklw/s320/raspberrypi1+(1).jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-cB-7pe2FJHM/UQlEKsffLcI/AAAAAAAAEAo/vA3-F7aoCuA/s1600/raspberrypi3+(1).jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-cB-7pe2FJHM/UQlEKsffLcI/AAAAAAAAEAo/vA3-F7aoCuA/s320/raspberrypi3+(1).jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Para poner a funcionar la placa es necesario lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Un cable de monitor VGA a HDMI.&lt;/li&gt;
&lt;li&gt;Una tarjeta de Memoria SD (mínimo 8 GB).&lt;/li&gt;
&lt;li&gt;Un teclado y ratón USB.&lt;/li&gt;
&lt;li&gt;Cable de red.&lt;/li&gt;
&lt;li&gt;Cargador de Celular microusb.&lt;/li&gt;
&lt;li&gt;Una versión de Linux (para este caso Raspbian una versión de Debian Wheezy para Arquitectura ARM).&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
Para bajar &amp;nbsp;Rasbian lo pueden hacer desde el siguiente &lt;a href="http://downloads.raspberrypi.org/images/raspbian/2012-12-16-wheezy-raspbian/2012-12-16-wheezy-raspbian.zip" target="_blank"&gt;enlace&lt;/a&gt;, el número SHA-1 para verificar la integridad del archivo es el siguiente:&amp;nbsp;&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;514974a5fcbbbea02151d79a715741c2159d4b0a.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;El usuario del sistema es pi y la clave raspberry .&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;Para instalar la imagen del Raspbian en la memoria SD es necesario colocar la memoria en un equipo, descomprimir el archivo descargado y desde la línea de comandos ejecutar un dd (para este caso la memoria se encuentra en /dev/sdb, es necesario verificar la identificación de la memoria antes de ejecutar el comando):&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 19.5px;"&gt;dd dd bs=1M if=./2012-12-16-wheezy-raspbian.img of=/dev/sdb&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: whitesmoke; line-height: 19.5px;"&gt;&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;1850+0 registros leídos&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;1850+0 registros escritos&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;1939865600 bytes (1,9 GB) copiados, 1610,06 s, 1,2 MB/s&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;El siguiente vídeo muestra el proceso de arranque de raspbian.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/WQ3pezQsApE/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/WQ3pezQsApE?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/WQ3pezQsApE?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&amp;nbsp;Vídeo donde se muestra la configuración del raspbian:&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/Xc2pMabUWAo/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Xc2pMabUWAo?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/Xc2pMabUWAo?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;Para finalizar se muestra una foto del escritorio LXDE del Raspbian:&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-jZ49eUr43cM/UQmNzPqiGPI/AAAAAAAAEEY/UJfLYEdC7cU/s1600/2013-01-23_14-39-27_537.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-jZ49eUr43cM/UQmNzPqiGPI/AAAAAAAAEEY/UJfLYEdC7cU/s320/2013-01-23_14-39-27_537.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/SYUFwfruFkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1544787695948351910/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1544787695948351910" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1544787695948351910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1544787695948351910?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/SYUFwfruFkI/instalacion-de-raspbian-en-un-raspberry.html" title="Instalación de Raspbian en un Raspberry Pi." /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-ZOfC_Uuh2g0/UQlBgTkqZhI/AAAAAAAAEAY/UPLH8fiG6Fc/s72-c/220px-Raspberrypi_pcb_overview_v03.svg.png" height="72" width="72" /><thr:total>3</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.624440515453552 -71.1290573120117</georss:point><georss:box>8.624440515453552 -71.1290573120117 8.624440515453552 -71.1290573120117</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/instalacion-de-raspbian-en-un-raspberry.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcEQn47eyp7ImA9WhNaGUs.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-5807310177561786721</id><published>2013-02-04T03:00:00.000-04:30</published><updated>2013-02-04T03:00:03.003-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-04T03:00:03.003-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Fritzing" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Arduino" /><title>Contador incremental con un display 7 segmentos y Arduino</title><content type="html">Luego de explicar como se enciende y apaga de manera constante un LED en un Arduino, ahora se mostrará como conectar un Display 7 segmento de cátodo común.&lt;br /&gt;
&lt;br /&gt;
El display incrementará de 1 a 9, luego pasa a valor 0 y vuelve a contar desde 1 a 9, a intervalos de 1 segundo.&lt;br /&gt;
&lt;br /&gt;
Requerimientos:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Arduino Uno.&lt;/li&gt;
&lt;li&gt;Protoboard.&lt;/li&gt;
&lt;li&gt;Cables.&lt;/li&gt;
&lt;li&gt;Display 7 segmentos de cátodo común.&lt;/li&gt;
&lt;li&gt;Resistencia de 220 Ohms.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
En la siguiente figura se muestra la identificación de los LEDs del display 7 segmentos:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-yMasfR3eij8/UQh2beOv_5I/AAAAAAAAD_w/SwhHkoavtRw/s1600/2010422194635482.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="311" src="http://2.bp.blogspot.com/-yMasfR3eij8/UQh2beOv_5I/AAAAAAAAD_w/SwhHkoavtRw/s320/2010422194635482.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
El esquema de conexión es el siguiente:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-DHAHLRNItrE/UQh0hL62SdI/AAAAAAAAD_o/vIxEgqDDMLI/s1600/Captura1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-DHAHLRNItrE/UQh0hL62SdI/AAAAAAAAD_o/vIxEgqDDMLI/s1600/Captura1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Conexiones:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Pin a - Digital 7&lt;/li&gt;
&lt;li&gt;Pin b - Digital 8&lt;/li&gt;
&lt;li&gt;Pin c - Digital 9&lt;/li&gt;
&lt;li&gt;Pin d - Digital 10&lt;/li&gt;
&lt;li&gt;Pin e - Digital 11&lt;/li&gt;
&lt;li&gt;Pin f - Digital 12&lt;/li&gt;
&lt;li&gt;Pin g - Digital 13&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
La siguiente figura se muestra el montaje del circuito:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-7RKX9mVK1wI/UQhyCez7qVI/AAAAAAAAD_g/Lk5MmFywunU/s1600/led7seg_bb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="http://3.bp.blogspot.com/-7RKX9mVK1wI/UQhyCez7qVI/AAAAAAAAD_g/Lk5MmFywunU/s320/led7seg_bb.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
El código del programa se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;int pausa=1000; // define la pausa entre cada digito&lt;/span&gt;&lt;/i&gt;



&lt;i&gt;&lt;span style="color: blue;"&gt;#Se definen los Pines de salida al display 7 segmentos&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;void setup()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;{&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(7, OUTPUT); &amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(8, OUTPUT);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(9, OUTPUT);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(10, OUTPUT);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(11, OUTPUT);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(12, OUTPUT);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(13, OUTPUT);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;}&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;//Se define la funcion display que recibe 7&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;//variables y se asignan a cada una de sus salidas&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;void display (int a, int b, int c, int d, int e, int f, int g)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;// Funcion del display&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;{&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite (7,a); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite (8,b); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite (9,c);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite (10,d);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite (11,e);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite (12,f);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite (13,g);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;}&lt;/span&gt;&lt;/i&gt;



&lt;i&gt;&lt;span style="color: blue;"&gt;//Funcion principal que genera un lazo continuo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;void loop()&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;// Dependiendo de cada dígito, se envía a la función display&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;// los estados (0 y 1) a cada uno de los segmentos&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;{&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,1,1,1,1,1,0); //escribe 0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (0,1,1,0,0,0,0); //escribe 1&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,1,0,1,1,0,1); //escribe 2&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,1,1,1,0,0,1); //escribe 3&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (0,1,1,0,0,1,1); //escribe 4&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,0,1,1,0,1,1); //escribe 5&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,0,1,1,1,1,1); //escribe 6&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,1,1,0,0,0,0); //escribe 7&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,1,1,1,1,1,1); //escribe 8&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; display (1,1,1,0,0,1,1); //escribe 9&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(pausa);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;}&lt;/span&gt;&lt;/i&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
En la siguiente figura se muestra la conexión:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-vBHEV360BW8/UQh5bSPJCMI/AAAAAAAAEAA/ak92m6-ApNc/s1600/2013-01-26_19-03-05_330.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-vBHEV360BW8/UQh5bSPJCMI/AAAAAAAAEAA/ak92m6-ApNc/s320/2013-01-26_19-03-05_330.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Para terminar, se muestra un vídeo con el contador funcionando:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/u4jXy_XypEY/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/u4jXy_XypEY?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/u4jXy_XypEY?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/yylXNYGWsao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/5807310177561786721/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=5807310177561786721" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5807310177561786721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5807310177561786721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/yylXNYGWsao/contador-incremental-con-un-display-7.html" title="Contador incremental con un display 7 segmentos y Arduino" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-yMasfR3eij8/UQh2beOv_5I/AAAAAAAAD_w/SwhHkoavtRw/s72-c/2010422194635482.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.647861192443251 -71.12150421142576</georss:point><georss:box>8.632162692443252 -71.14167421142575 8.66355969244325 -71.10133421142577</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/contador-incremental-con-un-display-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEEQ3o8fCp7ImA9WhNaGEo.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-8374252172173291339</id><published>2013-02-03T03:00:00.000-04:30</published><updated>2013-02-03T03:00:02.474-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-03T03:00:02.474-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="memory_profiler" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="Profiling" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Graficar consumo de memoria con memory_profiler</title><content type="html">En el artículo anterior se explica como usar memory_profiler para evaluar el consumo de memoria de un programa Python, a continuación se explicará como graficar ese consumo utilizando matplotlib.&lt;br /&gt;
&lt;br /&gt;
Este artículo se basa en el artículo&amp;nbsp;&lt;a href="http://fseoane.net/blog/2013/memory-plots-with-memory_profiler/" target="_blank"&gt;Memory plots with memory_profiler&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Se hará una pequeña modificación al programa que cálcula la matriz inversa:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Importar de memory_profiler a memory_usage&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from memory_profiler import memory_usage&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa numpy como np&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import numpy as np&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crea la funcion que calcula la matriz inversa&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;def Inversa(n):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; return np.matrix(np.random.rand(n,n)).I&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #rando = np.random.rand(n, n)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #a = np.matrix(rando)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #inversa = a.I&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; return inversa&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se define una lista de &amp;nbsp;tamaños de la matriz&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; tamagno = 2 ** np.arange(0, 12)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se calcula la memoria usada de la funcion Inversa pasando el ultimo tamaño de la lista generada&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; mem_usage = memory_usage((Inversa,(tamagno[-1],)),interval=.01)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se imprime la lista que contiene la información de la memoria usada&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; print mem_usage&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se importa pylab&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; import pylab as pl&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se genera la gráfica&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; pl.plot(np.arange(len(mem_usage)) * .01, mem_usage, label='Matriz Inversa')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; pl.xlabel('Tiempo (seg)')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; pl.ylabel('Consumo de memoria (MB)')&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; pl.show()&lt;/span&gt;&lt;/i&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
El resultado de la ejecución es el siguiente:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: #660000;"&gt;[11.39453125, 13.39453125, 15.45703125, 17.51953125, 19.83984375, 21.90234375, 23.96484375, 26.02734375, 28.34765625, 30.41015625, 32.73046875, 34.79296875, 36.85546875, 38.91796875, 41.23828125, 43.30078125, 53.80859375, 64.37890625, 74.94921875, 48.70703125, 60.30859375, 71.91015625, 77.8046875, 81.15625, 85.0234375, 88.890625, 92.5, 96.109375, 99.71875, 103.5859375, 107.453125, 111.04296875, 114.39453125, 118.00390625, 121.61328125, 125.22265625, 128.83203125, 132.44140625, 134.76171875, 138.11328125, 139.6328125, 139.6328125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.4609375, 140.4609375, 140.4609375, 139.953125, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.20703125, 140.20703125, 139.953125, 140.20703125, 140.20703125, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.6640625, 140.6640625, 140.6640625, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.625, 140.625, 140.625, 140.625, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.359375, 140.61328125, 140.61328125, 140.61328125, 140.61328125, 140.61328125, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 141.26171875, 141.26171875, 141.26171875, 141.26171875, 140.75, 140.75, 141.26171875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 142.80859375, 140.75, 140.75, 140.75, 141.26171875, 141.26171875, 141.26171875, 141.26171875, 140.8359375, 149.08203125, 149.08203125, 153.4609375, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 149.08203125, 149.08203125, 140.8359375, 140.8359375, 141.34765625, 141.34765625, 141.34765625, 141.34765625, 141.34765625, 142.89453125, 142.89453125, 143.6640625, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 142.89453125, 142.89453125, 142.89453125, 142.89453125, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 141.34375, 141.34375, 141.34375, 140.83984375, 140.83984375, 140.83984375, 142.8984375, 143.41015625, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 142.8984375, 142.8984375, 140.84375, 140.84375, 140.84375, 141.35546875, 141.35546875, 141.35546875, 141.35546875, 140.84375, 144.96484375, 148.83203125, 156.3046875, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 149.08984375, 149.08984375, 140.84375, 140.84375, 141.35546875, 141.35546875, 141.35546875, 141.35546875, 140.84375, 142.90234375, 142.90234375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 142.90234375, 142.90234375, 140.84375, 140.84375, 140.84375, 141.35546875, 141.35546875, 141.35546875, 141.35546875, 140.84375, 140.84375, 141.765625, 150.015625, 160.84375, 161.35546875, 76.8515625, 12.84375]&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
La gráfica que se genera es la siguiente:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-99WleflibnY/UQ3ad1DQDmI/AAAAAAAAEKU/Rkzo-H-mU3U/s1600/Captura+de+pantalla+de+2013-02-02+23:02:05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-99WleflibnY/UQ3ad1DQDmI/AAAAAAAAEKU/Rkzo-H-mU3U/s320/Captura+de+pantalla+de+2013-02-02+23:02:05.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Se puede notar en la gráfica que se incrementa el consumo de memoria rápidamente en menos de 1 segundo a aproximadamente 140MB, luego viene una estabilización con pequeños aumentos y disminuciones al valor constante hasta que se genera una caída a 12MB a los 5 segundos de ejecución.&lt;br /&gt;
&lt;br /&gt;
Si desea ver más ejemplos de como graficar el consumo de memoria puede revisar el artículo el cual se baso este.&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/KvPpr39HnOo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/8374252172173291339/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=8374252172173291339" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8374252172173291339?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8374252172173291339?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/KvPpr39HnOo/graficar-consumo-de-memoria-con.html" title="Graficar consumo de memoria con memory_profiler" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-99WleflibnY/UQ3ad1DQDmI/AAAAAAAAEKU/Rkzo-H-mU3U/s72-c/Captura+de+pantalla+de+2013-02-02+23:02:05.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.653631280765172 -71.12253417968748</georss:point><georss:box>8.653631280765172 -71.12253417968748 8.653631280765172 -71.12253417968748</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/graficar-consumo-de-memoria-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEFQHc6eip7ImA9WhNaGEg.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-7474186718086086563</id><published>2013-02-02T21:51:00.000-04:30</published><updated>2013-02-02T22:00:11.912-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-02T22:00:11.912-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="memory_profiler" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="Profiling" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Monitorear el uso de memoria de un programa Python con memory_profiler</title><content type="html">Memory_profiler es un módulo Python desarrollado para monitorear el consumo de memoria de un programa Python línea por línea de cada instrucción del programa.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Para instalar el módulo se usa easy_install o pip:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;easy_install -U memory_profiler&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;pip install -U memory_profiler&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se muestra el código del artículo sobre profiling publicado &lt;a href="http://ernesto-ecrespo.blogspot.com/2012/12/profiling-de-un-script-python-con.html" target="_blank"&gt;antes&lt;/a&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa numpy como np&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;import numpy as np&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se define el uso del decorador profile. En la funcion que genera matrices inversas.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;@profile&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;def Inversa(n):&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se define una lista de &amp;nbsp;tamaños de la matriz&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; tamagno = 2 ** np.arange(0, 12)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se recorre la lista &amp;nbsp;y se invierte cada matriz con la&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #funcion Inversa&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; for n in tamagno:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Inversa(n)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Para iniciar el monitoreo se ejecuta el siguiente comando:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;span style="color: red;"&gt;&lt;b&gt;python -m memory_profiler matrizinversa.py&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
El resultado se muestra a continuación:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 11.89 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 11.91 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.02 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.10 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.19 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.11 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.11 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.05 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.16 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.17 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.17 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.22 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.05 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.35 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.13 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.35 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.45 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.09 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 12.95 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.50 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.45 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 12.95 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.50 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 13.54 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.59 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.53 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 14.54 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;2.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 16.79 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;2.26 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.79 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 20.79 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;8.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 28.88 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;8.09 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Filename: matrizinversa.py&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;Line # &amp;nbsp; &amp;nbsp;Mem usage &amp;nbsp; &amp;nbsp;Increment &amp;nbsp; Line Contents&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @profile&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; &amp;nbsp; 12.87 MB &amp;nbsp; &amp;nbsp; &amp;nbsp;0.00 MB &amp;nbsp; def Inversa(n):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; 44.87 MB &amp;nbsp; &amp;nbsp; 32.00 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; a = np.matrix(np.random.rand(n, n))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: #660000;"&gt;&amp;nbsp; &amp;nbsp; 11 &amp;nbsp; &amp;nbsp; 77.38 MB &amp;nbsp; &amp;nbsp; 32.50 MB &amp;nbsp; &amp;nbsp; &amp;nbsp; return a.I&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se muestra los ciclos de ejecución de la generación de la matriz inversa del archivo matrizinversa.py, se representa en columna la información de la línea que se está ejecutando del programa, la cantidad de memoria utilizada, el incremento de memoria y el código que se está ejecutando.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/KIOon68Crc0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/7474186718086086563/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=7474186718086086563" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7474186718086086563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7474186718086086563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/KIOon68Crc0/monitorear-el-uso-de-memoria-de-un.html" title="Monitorear el uso de memoria de un programa Python con memory_profiler" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.661098322601664 -71.12528076171873</georss:point><georss:box>8.535498322601663 -71.28664226171873 8.786698322601664 -70.96391926171873</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/monitorear-el-uso-de-memoria-de-un.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQNQXY7fCp7ImA9WhNaGEk.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-7502481277718893291</id><published>2013-02-02T18:34:00.000-04:30</published><updated>2013-02-02T18:36:30.804-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-02T18:36:30.804-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Fedora" /><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Networkx" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Creación de grafos con networkx. Parte 2.</title><content type="html">El&lt;a href="http://ernesto-ecrespo.blogspot.com/2012/11/creacion-de-grafos-con-networkx-parte-1.html" target="_blank"&gt; primer artículo sobre networkx&lt;/a&gt; mostraba como crear los nodos y los enlaces de las redes (relación de Estados y Ciudades de Venezuela).&lt;br /&gt;
&lt;br /&gt;
En este artículo se basa en un artículo del sitio "&lt;a href="http://glowingpython.blogspot.com/" target="_blank"&gt;The Glowing Python&lt;/a&gt;", este artículo se llama &lt;a href="http://glowingpython.blogspot.com/2012/11/first-steps-with-networx.html" target="_blank"&gt;Primeros pasos con Networkx (en inglés)&lt;/a&gt;. Este artículo usa como ejemplo las relaciones de los personajes de la novela Los Miserables. Usa un archivo con extensión gml que maneja las relaciones de los personajes, el archivo lo pueden descargar de &lt;a href="https://gephi.org/datasets/lesmiserables.gml.zip" target="_blank"&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
El archivo contiene la definición de los nodos dentro de un grafo, la información de cada nodo se coloca entre corchetes como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;graph&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;[&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; node&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; [&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; id 0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; label "Myriel"&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; ]&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; node&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; [&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; id 1&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; label "Napoleon"&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; ]&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; node&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; [&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; id 2&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; label "MlleBaptistine"&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; ]&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; node&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; [&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; id 3&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; label "MmeMagloire"&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; ]&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;...&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;]&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
&lt;br /&gt;
Se identifica el nodo y se coloca una etiqueta, en este caso la etiqueta es sobre un personaje de la novela ya mencionada antes.&lt;br /&gt;
&lt;br /&gt;
El código de la generación del grafo se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa networkx como nx&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import networkx as nx&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa la libreria pyplot de matplotlib como plt&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;import matplotlib.pyplot as plt&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# leer el grafo desde archivo con formato gml&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;G = nx.read_gml('losmiserables.gml',relabel=True)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# dibujar la red completa.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.figure(1)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;nx.draw_spring(G,node_size=0,edge_color='b',alpha=.2,font_size=10)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
A continuación se muestra el grafo:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-MBmLY1BP6t0/UQ2VBEGZYVI/AAAAAAAAEJc/qSMBLFDADo0/s1600/Captura+de+pantalla+de+2013-02-02+18:04:41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://4.bp.blogspot.com/-MBmLY1BP6t0/UQ2VBEGZYVI/AAAAAAAAEJc/qSMBLFDADo0/s320/Captura+de+pantalla+de+2013-02-02+18:04:41.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
El grafo en sí no muestra información útil que se diga, para entender más la información del grafo se creará un histograma del número de conexiones por nodo (es la continuación del código anterior):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#Histograma&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crea la figura 2&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.figure(2)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#se crea la instancia degree del grafo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;d = nx.degree(G)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crea el histograma con los valore del grafo.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.hist(d.values(),bins=15)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se muestra la grafica.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
La siguiente figura muestra el histograma:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-v9vfmdg4Knw/UQ2X0m1HoMI/AAAAAAAAEJk/-9xkSOdIq0I/s1600/Captura+de+pantalla+de+2013-02-02+18:18:22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/-v9vfmdg4Knw/UQ2X0m1HoMI/AAAAAAAAEJk/-9xkSOdIq0I/s320/Captura+de+pantalla+de+2013-02-02+18:18:22.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Se nota en el histograma que sólo pocos personajes tienen más de 10 conexiones.&lt;br /&gt;
A continuación se muestra el código de un grafo de sólo esos personajes con más de 10 conexiones:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;def trim_nodes(G,d):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; """ retorna una copia de G sin&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; los nodos de menos de d conexiones"""&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se crea la copia de G&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; Gt = G.copy()&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se define la instancia de degree con la copia de G&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; dn = nx.degree(Gt)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se recorre los nodos y se remueve los que tengan menos de d conexiones&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; for n in Gt.nodes():&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if dn[n] &amp;lt;= d:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gt.remove_node(n)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se retorna el nuevo G&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; return Gt&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;


&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;# dibujar la red solo con nodos de mas de 10&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#conexiones&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;Gt = trim_nodes(G,10)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crea la figura 3&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.figure(3)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se dibuja el grafo&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;nx.draw(Gt,node_size=0,node_color='w',edge_color='b',alpha=.2)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se muestra en pantalla el grafo&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;plt.show()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
A continuación se muestra el grafo con los personajes más relevantes de la novela Los Miserables:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-ckoTcgt1-sQ/UQ2aZLxZ0BI/AAAAAAAAEJ8/5YHp27OCtzE/s1600/Captura+de+pantalla+de+2013-02-02+18:29:22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/-ckoTcgt1-sQ/UQ2aZLxZ0BI/AAAAAAAAEJ8/5YHp27OCtzE/s320/Captura+de+pantalla+de+2013-02-02+18:29:22.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;
&lt;a class="zemanta-pixie-a" href="http://www.zemanta.com/?px" title="Enhanced by Zemanta"&gt;&lt;img alt="Enhanced by Zemanta" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_h.png?x-id=1b9d7a54-c918-4048-b12c-1f7e943f8734" style="border: none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/L0q2HMsJCOw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/7502481277718893291/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=7502481277718893291" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7502481277718893291?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7502481277718893291?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/L0q2HMsJCOw/creacion-de-grafos-con-networkx-parte-2.html" title="Creación de grafos con networkx. Parte 2." /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-MBmLY1BP6t0/UQ2VBEGZYVI/AAAAAAAAEJc/qSMBLFDADo0/s72-c/Captura+de+pantalla+de+2013-02-02+18:04:41.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Municipio Libertador, Venezuela</georss:featurename><georss:point>8.660419506739952 -71.12116088867185</georss:point><georss:box>8.629024006739952 -71.16150138867185 8.691815006739953 -71.08082038867185</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/creacion-de-grafos-con-networkx-parte-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8EQXo_cCp7ImA9WhNaF00.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1374376956661665209</id><published>2013-02-01T03:00:00.000-04:30</published><updated>2013-02-01T03:00:00.448-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-01T03:00:00.448-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Light-emitting diode" /><category scheme="http://www.blogger.com/atom/ns#" term="Fritzing" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Encender y apagar un LED constantemente con Arduino</title><content type="html">Tenía mucho tiempo sin hacer pruebas en el área de diseño digital o electrónica. A finales del año pasado decidí comprar una placa &lt;a href="http://es.wikipedia.org/wiki/Arduino" target="_blank"&gt;Arduino&lt;/a&gt;&amp;nbsp;y empezar a hacer pruebas. A continuación explico un ejemplo sencillo de encendido y apagado de un Diodo Emisor de Luz (LED).&lt;br /&gt;
&lt;br /&gt;
Arduino es una plataforma de Hardware Libre basada en un microcontrolador y &amp;nbsp;un entorno de Desarrollo que facilita el desarrollo de proyectos de Electrónica.&lt;br /&gt;
&lt;br /&gt;
Como primer ejemplo se conectará un LED en serie con una resistencia de (270 Ohm) y conectado al Arduino.&lt;br /&gt;
&lt;br /&gt;
Los componentes son:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Resistencia de 270 Ohm (0.5 W).&lt;/li&gt;
&lt;li&gt;Un LED Rojo de 5 mm.&lt;/li&gt;
&lt;li&gt;Una placa Arduino Uno.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Es necesario instalar en Debian el programa fritzing y Arduino IDE:&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;apt-get install arduino-mk arduino-core arduino fritzing fritzing-data&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
El esquema de conexión se desarrollo con la herramienta Fritzing. Se muestra en la siguiente figura el esquema:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-rd9FiCslaF0/UQQ30lnyApI/AAAAAAAAD20/Mp1YXP9Rcww/s1600/led_bb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://2.bp.blogspot.com/-rd9FiCslaF0/UQQ30lnyApI/AAAAAAAAD20/Mp1YXP9Rcww/s320/led_bb.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
En la siguiente figura se muestra una foto de la interconexión:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-4PJo1JhsATY/UQQ4nfRqQ6I/AAAAAAAAD28/XFTVnMWQ4MU/s1600/2013-01-26_15-01-30_937.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-4PJo1JhsATY/UQQ4nfRqQ6I/AAAAAAAAD28/XFTVnMWQ4MU/s320/2013-01-26_15-01-30_937.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
El programa se verifica, se compila y se carga en el Arduino con la herramienta Arduino IDE.&lt;br /&gt;
La siguiente figura muestra una captura de pantalla de la herramienta Arduino IDE:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-UX2BcNFKd_0/UQQ8JVsxpcI/AAAAAAAAD3U/rFKa6KrjjmI/s1600/Captura+de+pantalla+de+2013-01-26+15:56:44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-UX2BcNFKd_0/UQQ8JVsxpcI/AAAAAAAAD3U/rFKa6KrjjmI/s320/Captura+de+pantalla+de+2013-01-26+15:56:44.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
A continuación se muestra el código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: blue;"&gt;/* Ejemplo de encendido y apagado de&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; un LED&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;/b&gt;



&lt;b&gt;&lt;span style="color: blue;"&gt;// Se define el Pin 13 donde se conectara el LED&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;int led = 13;&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style="color: blue;"&gt;// Se inicializa el Pin digital como una salida&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;void setup() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; pinMode(led, OUTPUT); &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;}&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style="color: blue;"&gt;// Se crea una funcion ciclo donde se enciende y apaga el LED&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;// cada segundo.&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;void loop() {&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite(led, HIGH); &amp;nbsp; // Se enciende el LED&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(1000); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // se espera un segundo&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; digitalWrite(led, LOW); &amp;nbsp; &amp;nbsp;// Se apaga el LED&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; delay(1000); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // se espera un segundo&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: blue;"&gt;}&lt;/span&gt;&lt;/b&gt;

&lt;/pre&gt;
Al cargar el programa el LED empieza a encender y apagarse a intervalos de 1 segundo.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra un vídeo del encendido y apagado del LED:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/vzgGxkola_0/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vzgGxkola_0?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/vzgGxkola_0?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;
&lt;a class="zemanta-pixie-a" href="http://www.zemanta.com/?px" title="Enhanced by Zemanta"&gt;&lt;img alt="Enhanced by Zemanta" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_h.png?x-id=1819268e-cb7d-41a6-9293-815a8f946a53" style="border: none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/cBqtRBeUmvE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1374376956661665209/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1374376956661665209" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1374376956661665209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1374376956661665209?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/cBqtRBeUmvE/encender-y-apagar-un-led-constantemente.html" title="Encender y apagar un LED constantemente con Arduino" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-rd9FiCslaF0/UQQ30lnyApI/AAAAAAAAD20/Mp1YXP9Rcww/s72-c/led_bb.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>San Javier del Valle, Venezuela</georss:featurename><georss:point>8.658213346729978 -71.11755599975584</georss:point><georss:box>8.650364346729978 -71.12764099975584 8.666062346729978 -71.10747099975583</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2013/02/encender-y-apagar-un-led-constantemente.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08AQXo5cSp7ImA9WhNVFUg.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-5340226106951200544</id><published>2012-12-26T17:40:00.000-04:30</published><updated>2012-12-26T17:40:40.429-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-26T17:40:40.429-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Aseguramiento de la Calidad" /><category scheme="http://www.blogger.com/atom/ns#" term="unittest" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>Pruebas Unitarias en Python con unittest</title><content type="html">Continuando con las herramientas que permiten el aseguramiento de la calidad, ahora se realizará pruebas unitarias a la función que cálcula la raíz cuadrada del artículo anterior (&lt;a href="http://ernesto-ecrespo.blogspot.com/2012/12/probar-codigo-con-doctest.html" target="_blank"&gt;Probar código con doctest&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
El desarrollo guiado por pruebas ó &lt;a href="http://es.wikipedia.org/wiki/TDD" target="_blank"&gt;Test driven developmen&lt;/a&gt;t (TDD), es una práctica de la programación que involucra dos prácticas: Escribir las pruebas primero y refactorizar continuamente el código.&lt;br /&gt;
&lt;br /&gt;
Para escribir primero las pruebas se usa generalmente las &lt;a href="http://es.wikipedia.org/wiki/Prueba_unitaria" target="_blank"&gt;pruebas unitarias&lt;/a&gt;. esto es una forma de probar el correcto funcionamiento de un módulo de código. Permite asegurar el correcto funcionamiento de cada módulo por separado, luego con las &lt;a href="http://es.wikipedia.org/wiki/Pruebas_de_Integraci%C3%B3n" target="_blank"&gt;pruebas de integración&lt;/a&gt;, se podrá asegurar el correcto funcionamiento del sistema.&lt;br /&gt;
&lt;br /&gt;
Ciclo de desarrollo guidado por pruebas (TDD).&lt;br /&gt;
En primer lugar se debe definir una lista de requisitos, después se ejecuta el siguiente ciclo:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Elegir un requisito: Se elige de una lista el requerimiento que se cree dará mayor conocimiento del problema y que a la vez sea facilmente implementable.&lt;/li&gt;
&lt;li&gt;Escribir una prueba.&lt;/li&gt;
&lt;li&gt;Verificar que la prueba falle: Si la prueba no falla es por que el requerimiento ya estaba implementado o por que la prueba es erronea.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Ejecutar las pruebas automatizadas: Verificar que todo el conjunto de pruebas funciona correctamente.&lt;/li&gt;
&lt;li&gt;Eliminación de duplicación: Se eliminará código duplicado.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Actualización de la lista de requisitos: Se actualiza la lista de requisitos tachando el requisito implementado.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Para que una prueba unitaria sea buena tiene que cumplir los siguientes requisitos:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Automatizable: No debe ejecutarse manualmente (útil para integración continua).&lt;/li&gt;
&lt;li&gt;Completas: Deben cubrir la mayor cantidad de código.&lt;/li&gt;
&lt;li&gt;Reutilizables: No se deben crear pruebas que sólo puedan ser ejecutadas una vez (útil para integración continua).&lt;/li&gt;
&lt;li&gt;Independientes: La ejecución de una prueba no debe afectar la ejecución de otra prueba.&lt;/li&gt;
&lt;li&gt;Profesionales: Las pruebas deben ser consideradas igual que el código, con la misma profesionalidad, documentación, etc.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Las pruebas unitarias son pruebas automatizadas que prueban pequeñas piezas de código, usualmente una función o un método.&lt;br /&gt;
&lt;br /&gt;
Python tiene el API de PyUnit para pruebas unitarias. El módulo se llama unittest, se basa en el framework XUnit diseñado por Ken Beck y Erich Gamma.&lt;br /&gt;
&lt;br /&gt;
El código de ejemplo muestra por un lado la función Raiz y por el otro la clase RaizTest que hereda de unittest.TestCase. Esta clase tendrá 3 métodos, el primero que cálcula la raiz de 9 y devuelve 3, el segundo que cálcula la raiz de 0 y devuelve 0 y por último el que cálcula la raiz de un valor negativo y devuelve una excepción o mensaje de error.&lt;br /&gt;
&lt;br /&gt;
El código se muestra &amp;nbsp;a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa el módulo unittest y math&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import unittest&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import math&lt;/span&gt;&lt;/i&gt;



&lt;i&gt;&lt;span style="color: blue;"&gt;#Función raiz cuadrada.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;def Raiz(a):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Si a es mayor o igual a cero se calcula la raiz cuadrada&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; if a &amp;gt;= 0:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return math.sqrt(a)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Si es menor a cero se genera una excepción donde se informa que a debe ser mayor o igual a cero.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; else:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; raise ValueError,"a debe ser &amp;gt;= 0"&lt;/span&gt;&lt;/i&gt;



&lt;i&gt;&lt;span style="color: blue;"&gt;class RaizTest(unittest.TestCase):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; def test_Raiz(self):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Test para la raiz de nueve que devuelve 3 que debe pasar.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.assertEqual(3, Raiz(9))&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; def test_zero(self):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Test para la raiz de 0 que devuelve 0, que debe pasar.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.assertEqual(0, Raiz(0))&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; def test_negative(self):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Test para la raiz de un número negativo, que debe fallar.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Este debe devolver un ValueError, pero se espera un IndexError.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.assertRaises(IndexError, Raiz(-10))&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se ejecuta la prueba unitaria&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; unittest.main()&lt;/span&gt;&lt;/i&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
Al ejecutar el código se tiene lo siguiente:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;ecrespo@jewel:~/proyectos/ernesto-ecrespo.blogspot/timeit$ python test-raiz.py&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;.E.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;======================================================================&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;ERROR: test_negative (__main__.RaizTest)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;----------------------------------------------------------------------&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; File "test-raiz.py", line 40, in test_negative&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; self.assertRaises(IndexError, Raiz(-10))&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; File "test-raiz.py", line 24, in Raiz&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; raise ValueError,"a debe ser &amp;gt;= 0"&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;ValueError: a debe ser &amp;gt;= 0&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;----------------------------------------------------------------------&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;Ran 3 tests in 0.001s&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;FAILED (errors=1)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Como se puede ver, la prueba de un valor negativo falla.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Si se comenta el método de prueba de valor negativo la ejecución devuelve que no hay errores:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;ecrespo@jewel:~/proyectos/ernesto-ecrespo.blogspot/timeit$ python test-raiz.py&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;..&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;----------------------------------------------------------------------&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;Ran 2 tests in 0.000s&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;OK&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Las funciones de unittest utilizadas son:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;assertEqual: Prueba donde dos valores son iguales.&lt;/li&gt;
&lt;li&gt;assertRaises: Prueba donde una excepción es devuelta.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Para más métodos del módulo unittest se puede revisar la &lt;a href="http://docs.python.org/2/library/unittest.html#unittest.TestCase" target="_blank"&gt;documentación&lt;/a&gt;.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/M9fjtY41ewc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/5340226106951200544/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=5340226106951200544" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5340226106951200544?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5340226106951200544?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/M9fjtY41ewc/pruebas-unitarias-en-python-con-unittest.html" title="Pruebas Unitarias en Python con unittest" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Valencia, Venezuela</georss:featurename><georss:point>10.174127 -67.99981500000001</georss:point><georss:box>10.0490945 -68.16117650000001 10.2991595 -67.83845350000001</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/12/pruebas-unitarias-en-python-con-unittest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUEQ3c8fSp7ImA9WhNVE04.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-95346439623709991</id><published>2012-12-24T03:00:00.000-04:30</published><updated>2012-12-24T03:00:02.975-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-24T03:00:02.975-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="Pyprocessing" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Pyproceessing: Un ambiente para crear gráficos con Python</title><content type="html">Pyprocessing es un paquete python que permite crear gráficos que se basa en las librerías &amp;nbsp;&lt;a href="http://www.opengl.org/" target="_blank"&gt;OpenGL&lt;/a&gt; y &lt;a href="http://www.pyglet.org/" target="_blank"&gt;Pyglet&lt;/a&gt;. El proyecto se aloja en &lt;a href="http://code.google.com/p/pyprocessing/" target="_blank"&gt;google code&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
En la documentación encontrarán la guía de referencia rápida, un tutorial &lt;a href="http://code.google.com/p/pyprocessing/wiki/BasicTutorial" target="_blank"&gt;básico&lt;/a&gt;, &lt;a href="http://code.google.com/p/pyprocessing/wiki/Tutorials" target="_blank"&gt;un tutorial más completo&lt;/a&gt; y las &lt;a href="http://code.google.com/p/pyprocessing/wiki/UsageInstructions" target="_blank"&gt;instrucciones de uso&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Para instalarlo en linux se usa easy_install o pip:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;easy_install&amp;nbsp;pyprocessing&lt;/span&gt;&lt;/b&gt;



&lt;b&gt;&lt;span style="color: red;"&gt;pip install pyprocessing&lt;/span&gt;&lt;/b&gt;

&lt;/pre&gt;
El ejemplo que se hará es el de crear con rectangulo, líneas y elipses una especie de muñeco sin brazos junto a una pequeña esfera. Este ejemplo se basa en el pequeño ejemplo que tiene el proyecto en la página de entrada.&lt;br /&gt;
&lt;br /&gt;
El código se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa pyprocessing&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;from pyprocessing import *&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#define el tamaño de la ventana.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;size(200,200)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Define un rectangulo en el centro de la ventana&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;rectMode(CENTER)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crea el rectangulo(x,y,ancho,alto)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;rect(100,100,20,100)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crean 3 elipses(x,y,ancho,alto)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;ellipse(100,70,60,60)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;ellipse(81,70,16,32)&amp;nbsp;&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;ellipse(119,70,16,32)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crean 2 lineas(x1,y1,x2,y2)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;line(90,150,80,160)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;line(110,150,120,160)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#No se crea bordes en la figura&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;noStroke();&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Define que tendrá luz la esfera&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;lights();&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Define la cantidad de desplazamiento con respecto a la ventana.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#(derecha/izquierda,arriba/abajo,delante/detrás)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;translate(28, 48, 0);&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se crea una esfera con radio 15&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;sphere(15)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se muestra en la ventana.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;run()&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
La siguiente figura muestra el resultado del código al ser ejecutado:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-vtFzjoApq_Y/UNermPhgkWI/AAAAAAAADCg/iFhmL8KnqJM/s1600/Captura+de+pantalla+de+2012-12-23+20:39:50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-vtFzjoApq_Y/UNermPhgkWI/AAAAAAAADCg/iFhmL8KnqJM/s1600/Captura+de+pantalla+de+2012-12-23+20:39:50.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/Y5DkLoV6PL8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/95346439623709991/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=95346439623709991" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/95346439623709991?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/95346439623709991?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/Y5DkLoV6PL8/pyproceessing-un-ambiente-para-crear.html" title="Pyproceessing: Un ambiente para crear gráficos con Python" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-vtFzjoApq_Y/UNermPhgkWI/AAAAAAAADCg/iFhmL8KnqJM/s72-c/Captura+de+pantalla+de+2012-12-23+20:39:50.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Municipio Autónomo Valencia, Venezuela</georss:featurename><georss:point>10.148443731234806 -67.96960259765626</georss:point><georss:box>10.023411231234807 -68.13096409765626 10.273476231234806 -67.80824109765626</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/12/pyproceessing-un-ambiente-para-crear.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUERHo9eSp7ImA9WhNWFEo.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-5833110069515499608</id><published>2012-12-14T03:00:00.000-04:30</published><updated>2012-12-14T03:00:05.461-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-14T03:00:05.461-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Aseguramiento de la Calidad" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Desarrollo guiado por pruebas" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="doctest" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>Separar código de pruebas de la documentación (doctest, 2da parte)</title><content type="html">En el &lt;a href="http://ernesto-ecrespo.blogspot.com/2012/12/probar-codigo-con-doctest.html" target="_blank"&gt;artículo anterior&lt;/a&gt; se explico como utilizar doctest dentro de un código para realizar pruebas sobre la documentación de cada función.&lt;br /&gt;
&lt;br /&gt;
Ahora se explicará como realizar dichas pruebas de la documentación en un archivo aparte del código del programa. Se usará el mismo ejemplo del artículo anterior pero adaptandolo a tener la documentación aparte en un archivo de texto.&lt;br /&gt;
&lt;br /&gt;
El código se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;#Se importa el módulo math para calcular la raiz cuadrada.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;import math&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;#Función raiz cuadrada.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;def Raiz(a):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Si a es mayor o igual a cero se calcula la raiz cuadrada&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; if a &amp;gt;= 0:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return math.sqrt(a)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Si es menor a cero se genera una excepción donde se informa que a debe ser mayor o igual a cero.&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; else:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; raise ValueError("a debe ser &amp;gt;= 0")&lt;/span&gt;&lt;/i&gt;



&lt;i&gt;&lt;span style="color: blue;"&gt;if __name__ == '__main__':&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se importa el módulo doctest&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; import doctest&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; #Se realiza la prueba al archivo raizcuadra.txt&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; doctest.testfile("raizcuadrada.txt")&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;br /&gt;
Como se ve se realiza la prueba al archivo raizcuadrada.txt. El archivo contiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;Modulo raiz cuadrada&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;=====================&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;Usando &amp;nbsp;'raizcuadrada'&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;------------------------------&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;Primero se importa la función:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt; from raizcuadrada import Raiz&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;Ejemplos de calculo de raiz cuadrada:&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt; Raiz(4)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;2.0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt; Raiz(9)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;3.0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt; Raiz(25)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;5.0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt; Raiz(0)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;0.0&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt; Raiz(-1)&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;...&lt;/span&gt;&lt;/i&gt;

&lt;i&gt;&lt;span style="color: blue;"&gt;ValueError: a debe ser &amp;gt;= 0&lt;/span&gt;&lt;/i&gt;

&lt;/pre&gt;
Ahora lo que viene es ejecutar el comando que devuelve el resultado de las pruebas:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;python -m doctest -v raizcuadrada.txt&lt;/span&gt;&lt;/b&gt;



&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; from raizcuadrada import Raiz&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting nothing&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Raiz(4)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 2.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Raiz(9)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 3.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Raiz(25)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 5.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Raiz(0)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 0.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Raiz(-1)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Traceback (most recent call last):&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; ValueError: a debe ser &amp;gt;= 0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;1 items passed all tests:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp;6 tests in raizcuadrada.txt&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;6 tests in 1 items.&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;6 passed and 0 failed.&lt;/span&gt;&lt;/b&gt;

&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;Test passed.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
Como se puede observar en este caso se realiza la importación del programa y luego se empieza las pruebas.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/SHKwURZFYds" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/5833110069515499608/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=5833110069515499608" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5833110069515499608?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5833110069515499608?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/SHKwURZFYds/separar-codigo-de-pruebas-de-la.html" title="Separar código de pruebas de la documentación (doctest, 2da parte)" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Vía El Valle - La Culata, Mérida, Venezuela</georss:featurename><georss:point>8.656378175355874 -71.1199951171875</georss:point><georss:box>8.593587175355873 -71.1989591171875 8.719169175355875 -71.0410311171875</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/12/separar-codigo-de-pruebas-de-la.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8EQn49fCp7ImA9WhNWE0U.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1597039181899843087</id><published>2012-12-13T03:00:00.000-04:30</published><updated>2012-12-13T03:00:03.064-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-13T03:00:03.064-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Desarrollo guiado por pruebas" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="doctest" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>Probar código con doctest</title><content type="html">Doctest es un framework que viene en Python el cual permite desarrollar aplicaciones utilizando TDD (&lt;a href="http://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas" target="_blank"&gt;Desarrollo guiado por pruebas&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
El TDD exige escribir las pruebas primero y la refactorización del código para llegar al resultado deseado.&lt;br /&gt;
&lt;br /&gt;
En este caso se usará doctest el cual permite realizar pruebas según la documentación que se tenga escrita en el código. Significa que es necesario tener una documentación clara para cada función antes de desarrollarla, de esta forma se tiene claro los casos de funcionamiento correcto de la función y los casos en los cuales puede fallar.&lt;br /&gt;
&lt;br /&gt;
El código de ejemplo es el de una función que permite calcular la raíz cuadrada de un número.&lt;br /&gt;
&lt;br /&gt;
A continuación el código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&lt;i&gt;#!/usr/bin/env python&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;# -*- coding: utf-8 -*-&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;#Se importa el módulo math para calcular la raiz cuadrada.&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;import math&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;
&lt;/i&gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&lt;i&gt;#Función raiz cuadrada.&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;def RaizCuadrada(a):&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; """&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;gt;&amp;gt;&amp;gt; RaizCuadrada(4)&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; 2.0&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;gt;&amp;gt;&amp;gt; RaizCuadrada(9)&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; 3.0&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;gt;&amp;gt;&amp;gt; RaizCuadrada(25)&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; 5.0&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;gt;&amp;gt;&amp;gt; RaizCuadrada(0)&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; 0.0&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;gt;&amp;gt;&amp;gt; RaizCuadrada(-1)&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; Traceback (most recent call last):&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; ValueError: a debe ser &amp;gt;= 0&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; """&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; #Si a es mayor o igual a cero se calcula la raiz cuadrada&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; if a &amp;gt;= 0:&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return math.sqrt(a)&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; #Si es menor a cero se genera una excepción donde se informa que a debe ser mayor o igual a cero.&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; else:&lt;/i&gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; raise ValueError("a debe ser &amp;gt;= 0")&lt;/i&gt;&lt;/span&gt;

&lt;/pre&gt;
Como se muestra se genera en la documentación una serie de casos de ejecución de la función donde debe devolver un valor correcto y si se pasa un valor que no puede ser calculado devuelve la excepción.&lt;br /&gt;
&lt;br /&gt;
Para realizar la prueba se ejecuta el código realizando una llamada al módulo doctest y modo verbose:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;python -m doctest -v prueba-raizcuadrada.py&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;br /&gt;
El resultado es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; RaizCuadrada(4)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 2.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; RaizCuadrada(9)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 3.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; RaizCuadrada(25)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 5.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; RaizCuadrada(0)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; 0.0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Trying:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; RaizCuadrada(-1)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Expecting:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Traceback (most recent call last):&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; ValueError: a debe ser &amp;gt;= 0&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;ok&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;1 items had no tests:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; prueba-raizcuadrada&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;1 items passed all tests:&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp;5 tests in prueba-raizcuadrada.RaizCuadrada&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;5 tests in 2 items.&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;5 passed and 0 failed.&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: red;"&gt;Test passed.&lt;/span&gt;&lt;/b&gt;

&lt;div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
Como se muestra todos los casos pasaron el test.&lt;/div&gt;
&lt;div&gt;
Pueden revisar la siguiente documentación y tutoriales:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;La documentación oficial la puede revisar en el siguiente &lt;a href="http://docs.python.org/2/library/doctest.html" target="_blank"&gt;enlace&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magmax9.blogspot.com/2011/09/python-como-hacer-pruebas-1.html" target="_blank"&gt;Como hacer pruebas 1: Doctest&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pythontesting.net/framework/doctest-introduction/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+PythonTesting+%28Python+Testing%29" target="_blank"&gt;Introducción a doctest&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.doughellmann.com/PyMOTW/doctest/" target="_blank"&gt;Otro tutorial de Doctest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
En otro artículo se explicará como separar los diferentes casos en un archivo de texto y el programa en un script aparte.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/EwgxL2gFmJw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1597039181899843087/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1597039181899843087" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1597039181899843087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1597039181899843087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/EwgxL2gFmJw/probar-codigo-con-doctest.html" title="Probar código con doctest" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Vía El Valle - La Culata, Mérida, Venezuela</georss:featurename><georss:point>8.65366287050022 -71.11930847167969</georss:point><georss:box>8.59087187050022 -71.19827247167969 8.71645387050022 -71.04034447167969</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/12/probar-codigo-con-doctest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QBSH0-fCp7ImA9WhNWE0w.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-8388127800680562420</id><published>2012-12-12T08:51:00.000-04:30</published><updated>2012-12-12T09:05:59.354-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-12T09:05:59.354-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Touchscreen bematech" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome" /><title>Configurar pantalla touch Bematech en Debian</title><content type="html">Se realiza la instalación de Debian Squeeze con la pantacha táctil conectada. en este caso la pantalla es una pantalla táctil por medio de una conexión USB.&lt;br /&gt;
&lt;br /&gt;
Al terminar la instalación se ejecuta el comando lsusb para ver como se detecta la pantalla:&lt;br /&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;lsusb&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial; font-size: x-small;"&gt;&lt;b&gt;Bus 004 Device 002: ID 0eef:0001 D-WAV Scientific Co., Ltd eGalax TouchScreen&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial; font-size: x-small;"&gt;Es un dispositivo de la Empresa eGalax.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial; font-size: x-small;"&gt;Se visita la página de eGalax para bakar los drivers para &lt;a href="http://home.eeti.com.tw/web20/eGalaxTouchDriver/linuxDriver.htm" target="_blank"&gt;Linux&lt;/a&gt;,el driver es&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;eGTouch_v2.5.2107.L-x&lt;/span&gt;&lt;span style="background-color: white; color: #222222;"&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;, este driver es el que tiene soporte para kernel superior a 2.6.24.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222;"&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222;"&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;Instalar paquetes necesarios para la configuración del touch:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222;"&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;Es necesario instalar librerías de xorg y los headers del kernel que tiene Squeeze.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;apt-get install xserver-xorg-input-evtouch xinput xserver-xorg-dev&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;xserver-xorg-input-evdev-dev xserver-xorg-input-evdev&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;xserver-xorg-input-synaptics-&lt;/span&gt;&lt;wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/wbr&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;dev &amp;nbsp;linux-headers-2.6.32-5-686&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;Al tener el archivo comprimido en el equipo se descomprime:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;tar -xvzf eGTouch_v2.5.2107.L-x.tar.gz&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;" /&gt;
Se entra en el directorio del driver:&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;cd eGTouch_v2.5.2107.L-x/&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;" /&gt;
Ahora se ejecuta el script setup.sh el cual es una ayuda para el proceso de Instalación del driver:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;sudo sh setup.sh&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;i&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/i&gt;
&lt;i&gt;A continuación se sigue las instrucciones del instalador:&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Se resaltará la parte de las preguntas del instalador.&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;(*) Driver installer for touch controller&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(*) Script Version = 1.04.2013&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;i&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/i&gt;
&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;(I) Check user permission: root, you are the supervisor.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Platform application binary interface = i686&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(W) X server detected.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;i&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/i&gt;
&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;Declaration and Disclaimer&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;The programs, including but not limited to software and/or firmware&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(hereinafter referred to "Programs" or "PROGRAMS", are owned by&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;eGalax_eMPIA Technology Inc. (hereinafter referred to EETI) and are&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;compiled from EETI Source code. EETI hereby grants to licensee a&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;personal, non-exclusive, non-transferable license to copy, use and&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;create derivative works of Programs for the sole purpose in&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;conjunction with an EETI Product, including but not limited to&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;integrated circuit and/or controller. Any reproduction, copies,&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;modification, translation, compilation, application, or representation&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;of Programs except as specified above is prohibited without the&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;express written permission by EETI.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;i&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/i&gt;
&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;Disclaimer: EETI MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;WITH REGARD TO PROGRAMS, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;EETI reserves the right to make changes without further notice to the&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;Programs described herein. Licensee agrees that EETI does not assume&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;any liability, damages or costs, including but not limited to attorney&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;fees, arising out from Programs themselves or those arising out from&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;the application or combination Programs into other products or&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;circuit. The use or the inclusion of EETI's Programs implies that the&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;Licensee assumes all risk of such use and in doing so indemnifies EETI&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;against all charges, including but not limited to any claims to&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;infringement of any third party's intellectual property right.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;Do you agree with above patent declaration?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;[Y] Yes, I agree. &amp;nbsp;[N] No, I don't agree.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: blue; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;&lt;i&gt;Y&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;(Q) Which interface controller do you use?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: blue; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;&lt;i&gt;(I) [1] RS232 [2] USB [3] PS2 : 2&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;(I) Please confirm the touch controller is linked with your device.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;Press [Enter] key to continue..........&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Found /etc/rc.local file.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Found a HID compliant touch controller.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) X.Org X server 1.7.7&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) X verion is 1.7.6 upwards&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Found uinput.ko in modules.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Attach uinput at boot.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Add uinput module into /etc/modules file.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Place eGTouch driver archive to /usr/local/eGTouch32withX.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Create eGTouch daemon shortcut in /usr/bin.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Create eGTouchU tool shortcut in /usr/bin.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Create eCalib tool shortcut in /usr/bin.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Append eGTouch daemon execution into /etc/rc.local.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;(Q) How many controllers do you want to plug-in to system? [1-10]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: blue; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;&lt;i&gt;(I) Default [1]:&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Device Nums is set to 1&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Copy udev rule: 52-egalax-virtual.conf to /usr/share/X11/xorg.conf.d.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Create eGTouchU shortcut in application list.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;&lt;i&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px;" /&gt;&lt;/i&gt;
&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;(I) Driver installation completed. Setup version 1.04.2013.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: red; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;(I) Please reboot the system.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;------------------------------&lt;/span&gt;&lt;wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/wbr&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;------------------------------&lt;/span&gt;&lt;wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/wbr&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;--------&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Lo que queda es reiniciar el equipo.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Ahora viene el proceso de configuración del touch ejecutando el comando eGTouchU desde la consola:&lt;/span&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;eGTouchU&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Este despliega una herramienta gráfica que permite configurar y calibrar el touch:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;La figura muestra la pestaña general donde debe aparecer el controlador USB.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Yl1UDRfXTqY/UMiBgUgphdI/AAAAAAAAC5c/dvSrrlMBm_Y/s1600/Pantallazo-eGTouch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-Yl1UDRfXTqY/UMiBgUgphdI/AAAAAAAAC5c/dvSrrlMBm_Y/s320/Pantallazo-eGTouch.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;La pestaña Setting se deja tal cual viene pre configurada:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-8wm_DWTCSz4/UMiBy5_rfLI/AAAAAAAAC5k/0ZF6xWsoqOw/s1600/Pantallazo-eGTouch-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-8wm_DWTCSz4/UMiBy5_rfLI/AAAAAAAAC5k/0ZF6xWsoqOw/s320/Pantallazo-eGTouch-1.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;La pestaña Tool es la que permite calibrar la pantalla toch, se selecciona la Función de Linearización con 25 puntos de calibración:&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-SqNm-kO_FYw/UMiCURcBc5I/AAAAAAAAC5s/jAVoFBr7C0M/s1600/Pantallazo-eGTouch-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-SqNm-kO_FYw/UMiCURcBc5I/AAAAAAAAC5s/jAVoFBr7C0M/s320/Pantallazo-eGTouch-2.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-9P564FiNQN0/UMiCpKcSf7I/AAAAAAAAC50/6fTdY_O146k/s1600/Pantallazo-Linearization.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="106" src="http://3.bp.blogspot.com/-9P564FiNQN0/UMiCpKcSf7I/AAAAAAAAC50/6fTdY_O146k/s320/Pantallazo-Linearization.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;En la siguiente figura se muestra la pantalla en el momento de calibrarla:&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-TQPhK74FNds/UMiH-RerGqI/AAAAAAAAC7I/e8xCvU4icD8/s1600/2012-12-12_08-27-54_214.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-TQPhK74FNds/UMiH-RerGqI/AAAAAAAAC7I/e8xCvU4icD8/s320/2012-12-12_08-27-54_214.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Ahora se selecciona la prueba de dibujo para verificar el correcto funcionamiento de la pantalla táctil:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-xIut99IlkJI/UMiDTyaPZkI/AAAAAAAAC58/Q2GURqtrlEY/s1600/Pantallazo-eGTouch-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-xIut99IlkJI/UMiDTyaPZkI/AAAAAAAAC58/Q2GURqtrlEY/s320/Pantallazo-eGTouch-3.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
En la figura se muestra el funcionamiento de la pantalla desde la prueba de dibujo:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-jEJHlq1lKQo/UMiHVpNiDUI/AAAAAAAAC7A/nVxmgI4okxk/s1600/2012-12-12_08-31-00_312.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-jEJHlq1lKQo/UMiHVpNiDUI/AAAAAAAAC7A/nVxmgI4okxk/s320/2012-12-12_08-31-00_312.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
En la pestaña Display se selecciona modo full pantalla:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-IojYvxOKX5A/UMiFv-agEwI/AAAAAAAAC6o/1HTnB6UsiUI/s1600/Pantallazo-eGTouch-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-IojYvxOKX5A/UMiFv-agEwI/AAAAAAAAC6o/1HTnB6UsiUI/s320/Pantallazo-eGTouch-4.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
En la pestaña Edge no se realizan cambios:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Tr_kX46cr8I/UMiF8Tt5FVI/AAAAAAAAC6w/jPoG7G0sCVs/s1600/Pantallazo-eGTouch-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-Tr_kX46cr8I/UMiF8Tt5FVI/AAAAAAAAC6w/jPoG7G0sCVs/s320/Pantallazo-eGTouch-5.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
En la pestaña Misc sólo se cambia el Modo del Mouse a Click on Touch:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-IWGt5NdW2YY/UMiGLPErloI/AAAAAAAAC64/z0d7BRxywKA/s1600/Pantallazo-eGTouch-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-IWGt5NdW2YY/UMiGLPErloI/AAAAAAAAC64/z0d7BRxywKA/s320/Pantallazo-eGTouch-6.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;br /&gt;Luego de esto se pueden aplicar los cambios y reiniciar el equipo.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Con esto ya se tiene la pantalla táctil funcionando.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/lWyUTlVfgxs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/8388127800680562420/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=8388127800680562420" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8388127800680562420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8388127800680562420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/lWyUTlVfgxs/configurar-pantalla-touch-bematech-en.html" title="Configurar pantalla touch Bematech en Debian" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Yl1UDRfXTqY/UMiBgUgphdI/AAAAAAAAC5c/dvSrrlMBm_Y/s72-c/Pantallazo-eGTouch.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Vía El Valle - La Culata, Mérida, Venezuela</georss:featurename><georss:point>8.66588158803584 -71.11930847167969</georss:point><georss:box>8.60309208803584 -71.19827247167969 8.728671088035838 -71.04034447167969</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/12/configurar-pantalla-touch-bematech-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEEQnk9cSp7ImA9WhNWEkg.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-8210121684407663668</id><published>2012-12-11T03:00:00.000-04:30</published><updated>2012-12-11T14:50:03.769-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-11T14:50:03.769-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Aseguramiento de la Calidad" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="pylint" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><title>Analizando código Python con Pylint</title><content type="html">Pylint es una herramienta de análisis de código creada por LogiLab. &amp;nbsp;Es más complejo que Pyflakes y permite más personalización. Para más información de pylint puede revisar el &lt;a href="http://www.logilab.org/card/pylint_manual" target="_blank"&gt;manual&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Se puede instalar pylint por medio de easy_install o pip y si es una distribución de Linux basada en Debian se puede instalar vía apt-get:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: red;"&gt;&lt;b&gt;easy_install &amp;nbsp;pylint&lt;/b&gt;&lt;/span&gt;

&lt;span style="color: red;"&gt;&lt;b&gt;pip install pylint&lt;/b&gt;&lt;/span&gt;

&lt;span style="color: red;"&gt;&lt;b&gt;apt-get install&amp;nbsp;pylint&lt;/b&gt;&lt;/span&gt;

&lt;/pre&gt;
La salida de pylint puede ser texto crudo o puede ser en formato html. Los mensajes tienen el siguiente formato:&lt;br /&gt;
TIPO_MENSAJE: LINEA:[OBJECTO:] MENSAJE&lt;br /&gt;
&lt;br /&gt;
El tipo de mensaje puede ser de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;[R]: Significa que se recomienda la refactorización del código.&lt;/li&gt;
&lt;li&gt;[C]: Significa que en el código hubo violación de estilos.&lt;/li&gt;
&lt;li&gt;[W]: Es una alarma por un problema menor.&lt;/li&gt;
&lt;li&gt;[E]: Significa mensaje de error o un potencial bug.&lt;/li&gt;
&lt;li&gt;[F]: Indica un error grave, bloqueo para análisis futuros.&lt;/li&gt;
&lt;/ul&gt;
Se usará el mismo código del artículo anterior:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;pre style="background-color: white; color: #444444; font-size: 13px; line-height: 18px;"&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span style="color: blue;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;
&lt;span style="color: blue;"&gt;#Se importa numpy como np&lt;/span&gt;
&lt;span style="color: blue;"&gt;import numpy as np&lt;/span&gt;
&lt;span style="color: blue;"&gt;from pudb import set_trace; set_trace()&lt;/span&gt;
&lt;span style="color: blue;"&gt;import string&lt;/span&gt;
&lt;span style="color: blue;"&gt;a = np.arange(10)&lt;/span&gt;
&lt;span style="color: blue;"&gt;print a&lt;/span&gt;
&lt;span style="color: blue;"&gt;print a[8]&lt;/span&gt;
&lt;span style="color: blue;"&gt;print a[9]&lt;/span&gt;
&lt;span style="color: blue;"&gt;for i in a:&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; if i == plataforma:&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print i&lt;/span&gt;&lt;/i&gt;
&lt;/pre&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Este script se salva con el nombre de arreglo.py.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Ahora se ejecutará pylint y se le pasa como argumento el archivo arreglo.py:&lt;/div&gt;
&lt;div&gt;
La salida de la ejecución de pylint se muestra a continuación:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;************* Module arreglo&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;C: &amp;nbsp;1,0: Missing docstring&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;C: &amp;nbsp;7,28: More than one statement on a single line&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;W: &amp;nbsp;8,0: Uses of a deprecated module 'string'&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;C: 12,0: Invalid name "a" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;E: 18,12: Undefined variable 'plataforma'&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;W: &amp;nbsp;8,0: Unused import string&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Report&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;======&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;12 statements analysed.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Duplication&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;-----------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-------------------------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |now &amp;nbsp; |previous |difference |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+=========================+======+=========+===========+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|nb duplicated lines &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; |0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-------------------------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|percent duplicated lines |0.000 |0.000 &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-------------------------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Statistics by type&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;------------------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+---------+-------+-----------+-----------+------------+---------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|type &amp;nbsp; &amp;nbsp; |number |old number |difference |%documented |%badname |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+=========+=======+===========+===========+============+=========+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|module &amp;nbsp; |1 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|0.00 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|0.00 &amp;nbsp; &amp;nbsp; |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+---------+-------+-----------+-----------+------------+---------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|class &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+---------+-------+-----------+-----------+------------+---------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|method &amp;nbsp; |0 &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+---------+-------+-----------+-----------+------------+---------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|function |0 &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+---------+-------+-----------+-----------+------------+---------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;External dependencies&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;---------------------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;::&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; numpy (arreglo)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; pudb&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; \-set_trace (arreglo)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Raw metrics&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;-----------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+----------+-------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|type &amp;nbsp; &amp;nbsp; &amp;nbsp;|number |% &amp;nbsp; &amp;nbsp; |previous |difference |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+==========+=======+======+=========+===========+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|code &amp;nbsp; &amp;nbsp; &amp;nbsp;|11 &amp;nbsp; &amp;nbsp; |64.71 |11 &amp;nbsp; &amp;nbsp; &amp;nbsp; |= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+----------+-------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|docstring |0 &amp;nbsp; &amp;nbsp; &amp;nbsp;|0.00 &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+----------+-------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|comment &amp;nbsp; |3 &amp;nbsp; &amp;nbsp; &amp;nbsp;|17.65 |3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+----------+-------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|empty &amp;nbsp; &amp;nbsp; |3 &amp;nbsp; &amp;nbsp; &amp;nbsp;|17.65 |3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+----------+-------+------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Messages by category&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;--------------------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+-------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|type &amp;nbsp; &amp;nbsp; &amp;nbsp; |number |previous |difference |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+===========+=======+=========+===========+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|convention |3 &amp;nbsp; &amp;nbsp; &amp;nbsp;|3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+-------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|refactor &amp;nbsp; |0 &amp;nbsp; &amp;nbsp; &amp;nbsp;|0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+-------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|warning &amp;nbsp; &amp;nbsp;|2 &amp;nbsp; &amp;nbsp; &amp;nbsp;|2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+-------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|error &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|= &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+-------+---------+-----------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Messages&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;--------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+------------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|message id |occurrences |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+===========+============+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|W0611 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+------------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|W0402 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+------------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|E0602 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+------------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|C0321 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+------------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|C0111 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+------------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;|C0103 &amp;nbsp; &amp;nbsp; &amp;nbsp;|1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;+-----------+------------+&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Global evaluation&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;-----------------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Your code has been rated at 1.67/10 (previous run: 1.67/10)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Si se desea más información de la información generada en el reporte de pylint se puede revisar la documentación antes &lt;a href="http://www.logilab.org/card/pylint_manual" target="_blank"&gt;mencionada&lt;/a&gt;.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/ceARoiOV7Wc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/8210121684407663668/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=8210121684407663668" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8210121684407663668?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8210121684407663668?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/ceARoiOV7Wc/analizando-codigo-python-con-pylint.html" title="Analizando código Python con Pylint" /><author><name>Ernesto Crespo</name><uri>https://plus.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAADKM/qXhwZmStuV4/s512-c/photo.jpg" /></author><thr:total>1</thr:total><georss:featurename>Vía El Valle - La Culata, Mérida, Venezuela</georss:featurename><georss:point>8.650947546059943 -71.12686157226562</georss:point><georss:box>8.588155546059943 -71.20582557226562 8.713739546059942 -71.04789757226563</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/12/analizando-codigo-python-con-pylint.html</feedburner:origLink></entry></feed>
