<?xml-stylesheet type="text/xsl" href="http://ajayu.memi.umss.edu.bo/rho/weblog/rss/rssstyles.xsl"?>
<rss version='2.0'   xmlns:dc='http://purl.org/dc/elements/1.1/'>
    <channel xml:base='http://ajayu.memi.umss.edu.bo/rho/weblog/'>
        <title><![CDATA[Rho : Weblog]]></title>
        <description><![CDATA[El weblog para Rho, alojado en Ajayu.]]></description>
        <generator>Elgg</generator>
        <link>http://ajayu.memi.umss.edu.bo/rho/weblog/</link>        
        <item>
            <title><![CDATA[¿cuántos usuarios -en bolivia- estan en facebook?]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/cuantos-usuarios-bolivia-estan-facebook</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/cuantos-usuarios-bolivia-estan-facebook</guid>
            <pubDate>Sun, 27 Jul 2008 20:55:46 GMT</pubDate>
		<dc:subject><![CDATA[facebook]]></dc:subject>
		<dc:subject><![CDATA[usuarios]]></dc:subject>
            <description><![CDATA[Aproximado:<br />
<ul>
	<li>Colombia - 2,695,720</li>
	<li>Chile - 2,449,880</li>
	<li>Venezuela - 1,071,760</li>
	<li>Argentina - 508,600</li>
	<li>Peru - 167,940</li>
	<li>Brasil - 131,580</li>
	<li>
	<h1 style="inline">Bolivia - 125,660</h1></li>
	<li>Ecuador - 94,220</li>
	<li>Uruguay - 52,760</li>
	<li>Paraguay - 8,740</li>
</ul>
<em>
(Fuente: facebook)</em><br />
<p>
Interesante. Sin duda, orkut es más popular en brasil.
</p>
<p>
Argentina no tiene tantos como esperaba, pero sin duda los argentinos son muy activos en internet, existen infinidad de comunidades, foros, etc. (ver Taringa xD.. o psicofxp) 
</p>
<p>
Bolivia... nuestra querida bolivia, a pesar de tener menor población, y más aún, menor penetración de internet, no sale mal parada. 
</p>
<p>
PD: me acabo de enterar que el lenguaje más hablado -por cantidad de personas- en sudamérica es... el portugués. <em>(Fuente: Wikipedia) 
</em>
</p>
<h5>Actualización</h5>
<p>
Para el 2006, la cantidad de usuarios de internet bolivianos fue 580,000.  ¿ahora cuantos serán? ¿1 millón?
</p>
<p>
Si fuesen un millón, entonces el 10% de los bolivianos internautas estarían en facebook... lo cuál me parece una cifra grande, considerando que para el 2006 existían  más de 8 millones de argentinos con internet.
</p>
<p>
A continuación la tabla completa, donde bolivia sólo supera a paraguay en cuanto a cantidad de usuarios de internet.
</p>
<table border="0"  cellspacing="0"  cellpadding="4"  class="data-table">
	<tbody>
		<tr>
			<th>País</th>
			<th>Población</th>
			<th>Usuarios</th>
			<th>Año del dato</th>
			<th>% población</th>
		</tr>
		<tr>
			<th>Chile</th>
			<td align="right">16,284,741</td>
			<td align="right">4,156,000</td>
			<td align="right">2006</td>
			<td align="right">25.52%</td>
		</tr>
		<tr>
			<th>Brasil</th>
			<td align="right">190,010,647</td>
			<td align="right">42,600,000</td>
			<td align="right">2006</td>
			<td align="right">22.42%</td>
		</tr>
		<tr>
			<th>Uruguay</th>
			<td align="right">3,460,607</td>
			<td align="right">756,000</td>
			<td align="right">2006</td>
			<td align="right">21.85%</td>
		</tr>
		<tr>
			<th>Perú</th>
			<td align="right">28,674,757</td>
			<td align="right">6,100,000</td>
			<td align="right">2006</td>
			<td align="right">21.27%</td>
		</tr>
		<tr>
			<th>Argentina</th>
			<td align="right">40,301,927</td>
			<td align="right">8,184,000</td>
			<td align="right">2006</td>
			<td align="right">20.31%</td>
		</tr>
		<tr>
			<th>Venezuela</th>
			<td align="right">26,023,528</td>
			<td align="right">4,140,000</td>
			<td align="right">2006</td>
			<td align="right">15.91%</td>
		</tr>
		<tr>
			<th>Colombia</th>
			<td align="right">44,379,598</td>
			<td align="right">6,705,000</td>
			<td align="right">2006</td>
			<td align="right">15.11%</td>
		</tr>
		<tr>
			<th>Ecuador</th>
			<td align="right">13,755,680</td>
			<td align="right">1,549,000</td>
			<td align="right">2006</td>
			<td align="right">11.26%</td>
		</tr>
		<tr>
			<th>Bolivia</th>
			<td align="right">9,119,152</td>
			<td align="right">580,000</td>
			<td align="right">2006</td>
			<td align="right">6.36%</td>
		</tr>
		<tr>
			<th>Paraguay</th>
			<td align="right">6,669,086</td>
			<td align="right">260,000</td>
			<td align="right">2006</td>
			<td align="right">3.90%</td>
		</tr>
	</tbody>
</table>
<p>
<em>(Fuente: CIA - The World Factbook)</em>
</p>
<h4>Segunda actualización <br />
</h4>
<p>
Replanteando la pregunta.
</p>
<h5>¿cuál es el porcentaje de usuarios de facebook  respecto usuarios de internet por país? </h5>
<ul>
	<li>Chile  58.95% </li>
	<li>Colombia 40.20% </li>
	<li>Venezuela 25.88%</li>
	<li>
	<h1 style="inline">Bolivia 21.66%</h1></li>
	<li>Uruguay 6.98%</li>
	<li>Argentina 6.22%</li>
	<li>Ecuador 6.08%</li>
	<li>Paraguay 3.36%</li>
	<li>Peru 2.75%</li>
	<li>Brasil 0.31%</li>
</ul>
<p>
Existe un error de apreciación, los datos de facebook son actuales, y los de usuarios de internet del 2006, lo cuál puede llevar a conclusiones incorrectas. Seguro me harían repetir la clase de estadística <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cry.gif"  border="0"  alt="Cry"  title="Cry" /> ... pero sirven para el sensacionalismo. <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif"  border="0"  alt="Cool"  title="Cool" />
</p>
<p>
Si la tendencia sigue igual, entonces,<strong> ¿se podría decir que facebook es dominante en bolivia? </strong>
</p>
<p>
Y quedan más preguntas en el tintero.
</p>
<p>
<strong>¿cuántos usuarios bolivianos de facebook lo visitan regularmente?</strong>
</p>
<p>
<strong>¿otras redes -como hi5- tendrán más usuarios bolivianos? </strong>
</p>
<p>
(tengo un par más... pero me las reservo para mi <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif"  border="0"  alt="Tongue out"  title="Tongue out" />) 
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Video - Microkernel mkx86]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/video-microkernel-mkx86</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/video-microkernel-mkx86</guid>
            <pubDate>Sun, 25 May 2008 23:02:30 GMT</pubDate>
		<dc:subject><![CDATA[microkernel]]></dc:subject>
		<dc:subject><![CDATA[video]]></dc:subject>
		<dc:subject><![CDATA[mkx86]]></dc:subject>
            <description><![CDATA[<div align="center">
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/6p-Uo4JiSZU"></param><param name="wmode" value="transparent"></param><embed class="VideoPlayback" type="application/x-shockwave-flash" src="http://www.youtube.com/v/6p-Uo4JiSZU" width="425" height="350"/></object>
</div>
<div align="center">
 
</div>
<ul>
	<li><a href="http://softwarelibre.org.bo/mkx86/weblog/1914.html">Características del sistema mkx86</a> </li>
	<li><a href="http://softwarelibre.org.bo/rolando/weblog/1958.html">Compilando mkx86 en Ubuntu amd64 (x86_64)</a> </li>
</ul>]]></description>
        </item>
                
        <item>
            <title><![CDATA[PHPDocumentor for vim]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/phpdocumentor-for-vim</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/phpdocumentor-for-vim</guid>
            <pubDate>Sat, 24 May 2008 16:13:04 GMT</pubDate>
		<dc:subject><![CDATA[phpdocumentor]]></dc:subject>
		<dc:subject><![CDATA[vim]]></dc:subject>
            <description><![CDATA[<p>
Este es un script que utilizo para ayudarme en la documentación de código php. Con un simple Control+P inserta los valores más comunes en la clase, función o variable.
</p>
<p>
<a href="http://www.vim.org/scripts/script.php?script_id=1355">phpDocumentor for vim</a>  
</p>
<p>
Vaya que es necesario tener código bien documentado, así los demás puedan seguir la evolución del código.  ¿Ya dije que uso vim?
</p>
<p>
¿creen que vim es para masoquistas? Pues no, tiene todo lo necesario para lo que necesito: syntax highlighter, code snippets, autocomplete, search/replace, record actions, class browser, window split, etc. Y más todavía con los scripts disponibles en vim.org
</p>
<br />
<p>
<a href="http://www.vim.org/scripts/script.php?script_id=1355"><br />
</a>
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[¿qué esta pasando en cochabamba?]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/que-esta-pasando-en-cochabamba</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/que-esta-pasando-en-cochabamba</guid>
            <pubDate>Thu, 22 May 2008 20:28:07 GMT</pubDate>
		<dc:subject><![CDATA[real-world]]></dc:subject>
            <description><![CDATA[<a href="http://ajayu.memi.umss.edu.bo/marcecham/weblog/where-you-find-the-time-to-spend-online#cmt9918">HappyFace</a> pone un link a <a href="http://www.opinion.com.bo/Portal.html?CodNot=25607&amp;CodSec=18">testimonios de presencia pandillas</a>, que respondí a manera de comentario pero mejor lo pongo acá:<br />
<blockquote>
	<p>
	<span class="Texto01"><span class="Texto01">A mi amigo le invitaron a entrar a Escas y a MKS, ellos son tranquilos, sólo pelean.<br />
	</span></span>
	</p>
</blockquote>
<blockquote>
	<span class="Texto01"><span class="Texto01">He entrado porque es mejor estar de su lado, que contra ellos. La pandilla me da protección....</span></span>
</blockquote>
<blockquote>
	<span class="Texto01"><span class="Texto01">Mi hijo está en una escuela donde predomina el inglés y se venía solo.... </span></span><span class="Texto01"><span class="Texto01"> Lo peor es que estos
	pandilleros son hijos de familias adineradas, no sé qué está pasando en
	Cochabamba, pero estoy asustada. Ahora vamos a recoger a mi hijo.</span></span>
</blockquote>
<p>
Yo creo que lo malo esta en que somos una sociedad que es buenísima
para hacerse la vista gorda. Ejemplos: maltrato infantil, violencia de
género, familias disfuncionales, etc. Cosas que se sabemos que esta mal, pero que las toleramos.  
</p>
<p>
Nos conformamos con tener nuestro
carnaval, nuestro primer viernes, nuestro misa chico, nuestro bautizo,
fiestita del santo, fiesta del barrio, etc. 
</p>
<p>
No digo que este mal la
diversión ni esparcimiento, sino que siempre se prefiere el cuetillo a
otras cosas más importantes. Si hay paro, crisis nacional... pero
llega una fiesta "grande", entonces cuarto intermedio.  
</p>
<p>
Yo creo que parte mucho de los padres, pero muchas veces no se puede juzgar. 
</p>
<p>
Quiero contar mi levemente mi caso, yo vengo de padres separados desde que era bebe.
He vivido con ambos varios años, en Santa Cruz, Tarija, Sucre, Beni,
Cochabamba, Potosi.
</p>
<p>
Estudie dos años en potosi, y el primer año conoci a chicos que no
eran tan buenas influencias -aunque siempre he sido un cachón y
rebelde-, pero estaban involucrados con "grupos" así, hasta quería
empezar uno... eran de: "¿te quieres dar? Ok, vos treas a tus cuates,
yo a mis cuates, y así nos damos". Un tiempo un cuate tenía una
"mariposa" -esa navaja de tres-, y "practicabamos" eso de hacerle girar
en una mano y etc.
</p>
<p>
Luego en cochabamba, cerca nuestro colegio había un billar, y lo
frecuentabamos a la salida, o en las chachadas. Se conocía harta gente,
pero tambien algunos involucrados en "esos grupos". Eran chicos con
plata, con auto ya (hace unos 8 años). Y si, una parte tenía sus padres
en el norte y tambien algunso se habían criado allá. Entre fiestas,
salidas, farras, una y otra cosa uno se va involucrando sin querer...
</p>
<p>
Como el año pasado, sali con los cuates de un cuate de cole, uno de
ellos había venido del norte con sus viejos, estaba aca, era de dinero
tener, de brocas tener, de tener cuates "conocidos" en el ambiente.
Siempre en peleas, mano rota, broncas, etc.
</p>
<p>
Pero lo último que supe es que se suicido... 
</p>
<p>
Lo que quiero explicar, es que una persona si no encuentra el
<strong>espacio para desarrollarse de buena manera</strong>, ni recibe orientación, no
es difícil caer en malos rumbos. 
</p>
<p>
No es tan fácil decir: <strong>"esos changos
son malos, son menos, son una lacra, por qué no se dedican a mejores
cosas"</strong>.  
</p>
<p>
<strong>Todos ellos son producto de la sociedad, nuestra sociedad.</strong> 
</p>
<p>
Sinceramente no creo que una sociedad pueda cambiar, a menos que haya
un evento extraordinario como una guerra similar a japón o alemania.
</p>
<p>
Mientras tanto, podemos atenuar nuestro entorno enseñando con el
ejemplo, que al final son influencias.
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Zend_Db_Table: $table-&gt;count()]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/zend_db_table-table-count</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/zend_db_table-table-count</guid>
            <pubDate>Tue, 20 May 2008 22:08:24 GMT</pubDate>
		<dc:subject><![CDATA[1 2 3]]></dc:subject>
		<dc:subject><![CDATA[count]]></dc:subject>
		<dc:subject><![CDATA[php]]></dc:subject>
		<dc:subject><![CDATA[zend]]></dc:subject>
            <description><![CDATA[<p>
Ultimamente estoy usando Zend (framework php), yo ya más acostumbrado a django estaba buscando algo como 
</p>
<p>
<code class="python"> 
    count = Comment.objects.filter(owner=1).count()
&#160;
&#160;</code> 
</p>
<p>
Pero en Zend la opción que encontre fue:
</p>
<p>
<code class="php"> 
    $table = new Comments;
&#160;
    $select = $table-&gt;select()-&gt;where('owner = ?', 1);
&#160;
    $comments =  $table-&gt;fetchAll($select);
&#160;
    $count = $comments-&gt;count();
&#160;
...tedioso!!!
&#160;
e ineficiente, por que primero saca todos los resultados de la db, y
&#160;
recién retorna la cantidad. En cambio todos sabemos que un SELECT
&#160;
COUNT(*) es mucho más rápido, especialmente con tablas indexadas.
&#160;
Entonces,
&#160;
todos mis modelos heredan de Core_Db_Table que esta a su vez hereda de
&#160;
Zend_Db_Table, añado un método para realizar mi querido SELECT COUNT(*)
&#160;
[code=php] 
&#160;
      class Core_Db_Table extends Zend_Db_Table {
&#160;
       // ...
&#160;
        public function count(Zend_Db_Select $select) {
&#160;
           $select = $select-&gt;from($this-&gt;info("name"), array("count" =&gt; "COUNT(*)"));
&#160;
           return $this-&gt;getAdapter()-&gt;fetchOne($select-&gt;__toString());
&#160;
        }
&#160;
    } 
&#160;
&#160;</code> 
</p>
<p>
 Listo, ahora ya puedo hacer cosas más decentes:
</p>
<p>
<code class="php"> 
    $table = new Comments;
&#160;
    $select = $table-&gt;select()-&gt;where("owner = ?", 1);
&#160;
    $count = $table-&gt;count($select);
&#160;
&#160;</code> 
</p>
<p>
No es tan hermoso como django.... pero algo es algo <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif"  border="0"  alt="Laughing"  title="Laughing" />. De ahí es un paso para permitir $table-&gt;count()  o $table-&gt;count("owner = ?", 1) 
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[MKX86: Microkernel made in bolivia]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/mkx86-microkernel-made-in-bolivia</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/mkx86-microkernel-made-in-bolivia</guid>
            <pubDate>Tue, 20 May 2008 18:44:03 GMT</pubDate>
		<dc:subject><![CDATA[bolivia]]></dc:subject>
		<dc:subject><![CDATA[torvalds boliviano]]></dc:subject>
		<dc:subject><![CDATA[microkernel]]></dc:subject>
            <description><![CDATA[<p>
Autor: <a href="http://softwarelibre.org.bo/vesmar">Vesmar Camara </a> 
</p>
<p>
Info:  <a href="http://softwarelibre.org.bo/mkx86/"  target="_blank">http://softwarelibre.org.bo/mkx86/</a>
</p>
<h4>
== Introducción ==<br />
</h4>
<p>
El sistema mkx86 es el "Microkernel para la arquitectura x86".<br />
<br />
Es una implementación académica que ejemplifica los conceptos de<br />
diseño de microkernels como núcleos de SO.<br />
<br />
Bueno, resumiendo... es un sistema operativo que viene desarrollandose<br />
desde el 2001 y finalmente se hace publico.<br />
<br />
Nota: <a href="http://softwarelibre.org.bo/vesmar/weblog/1884.html"  target="_blank">http://softwarelibre.org.bo/vesmar/weblog/1884.html</a><br />
Descarga: <a href="http://sourceforge.net/projects/mkx86"  target="_blank">http://sourceforge.net/projects/mkx86</a>
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[El chiste del animal que grazna, camina y actua como un pato...]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/chiste-animal-grazna-camina-actua-como-pato</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/chiste-animal-grazna-camina-actua-como-pato</guid>
            <pubDate>Wed, 14 May 2008 19:16:43 GMT</pubDate>
		<dc:subject><![CDATA[cuac]]></dc:subject>
		<dc:subject><![CDATA[duck typing]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
		<dc:subject><![CDATA[ducktyping]]></dc:subject>
            <description><![CDATA[<p>
¿escucharon ese chiste?
</p>
<blockquote>
	<p>
	"Si camina como pato, hae quack como pato... es un pato"
	</p>
</blockquote>
<p>
Se refiere al famoso <a href="http://en.wikipedia.org/wiki/Duck_typing">Duck Typing</a>, según la wikipedia:
</p>
<blockquote>
	<p>
	In <a href="http://en.wikipedia.org/wiki/Computer_programming"  title="Computer programming">computer programming</a>, <strong>duck typing</strong> is a style of <a href="http://en.wikipedia.org/wiki/Dynamic_typing"  title="Dynamic typing">dynamic typing</a> in which an object's <em>current set of <a href="http://en.wikipedia.org/wiki/Method_%28computer_science%29"  title="Method (computer science)">methods</a> and properties</em> determines the valid semantics, rather than its inheritance from a particular class.  
	</p>
</blockquote>
<p>
Hace años que lo leí la primera vez... pero recién lo entendí hace unas semanas en una presentación de Ernesto, dondé simplemente repitió lo mismo -más o menos palabras-.
</p>
<p>
Siempre me pareció chistoso el duck typing, pero ahora que lo entendió me da más risa <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif"  border="0"  alt="Laughing"  title="Laughing" /><br />
<br />
Practicamente es suficiente añadir los métodos necesarios a una clase/objeto para que soporte cierto comportamiento. En python todo puede parecer un pato... <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif"  border="0"  alt="Tongue out"  title="Tongue out" /> <strike>seguramente en cualquier lenguaje dinámico</strike>
</p>
<p>
Por ejemplo, la método para order algún lugar
</p>
<p>
<code class="python">&#160;
def ordenar(lugar):
&#160;
    """
&#160;
    Mi algoritmo para order cosas
&#160;
    """
&#160;
    print '[+] ordenando %s' % lugar
&#160;
    for cosa in lugar:  # lugar puede ser una lista
&#160;
        print 'encontrado: %s' % cosa
&#160;
        if cosa.sirve:
&#160;
            if cosa.esta_sucio:
&#160;
                print 'tlimpiando: %s' % cosa
&#160;
                limpiar(cosa)
&#160;
            if cosa.es_importante:
&#160;
                if cosa.tiene_lugar:
&#160;
                    print 'tponiendo en su lugar: %s' % cosa
&#160;
                    poner_en_su_lugar(cosa)
&#160;
                else:
&#160;
                    print 'tguardando: %s' % cosa
&#160;
                    guardar(cosa)
&#160;
            else:
&#160;
                print 'ta algún rincón: %s' % cosa
&#160;
                poner_en_un_rincon(cosa)
&#160;
        else:
&#160;
            print 'tal basurero:', cosa
&#160;
            al_basurero(cosa)
&#160;
&#160;</code>
</p>
<p>
luego tengo objetos que pueden estar en algun lugar:<br />
 
</p>
<p>
<code> <br />class MiLibro(Libro):<br />&#160;<br />    titulo = 'Duck Typing Redux'<br />&#160;<br />    autor = 'Rho'<br />&#160;<br />    # tambien puedo ser cadena<br />&#160;<br />    def __str__(self):<br />&#160;<br />        return 'Libro "%s"' % self.titulo<br />&#160;<br />class Donald(Pato):<br />&#160;<br />    nombre = 'Donald'<br />&#160;<br />    def __str__(self):<br />&#160;<br />        return 'Pato Donald'<br />&#160;<br />class Rho(Persona):<br />&#160;<br />    nombre = 'Rolando'<br />&#160;<br />    # print yo<br />&#160;<br />    def __str__(self):<br />&#160;<br />        return '%s' % self.nombre<br />&#160;<br />&#160;</code> 
</p>
<p>
Ahora podemos tener nuestros objetos:
</p>
<p>
<code class="python">&#160;
libro = MiLibro()
&#160;
pato = Donald()
&#160;
rho = Rho()
&#160;
&#160;</code> 
</p>
<p>
Pero ninguno es una "cosa" ordenable, según los métodos/propiedades que <strong>necesita</strong> la función ordenar.
</p>
<p>
¿qué hacemos?
</p>
<p>
Pues enseñamos a nuestros objectos a ser "ordenables", o a decir <strong>¡cuac! </strong>
</p>
<p>
<code class="python">&#160;
# enseñando a ser "pato"
&#160;
libro.sirve = True
&#160;
libro.esta_sucio = True
&#160;
libro.es_importante = True
&#160;
libro.tiene_lugar = True
&#160;
# pato patito
&#160;
pato.sirve = True
&#160;
pato.esta_sucio = True
&#160;
pato.es_importante = False
&#160;
# self
&#160;
rho.sirve = False
&#160;
&#160;</code> 
</p>
<p>
Pero necesito un lugar que contenga las cosas, podría ser una simple lista pero quiero definir mi sala:
</p>
<p>
<code class="python"> 
 class MiSala(Sala):
&#160;
    lugar = 'casa'
&#160;
    cosas = []     # lista de cosas
&#160;
    def __iter__(self):
&#160;
        # nuestra sala es "iterable" (generator rulz!)
&#160;
 
&#160;
        return (cosa for cosa in self.cosas)
&#160;
    def __str__(self):
&#160;
        return 'sala en %s' % self.lugar
&#160;
&#160;</code> 
</p>
<p>
Luego añado mis "cosas" a mi sala iterable.. <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif"  border="0"  alt="Tongue out"  title="Tongue out" />
</p>
<p>
y al final lanzo ejecuto ordenar() sobre mi sala 
</p>
<p>
<code class="python">&#160;
# mi sala con cosas
&#160;
misala = MiSala()
&#160;
misala.cosas.append(libro)
&#160;
misala.cosas.append(pato)
&#160;
misala.cosas.append(rho)
&#160;
# ordenar todo
&#160;
ordenar(misala)
&#160;
&#160;</code>
</p>
<p>
Este es el resultado:
</p>
<p>
<code class="sh">&#160;<br />rolando@rhotergeist:~$ python ducktyping.py <br />&#160;<br />[+] ordenando sala en casa<br />&#160;<br />encontrado: Libro "Duck Typing Redux"<br />&#160;<br />    limpiando: Libro "Duck Typing Redux"<br />&#160;<br />    poniendo en su lugar: Libro "Duck Typing Redux"<br />&#160;<br />encontrado: Pato Donald<br />&#160;<br />    limpiando: Pato Donald<br />&#160;<br />    a algún rincón: Pato Donald<br />&#160;<br />encontrado: Rolando<br />&#160;<br />    al basurero: Rolando<br />&#160;<br />&#160;</code>
</p>
<p>
¿fácil, no?
</p>
<p>
Moraleja: para pasar por pato sólo tienes que decir cuac y caminar como pato <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif"  border="0"  alt="Laughing"  title="Laughing" /> 
</p>
<h5>¡mamá, ya entendí el chiste! </h5>]]></description>
        </item>
                
        <item>
            <title><![CDATA[0wn1ng the w3b with Firefox and Firebug: Insertando javascript]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/0wn1ng-the-w3b-with-firefox-and-firebug-insertando-javascript</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/0wn1ng-the-w3b-with-firefox-and-firebug-insertando-javascript</guid>
            <pubDate>Fri, 09 May 2008 16:59:03 GMT</pubDate>
		<dc:subject><![CDATA[javascript]]></dc:subject>
		<dc:subject><![CDATA[jquery]]></dc:subject>
            <description><![CDATA[<p>
Este es un tip que encontre hace unos días para jQuery, pero una pequeña modificación y sirve para insertar cualquier javascript mediante su url en cualquier sitio web. 
</p>
<ul>
	<li><a href="void(function(js){ if(!js) return;var s=document.createElement('script');s.src=js;document.getElementsByTagName('head')[0].appendChild(s); }(prompt('Enter the url of the script to insert:')))">Insertar JS</a></li>
	<li><a href="void(function(js){ if(!js) return;var s=document.createElement('script');s.src=js;document.getElementsByTagName('head')[0].appendChild(s); }((typeof jQuery == 'undefined' ? 'http://jqueryjs.googlecode.com/files/jquery-1.2.3.min.js' : false)))">Insertar jQuery</a> <br />
	</li>
</ul>
<p>
Esto es más útil con firefox y la extensión firebug; con su consola javascript se puede hacer directamente prototipos rápidos sin necesidad de guardar/crear un html/js.
</p>
<p>
PD: Añadan los enlaces como marcador, o simplemente arrastrenlos a su barra de marcadores 
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Creando "comandos" en django]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/creando-comandos-en-django</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/creando-comandos-en-django</guid>
            <pubDate>Wed, 07 May 2008 21:37:08 GMT</pubDate>
		<dc:subject><![CDATA[comandos]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
		<dc:subject><![CDATA[no-ooxml]]></dc:subject>
		<dc:subject><![CDATA[django]]></dc:subject>
            <description><![CDATA[<p>
En un principio, para crear scripts que automatizen cierto proceso escribía un script en python que empezaba por:
</p>
<p>
<code class="python">&#160;
from django.conf improt settings
&#160;
os.environ["DJANGO_SETTINGS_MODULE"] = "proj.settings"
&#160;
from app1.models import *
&#160;
# ....
&#160;
&#160;</code>
</p>
<p>
Pero me entro la curiosidad por hacerlo de "mejor" manera. Entonces la opción que encontre es extender los comandos de administración (management), esos que estan disponibles mediante el script management.py:
</p>
<p>
<code class="sh">&#160;<br />rolando@rhotergeist:~/proj$ ./manage.py help<br />&#160;<br />Type 'manage.py help &lt;subcommand&gt;' for help on a specific subcommand.<br />&#160;<br />Available subcommands:<br />&#160;<br />adminindex<br />&#160;<br />createcachetable<br />&#160;<br />dbshell<br />&#160;<br />diffsettings<br />&#160;<br />dumpdata<br />&#160;<br />flush<br />&#160;<br />...<br />&#160;<br />&#160;</code> 
</p>
<p>
A pesar de no estar documentado <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cry.gif"  border="0"  alt="Cry"  title="Cry" /> , no es complicado crear "nuevos comandos". Estos son los primeros pasos para crear un comando básico:
</p>
<p>
1. elegir la aplicación (app en jerga django) y nombre del comando: <strong>sayhello</strong> 
</p>
<p>
2.  crear el "package" adecuado de comandos dentro nuestro <em>app</em>
</p>
<p>
<code class="sh">&#160;<br />$ mkdir -p app/management/commands<br />&#160;<br />$ touch app/management/__init__.py<br />&#160;<br />$ touch app/management/commands/__init__.py<br />&#160;<br />&#160;</code>
</p>
<p>
Los <strong>__init__.py</strong> son importantes para poder hacer <strong>from app.management.comands import *,</strong> sino no "reconocerá" el módulo|package.
</p>
<p>
Luego creamos el archivo de nuestro comando <strong>sayhello</strong> en <strong>app/management/commands/sayhello.py</strong>:
</p>
<p>
<code class="python">&#160;
# sayhello.py
&#160;
from django.core.management import BaseCommand
&#160;
class Command(BaseCommand):
&#160;
    help = "This command says hello"
&#160;
    def handle(self, *args, **kwds):
&#160;
        print "hello"
&#160;
&#160;</code>
</p>
<p>
Eso es suficiente <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif"  border="0"  alt="Cool"  title="Cool" />
</p>
<p>
<code class="sh">&#160;<br />rolando@rhotergeist:~/proj$ ./manage.py sayhello<br />&#160;<br />hello<br />&#160;<br />&#160;</code> 
</p>
<p>
De ahí se puede interactuar con los models, parsear información e insertar en la db, etc. <em>python style!</em>
</p>
<p>
Tambien xisten más clases de comandos, ej: LabelCommand, NoArgsCommand, etc. dependiendo el tipo de comando que queramos hacer. 
</p>
<p>
<em>import this</em> 
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Simon Willison: Unobtrusive JavaScript with jQuery]]></title>
            <link>http://ajayu.memi.umss.edu.bo/rho/weblog/simon-willison-unobtrusive-javascript-with-jquery</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/rho/weblog/simon-willison-unobtrusive-javascript-with-jquery</guid>
            <pubDate>Wed, 07 May 2008 21:33:26 GMT</pubDate>
		<dc:subject><![CDATA[javascript]]></dc:subject>
		<dc:subject><![CDATA[slide]]></dc:subject>
		<dc:subject><![CDATA[uonbtrusive]]></dc:subject>
		<dc:subject><![CDATA[jquery]]></dc:subject>
            <description><![CDATA[<p>
Presentada el día de ayer:
</p>
<p align="center">
 <object width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=unobtrusivejquery-1210086958470711-9"></param><param name="wmode" value="transparent"></param><embed class="VideoPlayback" type="application/x-shockwave-flash" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=unobtrusivejquery-1210086958470711-9" width="425" height="355"/></object>
</p>
<p>
<a href="http://simonwillison.net/static/2008/xtech/ ">http://simonwillison.net/static/2008/xtech/ </a>
</p>]]></description>
        </item>
        
    </channel>
</rss>