<?xml 
version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel xml:lang="es">
	<title>NqN/webs ::: Dise&#241;o, Desarrollo y Hosting de sitios web</title>
	<link>http://www.nqnwebs.com/</link>
	
	<language>es</language>
	<generator>SPIP - www.spip.net</generator>




<item xml:lang="es">
		<title>Modelos de negocio FLOSS, la universidad, el sector privado y el Estado</title>
		<link>http://nqnwebs.com/blog/article/modelos-de-negocio-floss-la</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/modelos-de-negocio-floss-la</guid>
		<dc:date>2010-08-26T20:19:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Empresa</dc:subject>

		<description>Distintos laboratorios de investigaci&#243;n y vinculaci&#243;n de mi facultad del &#225;rea qu&#237;mica y del &#225;rea computaci&#243;n, junto a algunas empresas de software locales (VATES y otra) y del sector petroqu&#237;mico (Petroqu&#237;mica Rio Tercero) est&#225;n conformando un &quot;Consorcio Asociativo P&#250;blico Privado (CAPP)&quot; en el marco del programa FSTICS del Ministerio de Ciencia y Tecnolog&#237;a de la Naci&#243;n, con el fin de desarrollar una plataforma de desarrollo I+D de software para la industria. Para que contextualicemos de (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/empresa" rel="tag"&gt;Empresa&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Distintos laboratorios de investigaci&#243;n y vinculaci&#243;n de mi facultad del &#225;rea qu&#237;mica y del &#225;rea computaci&#243;n,
junto a algunas empresas de software locales (&lt;a href='http://www.vates.com/' class='spip_out' rel='external'&gt;VATES&lt;/a&gt; y otra) y del sector petroqu&#237;mico (&lt;a href='http://www.pr3.com.ar/' class='spip_out' rel='external'&gt;Petroqu&#237;mica Rio Tercero&lt;/a&gt;)
est&#225;n conformando un &lt;i&gt;&quot;Consorcio Asociativo P&#250;blico Privado (CAPP)&quot;&lt;/i&gt; en el marco del programa &lt;a href='http://www.agencia.gov.ar/spip.php?page=convocatorias_articulo&amp;mostrar=1104' class='spip_out' rel='external'&gt;FSTICS&lt;/a&gt;
del Ministerio de Ciencia y Tecnolog&#237;a de la Naci&#243;n, con el fin de desarrollar una plataforma de desarrollo I+D de software para la industria.
Para que contextualicemos de que hablamos: el programa estipula un aporte estatal de hasta el 60% para un proyecto de hasta 38 millones de pesos.&lt;/p&gt; &lt;p&gt;Mi participaci&#243;n es min&#250;scula y aleda&#241;a: el impulsor de este proyecto es el Dr. Mart&#237;n Cismondi,
director de mi proyecto integrador que se trata de un prototipo del (tipo de) software que se desarrollar&#237;a desde esta plataforma.&lt;/p&gt; &lt;p&gt;Cismondi es Phd en ingenieria quimica y sus investigaciones en el campo del equilibrio de fases
tienen mucha aplicaci&#243;n en la industria. En particular en el petr&#243;leo, donde el impacto que puede tener mejorar el rendimiento de
un proceso (por ejemplo de destilaci&#243;n) se mide en millones de morlacos.&lt;/p&gt; &lt;p&gt;Ayer tuve oportunidad de participar de una reuni&#243;n, sirviendo de una especie de &quot;traductor&quot; entre los quimicos
y los inform&#225;ticos.&lt;/p&gt; &lt;p&gt;Si bien, repito, no tengo voz (mucho menos voto) en nada de lo que all&#237; se resuelva, tengo inter&#233;s en investigar y transmitir de la manera m&#225;s clara posible otros modelos de negocio que, por lo que presenci&#233; ayer, est&#225;n lejos de ser tenidos en cuenta. Me refiero, claro, a que, sobre todo (no muy incre&#237;blemente) desde la facultad, no se ve m&#225;s all&#225; de un modelo de negocio de software cerrado de venta por licencia.&lt;/p&gt; &lt;p&gt;Apunto algunas cuestiones sin orden:&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://nqnwebs.com/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; El nicho de mercado es bastante acotado: industrias de gran escala mayormente transnacionales. Separadamente tiene mucha utilidad y aceptaci&#243;n en centros de investigaci&#243;n acad&#233;micos.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://nqnwebs.com/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Desde el grupo conformado, no existe conocimiento cabal de las soluciones de software espec&#237;ficas que ese mercado, el industrial, demanda. S&#237; se sabe que el -*expertise-* y el -*know how-* que el grupo de investigaci&#243;n de Cismondi tiene son el valor diferencial.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://nqnwebs.com/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; No existe hoy peso espec&#237;fico suficiente, desde el punto de vista del producto existente, para competir con las empresas de software proveedoras de este nicho, sobre todo en los mercados de USA y Europa. Por ejemplo &lt;a href='http://www.aspentech.com/' class='spip_out' rel='external'&gt;Aspen Tech&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://nqnwebs.com/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Es dif&#237;cil, a priori inimaginable, desarrollar un producto gen&#233;rico que satisfaga necesidades de diversos clientes potenciales. La especifidad de los problemas de cada industria se supone grande.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://nqnwebs.com/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Preguntas para hacerse &#191;cuantos clientes reales existen en el mercado? &#191;qu&#233; &quot;llegada&quot; se tiene con ellos? &#191;que posibilidades reales de venderle un software cerrado existen, teniendo en cuenta que no se sabe cabalmente cuales son sus demandas? Supongiendo que se conoce un problema espec&#237;fico &#191;cuanto sale desarrollar una soluci&#243;n ? &#191;se puede correr el riesgo de desarrollarla sin tener asegurada su comercializaci&#243;n?&lt;/p&gt; &lt;p&gt;Soy un novato en el &#225;rea negocios con FLOSS (y en negocios, a secas, tambi&#233;n) pero lo que se me ocurre viene m&#225;s o menos por este lado:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Generar una estrategia para una fuerte inserci&#243;n en el &#225;mbito acad&#233;mico internacional&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Para esto es indispensable la libre disponibilidad del c&#243;digo fuente de manera que los m&#233;todos num&#233;rico-cient&#237;ficos sean transparentes, reproducibles y verificables. Ver &lt;a href='http://www.openscience.org/blog/?p=312' class='spip_out' rel='external'&gt;este post&lt;/a&gt; en OpenScience Project. &lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Para evitar practicas predatorias sobre este trabajo, que alguien cierre y comercialice, hay que orientar a una licencia FLOSS v&#237;rica, donde los trabajos derivados mantengan la condicion libre. &lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; De esta manera se apunta a constituir una comunidad tecnologico-cient&#237;fica donde el nucleo de desarrollo se mantendr&#225; en los autores originales pero permitiendo y aprovechando c&#243;digo y feedback de los usuarios. &lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; En esta etapa el beneficio no es a priori monetario y en cambio s&#237; en cuanto a calidad del software, inserci&#243;n y difusi&#243;n del/los producto/s, fidelizaci&#243;n de usuarios y prestigio del equipo de desarrollo. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; La repercusi&#243;n de la masa cr&#237;tica generada abre la puerta al mercado por las siguientes razones:&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Muchos de los acad&#233;micos que utilicen y formen parte de un &quot;comunidad&quot; alrededor del sofware FLOSS desde las universidades o llevaran su conocimiento a la industria. &lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Tambien los investigadores dentro de la industria tienen v&#237;nculos fluidos con la comunidad cient&#237;fica, sobre todo en estas &#225;reas de investigaci&#243;n de vanguardia de directa aplicabilidad. &lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; El mercado a priori imposible de acceder se puede hacer m&#225;s permeable: los responsables de investigaci&#243;n demandan la utilizaci&#243;n del software en los procesos de la industria o sus labores particulares. &lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Si el costo para la industria es nulo o bajo y de calidad, hay muchas probabilidades de que sea aceptado. &lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; La ventaja diferencial del cliente es evitar el &lt;a href='http://en.wikipedia.org/wiki/Vendor_lock-in' class='spip_out' rel='external'&gt;vendor lock-in&lt;/a&gt;. Sin embargo, la ventaja competitiva del equipo de desarrollo original, por su -*know how-* adquirido es insuperable para cualquier potencial competidor. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Insertado en el mercado se generan posibilidades de lucro en dos &#225;reas&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Customizaci&#243;n y extensi&#243;n del software bajo requerimientos espec&#237;ficos. Entra en el marco de &lt;a href='http://es.wikipedia.org/wiki/SaaS' class='spip_glossaire' rel='external'&gt;SaaS&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Capacitaci&#243;n y entrenamiento a equipos t&#233;cnicos de la industria y la academia, tanto en el &#225;rea de aplicaci&#243;n (quimicos) como de desarrollodo de software. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Much&#237;simo material para leer sobre el t&#243;pico hay en &lt;a href='http://www.opensourcestrategies.org/' class='spip_out' rel='external'&gt;este sitio&lt;/a&gt;. Yo empezar&#233; en cuanto tenga tiempo. Invito tambi&#233;n, de manera enf&#225;tica, a leer &lt;a href='http://gpec2010.googlecode.com/svn/trunk/docs/_build/html/contexto_de_trabajo.html#software-libre' class='spip_out' rel='external'&gt;la justificaci&#243;n&lt;/a&gt; de que el software desarrollado en el marco de mi proyecto integrador lo libero como Software Libre&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;M&#225;s all&#225; del negocio&lt;/h3&gt;
&lt;p&gt;Adem&#225;s de lo expuesto se me cruzan cuestionamientos sobre el rol de la universidad y el estado en este escenario.&lt;/p&gt; &lt;p&gt;Como ciudadano y futuro profesional festejo la inversi&#243;n que en los &#250;ltimos a&#241;os el Estado ha realizado para ciencia y tecnolog&#237;a. Apostar a generar valor en &#225;reas tan estrategicas como el software es necesario, y plantearlo desde el punto de vista de fortalecer
la industria nacional (pymes) es entonces doblemente valioso.&lt;/p&gt; &lt;p&gt;Pero...&lt;/p&gt; &lt;p&gt;&#191;son los laboratorios de investigaci&#243;n de las universidades actores que deben generar recursos por s&#237; mismos? &#191;A quien pertenece el conocimiento que se produce en la universidad? &#191;A qui&#233;n debe pertenecer? &#191;La universidad actual responde a un proyecto de pa&#237;s ? &#191;Existe tal cosa? &#191;No debiera el Estado, formar parte societaria en los consorcios para los cuales est&#225; aportando grandes recursos, adem&#225;s de ser agente regulador? &#191;qui&#233;n y c&#243;mo regula la relaci&#243;n e intereses existentes entre los grupos de investigaci&#243;n y el sector privado? &#191;no se puede prestar a malversaciones y abuso del &lt;i&gt;sello&lt;/i&gt; de la universidad?&lt;/p&gt; &lt;p&gt;Me despert&#233; pregunt&#243;n (como nac&#237;).&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="es">
		<title>Bonito, feito pero efectivo</title>
		<link>http://nqnwebs.com/blog/article/bonito-feito-pero-efectivo</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/bonito-feito-pero-efectivo</guid>
		<dc:date>2010-08-19T18:07:16Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Python</dc:subject>

		<description>Hace 5 a&#241;os que laburo en una organizaci&#243;n de trabajo barrial. Como no recibimos aportes privados y rara vez del Estado (a veces presentamos proyectos a programas) siempre andamos buscando formas de sostener econ&#243;micamente nuestras actividades. Un recurso, no por viejo en desuso, es el del &quot;bono contribuci&#243;n&quot;, que muchas veces incluye un sorteo con alg&#250;n premio. Adem&#225;s de la algo ingrata tarea de venderlos, hay que hacerlos. Alguno tiene uno de esos sellos numeradores (un mecanimismo que (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/python" rel="tag"&gt;Python&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Hace 5 a&#241;os que laburo en &lt;a href='http://www.agrupacionmazamorra.com.ar/' class='spip_out' rel='external'&gt;una organizaci&#243;n&lt;/a&gt; de trabajo barrial. Como no recibimos aportes privados y rara vez del Estado (a veces presentamos proyectos a programas) siempre andamos buscando formas de sostener econ&#243;micamente nuestras actividades.&lt;/p&gt; &lt;p&gt;Un recurso, no por viejo en desuso, es el del &lt;i&gt;&quot;bono contribuci&#243;n&quot;&lt;/i&gt;, que muchas veces incluye un sorteo con alg&#250;n premio.&lt;/p&gt; &lt;p&gt;Adem&#225;s de la algo ingrata tarea de venderlos, hay que hacerlos. Alguno tiene uno de esos sellos numeradores (un mecanimismo que va incrementando el contador autom&#225;ticamente ) pero igual cualquiera se vuelve un bur&#243;crata (m&#225;s cuando hay que sellar dos veces - el bono y tal&#243;n -).&lt;/p&gt; &lt;p&gt;As&#237; que ayer, en 20 minutos hice &lt;i&gt;Bonito&lt;/i&gt;, un programa feo pero efectivo.&lt;/p&gt; &lt;p&gt;Primero hice una plantilla en &lt;a href='http://inkscape.org/' class='spip_out' rel='external'&gt;Inkscape&lt;/a&gt; donde entran 6 de estos bonitos en un A4.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_107 spip_documents spip_documents_center'&gt;
&lt;img src='http://nqnwebs.com/local/cache-vignettes/L500xH117/bonito2-ccc74.png' width='500' height='117' alt=&quot;&quot; style='height:117px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Como el SVG es XML que es TEXTO, la marca XXXX se puede reemplazar f&#225;cilmente por el n&#250;mero que corresponda. Yo quer&#237;a que me quedaran as&#237;:&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_109 spip_documents spip_documents_center'&gt;
&lt;img src='http://nqnwebs.com/local/cache-vignettes/L400xH436/bonito-8305a.png' width='400' height='436' alt=&quot;&quot; style='height:436px;width:400px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;De esta manera, simplemente tengo que meter 6 broches a la izquierda y recortar, ya quedan ordenados para repartir entre los compa&#241;eros y compa&#241;eras.&lt;/p&gt; &lt;p&gt;Para algunas cosas, Inkscape se puede usar por l&#237;nea de comandos, por ejemplo para convertir entre los formatos que soporta. As&#237; paso el SVG con los n&#250;meros reemplazados a un PDF. Despu&#233;s concateno todos los PDF de una tanda (por ejemplo agrupados de a 10, como en el dibujo) con Ghostscript.&lt;/p&gt; &lt;p&gt;Ac&#225; el c&#243;digo:&lt;/p&gt; &lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_python code&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# bonito.py&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# Copyright 2010 Martin Gait&#225;n &lt;gaitan(at)gmail.com&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# This program is free software; you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# it under the terms of the GNU General Public License as published by&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# the Free Software Foundation; either version 2 of the License, or&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# (at your option) any later version.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# This program is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# GNU General Public License for more details.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# You should have received a copy of the GNU General Public License&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# along with this program; if not, write to the Free Software&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# MA 02110-1301, USA.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;, &lt;span style=&quot;color: #dc143c;&quot;&gt;os&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;subprocess&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; markToNum&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;content, num, mark=&lt;span style=&quot;color: #483d8b;&quot;&gt;'XXXX'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; num_as_string = &lt;span style=&quot;color: #483d8b;&quot;&gt;'0'&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;4&lt;/span&gt; - &lt;span style=&quot;color: #008000;&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;num&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color: #008000;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;num&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;return&lt;/span&gt; content.&lt;span style=&quot;color: black;&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;mark, num_as_string, &lt;span style=&quot;color: #ff4500;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; main&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&lt;&lt;/span&gt;= &lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;Modo de uso:&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; + &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot; archivo.svg&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;else&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;with&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;input&lt;/span&gt;:&lt;br /&gt; svg_content = &lt;span style=&quot;color: #008000;&quot;&gt;input&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; index_from = &lt;span style=&quot;color: #008000;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;raw_input&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'Desde [0]'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; number_by_page = &lt;span style=&quot;color: #008000;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;raw_input&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'Num por pagina [6]'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #ff4500;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; grouped_by = &lt;span style=&quot;color: #008000;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;raw_input&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'agrupar de a [20]'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #ff4500;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; planchas = &lt;span style=&quot;color: #008000;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;raw_input&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'Planchas [1]'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; plancha &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;planchas&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; counter_from = index_from + plancha&lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt;number_by_page&lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt;grouped_by&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; pagina &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;grouped_by&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; page_content = svg_content&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; bono &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;number_by_page&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; num_remplazo = counter_from + bono&lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt;grouped_by + pagina&lt;br /&gt; page_content = markToNum&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;page_content, num_remplazo&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;with&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'temp.svg'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'w'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;as&lt;/span&gt; output_svg:&lt;br /&gt; &lt;br /&gt; output_svg.&lt;span style=&quot;color: black;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;page_content&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;subprocess&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;inkscape&quot;&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;-f&quot;&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'temp.svg'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'--export-dpi=150'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'-A'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'temp%s.pdf'&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;4&lt;/span&gt; - &lt;span style=&quot;color: #008000;&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;pagina&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color: #008000;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;pagina&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; generator = &lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'gs'&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'-q'&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'-sPAPERSIZE=a4'&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'-dNOPAUSE'&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'-dBATCH'&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'-sDEVICE=pdfwrite'&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'-sOutputFile=%s-%i-%i.pdf'&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;:-&lt;span style=&quot;color: #ff4500;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;, counter_from, num_remplazo&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; + \&lt;br /&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'temp%s.pdf'&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;4&lt;/span&gt; - &lt;span style=&quot;color: #008000;&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;pagina&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; + \&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;pagina&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; pagina &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;grouped_by&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;subprocess&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;generator&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; temp &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;.&lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'temp*'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;os&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;temp&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;if&lt;/span&gt; __name__ == &lt;span style=&quot;color: #483d8b;&quot;&gt;'__main__'&lt;/span&gt;:&lt;br /&gt; main&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Nada que no se pueda hacer con Bash, cierto, pero mucho m&#225;s f&#225;cil de escribir (y de leer).&lt;/p&gt; &lt;p&gt;De paso, ac&#225; est&#225; la plantilla, por si a alguno le sirve.&lt;/p&gt; &lt;dl class='spip_document_110 spip_documents spip_documents_center'&gt;
&lt;dt&gt;&lt;a href=&quot;http://nqnwebs.com/IMG/svg/bono_contribucion.svg&quot; title='Scalable Vector Graphics - 149.3 KB' type=&quot;image/svg+xml&quot;&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L52xH52/svg-d987f.png' width='52' height='52' alt='Scalable Vector Graphics - 149.3 KB' style='height:52px;width:52px;' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="es">
		<title>Django Dash: hac&#233; una aplicaci&#243;n web en 2 dias</title>
		<link>http://nqnwebs.com/blog/article/django-dash-hace-una-aplicacion</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/django-dash-hace-una-aplicacion</guid>
		<dc:date>2010-08-06T14:38:38Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Python</dc:subject>

		<description>Leemos en la web The Django Dash is a chance for Django enthusiasts to flex their coding skills a little and put a fine point on &#8220;perfectionists with deadlines&#8221; by giving you a REAL deadline. 48 hours from start to stop to produce the best app you can and have a little fun in the process. Suena a PyWeek [1], pero en 2 dias. &#191;Ser&#225; indicio de lo r&#225;pido que se programa con Django? Atenti que la inscripci&#243;n cierra el 8 de agosto (ma&#241;ana). &#161;A ver esos (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/python" rel="tag"&gt;Python&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Leemos en &lt;a href='http://djangodash.com/' class='spip_out' rel='external'&gt;la web&lt;/a&gt;&lt;/p&gt; &lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;
The Django Dash is a chance for Django enthusiasts to flex their coding skills a little and put a fine point on &#8220;perfectionists with deadlines&#8221; by giving you a REAL deadline. 48 hours from start to stop to produce the best app you can and have a little fun in the process.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Suena a &lt;a href='http://pyweek.org/' class='spip_out' rel='external'&gt;PyWeek&lt;/a&gt; [&lt;a href='#nb1' class='spip_note' rel='footnote' title='De paso, ya est&#225; abierta la inscripci&#243;n para la PyWeek 11' id='nh1'&gt;1&lt;/a&gt;], pero en 2 dias. &#191;Ser&#225; indicio de lo r&#225;pido que se programa con Django?&lt;/p&gt; &lt;p&gt;Atenti que la inscripci&#243;n &lt;strong&gt;cierra el 8 de agosto&lt;/strong&gt; (ma&#241;ana).&lt;/p&gt; &lt;p&gt;&#161;A ver esos perfeccionistas!&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p&gt;[&lt;a href='#nh1' id='nb1' class='spip_note' title='Notas 1' rev='footnote'&gt;1&lt;/a&gt;] De paso, ya est&#225; abierta la inscripci&#243;n para la &lt;a href='http://pyweek.org/11/' class='spip_out' rel='external'&gt;PyWeek 11&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="es">
		<title>Usando PubSub para un panel de mensajes</title>
		<link>http://nqnwebs.com/blog/article/usando-pubsub-para-una-panel-de</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/usando-pubsub-para-una-panel-de</guid>
		<dc:date>2010-08-03T19:56:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Python</dc:subject>

		<description>La aplicaci&#243;n que estoy desarrollando, GPEC, genera muchos mensajes que pueden ser &#250;tiles para el usuario. En softwares con GUI's sencillas suele utilizarse la barra de estado para mostrar mensajes contextuales e informaci&#243;n sobre el resultado de una acci&#243;n. Pero si estos mensajes son muchos y de diversa &#237;ndole, este espacio puede no bastar, sobre todo por la volatilidad de la informaci&#243;n que la barra de estado muestra. Una soluci&#243;n posible es usar un panel con un ListCtrl de manera (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/python" rel="tag"&gt;Python&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;La aplicaci&#243;n que estoy desarrollando, &lt;a href='http://code.google.com/p/gpec2010' class='spip_out' rel='external'&gt;GPEC&lt;/a&gt;, genera muchos mensajes que pueden ser &#250;tiles para el usuario.&lt;/p&gt; &lt;p&gt;En softwares con &lt;i&gt;GUI's&lt;/i&gt; sencillas suele utilizarse la barra de estado para mostrar mensajes contextuales e informaci&#243;n sobre el resultado de una acci&#243;n. Pero si estos mensajes son muchos y de diversa &#237;ndole, este espacio puede no bastar, sobre todo por la volatilidad de la informaci&#243;n que la barra de estado muestra.&lt;/p&gt; &lt;p&gt;Una soluci&#243;n posible es usar un panel con un &lt;code class='spip_code' dir='ltr'&gt;ListCtrl&lt;/code&gt; de manera de poder agregar los mensajes quedando un registro completo y cronol&#243;gico; un &lt;i&gt;log&lt;/i&gt; propiamente dicho.&lt;/p&gt; &lt;dl class='spip_document_102 spip_documents spip_documents_center'&gt;
&lt;dt&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L500xH155/mayavi2_logger-3ad7a.png' width='500' height='155' alt='PNG - 27.3 KB' style='height:155px;width:500px;' /&gt;&lt;/dt&gt;
&lt;dt class='crayon document-titre-102 spip_doc_titre' style='width:350px;'&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/dt&gt;
&lt;dd class='crayon document-descriptif-102 spip_doc_descriptif' style='width:350px;'&gt;Panel de log de &lt;a href='http://code.enthought.com/projects/mayavi/#Mayavi2' class='spip_out' rel='external'&gt;Mayavi2&lt;/a&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Surge ac&#225; un detalle: si los mensajes se generan desde &quot;cualquier parte&quot; del programa, todas esas &quot;partes&quot; deber&#237;an tener referencia de la instancia del panel/widget de log.&lt;/p&gt; &lt;p&gt;Un ejemplo: todos las demostraciones de la aplicaci&#243;n de demo de &lt;a href='http://wxpython.org/' class='spip_out' rel='external'&gt;wxPython&lt;/a&gt; tienen la siguiente estructura:&lt;/p&gt; &lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_python code&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;class&lt;/span&gt; TestPanel&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;wx.&lt;span style=&quot;color: black;&quot;&gt;Panel&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, log&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;log&lt;/span&gt; = log&lt;br /&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;Panel&lt;/span&gt;.&lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, -&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; ...&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;log&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;WriteText&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;' message ... '&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Esto vuelve la aplicaci&#243;n muy acoplada: la instancia &lt;code class='spip_code' dir='ltr'&gt;log&lt;/code&gt; (que es un caja de texto en el demo) se pasea por distintos &lt;i&gt;namespaces&lt;/i&gt; para estar disponible en todos lados.&lt;/p&gt; &lt;p&gt;Denotemos la falta de flexibilidad: &#191;que pasa si queremos 'loggear' mensajes desde un objeto donde no estaba previsto? &#191;qu&#233; pasa si queremos cambiar el widget que muestra los mensajes y el m&#233;todo para anexar mensajes tiene otro nombre? &#191;y si adem&#225;s de mostrarlos, con algunos los mensajes queremos hacer alguna otra cosa (ejecutar un simple sonido de alarma, por ejemplo) ?&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;PubSub&lt;/h3&gt;
&lt;p&gt;Una manera m&#225;s elegante y eficiente es utilizar &lt;a href='http://pubsub.sourceforge.net/' class='spip_out' rel='external'&gt;PubSub&lt;/a&gt; una implentaci&#243;n en Python del paradigma de &lt;a href='http://en.wikipedia.org/wiki/Publish/subscribe' class='spip_out' rel='external'&gt;publicaci&#243;n-suscripci&#243;n&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_105 spip_documents spip_documents_center'&gt;
&lt;img src='http://nqnwebs.com/local/cache-vignettes/L500xH350/pubsub_concept-b0bf6.png' width='500' height='350' alt=&quot;&quot; style='height:350px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Su implementaci&#243;n es trivial. Incluso viene incorporado dentro de wxPython.&lt;/p&gt; &lt;p&gt;El &lt;code class='spip_code' dir='ltr'&gt;Publisher&lt;/code&gt; (generalmente importado como &lt;code class='spip_code' dir='ltr'&gt;pub&lt;/code&gt;) env&#237;a mensajes (cualquier objeto python) asociados a un t&#243;pico (una cadena)&lt;/p&gt; &lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_python code&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;from&lt;/span&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;lib&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;pubsub&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; Publisher &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;as&lt;/span&gt; pub&lt;br /&gt;
pub.&lt;span style=&quot;color: black;&quot;&gt;sendMessage&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'log'&lt;/span&gt;, &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'ok'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'Ready! You can send any message from anywhere.'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;En este ejemplo, el t&#243;pico, que eleg&#237; arbritrariamente, es 'log', y el mensaje es la tupla &lt;code class='spip_code' dir='ltr'&gt;('ok', 'Ready! You can send any message from anywhere.')&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Del otro lado del mostrador, cualquiera puede suscribirse a los mensajes con determinado t&#243;pico y asociarlos a un m&#233;todo/funci&#243;n.&lt;/p&gt; &lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_python code&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;class&lt;/span&gt; LogMessagesPanel&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;wx.&lt;span style=&quot;color: black;&quot;&gt;Panel&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, &lt;span style=&quot;color: #008000;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;Panel&lt;/span&gt;.&lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, &lt;span style=&quot;color: #008000;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; pub.&lt;span style=&quot;color: black;&quot;&gt;subscribe&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;OnAppendLog&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'log'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; OnAppendLog&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, msg&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; data = msg.&lt;span style=&quot;color: black;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&lt;&lt;/span&gt;img105|center&lt;span style=&quot;color: #66cc66;&quot;&gt;&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#do your things with the data! &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class='spip_code' dir='ltr'&gt;pub.subscribe&lt;/code&gt; &lt;i&gt;bindea&lt;/i&gt; los mensajes con t&#243;pico &lt;i&gt;'log'&lt;/i&gt; al m&#233;todo OnAppendLog pasando un objeto &lt;code class='spip_code' dir='ltr'&gt;msg&lt;/code&gt;. Nuestro mensaje real, la tupla que enviamos, est&#225; en &lt;code class='spip_code' dir='ltr'&gt;msg.data&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Nada impide que sean muchos los objetos que envien mensajes con t&#243;pico &lt;i&gt;'log'&lt;/i&gt; y muchos otros est&#233;n suscriptos a &#233;l. Y esto funciona sin importar d&#243;nde ocurra cada cosa! [&lt;a href='#nb1-1' class='spip_note' rel='footnote' title='siempre que sea una misma aplicaci&#243;n' id='nh1-1'&gt;1&lt;/a&gt;].&lt;/p&gt; &lt;p&gt;Como ejemplo completo dejo el panel log. Pod&#233;s probarlo creando otro frame independiente que envie mensajes de log.&lt;/p&gt; &lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_python code&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# Log Panel: example of PubSub implementation&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# Copyright 2010 Martin Gait&#225;n &lt;gaitan(at)gmail.com&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# This program is free software; you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# it under the terms of the GNU General Public License as published by&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# the Free Software Foundation; either version 2 of the License, or&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# (at your option) any later version.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# This program is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# GNU General Public License for more details.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# You should have received a copy of the GNU General Public License&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# along with this program; if not, write to the Free Software&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# MA 02110-1301, USA.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; wx&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;from&lt;/span&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;lib&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;pubsub&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; Publisher &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;as&lt;/span&gt; pub&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;time&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;from&lt;/span&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;lib&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;embeddedimage&lt;/span&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; PyEmbeddedImage&lt;br /&gt;
icons = &lt;span style=&quot;color: black;&quot;&gt;&#123;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&#125;&lt;/span&gt;&lt;br /&gt;
icons&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'ok'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; = PyEmbeddedImage&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAAXNSR0IArs4c6QAAAK5QTFRF&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;AAAA////2vO/+P3z+f31VJkEVJcEU5UEUpQEcc0GcMsGcMkGb8gGbcYGbcQGbMEGZLYFXKYF&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;UJAET48ETo0ETYwEasAGddALd9ANeNERetETe9IVfdIXfdMZftMbf9Mci9cwlNpAlttElttF&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;l9xHmtxLm91NnN1Pnd1Rnt5ToN9Xod9ZpuFhp+FjqOFlquJnr+RyseR0veiKwuqSy+2j4PTI&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;9vzv9/zxidYs3fPCGN7g1AAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsT&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;AAALEwEAmpwYAAAAB3RJTUUH2gcMBC0Irn+MQAAAAINJREFUGNNjYCAJ6Bui8vXkpAxQ+LJa&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;ylx6CL6utKYGJyszkGVpAuZLaahzsYH4phYKxgwMOpJqatzsID6ThbIGt5G+hKoKDweIz8Ai&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;YaGtIiOnrMIrxAwxjJlXXl1VSYlPmBlmPLOAuLIivwgzwkJzQV4xUWZkJ5mzi7CgOtqMBbcH&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;AVouCiZO5Tf/AAAAAElFTkSuQmCC&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
icons&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'error'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; = PyEmbeddedImage&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKCTIOk1O0sAAAAhpJREFUOMudk71Pk1EU&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;xn/3bQvlo76gxBpNoGibArYLxJREh466MmnSgRH+IjsydGYjspBAWEQHMJIWmmhj+LAkpC1N&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;Wyj2PcfhfUsQiRpPcnOTm/P8nuQ59xhuVA5SwDyQBsa95xKwDixlYOt6v7khfjscCi1MJpME&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;w2F8AwOoKp2zM87LZYqFAtVmM5uBxd8AOXg3nUy+HJmZ4XJ7G+f0FBwHVUUMWEN38U9NUt3d&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;5VOxuJqBVwC+rvN0Mvn6XixGe3MTbTRABFVBRUEEabboHHyjPxbDtqzoi2r1wTKsmBykhkOh&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;98/m5rhYW0OdDqqKKqh6YgXFhakxBFMpPm9sUGu1Zi1gfjKR4HJnB3UcEFABFXEP6oEUVMFx&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;uMjneTwWAZj3A+lg+D4/PnxERRkrf+dPtW/fQao1Ag8fAaT9wLjVP4iKG9jfSkRR7WB6AgDj&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;FnCV9r8A8PpUBQA/UOrUzyYUg6rDl5ERt0HEvVE3PDdVRN0gtdkCKFnA+vnJCcYeuiL/Iu46&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;iidWwRocpF2rAaxbwNL+3h6BeNwly3WRNzrtTkNQY/BHIpQODwGWrAxs1VqtbKWQp2fqqQu5&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;5op3qygYQ080RuPggHq7nc3Alg9gGVaeVyqzts8XHUgkcBoN5KJ99RMVMHaI3vgEjXKZwvHx&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;agbe3LpMdl/fwpPRUQK2jentRUVwmk069Tpfj466zou3buP/rPNPwkdmHrlYdncAAAAASUVO&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;RK5CYII=&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
icons&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'info'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; = PyEmbeddedImage&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QMCBiAyOlCc9wAAADV0RVh0Q29tbWVudAAo&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;YykgMjAwNCBKYWt1YiBTdGVpbmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACq0lE&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;QVQ4y5WSS0hUcRTGv//cO+O9OtdHJllqZlI+CEUiE8ShBiXUpKKQbGLKcGG0CBOyRcsQMapF&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;j02ii4igAgMDJcgQSXQmSkrNijSVTJ1xdJy5d6739W/loDURfqtz4Pt+nHM4BBFUXNnUTCkc&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;BiUpIISYiDHLEPq0/2Vr459edn1TVN6UwTCk72JtZVq5vQBxAg9VN+DxBVN7ej9cISbmLKV6&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;SX9X69eIAJYlb++11G/fk7ljLBBSRmd9khJaVVlF06NtJflZ6enJe1tuPXYBiF/LMGtFSdXV&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;2/Xnj5YVH8z5rKi6m7eYFQBEpyCqTg3vSmiWi+YQzXM7dSYlc3L8bScAmMIkhj1Xbi9AIKSO&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;sSxDLWbGIIRQUBiabiiUwuganOwuKswBw3Kn1nJhwKpC4wUrD1nRV1XNSDQzpguJsZxzV7Lg&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;yN+91QElkDrlEf08zyEgqVxtXYNpww0IIUTRdEiyajIMKiZYo+D1Sy5RCjErQUkbnpaGFUU3&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;qaqxFuEBiGFADM9KXl8gRpRVy4qk+jOSYzH6w/deVHQ6tyQp7m+LHsFqSfD6g4gTeLWjrVnc&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;sIKZ0QZ63gyDj2JzJ34tiwDw0yfqHye8/t7hmYUlUTZX7E+rGHKNwcph4q8bbBNCxzu7+uWZ&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;6fnstCTroWvtAzfPHM665P4yH2JYkui0Z1X7F5dy3IMjqsD6SsOrr/+DY6cbq2QqPC8rLbIU&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;HshGNM9B1XX4lkUMucbxzjWixXHS5SftNx5EBABAbV1DYohucQVkpDtOJDGEACwLdHXPBRnN&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;v6+j7c4U/qeaGrvV6bRRz2IfFWUX/T75jDqdNhrJy/6DoQLA/bsPkZ2bjempaWxaTqeNzsy+&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;MgLSEP00+sLY7AQAUFV98nqNIMQfWVhYeJ2XF/sokuk3Vkw2XnyKHQQAAAAASUVORK5CYII=&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
icons&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'warning'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; = PyEmbeddedImage&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDictt+6SdwAAAehJREFUOMuVk8FKG2EU&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;hb87mc40iTODEJlK7UZDxCCGQUqaMASCSGODdBe6ECJddOcwG/EJXBt0ZcBCwEVJVgWtr1AI&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;PoBQXAQKhRZc1EBJMX831hLItPbAvYvL4Ttnc4UIhfDIgLcAA3jdgC/jfHoUwISjeXgOcAFH&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;QHWcT4tI91KwWlhY0J6kUloKVkPw7g0wYS8NemJ3l0yzSRp0E/buBQihOAXFbLksej6Pns+T&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;LZdlCoohFPmXdqB7AsNep6M8z1Oe56lep6NOYLgD3b82CGHFhaWM74vh+ziOg+M4GL5PxvfF&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;haUQViIBJuxnwUgEAaJpWJaFZVmIppEIArJgmLA/FhDC+jSk5woFjFIJEcG2bWzbRkQwSiXm&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;CgWmIR3C+gggBDGgsXibruk6IvKngQiarpMIAhbBMKARgsDtCuHVLLReLC8bk2dnEIuhlKLf&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;7wOQTCYREbi54WptjQ/n54NLqDfgnYQQewxXT8GaPz7mYbWKUgqlFLVaDYB2u42IICL8OD3l&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;YmODLnz/DJOawGYczJlcjnilcmcUEVzXxXXdkVu8UmEmlyMOpsCmbMPXl5CaPThgol6/S/89&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;wAhARLhutbjc2uI9fJNDGD4DecD/6SfwEZT+CQ4H8GYi4i+idA3DHjR/AZfefQgctOETAAAA&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;AElFTkSuQmCC&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;class&lt;/span&gt; LogMessagesPanel&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;wx.&lt;span style=&quot;color: black;&quot;&gt;Panel&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, &lt;span style=&quot;color: #008000;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;Panel&lt;/span&gt;.&lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, &lt;span style=&quot;color: #008000;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt; = wx.&lt;span style=&quot;color: black;&quot;&gt;ListCtrl&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, -&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;, style= wx.&lt;span style=&quot;color: black;&quot;&gt;LC_REPORT&lt;/span&gt;|wx.&lt;span style=&quot;color: black;&quot;&gt;SUNKEN_BORDER&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;setupList&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; sizer = wx.&lt;span style=&quot;color: black;&quot;&gt;BoxSizer&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; sizer.&lt;span style=&quot;color: black;&quot;&gt;Add&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;, &lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;, wx.&lt;span style=&quot;color: black;&quot;&gt;EXPAND&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;SetSizerAndFit&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;sizer&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; pub.&lt;span style=&quot;color: black;&quot;&gt;subscribe&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;OnAppendLog&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'log'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; setupList&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;&quot;&quot;sets columns and append a imagelist &quot;&quot;&quot;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#setup first column (which accept icons)&lt;/span&gt;&lt;br /&gt; info = wx.&lt;span style=&quot;color: black;&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; info.&lt;span style=&quot;color: black;&quot;&gt;m_mask&lt;/span&gt; = wx.&lt;span style=&quot;color: black;&quot;&gt;LIST_MASK_TEXT&lt;/span&gt; | wx.&lt;span style=&quot;color: black;&quot;&gt;LIST_MASK_IMAGE&lt;/span&gt; | wx.&lt;span style=&quot;color: black;&quot;&gt;LIST_MASK_FORMAT&lt;/span&gt;&lt;br /&gt; info.&lt;span style=&quot;color: black;&quot;&gt;m_image&lt;/span&gt; = -&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;br /&gt; info.&lt;span style=&quot;color: black;&quot;&gt;m_format&lt;/span&gt; = &lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;&lt;br /&gt; info.&lt;span style=&quot;color: black;&quot;&gt;m_text&lt;/span&gt; = &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;Message&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;InsertColumnInfo&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;, info&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;SetColumnWidth&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #ff4500;&quot;&gt;550&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#insert second column&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;InsertColumn&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'Time'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;SetColumnWidth&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #ff4500;&quot;&gt;70&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#setup imagelist and an associated dict to map status-&gt;image_index&lt;/span&gt;&lt;br /&gt; imgList = wx.&lt;span style=&quot;color: black;&quot;&gt;ImageList&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;16&lt;/span&gt;, &lt;span style=&quot;color: #ff4500;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;icon_map&lt;/span&gt; = &lt;span style=&quot;color: black;&quot;&gt;&#123;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&#125;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; key, bitmap &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; icons.&lt;span style=&quot;color: black;&quot;&gt;iteritems&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; indx = imgList.&lt;span style=&quot;color: black;&quot;&gt;Add&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt; bitmap.&lt;span style=&quot;color: black;&quot;&gt;GetBitmap&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;icon_map&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;key&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; = indx&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;AssignImageList&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;imgList, wx.&lt;span style=&quot;color: black;&quot;&gt;IMAGE_LIST_SMALL&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; OnAppendLog&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, msg&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; ico = &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;icon_map&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;msg.&lt;span style=&quot;color: black;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt; message = msg.&lt;span style=&quot;color: black;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt; index = &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;InsertImageStringItem&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;maxint&lt;/span&gt;, message, ico&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;SetStringItem&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;index, &lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #dc143c;&quot;&gt;time&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;strftime&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'%H:%M:%S'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;EnsureVisible&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;index&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#keep scroll at bottom&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;class&lt;/span&gt; TestFrame&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;wx.&lt;span style=&quot;color: black;&quot;&gt;Frame&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, &lt;span style=&quot;color: #008000;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;Frame&lt;/span&gt;.&lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, parent, &lt;span style=&quot;color: #008000;&quot;&gt;id&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;Log Panel demo&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;log&lt;/span&gt; = LogMessagesPanel&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, -&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;SetSize&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;620&lt;/span&gt;,&lt;span style=&quot;color: #ff4500;&quot;&gt;150&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;SetMinSize&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;620&lt;/span&gt;,&lt;span style=&quot;color: #ff4500;&quot;&gt;150&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;if&lt;/span&gt; __name__ == &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:&lt;br /&gt; app = wx.&lt;span style=&quot;color: black;&quot;&gt;PySimpleApp&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; wx.&lt;span style=&quot;color: black;&quot;&gt;InitAllImageHandlers&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; main_frame = TestFrame&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;None&lt;/span&gt;, -&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; app.&lt;span style=&quot;color: black;&quot;&gt;SetTopWindow&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;main_frame&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; main_frame.&lt;span style=&quot;color: black;&quot;&gt;Show&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; pub.&lt;span style=&quot;color: black;&quot;&gt;sendMessage&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'log'&lt;/span&gt;, &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'ok'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'Ready! You can send any message from anywhere.'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; pub.&lt;span style=&quot;color: black;&quot;&gt;sendMessage&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'log'&lt;/span&gt;, &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'info'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;Just import pubsub.Publisher and send a 'log' message&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; pub.&lt;span style=&quot;color: black;&quot;&gt;sendMessage&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'log'&lt;/span&gt;, &lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'warning'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;The message data is a tuple ('icon', 'message') &quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; app.&lt;span style=&quot;color: black;&quot;&gt;MainLoop&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;div class='code_download' style='text-align: right;'&gt; &lt;a href='http://nqnwebs.com/local/cache-code/c60fad9888444257af05f0c6ae6979d4.txt' style='font-family: verdana, arial, sans; font-weight: bold; font-style: normal;'&gt;Descargar&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p&gt;[&lt;a href='#nh1-1' id='nb1-1' class='spip_note' title='Notas 1-1' rev='footnote'&gt;1&lt;/a&gt;] siempre que sea una misma aplicaci&#243;n&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://nqnwebs.com/IMG/zip/logpanel.py.zip" length="4270" type="application/zip" />
		

	</item>
<item xml:lang="es">
		<title>Mantener el scroll vertical de wx.ListCtrl abajo</title>
		<link>http://nqnwebs.com/blog/article/mantener-el-scroll-vertical-de-wx</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/mantener-el-scroll-vertical-de-wx</guid>
		<dc:date>2010-07-13T14:31:58Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Python</dc:subject>

		<description>Un t&#237;pico uso de un ListCtrl es usarlo para mostrar un Log de la aplicaci&#243;n que muestra mensajes al usuario, similar a lo que puede hacer la barra de estada, pero con la ventaja (complementaria, si se quiere), de mantener un historial de los eventos ocurridos. En tal caso, primero, hay una decisi&#243;n de dise&#241;o que hacer: &#191;los nuevos mensajes se agregan al inicio (como un blog) o al final de la lista (como los comentarios) ? No s&#233; si existe una respuesta can&#243;nica a la cuesti&#243;n, pero (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/python" rel="tag"&gt;Python&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Un t&#237;pico uso de un &lt;code class='spip_code' dir='ltr'&gt;ListCtrl&lt;/code&gt; es usarlo para mostrar un Log de la aplicaci&#243;n que muestra mensajes al usuario, similar a lo que puede hacer la barra de estada, pero con la ventaja (complementaria, si se quiere), de mantener un historial de los eventos ocurridos.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_100 spip_documents spip_documents_center'&gt;
&lt;img src='http://nqnwebs.com/local/cache-vignettes/L500xH112/log-b3171.jpg' width='500' height='112' alt=&quot;&quot; style='height:112px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;En tal caso, primero, hay una decisi&#243;n de dise&#241;o que hacer: &#191;los nuevos mensajes se agregan al inicio (como un blog) o al final de la lista (como los comentarios) ?&lt;/p&gt; &lt;p&gt;No s&#233; si existe una respuesta can&#243;nica a la cuesti&#243;n, pero infiriendo (de los pelos) el sentido de lectura occidental (de izquierda a derecha y de arriba hacia abajo) decid&#237; que &quot;un nuevo contenido&quot; debe estar abajo del anterior.&lt;/p&gt; &lt;p&gt;Eso trae aparejado un nuevo problema: si se agrega un nuevo item a ListCtrl al final y ya hay m&#225;s de los que caben en el espacio visible del control, el &#250;ltimo (el m&#225;s importante) no se ver&#225; en pantalla y el usuario deber&#237;a hacer un scroll hasta el final para verlo. Es decir, para un panel de Log, el scroll vertical siempre deber&#237;a mantenerse abajo.&lt;/p&gt; &lt;p&gt;Por suerte no hay que liarse con generar eventos programaticamente, ni manipular el scroll, ni obtener dimensiones del widget. He aqu&#237; una soluci&#243;n &lt;i&gt;&quot;fits your brain&quot;&lt;/i&gt;: el m&#233;todo &lt;a href='http://www.wxpython.org/docs/api/wx.ListCtrl-class.html' class='spip_out' rel='external'&gt;EnsureVisible(index)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Por ejemplo:&lt;/p&gt; &lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_python code&quot;&gt; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; OnAppendLog&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, msg&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt; ico = &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;icon_map&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;msg.&lt;span style=&quot;color: black;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt; message = msg.&lt;span style=&quot;color: black;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt; index = &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;InsertImageStringItem&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;maxint&lt;/span&gt;, message, ico&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;SetStringItem&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;index, &lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #dc143c;&quot;&gt;time&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;strftime&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'%H:%M:%S'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #008000;&quot;&gt;list&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;EnsureVisible&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;index&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#keep scroll at bottom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Al agregar un nuevo mensaje de log, obtenemos el &#237;ndice y wx nos asegura que la fila con ese &#237;ndice estar&#225; visible en pantalla.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="es">
		<title>Preparados, listos... en un rato</title>
		<link>http://nqnwebs.com/blog/article/preparados-listos-en-un-rato</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/preparados-listos-en-un-rato</guid>
		<dc:date>2010-07-13T13:51:43Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Python</dc:subject>

		<description>Hace aproximadamente dos meses que estoy trabajando en lo que ser&#225; mi proyecto final, para recibir el t&#237;tulo de ingeniero en computaci&#243;n. El proyecto es una aplicaci&#243;n de uso &quot;cient&#237;fico y acad&#233;mico&quot; implementada en Python que sirve para obtener diagramas de equilibro termodin&#225;mico entre fases fluidas de sistemas binarios. Toda la batahola est&#225; en este repo. En concreto, el proyecto se circunscribe a la generaci&#243;n y [an&#225;lisis sint&#225;ctico] de archivos de texto con el que la aplicaci&#243;n se (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/python" rel="tag"&gt;Python&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Hace aproximadamente dos meses que estoy trabajando en lo que ser&#225; mi proyecto final, para recibir el t&#237;tulo de &lt;a href='http://computacion.efn.uncor.edu/' class='spip_out' rel='external'&gt;ingeniero en computaci&#243;n&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;El proyecto es una aplicaci&#243;n de uso &quot;cient&#237;fico y acad&#233;mico&quot; implementada en Python que sirve para obtener diagramas de equilibro termodin&#225;mico entre fases fluidas de sistemas binarios. Toda la batahola est&#225; en &lt;a href='http://code.google.com/p/gpec2010' class='spip_out' rel='external'&gt;este repo&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;En concreto, el proyecto se circunscribe a la generaci&#243;n y [an&#225;lisis sint&#225;ctico] de archivos de texto con el que la aplicaci&#243;n se comunica con los programas que implementan los algoritmos de c&#225;lculo, que est&#225;n implementados en Fortran, y son, literalmente, unas cajas negras. [&lt;a href='#nb2-1' class='spip_note' rel='footnote' title='que no es la manera m&#225;s eficiente de interfacear Fortran y Python, lo s&#233;, (...)' id='nh2-1'&gt;1&lt;/a&gt;]. Se procesan esos archivos para obtener arrays con los que se plotean las distintas curvas.&lt;/p&gt; &lt;p&gt;Utilizo principalmente &lt;a href='http://wxpython.org/' class='spip_out' rel='external'&gt;wxPython&lt;/a&gt;, &lt;a href='http://matplotlib.sourceforge.net/' class='spip_out' rel='external'&gt;Matplotlib&lt;/a&gt; y &lt;a href='http://numpy.sourceforge.net/' class='spip_out' rel='external'&gt;Numpy&lt;/a&gt;. Vale destacar, ya que mucho de un trabajo final es documentaci&#243;n, que escribo en &lt;a href='http://docutils.sourceforge.net/rst.html' class='spip_out' rel='external'&gt;restructuredText&lt;/a&gt;, renderizando con &lt;a href='http://sphinx.pocoo.org/' class='spip_out' rel='external'&gt;Sphinx&lt;/a&gt; y el genial &lt;a href='http://code.google.com/p/rst2pdf/' class='spip_out' rel='external'&gt;rst2pdf&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Esta perorata para contar que ir&#233; apuntando en este abandonado blog (no m&#225;s que &lt;a href='http://www.textosypretextos.com.ar/' class='spip_out' rel='external'&gt;el otro&lt;/a&gt;, y en general, el resto de mi vida) algunos descubrimientos inform&#225;ticos y de otro tipo, si es que ocurren, en el desarrollo de este proyecto.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p&gt;[&lt;a href='#nh2-1' id='nb2-1' class='spip_note' title='Notas 2-1' rev='footnote'&gt;1&lt;/a&gt;] que no es la manera m&#225;s eficiente de interfacear Fortran y Python, lo s&#233;, pero las cajas negras son impenetrables&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="es">
		<title>Video SIS 771/671 en Ubuntu</title>
		<link>http://nqnwebs.com/blog/article/video-sis-771-671-en-ubuntu</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/video-sis-771-671-en-ubuntu</guid>
		<dc:date>2010-05-10T23:10:25Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Linux</dc:subject>

		<description>Esto es una ayuda memoria para mi yo dubitativo del futuro: para hacer funcionar el video de la notebook que es SiS 671/771 en Ubuntu (a partir de la versi&#243;n 9.10) instalar este paquete y este xorg.conf este xorg.conf. Para pantalla dual con LCD externo a resoluci&#243;n full 1280x1024 # /etc/X11/xorg.conf (Xorg X Window System server configuration file) # # This file was generated by fll_xorgconfig, the F.U.L.L.S.T.O.R.Y. # Xorg Configuration tool. # # Edit this file with caution, and see (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/linux" rel="tag"&gt;Linux&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Esto es una ayuda memoria para mi yo dubitativo del futuro: para hacer funcionar el video de la notebook que es &lt;strong&gt;SiS 671/771&lt;/strong&gt; en &lt;strong&gt;Ubuntu&lt;/strong&gt; (a partir de la versi&#243;n 9.10) instalar &lt;a href='http://nqnwebs.com/IMG/deb/xorg-driver-sis671_0-9_i386.deb' class='spip_in' type='application/x-debian-package'&gt;este paquete&lt;/a&gt; y &lt;strike&gt;&lt;a href='http://nqnwebs.com/IMG/bin/xorg.bin' class='spip_in' type='application/octet-stream'&gt;este xorg.conf&lt;/a&gt;&lt;/strike&gt; &lt;a href='http://nqnwebs.com/IMG/bin/xorg-2.bin' class='spip_in' type='application/octet-stream'&gt;este xorg.conf&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Para pantalla dual con LCD externo a resoluci&#243;n full 1280x1024&lt;/p&gt; &lt;form action='' method='get'&gt;&lt;div&gt;
&lt;input type='hidden' name='exec' value='' /&gt;
&lt;textarea readonly='readonly' cols='40' rows='324' class='spip_cadre' dir='ltr'&gt;# /etc/X11/xorg.conf (Xorg X Window System server configuration file) # # This file was generated by fll_xorgconfig, the F.U.L.L.S.T.O.R.Y. # Xorg Configuration tool. # # Edit this file with caution, and see the xorg.conf(5) manual page. # (Type &quot;man xorg.conf&quot; at the shell prompt.) # Section &quot;ServerLayout&quot; Identifier &quot;Xorg Configured&quot; Screen &quot;Screen 0&quot; EndSection #Section &quot;ServerFlags&quot; # Option &quot;AllowMouseOpenFail&quot; &quot;true&quot; # Option &quot;DontZap&quot; &quot;false&quot; #EndSection Section &quot;Device&quot; Identifier &quot;Device 0&quot; Driver &quot;sis671&quot; #Driver &quot;vesa&quot; BoardName &quot;Silicon Integrated Systems [SiS] 771/671 PCIE VGA Display Adapter&quot; Option &quot;EnableSisCtrl&quot; &quot;yes&quot; Option &quot;DRI&quot; &quot;off&quot; Option &quot;MergedFBAuto&quot; &quot;true&quot; Option &quot;MergedNonRectangular&quot; &quot;on&quot; Option &quot;Merged DPI&quot; &quot;100 100&quot; Option &quot;MetaModes&quot; &quot;1280x1024-1280x800 640x460-640x460 1280x800-1280x1024&quot; BusID &quot;PCI:1:0:0&quot; EndSection Section &quot;Monitor&quot; Identifier &quot;Monitor 0&quot; ModelName &quot;Default Monitor&quot; HorizSync 28-96 VertRefresh 50-75 # 640x350 @ 85.00 Hz (GTF) hsync: 31.28 kHz; pclk: 25.02 MHz Modeline &quot;640x350&quot; 25.02 640 656 720 800 350 351 354 368 -HSync +Vsync # 640x400 @ 85.00 Hz (GTF) hsync: 35.78 kHz; pclk: 29.20 MHz Modeline &quot;640x400&quot; 29.20 640 664 728 816 400 401 404 421 -HSync +Vsync # 640x480 @ 60.00 Hz (GTF) hsync: 29.82 kHz; pclk: 23.86 MHz Modeline &quot;640x480&quot; 23.86 640 656 720 800 480 481 484 497 -HSync +Vsync # 640x480 @ 72.00 Hz (GTF) hsync: 36.07 kHz; pclk: 29.43 MHz Modeline &quot;640x480&quot; 29.43 640 664 728 816 480 481 484 501 -HSync +Vsync # 640x480 @ 75.00 Hz (GTF) hsync: 37.65 kHz; pclk: 30.72 MHz Modeline &quot;640x480&quot; 30.72 640 664 728 816 480 481 484 502 -HSync +Vsync # 640x480 @ 85.00 Hz (GTF) hsync: 42.92 kHz; pclk: 35.71 MHz Modeline &quot;640x480&quot; 35.71 640 672 736 832 480 481 484 505 -HSync +Vsync # 640x480 @ 100.00 Hz (GTF) hsync: 50.90 kHz; pclk: 43.16 MHz Modeline &quot;640x480&quot; 43.16 640 680 744 848 480 481 484 509 -HSync +Vsync # 720x400 @ 85.00 Hz (GTF) hsync: 35.78 kHz; pclk: 32.64 MHz Modeline &quot;720x400&quot; 32.64 720 744 816 912 400 401 404 421 -HSync +Vsync # 768x576 @ 60.00 Hz (GTF) hsync: 35.82 kHz; pclk: 34.96 MHz Modeline &quot;768x576&quot; 34.96 768 792 872 976 576 577 580 597 -HSync +Vsync # 768x576 @ 72.00 Hz (GTF) hsync: 43.27 kHz; pclk: 42.93 MHz Modeline &quot;768x576&quot; 42.93 768 800 880 992 576 577 580 601 -HSync +Vsync # 768x576 @ 75.00 Hz (GTF) hsync: 45.15 kHz; pclk: 45.51 MHz Modeline &quot;768x576&quot; 45.51 768 808 888 1008 576 577 580 602 -HSync +Vsync # 768x576 @ 85.00 Hz (GTF) hsync: 51.42 kHz; pclk: 51.84 MHz Modeline &quot;768x576&quot; 51.84 768 808 888 1008 576 577 580 605 -HSync +Vsync # 768x576 @ 100.00 Hz (GTF) hsync: 61.10 kHz; pclk: 62.57 MHz Modeline &quot;768x576&quot; 62.57 768 816 896 1024 576 577 580 611 -HSync +Vsync # 800x600 @ 56.00 Hz (GTF) hsync: 34.72 kHz; pclk: 35.55 MHz Modeline &quot;800x600&quot; 35.55 800 832 912 1024 600 601 604 620 -HSync +Vsync # 800x600 @ 60.00 Hz (GTF) hsync: 37.32 kHz; pclk: 38.22 MHz Modeline &quot;800x600&quot; 38.22 800 832 912 1024 600 601 604 622 -HSync +Vsync # 800x600 @ 72.00 Hz (GTF) hsync: 45.07 kHz; pclk: 46.87 MHz Modeline &quot;800x600&quot; 46.87 800 840 920 1040 600 601 604 626 -HSync +Vsync # 800x600 @ 75.00 Hz (GTF) hsync: 47.02 kHz; pclk: 48.91 MHz Modeline &quot;800x600&quot; 48.91 800 840 920 1040 600 601 604 627 -HSync +Vsync # 800x600 @ 85.00 Hz (GTF) hsync: 53.55 kHz; pclk: 56.55 MHz Modeline &quot;800x600&quot; 56.55 800 840 928 1056 600 601 604 630 -HSync +Vsync # 800x600 @ 100.00 Hz (GTF) hsync: 63.60 kHz; pclk: 68.18 MHz Modeline &quot;800x600&quot; 68.18 800 848 936 1072 600 601 604 636 -HSync +Vsync # 1024x600 @ 60.00 Hz (GTF) hsync: 37.32 kHz; pclk: 48.96 MHz Modeline &quot;1024x600&quot; 48.96 1024 1064 1168 1312 600 601 604 622 -HSync +Vsync # 1024x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 64.11 MHz Modeline &quot;1024x768&quot; 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync # 1024x768 @ 70.00 Hz (GTF) hsync: 56.00 kHz; pclk: 76.16 MHz Modeline &quot;1024x768&quot; 76.16 1024 1080 1192 1360 768 769 772 800 -HSync +Vsync # 1024x768 @ 75.00 Hz (GTF) hsync: 60.15 kHz; pclk: 81.80 MHz Modeline &quot;1024x768&quot; 81.80 1024 1080 1192 1360 768 769 772 802 -HSync +Vsync # 1024x768 @ 85.00 Hz (GTF) hsync: 68.60 kHz; pclk: 94.39 MHz Modeline &quot;1024x768&quot; 94.39 1024 1088 1200 1376 768 769 772 807 -HSync +Vsync # 1024x768 @ 100.00 Hz (GTF) hsync: 81.40 kHz; pclk: 113.31 MHz Modeline &quot;1024x768&quot; 113.31 1024 1096 1208 1392 768 769 772 814 -HSync +Vsync # 1152x864 @ 75.00 Hz (GTF) hsync: 67.65 kHz; pclk: 104.99 MHz Modeline &quot;1152x864&quot; 104.99 1152 1224 1352 1552 864 865 868 902 -HSync +Vsync # 1152x864 @ 60.00 Hz (GTF) hsync: 53.70 kHz; pclk: 81.62 MHz Modeline &quot;1152x864&quot; 81.62 1152 1216 1336 1520 864 865 868 895 -HSync +Vsync # 1152x864 @ 85.00 Hz (GTF) hsync: 77.10 kHz; pclk: 119.65 MHz Modeline &quot;1152x864&quot; 119.65 1152 1224 1352 1552 864 865 868 907 -HSync +Vsync # 1152x864 @ 100.00 Hz (GTF) hsync: 91.50 kHz; pclk: 143.47 MHz Modeline &quot;1152x864&quot; 143.47 1152 1232 1360 1568 864 865 868 915 -HSync +Vsync # 1152x900 @ 77.00 Hz (GTF) hsync: 72.46 kHz; pclk: 112.45 MHz Modeline &quot;1152x900&quot; 112.45 1152 1224 1352 1552 900 901 904 941 -HSync +Vsync # 1152x900 @ 66.00 Hz (GTF) hsync: 61.71 kHz; pclk: 94.79 MHz Modeline &quot;1152x900&quot; 94.79 1152 1224 1344 1536 900 901 904 935 -HSync +Vsync # 1280x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 80.14 MHz Modeline &quot;1280x768&quot; 80.14 1280 1344 1480 1680 768 769 772 795 -HSync +Vsync # 1280x800 @ 60.00 Hz (GTF) hsync: 49.68 kHz; pclk: 83.46 MHz Modeline &quot;1280x800&quot; 83.46 1280 1344 1480 1680 800 801 804 828 -HSync +Vsync # 1280x960 @ 60.00 Hz (GTF) hsync: 59.64 kHz; pclk: 102.10 MHzx Modeline &quot;1280x960&quot; 102.10 1280 1360 1496 1712 960 961 964 994 -HSync +Vsync # 1280x960 @ 72.00 Hz (GTF) hsync: 72.07 kHz; pclk: 124.54 MHz Modeline &quot;1280x960&quot; 124.54 1280 1368 1504 1728 960 961 964 1001 -HSync +Vsync # 1280x960 @ 75.00 Hz (GTF) hsync: 75.15 kHz; pclk: 129.86 MHz Modeline &quot;1280x960&quot; 129.86 1280 1368 1504 1728 960 961 964 1002 -HSync +Vsync # 1280x960 @ 85.00 Hz (GTF) hsync: 85.68 kHz; pclk: 149.43 MHz Modeline &quot;1280x960&quot; 149.43 1280 1376 1512 1744 960 961 964 1008 -HSync +Vsync # 1280x960 @ 100.00 Hz (GTF) hsync: 101.70 kHz; pclk: 178.99 MHz Modeline &quot;1280x960&quot; 178.99 1280 1376 1520 1760 960 961 964 1017 -HSync +Vsync # 1280x1024 @ 60.00 Hz (GTF) hsync: 63.60 kHz; pclk: 108.88 MHz Modeline &quot;1280x1024&quot; 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync # 1280x1024 @ 67.00 Hz (GTF) hsync: 71.29 kHz; pclk: 123.19 MHz Modeline &quot;1280x1024&quot; 123.19 1280 1368 1504 1728 1024 1025 1028 1064 -HSync +Vsync # 1280x1024 @ 75.00 Hz (GTF) hsync: 80.17 kHz; pclk: 138.54 MHz Modeline &quot;1280x1024&quot; 138.54 1280 1368 1504 1728 1024 1025 1028 1069 -HSync +Vsync # 1280x1024 @ 76.00 Hz (GTF) hsync: 81.32 kHz; pclk: 141.82 MHz Modeline &quot;1280x1024&quot; 141.82 1280 1376 1512 1744 1024 1025 1028 1070 -HSync +Vsync # 1280x1024 @ 85.00 Hz (GTF) hsync: 91.38 kHz; pclk: 159.36 MHz Modeline &quot;1280x1024&quot; 159.36 1280 1376 1512 1744 1024 1025 1028 1075 -HSync +Vsync # 1280x1024 @ 100.00 Hz (GTF) hsync: 108.50 kHz; pclk: 190.96 MHz Modeline &quot;1280x1024&quot; 190.96 1280 1376 1520 1760 1024 1025 1028 1085 -HSync +Vsync # 1368x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 85.86 MHz Modeline &quot;1368x768&quot; 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync # 1440x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 106.47 MHz Modeline &quot;1440x900&quot; 106.47 1440 1520 1672 1904 900 901 904 932 -HSync +Vsync # 1400x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 122.61 MHz Modeline &quot;1400x1050&quot; 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync # 1400x1050 @ 72.00 Hz (GTF) hsync: 78.77 kHz; pclk: 149.34 MHz Modeline &quot;1400x1050&quot; 149.34 1400 1496 1648 1896 1050 1051 1054 1094 -HSync +Vsync # 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz Modeline &quot;1400x1050&quot; 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync # 1400x1050 @ 85.00 Hz (GTF) hsync: 93.76 kHz; pclk: 179.26 MHz Modeline &quot;1400x1050&quot; 179.26 1400 1504 1656 1912 1050 1051 1054 1103 -HSync +Vsync # 1400x1050 @ 100.00 Hz (GTF) hsync: 111.20 kHz; pclk: 214.39 MHz Modeline &quot;1400x1050&quot; 214.39 1400 1512 1664 1928 1050 1051 1054 1112 -HSync +Vsync # 1440x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 106.47 MHz Modeline &quot;1440x900&quot; 106.47 1440 1520 1672 1904 900 901 904 932 -HSync +Vsync # 1600x1200 @ 60.00 Hz (GTF) hsync: 74.52 kHz; pclk: 160.96 MHz Modeline &quot;1600x1200&quot; 160.96 1600 1704 1880 2160 1200 1201 1204 1242 -HSync +Vsync # 1600x1200 @ 65.00 Hz (GTF) hsync: 80.99 kHz; pclk: 176.23 MHz Modeline &quot;1600x1200&quot; 176.23 1600 1712 1888 2176 1200 1201 1204 1246 -HSync +Vsync # 1600x1200 @ 70.00 Hz (GTF) hsync: 87.43 kHz; pclk: 190.25 MHz Modeline &quot;1600x1200&quot; 190.25 1600 1712 1888 2176 1200 1201 1204 1249 -HSync +Vsync # 1600x1200 @ 75.00 Hz (GTF) hsync: 93.97 kHz; pclk: 205.99 MHz Modeline &quot;1600x1200&quot; 205.99 1600 1720 1896 2192 1200 1201 1204 1253 -HSync +Vsync # 1600x1200 @ 85.00 Hz (GTF) hsync: 107.10 kHz; pclk: 234.76 MHz Modeline &quot;1600x1200&quot; 234.76 1600 1720 1896 2192 1200 1201 1204 1260 -HSync +Vsync # 1600x1200 @ 100.00 Hz (GTF) hsync: 127.10 kHz; pclk: 280.64 MHz Modeline &quot;1600x1200&quot; 280.64 1600 1728 1904 2208 1200 1201 1204 1271 -HSync +Vsync # 1680x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 147.14 MHz Modeline &quot;1680x1050&quot; 147.14 1680 1784 1968 2256 1050 1051 1054 1087 -HSync +Vsync # 1792x1344 @ 60.00 Hz (GTF) hsync: 83.46 kHz; pclk: 202.97 MHz Modeline &quot;1792x1344&quot; 202.97 1792 1920 2112 2432 1344 1345 1348 1391 -HSync +Vsync # 1792x1344 @ 75.00 Hz (GTF) hsync: 105.23 kHz; pclk: 259.27 MHz Modeline &quot;1792x1344&quot; 259.27 1792 1928 2128 2464 1344 1345 1348 1403 -HSync +Vsync # 1856x1392 @ 60.00 Hz (GTF) hsync: 86.46 kHz; pclk: 218.57 MHz Modeline &quot;1856x1392&quot; 218.57 1856 1992 2192 2528 1392 1393 1396 1441 -HSync +Vsync # 1856x1392 @ 75.00 Hz (GTF) hsync: 108.97 kHz; pclk: 277.23 MHz Modeline &quot;1856x1392&quot; 277.23 1856 2000 2200 2544 1392 1393 1396 1453 -HSync +Vsync # 1920x1200 @ 60.00 Hz (GTF) hsync: 74.52 kHz; pclk: 193.16 MHz Modeline &quot;1920x1200&quot; 193.16 1920 2048 2256 2592 1200 1201 1204 1242 -HSync +Vsync # 1920x1440 @ 60.00 Hz (GTF) hsync: 89.40 kHz; pclk: 234.59 MHz Modeline &quot;1920x1440&quot; 234.59 1920 2064 2272 2624 1440 1441 1444 1490 -HSync +Vsync # 1920x1440 @ 75.00 Hz (GTF) hsync: 112.73 kHz; pclk: 297.59 MHz Modeline &quot;1920x1440&quot; 297.59 1920 2072 2280 2640 1440 1441 1444 1503 -HSync +Vsync EndSection Section &quot;Screen&quot; Identifier &quot;Screen 0&quot; Monitor &quot;Monitor 0&quot; DefaultColorDepth 24 SubSection &quot;Display&quot; Depth 24 Modes &quot;1200x800&quot; EndSubSection EndSection Section &quot;Extensions&quot; Option &quot;Composite&quot; &quot;off&quot; EndSection&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://nqnwebs.com/IMG/bin/xorg.bin" length="2350" type="application/octet-stream" />
		
		<enclosure url="http://nqnwebs.com/IMG/deb/xorg-driver-sis671_0-9_i386.deb" length="290060" type="application/x-debian-package" />
		
		<enclosure url="http://nqnwebs.com/IMG/bin/xorg-2.bin" length="2233" type="application/octet-stream" />
		

	</item>
<item xml:lang="es">
		<title>Un gran lenguaje, una gran comunidad</title>
		<link>http://nqnwebs.com/blog/article/un-gran-lenguaje-una-gran</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/un-gran-lenguaje-una-gran</guid>
		<dc:date>2010-03-24T03:44:28Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Python</dc:subject>

		<description>Python es un gran lenguaje de programaci&#243;n, y como tal se merece la comunidad que tiene, donde expertos y novatos se sienten parte.

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/python" rel="tag"&gt;Python&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Python es un gran lenguaje de programaci&#243;n, y como tal se merece &lt;a href='http://python.org.ar/' class='spip_out' rel='external'&gt;la comunidad que tiene&lt;/a&gt;, donde expertos y novatos se sienten parte.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_96 spip_documents spip_documents_center'&gt;
&lt;img src='http://nqnwebs.com/local/cache-vignettes/L500xH29/pyar-11b12.jpg' width='500' height='29' alt=&quot;&quot; style='height:29px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="es">
		<title>Hemisferio derecho</title>
		<link>http://nqnwebs.com/blog/article/hemisferio-derecho</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/hemisferio-derecho</guid>
		<dc:date>2009-12-11T19:44:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>



		<description>This is perhaps the most beautiful time in human history; it is really pregnant with all kinds of creative possibilities made possible by science and technology which now constitute the slave of man, if man is not enslaved by it. Jonas Salk No s&#243;lo de la t&#233;cnica vive el hombre. Mi otro blog gan&#243; una menci&#243;n especial en el concurso El Blogazo del Centro Cultural Espa&#241;a-C&#243;rdoba, en la categor&#237;a literatura. El jurado, entre otros, lo integraban Hern&#225;n Casciari y Jos&#233; (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div style=&quot;float: right; clear:both; text-align:right; display: block;&quot;&gt;&lt;em&gt;This is perhaps the most beautiful time in human history; &lt;br&gt; it is really pregnant with all kinds of creative possibilities made possible&lt;br /&gt; by science and technology which now constitute the slave of man, &lt;br /&gt;if man is not enslaved by it.&lt;/em&gt;&lt;br&gt; &lt;a href='http://es.wikipedia.org/wiki/Jonas_Salk' class='spip_glossaire' rel='external'&gt;Jonas Salk&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;clear:both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;No s&#243;lo de la t&#233;cnica vive el hombre.&lt;/p&gt; &lt;p&gt;Mi &lt;a href='http://www.textosypretextos.com.ar/' class='spip_out' rel='external'&gt;otro blog&lt;/a&gt; gan&#243; una menci&#243;n especial en el concurso &lt;a href='http://ccec.org.ar/el-blogazo/' class='spip_out' rel='external'&gt;El Blogazo&lt;/a&gt; del Centro Cultural Espa&#241;a-C&#243;rdoba, en la categor&#237;a literatura. El jurado, entre otros, lo integraban &lt;a href='http://orsai.es/' class='spip_out' rel='external'&gt;Hern&#225;n Casciari&lt;/a&gt; y &lt;a href='http://revistapeinate.com.ar/' class='spip_out' rel='external'&gt;Jos&#233; Playo&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://nqnwebs.com/IMG/jpg/Kozumi_K1500NR_SNWIFI_-_1.jpg" length="163095" type="image/jpeg" />
		

	</item>
<item xml:lang="es">
		<title>Monetizar pagos virtuales en Argentina sin costo </title>
		<link>http://nqnwebs.com/blog/article/monetizar-pagos-virtuales-en</link>
		<guid isPermaLink="true">http://nqnwebs.com/blog/article/monetizar-pagos-virtuales-en</guid>
		<dc:date>2009-12-02T23:34:05Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>es</dc:language>
		<dc:creator>martin</dc:creator>


		<dc:subject>Python</dc:subject>
		<dc:subject>Empresa</dc:subject>

		<description>Para los trabajadores online freelance (programadores, dise&#241;adores, traductores, etc) trabajar para el exterior es un objetivo primordial. Aunque en algunos sectores la competencia es leonina y se pauperizan los honorarios, el tipo de cambio del peso respecto a otra monedas fuertes hace que siga siendo muy provechoso. En traducci&#243;n, que tiene un sistema de presupuesto lineal basado en cantidad de palabras del texto del idioma origen, es f&#225;cil cuantificar la diferencia. En Argentina se (...)

-
&lt;a href="http://nqnwebs.com/blog/" rel="directory"&gt; Blog&lt;/a&gt;

/ 
&lt;a href="http://nqnwebs.com/mot/python" rel="tag"&gt;Python&lt;/a&gt;, 
&lt;a href="http://nqnwebs.com/mot/empresa" rel="tag"&gt;Empresa&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Para los trabajadores online freelance (programadores, dise&#241;adores, traductores, etc) trabajar para el exterior es un objetivo primordial. Aunque en algunos sectores la competencia es leonina y se pauperizan los honorarios, el tipo de cambio del peso respecto a otra monedas fuertes hace que siga siendo muy provechoso.&lt;/p&gt; &lt;p&gt;En traducci&#243;n, que tiene un sistema de presupuesto lineal basado en cantidad de palabras del texto del idioma origen, es f&#225;cil cuantificar la diferencia. En Argentina se cobra entre $0,10 y $0,15 (pesos argentinos) por palabra, mientras que en europa se cobra entre 0.05 &#8364; y 0.07&#8364;. O sea, se gana hasta el triple por realizar el mismo trabajo.&lt;/p&gt; &lt;p&gt;El problema, al menos desde Argentina, es cobrar. Aqu&#237; comparto mi experiencia esperando ayudar a otros.&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;De Adsense a la billetera&lt;/h3&gt;
&lt;p&gt;&lt;span class='spip_document_92 spip_documents spip_documents_left' style='float:left; width:114px;'&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L114xH42/google-adsenf60e-93be1.jpg' width='114' height='42' alt=&quot;&quot; style='height:42px;width:114px;' /&gt;&lt;/span&gt; Una forma simple y r&#225;pida pero bastante onerosa es &lt;a href='http://www.westernunion.com/' class='spip_out' rel='external'&gt;Western Union&lt;/a&gt;. Es un servicio de transferencias de dinero persona a persona (f&#237;sica o jur&#237;dica), con sedes en casi todo el mundo. Tiene dos tipos de servicio: Quick Cash y 24 horas.&lt;/p&gt; &lt;p&gt;Western Union tiene multiples instancias de lucro, que lo vuelven un ser. Se le cobra entre el 2.5 y 5% al emisor (desde Europa a Argentina el l&#237;mite de transferencia es 500&#8364;) y adem&#225;s, el receptor cobra en moneda local a un tipo de cambio definido por WU que siempre est&#225; entre un 3 y 6% por debajo del tipo de cambio del dia. Sobre todo los d&#237;as que hay corridas en suba, el tipo de cambio queda desfasado (tiene una actualizaci&#243;n muy lenta) y es un mal momento para cobrar.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_91 spip_documents spip_documents_right' style='float:right; width:114px;'&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L114xH77/Western-Unioa5aa-91e5e.jpg' width='114' height='77' alt=&quot;&quot; style='height:77px;width:114px;' /&gt;&lt;/span&gt; Existe una forma de salvar este cargo solapado para el receptor: si el env&#237;o es tipo Quick Cash y en d&#243;lares estadounidenses, se puede retirar en d&#243;lares en los locales Western Union de los supermercados &lt;strong&gt;Walmart&lt;/strong&gt; (que es el representante oficial de WU en Argentina). Este servicio no tiene costo para el receptor.&lt;/p&gt; &lt;p&gt;Esto es muy &#250;til para quienes utilizan &lt;strong&gt;Google Adsense&lt;/strong&gt; en sus sitios web, ya que Google ofrece este servicio de pago. Basta anotar el n&#250;mero de transferencia (MCU) y documento en mano aclarar en Wester Union de Walmart que queremos cobrar en d&#243;lares.&lt;/p&gt; &lt;p&gt;Mucho m&#225;s f&#225;cil, r&#225;pido y sin perder un sope que pedir el cheque y venderlo en una financiera.&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;Cobrar del extranjero&lt;/h3&gt;
&lt;p&gt;&lt;span class='spip_document_90 spip_documents spip_documents_left' style='float:left; width:200px;'&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L200xH50/paypal_logog8b6f-21423.gif' width='200' height='50' alt=&quot;&quot; style='height:50px;width:200px;' /&gt;&lt;/span&gt; Internacionalmente est&#225; casi estandarizado el uso de &lt;a href='http://www.paypal.com/' class='spip_out' rel='external'&gt;Paypal&lt;/a&gt; como medio de pago de honorarios (y casi cualquier otro tipo de transacci&#243;n en internet) pero este sistema no tiene integraci&#243;n con el sistema bancario argentino lo cual complica la tarea de monetizar los fondos.&lt;/p&gt; &lt;p&gt;Adem&#225;s, un usuario no puede cargar cr&#233;dito a su cuenta paypal con una tarjeta de cr&#233;dito, aunque esta sea v&#225;lida internacionalmente. Un detalle que complica a quienes quieren comprar o donar en el extranjero.&lt;/p&gt; &lt;p&gt;Sin embargo, Paypal sigue siendo interesante para todos los que necesitamos cobrar desde el extranjero. Adem&#225;s de facilitarle la vida al emisor (cliente) que seguramente ya est&#225; acostumbrado a este sistema, &lt;strong&gt;la transferencia entre cuentas paypal personales no tiene costo&lt;/strong&gt;. Esto significa que si el cliente tiene una cuenta paypal con fondos (que en la mayor&#237;a de los paises pudo haber cargado con tarjeta o desde su cuenta bancaria sin costo) la transacci&#243;n total es gratuita. Adem&#225;s, la operaci&#243;n es instant&#225;nea.&lt;/p&gt; &lt;p&gt;Si el cliente envia el dinero a trav&#233;s de paypal pero habiendolo cargado desde una cuenta bancaria o tarjeta de cr&#233;dito espec&#237;ficamente para dicha transacci&#243;n, el costo de la operanci&#243;n es 3,4% + 0,30 USD. El emisor decide quien abona este cargo.&lt;/p&gt; &lt;p&gt;Una observaci&#243;n importante es que predeterminadamente las cuentas PayPal son en una moneda principal (en d&#243;lares estadounidenses para Argentina) y al recibir un pago en otra moneda (euros, por ejemplo) la conversi&#243;n de divisa se realiza al tipo de cambio del d&#237;a con una retenci&#243;n del 2.5%. El tipo de cambio es actualizado 2 veces por d&#237;a.&lt;/p&gt; &lt;p&gt;Una s&#243;luci&#243;n es abrir cuentas en distintas monedas. En vez de convertir el pago a la divisa principal, se mantiene en nuestra cuenta en la moneda en que se recibi&#243;. Cuando necesitamos realizar un pago o transferencia en esta moneda, nos ahorraremos tener que reconvertirla nuevamente (ahorrando un 5% en total). Claro que a la hora de monetizar los fondos se deber&#225;n convertir, pero esto se puede hacer en cualquier momento que creamos conveniente.&lt;/p&gt; &lt;p&gt;Paypal aclara que ofrece este servicio (Multiples divisas) para facilitar el comercio electr&#243;nico internacional y no debe utilizarse con fines especulativos. Pero los timberos decidir&#225;n.&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;De Paypal a la billetera&lt;/h3&gt;
&lt;dl class='spip_document_89 spip_documents spip_documents_right' style='float:right;width:150px;'&gt;
&lt;dt&gt;&lt;a href=&quot;http://nqnwebs.com/IMG/gif/logo_xoomgif23e5.gif&quot; title='GIF - 1.2 KB' type=&quot;image/gif&quot;&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L150xH29/logo_xoomgif23e5-fd895-3a10a.png' width='150' height='29' alt='GIF - 1.2 KB' style='height:29px;width:150px;' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;/dl&gt;
&lt;p&gt; Pero, como dec&#237;a un amigo, la plata no es plata hasta que no sirve para comprar fernet en la despensa.&lt;/p&gt; &lt;p&gt;Como dije m&#225;s arriba, no se puede asociar una cuenta bancaria argentina una cuenta Paypal (ni para a&#241;adir ni para retirar fondos). Esto deja como &#250;nica alternativa oficial para retirar fondos el envio de un cheque.&lt;/p&gt; &lt;p&gt;Paypal envia un cheque via correo postal certificado por el monto que solicitemos con un costo de u$s 15 fijo, independientemente del monto retirado. El env&#237;o para Argentina se realiza a trav&#233;s de Ocasa, y tiene una demora aproximada de 10 d&#237;as h&#225;biles.&lt;/p&gt; &lt;p&gt;El problema es que este cheque tampoco se puede cobrar en ning&#250;n banco, por lo que hay que venderlo en una financiera o agencia de viajes, que cobran una comisi&#243;n de entre el 2 y el 5%.&lt;/p&gt; &lt;p&gt;Por suerte existe &lt;a href='http://www.xoom.com/' class='spip_out' rel='external'&gt;xoom.com&lt;/a&gt;. Es un servicio de transferencia de dinero que intenta competir con Western Union, pero a diferencia de este, la operaci&#243;n se realiza &#250;nicamente online, el destino puede ser una cuenta bancaria argentina o efectivo en pesos o d&#243;lares, y, hete aqu&#237; la clave, &lt;strong&gt;el origen de los fondos puede ser una cuenta Paypal. &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Problema solucionado: nos hacemos una transferencia a nosotros mismos, retirando fondos de Paypal y enviandolos a nuestra cuenta bancaria, o mejor, en d&#243;lares que se cobran en cualquier sucursal de Banco Franc&#233;s.&lt;/p&gt; &lt;p&gt;A diferencia de Wester Union, los cargos de servicio no son porcentuales fijos sino que &lt;a href='https://www.xoom.com/sendmoneynow/money-transfer-fees' class='spip_out' rel='external'&gt;est&#225;n tabulados en rangos&lt;/a&gt; del monto enviado lo que significa un ahorro considerable en montos grandes. Para cifras montos menores a u$s500, el costo de servicio ronda le 4.5%&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_93 spip_documents spip_documents_left' style='float:left; width:85px;'&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L85xH85/Banco-Francecef9-62220.jpg' width='85' height='85' alt=&quot;&quot; style='height:85px;width:85px;' /&gt;&lt;/span&gt; Adem&#225;s hay que considerar que al cobrar en pesos, Xoom realiza una conversi&#243;n de divisa a un tipo de cambio que, al igual que Wester Union, est&#225; un par de puntos por debajo de la cotizaci&#243;n de mercado. La opci&#243;n de cobrar en dolares evita esta p&#233;rdida, pero tiene un cargo de servicio un 40% mayor, lo que significa un costo de operaci&#243;n real del m&#225;s de 6%.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_94 spip_documents spip_documents_right' style='float:right; width:119px;'&gt;&lt;img src='http://nqnwebs.com/local/cache-vignettes/L119xH30/RMNlogopng-33050-8dd22.jpg' width='119' height='30' alt=&quot;&quot; style='height:30px;width:119px;' /&gt;&lt;/span&gt; Pero hay una forma de salvar esta plata, que convertida a pesos seguramente significar&#225;n varios fern&#233;s: &lt;strong&gt;conseguir un c&#243;digo de descuento&lt;/strong&gt;. &lt;a href='http://www.retailmenot.com/view/xoom.com' class='spip_out' rel='external'&gt;Retailmenot&lt;/a&gt; suele tener cupones v&#225;lidos, &#161;de hasta el 100%!&lt;/p&gt; &lt;p&gt;Conclusi&#243;n: si cobramos desde Paypal (entre cuentas personales) y retiramos los fondos a trav&#233;s de Xoom.com en d&#243;lares consiguiendo un cup&#243;n del 100%, tendremos toda nuestra platita en el bolsillo, en d&#243;lares y sin perder nada en el camino.&lt;/p&gt; &lt;p&gt;&#161;Espero sirva!&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
