<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5309403273623549307</atom:id><lastBuildDate>Fri, 17 Feb 2012 01:01:44 +0000</lastBuildDate><category>linux</category><category>modbus</category><category>cooling</category><category>router</category><category>diy</category><category>cafelug</category><category>bariloche</category><category>programacion</category><category>micros</category><category>dell</category><category>blogger</category><category>proyectos</category><category>joac</category><category>python</category><category>guitarra</category><category>windows</category><category>gcoop</category><category>escritos</category><category>conferencias</category><category>arte electronico</category><category>OPC</category><category>gmail</category><category>laptop</category><category>buenos aires</category><category>pyconar2009</category><title>.:::Joaclandia:::.</title><description>Peleando con el Samborondrolo</description><link>http://www.joaclandia.com.ar/</link><managingEditor>noreply@blogger.com (Joac)</managingEditor><generator>Blogger</generator><openSearch:totalResults>47</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/rss+xml" href="http://feeds.feedburner.com/joaclandia" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="joaclandia" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-8474170140040505967</guid><pubDate>Fri, 21 Oct 2011 04:10:00 +0000</pubDate><atom:updated>2011-10-21T01:10:44.473-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">escritos</category><title>Decaer como cesio 137</title><description>(leer escuchando &lt;a href="http://www.youtube.com/watch?v=MuF76YmzNhs&amp;amp;feature=share"&gt;esto&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Decaer.&lt;br /&gt;
&lt;br /&gt;
Dejar que la vida lleve hacia abajo.&lt;br /&gt;
&lt;br /&gt;
Mojar la medialuna en el café.&lt;br /&gt;
&lt;br /&gt;
Prometerse a uno mismo que no llegará tan abajo.&lt;br /&gt;
&lt;br /&gt;
Mirar el mar.&lt;br /&gt;
&lt;br /&gt;
Esconderse en la bruma de la mañana.&lt;br /&gt;
&lt;br /&gt;
Llorar por lo que paso.&lt;br /&gt;
&lt;br /&gt;
Reirse de uno mismo.&lt;br /&gt;
&lt;br /&gt;
Lo mas que se pueda.&lt;br /&gt;
&lt;br /&gt;
Sonreir como si no importara el vuelo de los mirlos.&lt;br /&gt;
&lt;br /&gt;
Prometerle a la mañana.&lt;br /&gt;
&lt;br /&gt;
Que ella.&lt;br /&gt;
&lt;br /&gt;
Será, por adelantado,&lt;br /&gt;
&lt;br /&gt;
la dueña de la mañana.&lt;br /&gt;
&lt;br /&gt;
Recordar los cuatro años.&lt;br /&gt;
&lt;br /&gt;
Por que allí,&lt;br /&gt;
&lt;br /&gt;
Y solo allí.&lt;br /&gt;
&lt;br /&gt;
Aprenderas a decaer,&lt;br /&gt;
&lt;br /&gt;
lentamente,&lt;br /&gt;
&lt;br /&gt;
como el cesio 137.&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-8474170140040505967?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2011/10/decaer-como-cesio-137.html</link><author>noreply@blogger.com (Joac)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-455014781117265359</guid><pubDate>Fri, 30 Sep 2011 19:09:00 +0000</pubDate><atom:updated>2011-09-30T16:09:03.455-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">gcoop</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><category domain="http://www.blogger.com/atom/ns#">arte electronico</category><title>Up things</title><description>Después de la charla de&lt;a href="http://www.canonical.org/%7Ekragen/"&gt; Kragen Javier Sitaker&lt;/a&gt; en &lt;a href="http://ar.pycon.org/2011"&gt;Pyconar 2011&lt;/a&gt; me puse a trabajar en algunas obras de arte electrónico. &lt;br /&gt;
&lt;br /&gt;
Así nació &lt;a href="https://github.com/joac/Up_Things"&gt;Up things&lt;/a&gt; (no pregunten el porque del nombre ), un repositorio en github&amp;nbsp; donde voy poniendo las cosas que se me ocurren.&lt;br /&gt;
&lt;br /&gt;
El primer proyecto es el lanzador de partículas. Les dejo unos screenshots:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OQAtPZf-AwU/ToYS_HeagMI/AAAAAAAAAVk/rlYX7J-JyiA/s1600/2011-09-30-160732_1600x900_scrot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://4.bp.blogspot.com/-OQAtPZf-AwU/ToYS_HeagMI/AAAAAAAAAVk/rlYX7J-JyiA/s640/2011-09-30-160732_1600x900_scrot.png" width="640" /&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/-GAgGiu-Wpi0/ToYTBqLhLHI/AAAAAAAAAVo/_JeMrSsV7sk/s1600/2011-09-30-160750_1600x900_scrot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://4.bp.blogspot.com/-GAgGiu-Wpi0/ToYTBqLhLHI/AAAAAAAAAVo/_JeMrSsV7sk/s640/2011-09-30-160750_1600x900_scrot.png" width="640" /&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/-ZaaMVd9xs8Q/ToYTD8zZ8PI/AAAAAAAAAVs/Z2LUVlygbio/s1600/2011-09-30-160815_1600x900_scrot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://4.bp.blogspot.com/-ZaaMVd9xs8Q/ToYTD8zZ8PI/AAAAAAAAAVs/Z2LUVlygbio/s640/2011-09-30-160815_1600x900_scrot.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-455014781117265359?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2011/09/up-things.html</link><author>noreply@blogger.com (Joac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-OQAtPZf-AwU/ToYS_HeagMI/AAAAAAAAAVk/rlYX7J-JyiA/s72-c/2011-09-30-160732_1600x900_scrot.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-6968847848873322256</guid><pubDate>Wed, 15 Jun 2011 10:57:00 +0000</pubDate><atom:updated>2011-06-15T07:57:15.358-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">escritos</category><title>Wish-list (Distancia)</title><description>Quisiera que todo fuese mas fácil.&lt;br /&gt;
&lt;br /&gt;
Quisiera despertarme con el sol pegándome en la cara. &lt;br /&gt;
&lt;br /&gt;
Quisiera poder encontrarme conmigo. Invitarme a tomar un café.  Preguntarme que es lo que me pasa. Contarme porque a veces tengo miedo. Y  que el miedo paraliza. Pedirme disculpas. Perdonarme.&lt;br /&gt;
&lt;br /&gt;
Quisiera estar parado en el filo de un cerro. Y sentir. La lejanía del valle. El viento desempolvando mis sueños. El aire rozando las alas de los cóndores.&lt;br /&gt;
&lt;br /&gt;
Quisiera tener menos lastre.&lt;br /&gt;
&lt;br /&gt;
Quisiera caminar sobre un suelo mas blando.&lt;br /&gt;
&lt;br /&gt;
Quisiera mostrar mi debilidad y creer en la fortaleza.&lt;br /&gt;
Quisiera que los dos aprendamos de la distancia.&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-6968847848873322256?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2011/06/wish-list-distancia.html</link><author>noreply@blogger.com (Joac)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-2212297622820322190</guid><pubDate>Wed, 18 May 2011 11:54:00 +0000</pubDate><atom:updated>2011-05-18T08:54:36.609-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">escritos</category><title>Atrapado en /dev/null</title><description>Me estoy dando cuenta, soy un terrible procastinador. No se si sera porque pretendo abarcar todo, que mi ambición de conocimientos es intensa, pero no se prolonga demasiado en el tiempo.&lt;br /&gt;
&lt;br /&gt;
Ya busque en Google...&lt;br /&gt;
&lt;br /&gt;
Ya leí (como cruel motivo de dispersión) cientos de articulos de como Internet cambia nuestras vidas, nos roba la capacidad de conectración. Probé de usar pomodoros, GTD y cuanta metodologia de "reducción de las distracciones" encontré por ahi. Pero, como tantas otras cosas en mi vida, duraron solo un ratito.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pero lo mas grave es que...&lt;br /&gt;
&lt;br /&gt;
No puedo con la facultad.&lt;br /&gt;
&lt;br /&gt;
Mi historial universitario no diverge mucho de lo que me sucede en otros ambitos de mi vida.&lt;br /&gt;
&lt;br /&gt;
Cuando me vine para Capital en 2007, mi objetivo era estudiar, tratando de bancarme por mi cuenta(unica opción), pero la vida me llevó por otros caminos:&lt;br /&gt;
mudanzas, cambios de trabajo, vida en pareja, cambios de carrera ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aquí estoy ahora, des(orientado, motivado, animado). Me gusta la carrera que estoy estudiando (Ciencias de la Computación en la UBA). Pero no puedo avanzar. No es que sea un retardado, es que no puedo conectar con mi parte que&lt;br /&gt;
quiere estudiar y recibirse.&lt;br /&gt;
&lt;br /&gt;
Ni comentar que el cuatrimestre pasado curse algebra y le puse todas las pilas a la teorica, me lei cuanto libro del tema encontre... pero hice menos del 10% de las practicas. Hoy la estoy recursando totalmente frustrado&lt;br /&gt;
&lt;br /&gt;
¿Como salgo de este ciclo vicioso?&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-2212297622820322190?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2011/05/atrapado-en-devnull.html</link><author>noreply@blogger.com (Joac)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-5902858627866451275</guid><pubDate>Sun, 03 Oct 2010 23:12:00 +0000</pubDate><atom:updated>2010-10-03T20:12:41.729-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">gcoop</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><title>Puertos Serie Virtuales en Gnu/Linux</title><description>Hoy estaba preparando mi charla para la PyCon2010 y me vi con la  necesidad de crear puertos serie virtuales, para unos ejemplos que  quiero dar...&lt;br /&gt;
&lt;br /&gt;
La solución fue utilizar socat:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;"Socat&amp;nbsp; is a command line based utility that establishes two bidirectional byte streams and transfers data between them. Because the streams can be constructed from&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a large set of different types of data sinks and sources (see address types), and because lots of address options may be applied to the streams, socat can be&amp;nbsp; used&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for many different purposes."&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
La linea en cuestión:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;joac@pepino ~ $ socat PTY,link=vserial1 PTY,link=vserial2&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Despues, desde pyserial, por ejemplo nos conectamos con:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;import serial&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ser = serial.Serial("/home/joac/vserial1")&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-5902858627866451275?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2010/10/puertos-serie-virtuales-en-gnulinux.html</link><author>noreply@blogger.com (Joac)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-1424850715206580691</guid><pubDate>Thu, 23 Sep 2010 11:45:00 +0000</pubDate><atom:updated>2010-09-23T08:45:19.419-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">gcoop</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><title>Grupos vs Individuos</title><description>&lt;!-- -*- mode: rst -*- --&gt;&lt;br /&gt;
&lt;p&gt;Ahora que empezó la primavera, y el sol pega directo en la ventana de mi pieza, ayudándome notablemente a despertar, voy a tratar de resucitar mi blog.&lt;/p&gt;&lt;div class="section" id="salvando-proyectos"&gt;&lt;h1&gt;Grupos vs Individuos&lt;/h1&gt;&lt;p&gt;Me gusta programar, me gustan los desafíos, y me gusta aprender cosas nuevas. Tengo una especie de lema que dice &lt;em&gt;&amp;quot;Si lo hizo un ser humano entonces puedo entender como esta  echo&amp;quot;&lt;/em&gt;, quizás demasiado abarcativo (notar que dije &lt;em&gt;puedo entender&lt;/em&gt;). Esto es un arma de doble filo, por un lado, porque aprendo cosas nuevas, pero por el otro, desvaloriza los conocimientos de los demás.&lt;/p&gt;&lt;p&gt;Desde que trabajo en gcoop (&lt;em&gt;ver posts anteriores&lt;/em&gt;) no trabajo mas solo, trabajo con un grupo. Este es un fuerte cambio en el paradigma que traigo desde (el autor no logra recordar, quizás se remonte a estados fetales pre-parto), y me hizo reflexionar bastante sobre esta forma de encarar los problemas.&lt;/p&gt;&lt;p&gt;Cuando uno trabaja solo, la comunicación sobre las tareas es básicamente con uno mismo. Pero cuando uno trabaja en grupo, la comunicación es distinta (Pensaba hacer una analogía con una Red pero es muy &lt;em&gt;de ñoño&lt;/em&gt;), la toma de decisiones tiene mas posturas, y es ahí donde esta la verdadera riqueza.&lt;/p&gt;&lt;p&gt;Creo, que no existen dos personas que piensen parecido, todos tenemos nuestras propias estructuras mentales, y reaccionamos de distintas formas, a veces muy sutiles, frente a los estímulos externos. Es común que se encuentren diferentes formas de resolver un mismo problema.&lt;/p&gt;&lt;p&gt;Pero no todo es color de rosa...&lt;/p&gt;&lt;p&gt;Creo que uno de los principales problemas mundiales, después de los realmente importantes (como que miles de niños muren de hambre día a día), es la falta de comunicación.&lt;/p&gt;&lt;p&gt;Y en los grupos pequeños también pasa.&lt;/p&gt;&lt;p&gt;Quizás la cuestión importante es que desarrollar software no es solamente uno con las manos sobre el teclado, sino, que requiere de comunicación en su mayor parte.&lt;/p&gt;&lt;p&gt;(Este post va a ser editado, es un boceto)&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-1424850715206580691?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2010/09/grupos-vs-individuos.html</link><author>noreply@blogger.com (Joac)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-7172692726855469100</guid><pubDate>Sat, 17 Jul 2010 16:01:00 +0000</pubDate><atom:updated>2010-07-17T15:27:00.032-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">gcoop</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><title>Jueguito v2</title><description>Ayer empecé el proyecto de un minijuego, clón de uno de blackberry.&lt;br /&gt;
Me di cuenta que sin colores era injugable, así que me puse a investigar como agregar colores a los prints de python, y me encontré con [1] en Stack Overflow, que explica como hacerlo.&lt;br /&gt;
&lt;br /&gt;
Es muy fácil, con la salvedad que yo aproveche y cambié el color de fondo, en lugar del color del texto.&lt;br /&gt;
&lt;br /&gt;
Ahora es mas cómodo de jugar. &lt;br /&gt;
&lt;br /&gt;
La ultima versión (Provisoria) la encuentran en [2] &lt;br /&gt;
&lt;br /&gt;
[1] &lt;a href="http://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python"&gt;http://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
[2]&lt;a href="http://github.com/joac/joac-python/blob/master/minigame/minigame.py"&gt; http://github.com/joac/joac-python/blob/master/minigame/minigame.py&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Dejo unas capturas que hice:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_chPCPdSVRNw/TEHzmHlUJvI/AAAAAAAAAQo/PYOwqfUUnW0/s1600/captura1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="317" src="http://4.bp.blogspot.com/_chPCPdSVRNw/TEHzmHlUJvI/AAAAAAAAAQo/PYOwqfUUnW0/s320/captura1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&amp;nbsp;&lt;i&gt;El inicio del juego&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_chPCPdSVRNw/TEHz8KupYXI/AAAAAAAAAQw/C9ssPxLSbEI/s1600/captura2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_chPCPdSVRNw/TEHz8KupYXI/AAAAAAAAAQw/C9ssPxLSbEI/s320/captura2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Un par de jugadas despues&lt;/i&gt;&lt;/div&gt;&lt;div style="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/_chPCPdSVRNw/TEH0JPrStbI/AAAAAAAAAQ4/qdBYBI2PnTU/s1600/captura3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_chPCPdSVRNw/TEH0JPrStbI/AAAAAAAAAQ4/qdBYBI2PnTU/s320/captura3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Ganamos!&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_chPCPdSVRNw/TEH0VdXu4pI/AAAAAAAAARA/ziswS19uT9U/s1600/captura4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_chPCPdSVRNw/TEH0VdXu4pI/AAAAAAAAARA/ziswS19uT9U/s320/captura4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Si no alcanzan los movimientos... Nos espera la derrota&lt;/i&gt;&lt;/div&gt;&lt;a href="http://github.com/joac/joac-python/blob/master/minigame.py"&gt; &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-7172692726855469100?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2010/07/jueguito-v2.html</link><author>noreply@blogger.com (Joac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_chPCPdSVRNw/TEHzmHlUJvI/AAAAAAAAAQo/PYOwqfUUnW0/s72-c/captura1.png" height="72" width="72" /><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-78659823185813234</guid><pubDate>Sat, 17 Jul 2010 01:12:00 +0000</pubDate><atom:updated>2010-07-17T13:04:41.162-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">gcoop</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><title>Jueguito</title><description>El otro día, me prestaron un blackberry que tenia un jueguito que me gusto, asi que hice una versión, para la consola, del juego, he aquí el código:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Square&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sd"&gt;"""This is the abstraction of one Square"""&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attrib&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attrib&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rep&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attrib&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Screen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sd"&gt;"""The Screen Array of the game"""&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x_size&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y_size&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;squares&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;populate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rep&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'#'&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_near_to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;vecinos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;vecinos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;vecinos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;vecinos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;vecinos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;vecino&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;vecino&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;vecinos&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;vecino&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;


    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;populate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;xrange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y_size&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;squares&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;xrange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x_size&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;random_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        
        &lt;span class="n"&gt;attrib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;square&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attrib&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;
    
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_arround&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;"""We check the attrib of the near squares"""&lt;/span&gt;
        &lt;span class="n"&gt;vecinos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_near_to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;vecinos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;vecino&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;vecinos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vecino&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrib&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrib&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                    &lt;span class="n"&gt;vecino&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rep&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'#'&lt;/span&gt;
                    &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vecino&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__repr__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;''&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s"&gt;''&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt; '&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;
    
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attrib&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attrib&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;check_arround&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;screen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Screen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'2'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'3'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'4'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'5'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt;
    &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrib&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;#dirty Hack&lt;/span&gt;
    &lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; 
    &lt;span class="n"&gt;win&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;xrange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'_ '&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'clear'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="si"&gt;%4d&lt;/span&gt;&lt;span class="s"&gt; moves of &lt;/span&gt;&lt;span class="si"&gt;%4d&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;childs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x_size&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;win&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;win&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;"You Win"&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;"You loose"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-78659823185813234?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2010/07/jueguito.html</link><author>noreply@blogger.com (Joac)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-6320926367644507806</guid><pubDate>Sat, 17 Apr 2010 13:35:00 +0000</pubDate><atom:updated>2012-01-24T17:28:44.342-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">escritos</category><title>Volando por la Mañana...</title><description>Mi vuelo sale a las 7:55, estoy en aeroparque en este momento. La verdad que el año pasado me diverti mucho riendome de mi pobre cuñada que perdió el micro en retiro, pero a mi, esta vez me paso algo mucho peor, pero por suerte sali bien parado (aunque un poco despeinado)...&lt;br /&gt;
&lt;br /&gt;
¡¡¡¡Me quede dormido!!!!!!!!!&lt;br /&gt;
&lt;br /&gt;
Si señor, si señora, a las 5:50 me pasaba a buscar un taxi, que reserve ayer a las 12 de la noche.&lt;br /&gt;
Mientras estaba tranquilo, soñando un sueño hiperrealista, breeeeeep, la chicharra del portero tuneado de casa me quito el sueño. En dos segundos, pense que era algun borracho confundido, que venia a buscar a algun amigo y le habia pifiado al departamento.....&lt;br /&gt;
&lt;br /&gt;
Pero no.&lt;br /&gt;
&lt;br /&gt;
Era el taxi.&lt;br /&gt;
Así, que en un tris, guarde la laptop, y las cosas que faltaban en la mochila y salí.&lt;br /&gt;
Llegué bien (excesivamente temprano, como a mi me gusta) y ahora estoy todo despeinado en el aeropuerto.&lt;br /&gt;
De esta experiencia aprendi dos cosas:&lt;br /&gt;
&lt;br /&gt;
- Si vas a salir en un vuelo matutino y vas a ir en taxi, reservalo de antemano en una empresa seria (En mi caso, Radiotaxi Del Plata), ya que esta precaución me salvo el vuelo.&lt;br /&gt;
- Dejar seteado mas de un reloj. En mi caso la falla fue que me olvide de&amp;nbsp;eliminar&amp;nbsp;la opcion de que no suene los&amp;nbsp;sábados.&lt;br /&gt;
- Por las dudas.... Bañate la noche anterior.... mas vale estar&amp;nbsp;excesivamente&amp;nbsp;limpio que tener que bancarte un dia entero todo mugroso.&lt;br /&gt;
&lt;br /&gt;
Como frutilla de la torta, justo anteayer estaba realizando un plan de reorganización de los metodos de&amp;nbsp;auto-encendido&amp;nbsp;(Lease, "La forma en que uno se despierta"). Me quede hasta las 2 de la mañana armando un crontab (Que no tenia idea de como se usaba) para que a la mañana me despierte arrancando el totem con una playlist. Si lo hubiese seteado para hoy, esto no pasaba....&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;Ahora estoy embolado en el aeropuerto, jugando con nmap contra la wifi paga... en 1 hora despego :P&lt;br /&gt;
--&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_chPCPdSVRNw/S8m4qKSUUpI/AAAAAAAAAO0/8NbO0A3f86E/s1600/100_4419.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="475" src="http://4.bp.blogspot.com/_chPCPdSVRNw/S8m4qKSUUpI/AAAAAAAAAO0/8NbO0A3f86E/s640/100_4419.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;El amanecer en el&amp;nbsp;Río&amp;nbsp;de la Plata&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;UPDATE: Estoy sano y salvo en Córdoba&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-6320926367644507806?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2010/04/volando-por-la-manana.html</link><author>noreply@blogger.com (Joac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_chPCPdSVRNw/S8m4qKSUUpI/AAAAAAAAAO0/8NbO0A3f86E/s72-c/100_4419.JPG" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-5738430747845384170</guid><pubDate>Wed, 31 Mar 2010 16:50:00 +0000</pubDate><atom:updated>2010-04-03T13:10:38.674-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">programacion</category><category domain="http://www.blogger.com/atom/ns#">escritos</category><category domain="http://www.blogger.com/atom/ns#">joac</category><title>Buenas Nuevas</title><description>Hace rato que no posteo algo por acá, pero tengo buenas noticias, y las buenas noticias son para compartirlas.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cambio de Trabajo!&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un poco de background:&lt;br /&gt;
Hace 3 años (y un poco mas) que me viene a estudiar&amp;nbsp; (aunque no solo a estudiar) a Buenos Aires, desde ese momento vengo laburando en la &lt;a href="http://www.flowtec.com.ar/"&gt;empresa de mi tío&lt;/a&gt;. Donde comenzé siendo un tablerista, y termine siendo proyectista eléctrico, programador de PLC, SysAdmin, Tablerista, Encargado de Postventa, Desarrollador de Scadas.... (y la lista sigue). Todo esto, amparado en la confianza de ser familia.&lt;br /&gt;
&lt;br /&gt;
Pero.... siempre hay un pero: No está tan bueno. Ser un empleado multifuncional, con muchas cosas diferentes que abarcar logró que mi estrés y mi panza crezca, que mi capacidad de resolver problemas específicos disminuya y algo muy importante:&lt;br /&gt;
La sensación de soledad, de no tener un par con el que discutir como encarar un proyecto, alguien con quien repartir las responsabilidades cuando la cosa no funciona y finalmente, alguien con quien aprender en conjunto.&lt;br /&gt;
&lt;br /&gt;
Ademas.... quería programar, Python de ser posible...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Empecé a mirar un poco la oferta laboral, pero el panorama era mas que deprimente (desde mi punto de vista): Muchas búsquedas de desarrolladores junior, con sueldos malos.&lt;br /&gt;
Yo, siendo un (proto)programador autodidacta, no tenia ningún papel, ninguna experiencia laboral en el desarrollo de sistemas, no tenia la cara para presentarme a un laburo mejor. &lt;br /&gt;
Mi forma de vida (la autosuficiencia en pareja) y el nivel de gastos (depto, gastos de facultad, alimentos, transporte) me hacia imposible pensar en entrar a una empresa donde me paguen 2,50$ la hora.&lt;br /&gt;
&lt;br /&gt;
Pero las cosas fueron cambiando: &lt;br /&gt;
&lt;br /&gt;
En marzo participe en el pycamp, un campamento en el que programadores de python de argentina, desde newbies como yo, hasta tipos con trayectoria internacional. Fue increíble: muchos geeks, mucha buena onda, mucha humildad.&lt;br /&gt;
Aprendí mucho, muchísimo, mas que en mucho tiempo. &lt;br /&gt;
Ahí mismo me di cuenta (nuevamente) que estaba cansado de trabajar tan solo y que realmente quería trabajar con gente así y que realmente mi codigo no apestaba (tanto...). &lt;br /&gt;
&lt;br /&gt;
En la reunión de &lt;a href="http://www.python.org.ar/"&gt;PyAR&lt;/a&gt; (en el marco del PyCamp), Alecu planteo que existen un montón de programadores de Python, que no trabajan en Python, y que estaría bueno, revertir esa situación. &lt;br /&gt;
&lt;br /&gt;
De vuelta en casa decidá tirarme a la pileta: Mande un curriculum a &lt;a href="http://www.gcoop.com.ar/"&gt;GCoop&lt;/a&gt;, una cooperativa de desarrollo de software libre, y... me eligieron!!!!, así que, fines de abril, estaré estrenando nuevo trabajo. &lt;br /&gt;
&lt;br /&gt;
La verdad que agradezco a la gente de la comunidad de Python Argentina, que confiaron en mi, como colaborador en los eventos que se organizaron y me ayudaron (sin darse cuenta) a dar este paso.&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-5738430747845384170?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2010/03/buenas-nuevas.html</link><author>noreply@blogger.com (Joac)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-1638934717515144083</guid><pubDate>Thu, 11 Feb 2010 12:52:00 +0000</pubDate><atom:updated>2010-02-11T09:52:26.409-03:00</atom:updated><title>Recalculando</title><description>Haciendole un apt-get dist-upgrade a mi cerebro.&lt;br /&gt;
&lt;br /&gt;
Ultimamente estoy consumiendo demasiada información y produciendo poca. Ni bien logre cambiar la tendencia, escribo algo interesante.&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-1638934717515144083?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2010/02/recalculando.html</link><author>noreply@blogger.com (Joac)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-9171317932342209412</guid><pubDate>Wed, 16 Dec 2009 17:51:00 +0000</pubDate><atom:updated>2009-12-16T18:17:06.047-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><category domain="http://www.blogger.com/atom/ns#">diy</category><category domain="http://www.blogger.com/atom/ns#">modbus</category><title>TSXCUSB485 en GNU/Linux!</title><description>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;Arranque esta semana testeando un dispositivo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;MODBUS&lt;/span&gt;, sobre un enlace &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RS&lt;/span&gt;485. Para ello &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;decidi&lt;/span&gt; utilizar un lindo conversor &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;usb&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;RS&lt;/span&gt;485, de la firma &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Schneider&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Electrics&lt;/span&gt;: el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;TSXCUSB&lt;/span&gt; 485.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_chPCPdSVRNw/SykfNXApG4I/AAAAAAAAAKw/YE93xa4ZCgk/s1600-h/DSCN1880.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_chPCPdSVRNw/SykfNXApG4I/AAAAAAAAAKw/YE93xa4ZCgk/s320/DSCN1880.JPG" alt="" id="BLOGGER_PHOTO_ID_5415894341265202050" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;El &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;aparatito&lt;/span&gt; en Cuestión&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Probe&lt;/span&gt; en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Win&lt;/span&gt;, lo detecto como un puerto &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;com&lt;/span&gt;, usando un driver privativo. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Probe&lt;/span&gt; en GNU/Linux y.... nada... me mostraba el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;vendor&lt;/span&gt; id y el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;product&lt;/span&gt; id del dispositivo pero no me lo montaba como un "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;ttyUSBx&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;Las opciones: resignarse y usarlo bajo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;windows&lt;/span&gt;, o buscar, escribir, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;parchar&lt;/span&gt; lo que fuera necesario.&lt;br /&gt;&lt;br /&gt;Obviamente, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;elejí&lt;/span&gt; la opción 2, ya que si lo sacaba funcionando tenia resuelto un punto importante en materia de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;comunicaciones&lt;/span&gt; industriales, rubro al que me dedico.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Empeze&lt;/span&gt; leyendo un poco de guias sobre como son los drivers &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;usb&lt;/span&gt; en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;linux&lt;/span&gt;,  y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;googleando&lt;/span&gt; si alguien lo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;habia&lt;/span&gt; hecho andar, pero, se ve que a los que trabajan de esto usan solo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;windows&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;El primer paso para hacer ingeniería inversa, era ver el hardware que &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;componia&lt;/span&gt; la placa:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_chPCPdSVRNw/Sykhtz3BdvI/AAAAAAAAAK4/yewb7_GuHEg/s1600-h/DSCN1878.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_chPCPdSVRNw/Sykhtz3BdvI/AAAAAAAAAK4/yewb7_GuHEg/s320/DSCN1878.JPG" alt="" id="BLOGGER_PHOTO_ID_5415897097788552946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Detalle de la Plaqueta&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Ya, de un golpe de vista nos encontramos con el corazón de la conversión &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;usb&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;rs&lt;/span&gt;232, el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;ft&lt;/span&gt;232&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;bl&lt;/span&gt;, un chip bastante &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;estandar&lt;/span&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_chPCPdSVRNw/SykirhpoOJI/AAAAAAAAALA/TJUQgI2nbMQ/s1600-h/DSCN1879.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_chPCPdSVRNw/SykirhpoOJI/AAAAAAAAALA/TJUQgI2nbMQ/s320/DSCN1879.JPG" alt="" id="BLOGGER_PHOTO_ID_5415898158052423826" border="0" /&gt;&lt;/a&gt;El lugar mas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;ovio&lt;/span&gt; para encontrar información era la pagina del fabricante, y ¡Oh Sorpresa! estaba el driver para nuestro querido &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;pinguÑu&lt;/span&gt;, incluso una guia para agregar &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;vendor&lt;/span&gt; y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;product&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;ids&lt;/span&gt; pero:&lt;br /&gt;La edición del driver, para que reconozca el dispositivo, en si, es bastante trivial, pero el problema es compilarlo: hay muchas versiones del driver y muy pocas de ellas son &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;compilables&lt;/span&gt;, porque, según entiendo, el soporte de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;usb&lt;/span&gt; del kernel se fue modificando con cada versión.&lt;br /&gt;&lt;br /&gt;Finalmente, termine buceando en el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;git&lt;/span&gt; de www.kernel.org y encontré uno que compilo de maravillas.&lt;br /&gt;&lt;br /&gt;La verdad que me sorprende cuan poderoso es el software libre: en el sistema de la ventana, ante un problema así ¡estas fregado!&lt;br /&gt;En balance de tiempo tarde unas 3 horas en resolverlo, pero ya esta!!! cuando consiga &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;comittear&lt;/span&gt; mi &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;pach&lt;/span&gt; para el driver, en futuros &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;kernels&lt;/span&gt;, el dispositivo va a tener soporte, ¡para mucha gente!&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-9171317932342209412?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/12/tsxcusb485-en-gnulinux.html</link><author>noreply@blogger.com (Joac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_chPCPdSVRNw/SykfNXApG4I/AAAAAAAAAKw/YE93xa4ZCgk/s72-c/DSCN1880.JPG" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-7401691819613153586</guid><pubDate>Tue, 01 Dec 2009 20:03:00 +0000</pubDate><atom:updated>2010-06-04T13:13:49.893-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">gcoop</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><title>Mandando el contenido de un directorio como archivos adjuntos</title><description>Hoy necesitaba mandar un archivo dividido en 18 partes de 400kB, debido a las limitaciones del proveedor de correo de un colega cubano. La opción de hacerlo a mano es realmente engorrosa, asi que con la ayuda de la documentación de python me mande este script:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:python"&gt;import smtplib
import os
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email import encoders
import getpass
directorio = 'Directorio de donde Sacamos los Archivos'
asunto = 'Aca va el asunto'
destinatarios = ['complete aqui con sus destinatarios',]
sender = 'Aca va Nuestra Direccion'
contenido = 'Texto que queremos que se lea en los mensajes'
host = 'servidor SMTP que vamos a usar'
login = 'nuestro usuario'
#creamos el contenedor
listademails = []
numeroParte = 1
listadoArchivos = os.listdir(directorio)
listadoArchivos.sort()
for archivo in listadoArchivos:
    path = os.path.join(directorio, archivo)
    msg = MIMEMultipart()
    msg['Subject'] = asunto + ' %d de %d' % (numeroParte, len(listadoArchivos)))
    numeroParte += 1
    msg['From']= sender
    msg['To']=', '.join(destinatarios)
    #msg.preamble = ''
    texto = MIMEText(contenido, 'plain')
    msg.attach(texto)
    #Adjuntamos el Archivo
    fp = open(path, 'rb')
    adjunto = MIMEBase('application', 'octet-stream')
    adjunto.set_payload(fp.read())
    fp.close()
    encoders.encode_base64(adjunto)
    adjunto.add_header('Content-Disposition', 'attachment', filename = archivo)
    msg.attach(adjunto)
    listademails.append(msg.as_string())

server = smtplib.SMTP(host)
server.login(login, getpass.getpass())
for mail in listademails:
    server.sendmail(sender, destinatarios, mail)
server.quit()
&lt;/pre&gt;Dejo en el lector las criticas pertinentes a esta 'Belleza'(ironicmode =True) que sorprende por su extrema pythonicidad :P&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-7401691819613153586?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/12/mandando-el-contenido-de-un-directorio.html</link><author>noreply@blogger.com (Joac)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-1277548817320308482</guid><pubDate>Sat, 28 Nov 2009 20:54:00 +0000</pubDate><atom:updated>2010-01-25T15:13:14.549-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><category domain="http://www.blogger.com/atom/ns#">cafelug</category><category domain="http://www.blogger.com/atom/ns#">conferencias</category><title>Segundas Charlas Tecnicas Trimestrales - CafeLug</title><description>Hoy me levante temprano, decidí postergar los estudios de química (esto me saldrá caro a futuro) , y me fui al &lt;a href="http://www.ccgsm.gov.ar/areas/cultura/ccgsm/?menu_id=22400"&gt;Centro Cultural San Martín&lt;/a&gt;, en Sarmiento y Paraná, a las segundas charlas técnicas trimestrales organizadas por&lt;a href="http://drupal.cafelug.org.ar/"&gt; Cafelug&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Las charlas estaban divididas en dos grandes grupos: Desarrollo y Administración.&lt;br /&gt;
Elejí arrancar con las charlas de administración:&lt;br /&gt;
&lt;span style="font-size: 100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-weight: bold;"&gt;La evolución del shell. Por Nubis G Bruno&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;Nos presento a la herramienta con la que él esta laburando ahora, llamada &lt;a href="http://rush.heroku.com/"&gt;RUSH&lt;/a&gt; (RUby SHell??). Segun lo que yo entendí, es un shell interactivo de ruby que permite modelizar un host remoto en un objeto de ruby,  con métodos ( como todo objeto...bueno, o casi todos) para realizar las tareas necesarias: copiar archivos, buscar usando expresiones regulares, levantar aplicaciones y daemons, y muchas cosas mas.&lt;br /&gt;
La aplicación se conecta, usando ssh, a un http server en la máquina remota, desde se ejecutan nativamente los comandos.&lt;br /&gt;
Esto permite tener scripts de administración bastante sencillos de comprender, y de escalar, para ejecutar tareas en múltiples hosts. Esto es muy piola para aplicaciones que estén en la nube, donde los hosts suelen ser dedicados y tenés que estar moviéndote de uno a otro todo el tiempo.&lt;br /&gt;
Hasta acá todo muy lindo, pero soy un tipo que en este momento no tiene ganas de aprender Ruby, de lo que surge una pregunta básica: ¿existe algo así para Python?. La respuesta es afirmativa y se llama &lt;a href="http://docs.fabfile.org/0.9.0/"&gt;Fabric&lt;/a&gt;, pero no es exactamente lo mismo.&lt;br /&gt;
Como propuesta a futuro, esta una implementación de objetos Host para python, integrada en IPython (Interesados en organizar un sprint bienvenidos!!).&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Balance de la Charla:&lt;/span&gt; Muy Buena&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Lo Mejor: &lt;/span&gt;Nubis la tiene muy clara, y es,  en mi opinión todo un code-rockstar!&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Lo Malo:&lt;/span&gt; La laptop en un momento no quiso saber mas nada con el proyector y nos quedamos sin ver todos los slides y ejemplos.&lt;br /&gt;
&lt;br /&gt;
La siguiente charla fue:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Como Implementar Cloud Computing con Open Source, sobre&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt; Open Solaris.&lt;br /&gt;
Por Gabriel Benselum y Pablo Oddera.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;En esta charla presentaron un poco a Open Solaris (Instale uno en una VM con VirtualBox mientras daban las  charlas) y a todas las herramientas y aplicaciónes que trae para implementar soluciones de cloud computing. Se armo un pequeño debate sobre discos SSD y sus ventajas y estado actual de desarrollo.&lt;br /&gt;
Comentaron todas las formas de implementar VM y sus ventajas entre las que destaco: flexibilidad, sea tanto para moverlas y replicarlas "on the fly",  ahorro de espacio y ahorro energetico.&lt;br /&gt;
&lt;br /&gt;
La segunda mitad de la charla fue sobre ZFS, el file system que implementa nativamente open solaris, que tiene varias ventajas: Journaling, snapshots, diferentes tipos de raids "Virtualizados" y muchas cosas piolas (Piolas para ambientes en los que no trabajo, con volumenes de datos bastante altos).&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Balance de la Charla:&lt;/span&gt; Muy Buena.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Lo Bueno:&lt;/span&gt; Conoci un poco mas de open solaris y de su comunidad. El Tema de ZFS me parecio muy interesante&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Lo Malo&lt;/span&gt;: En algunos momentos la charla se fue por las ramas, y terminaron medio ajustados de tiempo.&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
Despues vino el break y me fui a Guerrin ingerir una pizza al paso&lt;br /&gt;
&lt;br /&gt;
Despues del Almuerzo:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-weight: bold; text-align: center;"&gt;Video Streaming en grandes cantidades por Leito Monk&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;Esta charla fue muy motivadora, y me dejo bastante "caliente" por asi decirlo.&lt;br /&gt;
Leito junto con otro chico (averiguar nombre) contaron como resolvieron la infraestructura para proveer streaming de las charlas para wikimania 2009.&lt;br /&gt;
Utilizaron aplicaciones libres, contenedores y codecs libres, para proveer de un streaming http.&lt;br /&gt;
Fue muy ingeniosa la infraestructura y desmuestra como el software libre permite, gracias a la buena documentacion y el KISS crear cosas muy grossas con componentes sencillos.&lt;br /&gt;
Gastaron algo asi como 40u$s para contratar Amazon Elastic Cloud, que se encargo de balancear la carga, 500u$s para las computadoras de cada sala y las horas de los camarografos.&lt;br /&gt;
&lt;br /&gt;
Fue una lastima que la PyCon 2009 fue casi pegada a Wikimania, y no se pudo adoptar lo mismo para nuestras charlas.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;span style="font-weight: bold;"&gt;Balance de la Charla: &lt;/span&gt;exelente&lt;/span&gt;&lt;br /&gt;
Lo Bueno:&lt;span style="font-weight: normal;"&gt; Con el software libre se pueden hacer cosas muy buenas!&lt;/span&gt;&lt;br /&gt;
Lo Malo&lt;span style="font-weight: normal;"&gt;: Realmente nada&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;A pedido del publico: la documentación esta en&lt;a href="http://trac.usla.org.ar/proyectos/wikimania-video"&gt; http://trac.usla.org.ar/proyectos/wikimania-video&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;br /&gt;
El Cierre fue con:&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;/span&gt; Introducción a Selenium (Un enanito que trabaja por vos) por Leito Monk&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: normal;"&gt;Esta charla fue del track de desarrollo y fue una somera introduccion a Selenium, una herramienta para crear test funcionales para aplicaciones web usando java script.&lt;br /&gt;
Yo no me dedico directamente al rubro web pero estub buena para conocer un poco por si las moscas.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Balance de la Charla&lt;/span&gt;: Buena&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Lo Bueno&lt;/span&gt;: Me di un pantallazo de lo que es el testeo web.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Lo Malo&lt;/span&gt;: La VM que corria la app de Leito no levantaba la conexión de red y se perdio un buen rato hasta que la cosa salio andando.&lt;/span&gt;&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;span style="font-weight: bold;"&gt;Balance General:&lt;/span&gt; &lt;/span&gt;&lt;span style="font-weight: normal;"&gt;Las Charlas estuvieron buenas, esperaba ver mas caras conocidas, pero a esta altura del Año todos estamos un poco hasta las manos :P.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;Cada día aprecio mas el esfuerzo de toda la comunidad del SL para que estemos todos mas y mejor informados&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-1277548817320308482?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/11/segundas-charlas-tecnicas-trimestrales.html</link><author>noreply@blogger.com (Joac)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-4075829478244971009</guid><pubDate>Wed, 07 Oct 2009 16:39:00 +0000</pubDate><atom:updated>2009-10-07T14:20:28.517-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laptop</category><category domain="http://www.blogger.com/atom/ns#">cooling</category><category domain="http://www.blogger.com/atom/ns#">diy</category><title>Enfriando el Infierno (o Cooler DIY)</title><description>En el trabajo tengo una laptop &lt;a href="http://www.notebookreview.com/price/product.asp?brandID=15&amp;amp;productFamilyID=681"&gt;Toshiba L20-SP119&lt;/a&gt;, con un Celeron de 1.5GHz, medio viejita, que uso para laburar en plantas, programar plc y correr el Autocad (y alguna que otra aplicación para windows).&lt;br /&gt;Funciona bastante bien, pero tiene un problema:&lt;br /&gt;¡¡Se calienta como el mismísimo &lt;a href="http://www.tiraecol.net/modules/comic/comic.php?content_id=177&amp;amp;mode=flat&amp;amp;order=0"&gt;infierno&lt;/a&gt;!!&lt;br /&gt;&lt;br /&gt;Si bien no te quemas al tocarla, es bastante incomodo, sobre todo cuando tengo que tipear.&lt;br /&gt;&lt;br /&gt;Así que decidí poner manos a la obra y construir el "Definitive Cooling System"&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;¡Charaaan!&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_chPCPdSVRNw/SszHi6lY54I/AAAAAAAAAIk/ZmXGENnDlAM/s1600-h/2009-10-07-133538.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_chPCPdSVRNw/SszHi6lY54I/AAAAAAAAAIk/ZmXGENnDlAM/s320/2009-10-07-133538.jpg" alt="" id="BLOGGER_PHOTO_ID_5389902256711198594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;El monstruo sin la protección mecánica&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Materiales Utilizados:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ventilador de 80mm de una fuente ATX quemada&lt;/li&gt;&lt;li&gt;Caja de &lt;a href="http://www.blocky.com.ar/"&gt;Ladrillitos Blocky&lt;/a&gt; que me regalaron para navidad de &lt;a href="http://www.officenet.com.ar/"&gt;Officenet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Cinta para tapar los agujeros&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un Transformador de 12 voltios de corriente continua (tecnicamente: un transformador con rectificador...)&lt;/li&gt;&lt;li&gt;Un jefe permisivo que nos deje poner tamaña obra de arte en nuestro Box&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_chPCPdSVRNw/SszHipOEYoI/AAAAAAAAAIc/kmuFwFn0afg/s1600-h/2009-10-07-133508.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_chPCPdSVRNw/SszHipOEYoI/AAAAAAAAAIc/kmuFwFn0afg/s320/2009-10-07-133508.jpg" alt="" id="BLOGGER_PHOTO_ID_5389902252049982082" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;El Monstruo con la proteción "Anti Dedos Curiosos"&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_chPCPdSVRNw/SszHiKyVvAI/AAAAAAAAAIU/aQmKyvlYW5g/s1600-h/2009-10-07-133443.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_chPCPdSVRNw/SszHiKyVvAI/AAAAAAAAAIU/aQmKyvlYW5g/s320/2009-10-07-133443.jpg" alt="" id="BLOGGER_PHOTO_ID_5389902243880614914" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;El conjunto en toda su magnitud&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_chPCPdSVRNw/SszKNAHgoQI/AAAAAAAAAIs/jrh9v5UqlIc/s1600-h/2009-10-07-140318.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_chPCPdSVRNw/SszKNAHgoQI/AAAAAAAAAIs/jrh9v5UqlIc/s320/2009-10-07-140318.jpg" alt="" id="BLOGGER_PHOTO_ID_5389905178774249730" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Detalle del montaje del  Ventilador, y la cinta (en este caso de papel) que tapa los agujeros&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Gracias al nuevo ventilador, la máquina redujo su temperatura en un 40%  (aproximado se queda corto)&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-4075829478244971009?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/10/enfriando-el-infierno-o-cooler-diy.html</link><author>noreply@blogger.com (Joac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_chPCPdSVRNw/SszHi6lY54I/AAAAAAAAAIk/ZmXGENnDlAM/s72-c/2009-10-07-133538.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-7872847955925484568</guid><pubDate>Thu, 01 Oct 2009 19:08:00 +0000</pubDate><atom:updated>2009-10-01T16:30:39.422-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">gmail</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><title>Agregando un botón para chequear las cuentas pop3 en Gmail</title><description>Cansado de usar un cliente de correo, me decidi a unificar las casillas de mail, y recibir todo en Gmail, el problema es que actualiza las casillas POP3 aproximadamente cada una hora. Si bien existe una forma de forzar la actualizacion, esta en la parte de configuracion, siendo muy poco practico.&lt;br /&gt;Descubri un &lt;a href="http://userscripts.org/scripts/show/51516"&gt;script para GreaseMonkey, de Tim Smart&lt;/a&gt;, pero solo funciona para la versión en Ingles. Me di cuenta que adaptarlo al español era casi trivial. Aca esta la versión modificada:&lt;br /&gt;&lt;pre class="brush:jscript"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ==UserScript==&lt;br /&gt;&lt;br /&gt;// @name           GMail POP3 Quick Checker&lt;br /&gt;&lt;br /&gt;// @namespace      http://userscripts.org/users/tim&lt;br /&gt;&lt;br /&gt;// @description    Add's a link next to 'Refresh' to quickly check all POP3 Accounts&lt;br /&gt;&lt;br /&gt;// @include        http://mail.google.com*&lt;br /&gt;&lt;br /&gt;// @include        https://mail.google.com*&lt;br /&gt;&lt;br /&gt;// @require        http://updater.usotools.co.cc/51516.js&lt;br /&gt;&lt;br /&gt;// @require        http://userscripts.org/scripts/source/56812.user.js&lt;br /&gt;&lt;br /&gt;// ==/UserScript==&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function clickElement( element ) {&lt;br /&gt;&lt;br /&gt;    var clickEvent = document.createEvent("MouseEvents");&lt;br /&gt;&lt;br /&gt;    clickEvent.initMouseEvent( "click", true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null );&lt;br /&gt;&lt;br /&gt;    element.dispatchEvent( clickEvent );&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;var navigating = false;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GMailAPI({&lt;br /&gt;&lt;br /&gt;    onViewChange: function() {&lt;br /&gt;&lt;br /&gt;        if ( this.viewType === 'tl' ) {&lt;br /&gt;&lt;br /&gt;            var divs = this.viewElement.ownerDocument.evaluate( ".//div[contains(.,'Actualizar') and @act='20']", this.viewElement, null, 7, null );&lt;br /&gt;&lt;br /&gt;            for ( var i = 0, div, refreshCont, refreshLink; div = divs.snapshotItem( i++ ); ) {&lt;br /&gt;&lt;br /&gt;                if ( div.added === true )&lt;br /&gt;&lt;br /&gt;                    return;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                refreshCont = document.createElement('div');&lt;br /&gt;&lt;br /&gt;                refreshLink = document.createElement('div');&lt;br /&gt;&lt;br /&gt;                refreshCont.className = 'goog-inline-block';&lt;br /&gt;&lt;br /&gt;                refreshLink.className = 'AP';&lt;br /&gt;&lt;br /&gt;                refreshLink.appendChild( document.createTextNode('Actualizar Cuentas POP3') );&lt;br /&gt;&lt;br /&gt;                refreshCont.appendChild( refreshLink );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                refreshCont.addEventListener( 'click', function() {&lt;br /&gt;&lt;br /&gt;                    if ( top.location.hash &amp;amp;&amp;amp; top.location.hash.length &amp;gt; 1 )&lt;br /&gt;&lt;br /&gt;                        navigating = top.location.hash;&lt;br /&gt;&lt;br /&gt;                    else&lt;br /&gt;&lt;br /&gt;                        navigating = true;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    top.location.hash = '#settings/accounts';&lt;br /&gt;&lt;br /&gt;                }, false );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                div.parentNode.parentNode.appendChild( refreshCont );&lt;br /&gt;&lt;br /&gt;                div.added = true;&lt;br /&gt;&lt;br /&gt;                refreshLink = refreshCont = null;&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            divs = null;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        else if ( this.viewType === 's' ) {&lt;br /&gt;&lt;br /&gt;            if ( navigating === false )&lt;br /&gt;&lt;br /&gt;                return;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            var links = this.viewElement.ownerDocument.evaluate( ".//span[contains(.,'Comprobar si tengo correo ahora')]", this.viewElement, null, 4, null );&lt;br /&gt;&lt;br /&gt;            for ( var link; link = links.iterateNext(); )&lt;br /&gt;&lt;br /&gt;                clickElement( link );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            top.location.hash = navigating === true ? '#inbox' : navigating;&lt;br /&gt;&lt;br /&gt;            navigating = false;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-7872847955925484568?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/10/agregando-un-boton-para-chequear-las.html</link><author>noreply@blogger.com (Joac)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-5464286494400828564</guid><pubDate>Tue, 22 Sep 2009 19:55:00 +0000</pubDate><atom:updated>2009-09-22T19:57:56.368-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">router</category><title>Flasheando el dir 300</title><description>&lt;span style="font-size:100%;"&gt;Hace unos días, después de una visita al canal de chat de Buenos Aires Libre (#buenosaireslibre en freenode) me arme de valor y la instale &lt;a href="http://www.dd-wrt.com/dd-wrtv3/index.php"&gt;DD-WRT&lt;/a&gt; (Un firmware basado en Linux para routers, con una gran cantidad de funcionalidades) a mi DIR-300. Use dos guías diferentes: la oficial, que es bastante escueta, y &lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=32594&amp;amp;highlight=dir+300"&gt;otra&lt;/a&gt;, para un router similar, que explica como configurar nuestra máquina para que el flasheo sea un éxito. Decidí escribir una guía en castellano, con bastante información que no hay sobre el proceso.&lt;br /&gt;&lt;br /&gt;Conceptos Generales:&lt;br /&gt;Herramientas que vamos a utilizar:&lt;br /&gt;&lt;br /&gt;-GNU/Linux, en el sabor que mas nos guste. (Yo personalmente utilice Ubuntu Jaunty 9.04)&lt;br /&gt;&lt;br /&gt;-Un servidor tftp (En Debían y derivados sudo apt-get install tftp xinetd tftpd).&lt;br /&gt;&lt;br /&gt;-El archifamoso Putty (sudo apt-get install putty)&lt;br /&gt;&lt;br /&gt;-Un cable de Red (Elemental Watson!)&lt;br /&gt;&lt;br /&gt;-Los archivos ap61.ram, ap61.rom, linux.bin y dir300-firmware.bin (En su versión mas actualizada, desde el sitio oficial)&lt;br /&gt;&lt;br /&gt;Hay cinco  pasos principales para flashear el router:&lt;br /&gt;1)Configurar el servidor tftp en la máquina que vamos a utilizar y verificar su funcionamiento.&lt;br /&gt;2)Entrar al RedBoot del DIR- 300. Para eso vamos a usar un script de bash, que nos va a simplificar el trabajo.&lt;br /&gt;3)Cargar el RedBoot modificado(ap61.ram) en la memoria del router.&lt;br /&gt;4)Cargar la imagen de linux, linux.bin.&lt;br /&gt;5)Configurar el script de inicio del router.&lt;br /&gt;&lt;br /&gt;--Configurando el servidor tftp---&lt;br /&gt;&lt;br /&gt;1-Instalamos, usando apt-get xinetd, tftpd y tftp&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo apt-get install xinetd tftpd tftp&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;2-Creamos el archivo de configuración en /etc/xinetd.d&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo gedit /etc/xinetd.d/tftp&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Y le ponemos como contenido:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);font-family:courier new;font-size:100%;"  &gt;----Código----&lt;/span&gt; &lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;service tftp&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);font-size:100%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;protocolo = udp&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);font-size:100%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;port = 69&lt;/span&gt; &lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;socket_type = dgram&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;wait = yes&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;user = nobody&lt;/span&gt; &lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;server = /usr/sbin/in.tftpd&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;server_args = /tftpboot&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);font-size:100%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;disable = no&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);font-size:100%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-weight: bold;font-family:courier new;font-size:100%;"  &gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);font-family:courier new;font-size:100%;"  &gt;----/Código----&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;3- Creamos el directorio /tftpboot, que es la carpeta que contiene los archivos compartidos por tftp y le damos permisos para que sea de acceso irrestricto, y no sea propiedad de nadie&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo mkdir /tftpboot&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo chown -R nobody /tftpboot/&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo chmod -R 777 /tftpboot/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;4- Si no descargamos los archivos aun, lo hacemos ahora y los ponemos en nuestro directorio /tftpboot/ (son cuatro archivos en total)&lt;br /&gt;&lt;br /&gt;5-Reiniciamos xinetd&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo /etc/init.d/xinetd stop&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo /etc/init.d/xinetd start&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;6- Probamos que todo funcione correctamente:&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-family:courier new;"&gt; tftp 127.0.0.1&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt; #Nos conectamos por loopback al servidor que esta corriendo en nuestro equipo&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;tftp&gt; verbose&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  #Ponemos a la sesion en modo verbose, asi tenemos mas feedback de lo que pasa.&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Verbose mode on.&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;tftp&gt; &lt;span style="font-weight: bold;"&gt;get linux.bin&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  #pedimos el archivo linux.bin&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;getting from 127.0.0.1:linux.bin to linux.bin [netascii]&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Received 3764422 bytes in 0.5 seconds [60230752 bits/sec]]]&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;tftp&gt; &lt;span style="font-weight: bold;"&gt;quit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;   #terminamos la sesión&lt;br /&gt;Nuestro servidor tftp funciona!!!!!&lt;br /&gt;&lt;br /&gt;----Entrando al RedBoot----&lt;br /&gt;No es fácil entrar al RedBoot sin la ayuda del siguiente script:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;---Codigo---&lt;/span&gt; &lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;#!/bin/bash&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;echo&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;echo ""&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;echo "Ingrese el nombre o la direccion IP del host: "&lt;/span&gt; &lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;read host&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;while true&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;do&lt;/span&gt; &lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    if eval "ping -c 1 -s 1 $host" &gt; /dev/null; then&lt;br /&gt;      &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;echo "Router Awake"&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;                    &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;putty telnet://$host 9000 -m redboot.txt&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;                    &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;break&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;else&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:100%;"  &gt;    &lt;br /&gt;      echo "Esperando al Redboot para iniciar. Presione CTRL + C para salir"&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;                  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;sleep 1&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;fi&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;done&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;---/Código---&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;Le ponemos el nombre que mas nos guste, en mi caso router.sh.&lt;br /&gt;&lt;br /&gt;Tenemos que crear también un archivo redboot.txt que contenga lo siguiente:&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;---Código---&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;^C&lt;br /&gt;-&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;--/Código---&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;Ahora empieza la acción!!!&lt;br /&gt;&lt;br /&gt;-Desconectá el router (todos los cables de red y la energía), dale un besito de buenas noches y prometele que después de la operación va a sentirse mucho mas enérgico, animado, y funcional.&lt;br /&gt;-Enchufa la computadora al router, usando el cable de red, en el puerto WAN.&lt;br /&gt;-Cambia la ip de tu equipo a 192.168.20.80&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo ifconfig eth0 192.168.20.80 up&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;   #cambia eth0 por la interface que estes usando.&lt;br /&gt;-ejectuta el script router.sh:&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;---Sesión de Bash---&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo ./router.sh&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;Ingrese el nombre o la direccion IP del host:&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;192.168.20.81&lt;/span&gt;       &lt;span style="font-family:georgia;"&gt;#esto lo ingresamos nosotros y le damos enter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Esperando al Redboot para iniciar. Presione CTRL + C para salir &lt;/span&gt;  # Ahora conectamos la energia al router, despues de un momento nos tendria que abrir una ventana de putty&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;   &lt;span style=";font-family:courier new;font-size:100%;"  &gt; ---Sesión de Putty---&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; &lt;br /&gt;RedBoot&gt; &lt;span style="font-weight: bold;"&gt;load ap61.ram&lt;/span&gt;          &lt;span style="font-family:georgia;"&gt;#Ojo!! es el ap61.ram, no se confundan con el ap61.rom!&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;RedBoot&gt; &lt;span style="font-weight: bold;"&gt;go&lt;/span&gt;                    &lt;span style="font-family:georgia;"&gt; #La sesión va a ser terminada, ni se te ocurra resetear el router!&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;---/Sesión de Putty---&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;#Nos conectamos por cualquier puerto LAN del router, teniendo cuidado de no desconectar la alimentación&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo ifconfig eth0 192.168.1.20 up&lt;/span&gt;    &lt;/span&gt;&lt;span style="font-size:100%;"&gt;  #Cambiamos la Ip a 192.168.1.20&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo ./router.sh&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;  #volvemos a usar nuestro lindo script para conectarnos al router&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Ingrese el nombre o la direccion IP del host:&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;192.168.1.1&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Esperando al Redboot para iniciar. Presione CTRL + C para salir.&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;  ---Sesión de Putty---&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;       DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;fis init&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;          &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;About to initialize [format] FLASH image system - continue (y/n)? &lt;span style="font-weight: bold;"&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  *** Initialize FLASH Image System&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;... Erase from 0xbffe0000-0xbfff0000: .&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;       ... Program from 0x807f0000-0x80800000 at 0xbffe0000: .&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;ip_address -h 192.168.1.20&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;  &lt;/span&gt;IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0&lt;br /&gt;  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Default server: 192.168.1.20&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;load -r -b %{FREEMEMLO} ap61.rom&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    Using default protocol (TFTP)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;          &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Raw file loaded 0x80080000-0x800a8717, assumed entry at 0x80080000&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;fis create -l 0x30000 -e 0xbfc00000 RedBoot&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;          &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;An image named 'RedBoot' exists - continue (y/n)? &lt;span style="font-weight: bold;"&gt;y&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;... Erase from 0xbfc00000-0xbfc30000: ...&lt;br /&gt;&lt;/span&gt;          &lt;span style=";font-family:courier new;font-size:100%;"  &gt;... Program from 0x80080000-0x800a8718 at 0xbfc00000: ...&lt;br /&gt;  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;... Erase from 0xbffe0000-0xbfff0000: .&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;... Program from 0x807f0000-0x80800000 at 0xbffe0000: .&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;reset&lt;/span&gt;       &lt;span style="font-family:georgia;"&gt;&lt;br /&gt;        #El Router se va a reiniciar, con el nuevo bootloader, por lo tanto, cerramos la ventana de putty y esperamos ~1 minuto, para volver a lanzar el script de conexión.&lt;br /&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;---/Sesión de Putty---&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Bash:~$ &lt;span style="font-weight: bold;"&gt;sudo ./router.sh&lt;/span&gt;   &lt;span style="font-family:georgia;"&gt;#volvemos a usar nuestro lindo script para conectarnos al router &lt;/span&gt;&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;Ingrese el nombre o la direccion IP del host:&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;192.168.1.1&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Esperando al Redboot para iniciar. Presione CTRL + C para salir.&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    ---Sesión de Putty---&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;ip_address -h 192.168.1.20&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  Default server: 192.168.1.2&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; &lt;br /&gt;  DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;load -r -b 0x80041000 linux.bin&lt;/span&gt;    &lt;span style="font-family:georgia;"&gt;#tomate unos segundo para chequear bien los números en Hexadecimal.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;          &lt;span style=";font-family:courier new;font-size:100%;"  &gt;DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;fis create linux&lt;/span&gt;   &lt;span style="font-family:georgia;"&gt;# Esta operación tarda unos minutos, tené paciencia&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;fconfig boot_script true&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;fconfig boot_script_timeout 4&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;fconfig&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  Run script at boot: true&lt;br /&gt;&lt;/span&gt;          &lt;span style=";font-family:courier new;font-size:100%;"  &gt;Boot script:&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    Enter script, terminate with empty line&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  &gt;&gt; fis load -l linux&lt;br /&gt;  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&gt;&gt; exec&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    &gt;&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    Boot script timeout (1000ms resolution): 3      #Apretamos Enter&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    Use BOOTP for network configuration: false        #Apretamos Enter&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    Gateway IP address:                                   #Apretamos Enter&lt;br /&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Local IP address:                                    #Apretamos Enter&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  Local IP address mask:                          #Apretamos Enter&lt;/span&gt;&lt;br /&gt;        &lt;span style=";font-family:courier new;font-size:100%;"  &gt;Default server IP address:                      #Apretamos Enter&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  Console baud rate: 9600                         #Apretamos Enter&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  GDB connection port: 9000                       #Apretamos Enter&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  Force console for special debug messages: false #Apretamos Enter&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; &lt;br /&gt;  Network debug at boot time: false               #Apretamos Enter&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    Update&lt;br /&gt;  RedBoot non-volatile configuration - continue (y/n)? &lt;span style="font-weight: bold;"&gt;y&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;  ... Erase from 0xbffe0000-0xbfff0000: .&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;  ... Program from 0×80ff0000-0×81000000 at 0xbffe0000: .&lt;br /&gt;  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;DD-WRT&gt; &lt;span style="font-weight: bold;"&gt;reset&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;    ---/Sesión Putty---&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;---/Sesión Bash---&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;Ya tenemos el ddwrt instalado!&lt;br /&gt;Normalmente, no te va a levantar la ip automagicamente, para eso, desconecta el cable de red, espera que el router termine de arrancar, y volvelo a conectar, es un bug conocido de DD-WRT.&lt;br /&gt;&lt;br /&gt;Para entrar a la configuración web:&lt;br /&gt;&lt;a href="http://192.168.1.1/"&gt;http://192.168.1.1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fuentes:&lt;br /&gt;&lt;a href="http://www.dd-wrt.com/dd-wrtv3/index.php"&gt;Sitio Oficial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dd-wrt.com/routerdb/de/download.php?file=1277"&gt;Guia Oficial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=32594&amp;amp;highlight=dir+300"&gt;Guia Copada del foro ddwrt&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dd-wrt.com/dd-wrtv3/dd-wrt/hardware.html"&gt;Archivos para el DIR-300   (Poniendo DIR 300 en el cuadro de busqueda)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-5464286494400828564?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/09/flasheando-el-dir-300.html</link><author>noreply@blogger.com (Joac)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-7514329524537653818</guid><pubDate>Mon, 07 Sep 2009 14:27:00 +0000</pubDate><atom:updated>2009-09-07T11:35:28.820-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laptop</category><category domain="http://www.blogger.com/atom/ns#">dell</category><title>Mi dell esta cada vez mas cerca!!</title><description>Gracias al &lt;a href="http://criadoindomable.wordpress.com/2009/06/10/resumen-de-toda-la-operacion-en-dell/#more-1236"&gt;Post&lt;/a&gt; en &lt;a href="http://criadoindomable.wordpress.com"&gt;criadoindomable.wordpress.com&lt;/a&gt; donde &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;están&lt;/span&gt; los &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;números&lt;/span&gt; de &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;teléfonos&lt;/span&gt; de la empresa de transportes de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Dell&lt;/span&gt; en argentina, ya se que esta en el &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;país&lt;/span&gt;, y si todo sale bien me la entregan, a mas tardar, el &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;día&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;miércoles&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;Es &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;increíble&lt;/span&gt; lo malo que es el servicio de soporte de ventas de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Dell&lt;/span&gt; en argentina, ellos me &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;dijeron&lt;/span&gt; que me &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;estaría&lt;/span&gt; llegando en 25 &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;días&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;hábiles&lt;/span&gt;!! una locura!&lt;br /&gt;&lt;br /&gt;En el mismo post me entere que tengo un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;upgrade&lt;/span&gt; gratuito a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;windows&lt;/span&gt; 7 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;home&lt;/span&gt;, que es mejor que tener gastando espacio en disco a un desastre como el Vista. Igual ya estoy poniendo a descargar la nueva versión de &lt;a href="http://www.ubuntu.com"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Ubuntu&lt;/span&gt;&lt;/a&gt;. (Estoy pensando en ponerle también un &lt;a href="http://www.debian.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Debian&lt;/span&gt;&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-7514329524537653818?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/09/mi-dell-esta-cada-vez-mas-cerca.html</link><author>noreply@blogger.com (Joac)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-5066366883193644427</guid><pubDate>Sat, 05 Sep 2009 00:06:00 +0000</pubDate><atom:updated>2009-09-11T16:42:32.916-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">pyconar2009</category><category domain="http://www.blogger.com/atom/ns#">python</category><title>Pycon Argentina 2009 - Dia  '-1' (Jueves 3 de septiembre)</title><description>&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;14:00hs - Universidad de Belgrano.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Estamos citados, junto a la gente de &lt;a href="http://www.buenosaireslibre.org.ar/"&gt;BAL&lt;/a&gt; para planificar la instalación de la cobertura de internet wifi de la &lt;a href="http://ar.pycon.org/"&gt;PyCon&lt;/a&gt;. Inicialmente nos juntamos con &lt;a href="http://www.taniquetil.com.ar/plog/"&gt;Facundo Batista&lt;/a&gt;, coordinador general del evento, para descargar los programas, tutoriales, anotadores y aguas para oradores (unos cientos de kilos de papel y agua). Yo, para ahorrar tiempo relevo unas interesantes rosetas de red, categoría 6 (un lujo). Nuestro contacto de referencia nos dio una explicación muy confusa de que bocas y cables podíamos usar y que no, de paso nos cuenta que en lugar de una conexión ADSL de Telecom, vamos a tener un servicio corporativo de Fibertel, de 5Mb de Download(640kb/s), y unos pobres 512Kb (64kb/s) de Upload. Hasta este punto parece que todo viene viento en popa.&lt;br /&gt;Tuvimos que contratar nuestro propio enlace de internet, porque, según nos cuentan, la gente de sistemas de la &lt;a href="http://www.ub.edu.ar/"&gt;UB&lt;/a&gt; es bastante vaga, y tienen miedo de que les sobrecarguemos el enlace, y que los hackers que vienen a la convención les vulneren todo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;16:00hs - Universidad de Belgrano - El horizonte se desdibuja&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nos dicen que no vamos a poder usar los cables que estan tan bien ubicados en las salas, y que busquemos los cables que habían puesto para las jornadas regionales. Lamentablemente, los usaron para pasar los nuevos, hermosos y relumbrantes cables de categoria 6. En este momento solo teníamos un cable desde el lugar donde luego pondrían Fibertel hasta el subsuelo, donde estarían los stand de los sponsors y de la comunidad. Eso dejaba sin cobertura a los auditorios, desde donde nuestro ansioso publico querria twitear, actualizar sus blogs y navegar sin parar.&lt;br /&gt;Estabamos en un estado de desconcierto, que se convirtió en general cuando los instaladores de Fibertel nos plantearon un panorama desconcertante: no había un cable desde el centro de la manzana (donde estan las pacheras de fibertel) y el cuartito donde tenian que poner el router.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;17:00hs - Universidad de Belgrano - Vemos Tierra a la distancia.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los muchachos lograron conectar Fibertel, ahora teníamos internet, pero no teníamos como llegar a  cada uno de los accespoint de &lt;a href="http://www.buenosaireslibre.org.ar/"&gt;BAL&lt;/a&gt;. Entonces se me enciende un chispazo de inteligencia y planee un plan de emergencia:&lt;br /&gt;Las bocas están conectadas a un switch, que entrega direcciones por DHCP, pero en el fondo, no es mas que eso: un switch. ¿¿¿ Porque no nos conectamos por las bocas, de forma, semi ilegal,  y creamos rutas estáticas entre los acces point y el router que va a natear la conexión de Fibertel, dejando que los accespoint nateen y hagan DHCP??, usamos nuestro enlace de Internet, y la red de la &lt;a href="http://www.ub.edu.ar/"&gt;UB&lt;/a&gt; no peligra.&lt;br /&gt;Cuando le plantee esto al contacto de la &lt;a href="http://www.ub.edu.ar/"&gt;UB&lt;/a&gt; se horrorizo. Ellos no tenia forma de monitorizar que no lo hiciéramos. Me pidió que esperemos,  que iba a tratar de gestionarnos la llave para que usemos la pachera, y no pasemos por su switch. Con los chicos de &lt;a href="http://www.buenosaireslibre.org.ar/"&gt;BAL&lt;/a&gt; decidimos que para pasar el rato podíamos ir configurando los equipos wireless. Al caos general se sumo que no teníamos un router, ya que diegui (A.K.A.  dmascialino) había prestado su linksys wrt54g, pero yo no había llegado a pasar a buscarlo.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;19:00hs - Universidad de Belgrano - Hackeando los sistemas de la &lt;a href="http://www.ub.edu.ar/"&gt;UB&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Finalmente nos autorizaron a usar la pachera, pero, detalle, me trajeron una llave como la de la puerta de mi casa, que obviamente no era la que necesitábamos (Entiéndase que es un gabinete para montar unidades de rack, con un pequeño agujero por debajo, donde acometen los cables, y una puerta de vidrio, muy paqueta con cerradura tipo candado). A esta altura ya me estaba por explotar el cuerpo en mil pedazos, pero me arme de valor y le dije que si no lo habría, yo rompería la cerradura, sin ninguna culpa. Él me autorizo, así que me puse en acción. Busque mis destornilladores, y opte, como primera opción en usar la fuerza bruta. Todos sabemos que el hacking por fuerza bruta no es demasiado eficiente, así que después de varios intentos, decidí buscar algún bug en la configuración de la caja, para desactivar la protección desde adentro.&lt;br /&gt;Por suerte ese bug existia, y logre llegar con mi mano, atravez del agujero de acometida de cables, sorteando el haz de cables y el enlace de fibra optica (super paquete) hasta la parte trasera de la cerradura, donde comprobé, con mayor fortuna, que había un tornillo.&lt;br /&gt;Entonces con valentia, y rezando porque nadie de seguridad me viera, meti un destornillador y vulnere la maldita cerradura. A los 5 minutos llegaron con otra persona de sistemas, con otro destornillador. Por suerte el trabajo ya estaba hecho ¡y algo mejor!, la cerradura quedo desactivada para futuras convenciones.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;19:00hs Universidad de Belgrano - Esperando la Carroza.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Despues de configurar junto a gacq (de &lt;a href="http://www.buenosaireslibre.org.ar/"&gt;BAL&lt;/a&gt;) los access point, (unos aparatos muy lindos &lt;a href="http://www.ubnt.com/products/bullet.php"&gt;que pueden ver aca&lt;/a&gt;)  nos quedamos esperando que peter (tambien de BAL) cayera con el linksys WRT54GL, con &lt;a href="http://www.dd-wrt.com/dd-wrtv3/index.php"&gt;dd-wrt&lt;/a&gt;, que se encargaría del routeo. Por suerte todo funcionó correctamente, pero nos enteramos de algo muy gracioso: 2 horas antes, los muchachos de Fibertel, dejaron sin televisión a toda la &lt;a href="http://www.ub.edu.ar/"&gt;UB&lt;/a&gt; (¿¿quién necesita tele en una universidad??)&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;21:00hs Casa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Estoy reventado, me voy a dormir sin saber lo que me espera mañana.....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-5066366883193644427?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/09/pycon-argentina-2009-dia-1-jueves-3-de.html</link><author>noreply@blogger.com (Joac)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-3496881414674429374</guid><pubDate>Fri, 28 Aug 2009 21:34:00 +0000</pubDate><atom:updated>2009-09-04T22:44:12.370-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">blogger</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">programacion</category><title>Agregando coloreado de sintaxis en blogspot</title><description>Luego de escribir el post anterior me encontré con la necesidad de agregar coloreado de sintaxis y números de linea al código fuente Python.&lt;br /&gt;Probe varias posibilidades como &lt;a href="http://www.simplebits.com/cgi-bin/simplecode.pl?mode=process"&gt;simplecode&lt;/a&gt; (es para codigo html, y no pone numeros de linea) pero ninguno me maravillo. En el canal de Chat de &lt;a href="http://www.blogger.com/post-create.g?blogID=5309403273623549307"&gt; PyAr&lt;/a&gt; (#pyar en freenode) me pasaron el link a un &lt;a href="http://www.webresourcesdepot.com/11-syntax-highlighters-to-beautify-code-presentation/"&gt;post en webresourcesdepot.com&lt;/a&gt; donde sugiere 11 opciones para resaltar la sintaxis. La primera opcion es usar Geshi (el que usan en wikipedia) pero no es facil de integrar en blogger.&lt;br /&gt;&lt;br /&gt;La segunda opcion es &lt;a target="_blank" href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;SyntaxHighlighter&lt;/a&gt;, desarrollado en javascript por &lt;a href="http://alexgorbatchev.com/"&gt;Alex Gorbatchev. &lt;/a&gt;&lt;br /&gt;Su integracion en blogger es muy sencilla y la explicare a continuación:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nos logeamos en nuestra cuenta de blogspot y vamos, dentro de la pestaña "Diseño" a la opción "Edicion HTML". El documento en cuestion es el "esqueleto" de nuestro blog.&lt;/li&gt;&lt;li&gt;Lo recomendable en este paso es guardar la plantilla en nuestra pc, para tener un backup, en caso de cometamos algun error en la edición&lt;/li&gt;&lt;li&gt;Buscamos la etiqueta &amp;lt/head&amp;gt y a continacion pegamos lo siguiente&lt;/li&gt;&lt;br /&gt;&lt;pre class="brush:html"&gt;&lt;br /&gt;&amp;lt;link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"&amp;gt;&lt;br /&gt;&amp;lt;link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css"&amp;gt;&lt;br /&gt;&amp;lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;!-- add brushes here --&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;script type="'text/javascript'"&amp;gt;&amp;lt;br /&amp;gt;  SyntaxHighlighter.config.bloggerMode = true;&amp;lt;br /&amp;gt;  SyntaxHighlighter.all();&amp;lt;br /&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Despues del comentario donde dice "add brushes here" pegamos las llamadas a los lenguajes que queremos tener habilitados para colorear (conviene poner los menos posibles, para no ralentizar la carga de las paginas)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre class="brush:html"&gt;&lt;br /&gt;&amp;lt;!--Colorea AS3--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Bash--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea CSharp--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Cpp--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Css--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Delphi--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Diff--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Groovy--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea JScript--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Java--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea JavaFX--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Perl--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Php--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Plain--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea PowerShell--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Python--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Ruby--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Scala--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Sql--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Vb--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!--Colorea Xml--&amp;gt;&lt;br /&gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para utilizarlo usamos:&lt;br /&gt;&lt;pre class="brush:html"&gt;&lt;br /&gt;&amp;lt;pre class="brush:lenguaje"&amp;gt;&lt;br /&gt;&lt;br /&gt;Ponemos nuestro codigo aqui&lt;br /&gt;&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Donde "lenguaje" es el alias del lenguaje que estamos usando &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes"&gt;aqui esta la lista completa de alias&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nota: si queremos pegar codigo html hay que codificarlo primero con &lt;a href="http://www.simplebits.com/cgi-bin/simplecode.pl?mode=process"&gt;simplecode&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-3496881414674429374?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/08/agregando-coloreado-de-sintaxis-en.html</link><author>noreply@blogger.com (Joac)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-7863763473777452806</guid><pubDate>Thu, 27 Aug 2009 02:15:00 +0000</pubDate><atom:updated>2009-08-28T22:25:23.045-03:00</atom:updated><title>Stallman en Argentina</title><description>El día martes 25 de agosto, participe de la conferencia de Richard Stallman, lider de la Fundacion del Software Libre (FSF, por sus siglas en ingles). Mas allá de la emoción de ver en vivo a una de las personalidades mas influyentes en la cultura libre, la conferencia fue clara, amena y divertida. &lt;br /&gt;&lt;br /&gt;He aquí la evidencia:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2585/3864055983_5860edd345.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px; height: 333px;" src="http://farm3.static.flickr.com/2585/3864055983_5860edd345.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-7863763473777452806?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/08/stallman-en-argentina.html</link><author>noreply@blogger.com (Joac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2585/3864055983_5860edd345_t.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-2727927720384470710</guid><pubDate>Fri, 21 Aug 2009 00:34:00 +0000</pubDate><atom:updated>2009-08-27T20:58:02.460-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Buscando con Google desde Python (2.6) Parte 1</title><description>Empezé a investigar, para un nuevo proyecto, como utilizar la &lt;a href="http://code.google.com/intl/es-AR/apis/ajaxsearch/" target="_blank"&gt;API AJAX de Google para Busquedas&lt;/a&gt; en conjunto con &lt;a href="http://www.python.org/" target="_blank"&gt;Python&lt;/a&gt;, lenguaje que se encargara del procesamiento en el lado del servidor y generara la pagina con los resultados.&lt;br /&gt;&lt;br /&gt;Me encontré con el blog de &lt;a href="http://dcortesi.com/2008/05/28/google-ajax-search-api-example-python-code/" target="_blank"&gt;Damon Cortesi&lt;/a&gt; que contiene un ejemplo de uso, que utiliza &lt;a href="http://code.google.com/p/simplejson/"&gt;simplejson&lt;/a&gt;, incorporado en la biblioteca estandar a partir de Python 2.6.&lt;br /&gt;&lt;br /&gt;Nuestro uso del api se limita a construir un URL que incluya los terminos a buscar y las restricciones de la misma.&lt;br /&gt;La URL base es &lt;a target="_blank" href="http://ajax.googleapis.com/ajax/services/search/images?v=1.0&amp;amp;q=Google"&gt;http://ajax.googleapis.com/ajax/services/search/images&lt;/a&gt; , a la que tendremos que agregar el termino a buscar, la version del protocolo, la cantidad de resultados devueltos&lt;br /&gt;&lt;pre class="brush:python"&gt;&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;#!/usr/bin/python&lt;br /&gt;&lt;br /&gt;import urllib&lt;br /&gt;import json&lt;br /&gt;# vamos a crear la consulta&lt;br /&gt;query = urllib.urlencode({'q'   : 'flores',   #cadena a buscar&lt;br /&gt;                          'v'   : '1.0',      #version del protocolo&lt;br /&gt;                          'rsz' : 'large'})   # estableces que se devuelvan 8 resultados por consulta&lt;br /&gt;#completamos el url&lt;br /&gt;url = 'http://ajax.googleapis.com/ajax/services/search/images?%s' \&lt;br /&gt;  % (query)&lt;br /&gt;#solicitamos el url&lt;br /&gt;resultados = urllib.urlopen(url).read()&lt;br /&gt;#interpretamos el objeto json. json.loads() nos devuelve un diccionario&lt;br /&gt;json = json.loads(resultados)&lt;br /&gt;#creamos un diccionario con los datos que nos interesan&lt;br /&gt;resultados = json['responseData']['results']&lt;br /&gt;#los  imprimimos!&lt;br /&gt;for i in resultados:&lt;br /&gt;  print i['title'] + ": " + i['url']&lt;br /&gt;  &lt;br /&gt;"""Salida:&lt;br /&gt;flores089.gif: http://i121.photobucket.com/albums/o207/bicfomh/rec/flores/flores089.gif&lt;br /&gt;ashley-flores.jpg: http://www.hoax-slayer.com/images/ashley-flores.jpg&lt;br /&gt;z-flores.gif: http://www.zwani.com/graphics/portuguese/flores/images/z-flores.gif&lt;br /&gt;Flor_289035504_017_flores.jpg: http://images.recados.net/img/recados/Flor_289035504_017_flores.jpg&lt;br /&gt;z-flores1.gif: http://images.zwani.com/graphics/portuguese/flores/images/z-flores1.gif&lt;br /&gt;z-flores3.gif: http://www.zwani.com/graphics/portuguese/flores/images/z-flores3.gif&lt;br /&gt;z-flores10.gif: http://www.recados.com/graficos/flores/images/z-flores10.gif&lt;br /&gt;RanchodeLasFlores3.jpg: http://www.herecomestheguide.com/images/location/RanchodeLasFlores/RanchodeLasFlores3.jpg&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Durante esta semana voy a seguir investigando, y voy a pasar de urllib a urllib2, que es mas eficiente(segun lo que lei)&lt;br /&gt;&lt;br /&gt;Si quieren saber mas sobre la api AJAX lo pueden encontrar en:&lt;br /&gt;&lt;a href="http://code.google.com/intl/es/apis/ajaxsearch/documentation/reference.html#_intro_fonje"&gt;http://code.google.com/intl/es/apis/ajaxsearch/documentation/reference.html#_intro_fonje&lt;/a&gt;&lt;br /&gt;Hasta la proxima!&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-2727927720384470710?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/08/buscando-con-google-desde-python-26.html</link><author>noreply@blogger.com (Joac)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-1110070898836367456</guid><pubDate>Mon, 22 Jun 2009 23:11:00 +0000</pubDate><atom:updated>2012-01-24T17:29:56.452-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">escritos</category><title>A veces escribo</title><description>A veces escribo para dejar la rabia por fuera de mi cuerpo, por exorcizar mis miedos.&lt;br /&gt;
En este momento estoy pasando por un momento de estancamiento profesional y personal. No me atrae ninguna carrera, estoy dejando mi segunda carrera. Eso me abre grandes interrogantes.&lt;br /&gt;
¿Cual es el camino para realizarse? ¿Como detecta uno cual es la carrera mas indicada? ¿Soy un reverendo imbécil?¿Que somos?&lt;br /&gt;
&lt;br /&gt;
Un agravante.&lt;br /&gt;
&lt;br /&gt;
Me gustan demasiadas cosas.&lt;br /&gt;
&lt;br /&gt;
Me disperso fácil.&lt;br /&gt;
&lt;br /&gt;
Deje mi ganas guardadas en algun lado y no las encuentro.&lt;br /&gt;
&lt;br /&gt;
Cuando uno conoce un poco de todo es mas dificil....&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-1110070898836367456?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/06/veces-escribo.html</link><author>noreply@blogger.com (Joac)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-1473216385168938634</guid><pubDate>Mon, 04 May 2009 17:48:00 +0000</pubDate><atom:updated>2009-05-04T15:17:45.754-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OPC</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">windows</category><title>Instalando Open OPC en Python 2.6</title><description>Despues de volverme loco con dos interpretes de python instalados (el 2.5 y el 2.6) decidi desinstalar el mas viejo, que solo tenia para poder usar la aplicación &lt;a href="http://openopc.sourceforge.net/"&gt;OpenOPC&lt;/a&gt;[1].&lt;br /&gt;&lt;br /&gt;No fue muy complicado migrarla. Los Pasos estan Abajo&lt;br /&gt;-Instalar &lt;a href="http://sourceforge.net/projects/pyro/"&gt;Pyro&lt;/a&gt;[2]&lt;br /&gt;-Instalar &lt;a href="http://sourceforge.net/projects/pywin32/"&gt;PyWin&lt;/a&gt;[3]&lt;br /&gt;-Instalar &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=199423&amp;amp;package_id=236604"&gt;OpenOPC&lt;/a&gt;&lt;br /&gt;Va a decirnos que no puede instalar las librerias de desarrollo porque no encuentra el python.&lt;br /&gt;Le damos ok y seguimos el proceso.&lt;br /&gt;Cuando Termina vamos a la carpeta donde esta instalado el OpenOPC (Por Defecto esta en C:\OpenOPC) luego a "\src" y copiamos los cuatro archivos a la carpeta '\Lib\site-packages' de nuestro Python 2.6(Por defecto es C:\Python26\Lib\site-packages)&lt;br /&gt;Y voala!!&lt;br /&gt;ya funciona....&lt;br /&gt;&lt;br /&gt;Igualmente le escribi un correo al mantenedor, para que lo upgradiemos!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1]OpenOPC for Python is a free, open source OPC (OLE for Process Control)&lt;br /&gt;[2]Python Extensions for Windows&lt;br /&gt;[3]Python Remote Objects&lt;br /&gt;&lt;h1&gt;&lt;a href="http://sourceforge.net/projects/pyro/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-1473216385168938634?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/05/instalando-open-opc-en-python-26.html</link><author>noreply@blogger.com (Joac)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5309403273623549307.post-6968293285526106508</guid><pubDate>Mon, 27 Apr 2009 11:40:00 +0000</pubDate><atom:updated>2009-04-27T15:09:33.550-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">proyectos</category><category domain="http://www.blogger.com/atom/ns#">micros</category><category domain="http://www.blogger.com/atom/ns#">python</category><title>Cambios en el Blog</title><description>Bienvenidos lectores casuales de este Blog.&lt;br /&gt;Mediante este comunicado extraordinario les informo que el perfil pseudopoetico de este blog será modificado abruptamente, para convertirse en un blog dedicado a proyectos relacionados con microcontroladores, python, linux, matematicas, fisica y alguna que otra receta de cocina.&lt;br /&gt;&lt;br /&gt;Cualquier sugerencia o pedido pueden realizarlo a traves de los comentarios.&lt;br /&gt;&lt;br /&gt;Como Topico para abrir esta nueva etapa voy a esbozar un proyecto proximo a ser comenzado:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;El "Brazo Modelador 3D"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Consiste de un brazo articulado en dos puntos, con 6 grados de libertad en total, que va a permitir tomar coordenadas tridimensionales, para luego procesarlas en blender (preferentemente).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Su aplicación es principalmente para artistas 3D que quieran tener una forma sencilla y DIY[1] de construirse un escaner 3d&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Materiales a Utilizar:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;- 6 Encoders de mouse de bola (se necesitan 3 mouses completos)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;- 1 Microcontrolador y su periferia (La interfaz deberia ser preferentemente USB)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;- Imaginación y material espacial[2] (Cantidad Suficiente)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Implementación del driver:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;La idea es usar algo como pyserial[3] pero USB para poder comunicarse con el microprocesador. EL formato del mensaje del micro seria "E,x,y,z"&lt;e&gt;&lt;x&gt;&lt;y&gt;&lt;z&gt; &lt;e&gt;&lt;x&gt;&lt;y&gt;&lt;z&gt;&lt;e&gt;&lt;x&gt;&lt;y&gt;&lt;z&gt; donde E seria el estado del micro (cosas como 'Iniciando', 'Esperando Punto', 'Lectura OK' etc...) y 'x', 'y', 'z' son las coordenadas del punto tomado. El driver Devuelve una Repetición de los datos leídos, si son iguales se pone la salida a 0 y sigue, sino, reenvía los datos. Después se formatea para poder abrirlo con Blender[4] ( Debo buscar la documentación)&lt;/z&gt;&lt;/y&gt;&lt;/x&gt;&lt;/e&gt;&lt;/z&gt;&lt;/y&gt;&lt;/x&gt;&lt;/e&gt;&lt;/z&gt;&lt;/y&gt;&lt;/x&gt;&lt;/e&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Como funciones adicionales se puede mover la ubicación del origen de coordenadas para superficies complejas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;TO DO:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-Buscar documentación de el hardware a  utilizar.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-Diseño mecánico preciso del dispositivo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-Programa del micro.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-Programa Driver en Python.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-Documentación de Blender.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;En la próxima entrega un plano esquemático y links a documentación.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Enjoy!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;--&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Referencias&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[1]&lt;a href="http://es.wikipedia.org/wiki/DIY"&gt;http://es.wikipedia.org/wiki/DIY&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[2]En mi Colegio Industrial la llamabamos asi a todo lo que "Caida del Cielo" lease Chatarra o Similar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[3]&lt;a href="http://pyserial.wiki.sourceforge.net/pySerial"&gt;http://pyserial.wiki.sourceforge.net/pySerial&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[4]&lt;a href="http://www.blender.org/"&gt;http://www.blender.org/&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"&gt;Contenido bajo licencia Creative Commons by-nc-sa&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5309403273623549307-6968293285526106508?l=www.joaclandia.com.ar' alt='' /&gt;&lt;/div&gt;</description><link>http://www.joaclandia.com.ar/2009/04/cambios-en-el-blog.html</link><author>noreply@blogger.com (Joac)</author><thr:total>1</thr:total></item></channel></rss>

