<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>marcos.blog</title>
	<atom:link href="http://blog.tenak.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tenak.net</link>
	<description></description>
	<pubDate>Wed, 06 Aug 2008 22:07:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Accedint al nostre PC per SSH quan no podem tocar els ports del router</title>
		<link>http://blog.tenak.net/go/174/</link>
		<comments>http://blog.tenak.net/go/174/#comentarios</comments>
		<pubDate>Wed, 06 Aug 2008 18:34:22 +0000</pubDate>
		<dc:creator>marcos</dc:creator>
		
		<category><![CDATA[Documentación]]></category>

		<category><![CDATA[Sysadmin]]></category>

		<category><![CDATA[init.d]]></category>

		<category><![CDATA[password less]]></category>

		<category><![CDATA[ports]]></category>

		<category><![CDATA[reverse tunneling]]></category>

		<category><![CDATA[ssh]]></category>

		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://blog.tenak.net/?p=174</guid>
		<description><![CDATA[Ara al pis de Girona, encara no tinc ADSL i faig servir una prestada, de la que no puc tocar els ports del router per fer el PC accessible des de fora. 
Com que tinc un servidor a casa dels meus pares encés 24/7, el faré servir de passarel.la. Això no serà suficient, doncs encara [...]]]></description>
			<content:encoded><![CDATA[<p>Ara al pis de Girona, encara no tinc ADSL i faig servir una prestada, de la que no puc tocar els ports del router per fer el PC accessible des de fora. </p>
<p>Com que tinc un servidor a casa dels meus pares encés 24/7, el faré servir de passarel.la. Això no serà suficient, doncs encara no tenim el port de la interfície ADSL del router del veí apuntant al nostre PC. La solució està en els túnels inversos que ens proporciona SSH. </p>
<p>El que farem serà, un cop s'encén el PC del pis (el que està amb aquesta ADSL intocable) és connectar-nos al servidor de casa dels meus pares via SSH de manera que deixi aquesta connexió escoltant al servidor a un port que coneixem. Aquest port estarà redirigit (per dins la connexió SSH que hem iniciat des del PC del pis) al port 22 del PC del pis. Tot això es redueix a aquesta comanda:</p>
<p><code>ssh -nNT -R 2222:localhost:22 usuari@servidor</code></p>
<p>El que fa mandra, és executar això cada cop. La solució és crear un script d'inici per tal que ho faci per nosaltres:</p>
<p><pre><ol>
<li>#!/bin/bash</p></li><li><p>CMD="ssh -nNT -R 2222:localhost:22 user@server"</li><li>case "$1" in</li><li>start)</li><li>`${CMD} ` &#038;</li><li>pid=`ps aux | grep "${CMD}" | cut -d ' ' -f 7 | head -n 1`</li><li>echo $pid > /var/run/reversetunnel.pid</li><li>;;</li><li>stop)</li><li>kill -15 `cat /var/run/reversetunnel.pid`</li><li>;;</li><li>*)</li><li>echo "Available options: start, stop."</li><li>;;</li><li>esac</li>
</ol></pre>
</p>
<p> I per evitar que ens demani la contrassenya de l'usuari, crearem un parell de claus RSA per l'usuari root (que és qui llençarà l'script d'inici) i copiarem la clau pública al servidor:</p>
<p><pre><ol>
<li># ssh-key-gen</li><li># ssh-copy-id -i .ssh/id_rsa.pub user@servidor</li>
</ol></pre>
</p>
<p>Ara, quan ens volguem connectar al PC del pis, fariem<br />
<pre><ol>
<li>$ ssh user@servidor</li><li>$ ssh user@localhost -p 2222</li>
</ol></pre>
</p>
<p>I ens connectariem per SSH al PC de casa. Fent això, podeu tenir un problemilla amb la identificació del host i el seu fingerprint. Si no heu fet mai ssh user@localhost al servidor, no veureu l'avís, però, si com jo, ho havíeu fet algun cop, us dirà que la identificació de la màquina ha canviat. Efectivament, per SSH localhost tenia un fingerprint (el bo, el del server) i ara, que feu ssh a localhost també, però realment és una altra màquina, el fingerprint no coincideix i SSH us avisa. Per solucionar-ho el que he fet ha estat esborrar .ssh/known_hosts i afegir al /etc/hosts un alias per 127.0.0.1 anomenat 'natura' que es el nom del meu PC al pis. Així, enlloc de <code>ssh user@localhost -p 2222</code> fareu <code>ssh user@natura -p 2222</code> i per SSH ja serà un altre host i no hi haurà conflicte de noms.</p>
<p><strong>Actualització:</strong> l'<a href="http://ecarreras-tec.blogspot.com">Eduard</a> va escriure un <a href="http://ecarreras-tec.blogspot.com/2008/07/tnel-ssh-invers.html">article sobre el mateix tema</a> i comenta que podem patir talls a la connexió per timeouts, ell explica com solucionar-ho ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tenak.net/go/174/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Aquellos maravillosos años...</title>
		<link>http://blog.tenak.net/go/172/</link>
		<comments>http://blog.tenak.net/go/172/#comentarios</comments>
		<pubDate>Fri, 20 Jun 2008 18:52:30 +0000</pubDate>
		<dc:creator>marcos</dc:creator>
		
		<category><![CDATA[Freak]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[cabina]]></category>

		<category><![CDATA[cdrom]]></category>

		<category><![CDATA[ibm]]></category>

		<category><![CDATA[scsi]]></category>

		<guid isPermaLink="false">http://blog.tenak.net/?p=172</guid>
		<description><![CDATA[... de cabinas y ordenadores sin lector de CD ROM :)
Llevaba yo un tiempo contento con mi IBM PS/2 286, con su flamante megabyte de RAM y sus 28MB de disco duro, convertidos en 40 y pico gracias a dblspace, un compresor de disco que venía con MSDOS6.1 o 6.2, no recuerdo :) Hasta que [...]]]></description>
			<content:encoded><![CDATA[<p>... de cabinas y ordenadores sin lector de CD ROM :)</p>
<p>Llevaba yo un tiempo contento con mi IBM PS/2 286, con su flamante megabyte de RAM y sus 28MB de disco duro, convertidos en 40 y pico gracias a dblspace, un compresor de disco que venía con MSDOS6.1 o 6.2, no recuerdo :) Hasta que ví en una tienda de segunda mano, un IBM también, 486 con ya 16MB de RAM y 270MB de disco duro, un gran salto cualitativo. Un salto que valía 45.000 pelas. </p>
<p>Un dia llegó a casa el PC :)</p>
<p>Con su OS/2, PC-DOS, MS-DOS y Virus95. No conocía ni PCDOS ni OSDOS, tampoco GNU/Linux para podérselo instalar. Pero sí que sabía lo que era el PCFutbol y que mi primo lo tenía, así que pim pam pum, se lo instalo. Evidentemente tenía virus, creo que salió de fábrica con virus aquel juego xD</p>
<p>Pues bien, yo que sabía lo justo por aquel entonces, pues me fui para la tienda a decirle que... no iba aquello xD Acabaron formateándome el disco :(</p>
<p>Y el problema viene cuando digo, vale, sin lectora de CD, ¿cómo vuelvo a instalar el 95? Pues no podía, instalé 3.11. Hasta que se me ocurrió ir a casa de mi primo (sí el mismo que me dejó el PC Futbol xD) y compré diskets. Un montón. Exactamente 40. Cogimos el CD de Windows 95 y con el famoso ARJ, pasamos el CD a disquetes. Usamos 36 en total. Y aún los tengo, ¡los iba yo a tirar! ¡Ja!</p>
<p>Después de aquello uno empezó a pensar en comprar un lector de CD. Me voy a la tienda y suelto la pasta para una lectora. Todo contento me voy a casa, abro el PC voy a enchufar el CD y ... oh shit! No cabe el cable en el conector, WTF?! ¿Pero esto no es estándar? pensé yo... Bueno, calma, le llevo el ordenador al de la tienda y que se lo mire...</p>
<p>El tio ve el trasto y suelta: Ah, es que esto es <em>escasi</em> y yo uh... ¿lo qué? ¡Yo quiero un CD! Y el hombre me trajo una lectora SCSI, pero ... no iban los drivers. ¿Un CD lleva drivers? Ah bueno...</p>
<p>Y así en dos o tres tiendas más, hasta que uno me dijo: &laquo;Chaval, o te compras uno marca IBM o no vas a tener CD&raquo;. Pues guay. Pido precios y ... casi me da infarto.</p>
<p>Pasó el tiempo y un dia de estos, después de clase que no sabes qué hacer, te vas a dar una vuelta por un Cash Converters, a chafardear. Y ahí estaban, 3, no una no, ¡3! lectoras de CD ROM SCSI marca IBM. ¡Por sólo 1500pts! Con su aureola alrededor y música angelical y todo llamándome. Joder, no sé si tuve una erección, pero no me extrañaría. Evidentemente, jovenzuelo yo, no llevaba ese dinero encima, sería 1º o 2º de ESO, y ya hace unos añitos jejeje.</p>
<p>Y aquí entra en acción la cabina. Salí a la calle a llamar a mi madre, que me trajese la pasta ipso facto, no podía dejar escapar esa oportunidad; aunque pensándolo bien, seguro que las otras dos, se quedarían ahí por los siglos de los siglos, porque no sé si mucha gente tendría un IBM SCSI... o sí, quién sabe.</p>
<p>Y colorín colorado, marc0s ya tenía CDROM instalado.</p>
<p>Para horfulus ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tenak.net/go/172/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Época de cambios</title>
		<link>http://blog.tenak.net/go/171/</link>
		<comments>http://blog.tenak.net/go/171/#comentarios</comments>
		<pubDate>Mon, 19 May 2008 20:04:33 +0000</pubDate>
		<dc:creator>marcos</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[cambios]]></category>

		<category><![CDATA[coche]]></category>

		<category><![CDATA[curro]]></category>

		<category><![CDATA[djaflog]]></category>

		<category><![CDATA[girona]]></category>

		<category><![CDATA[marcos]]></category>

		<guid isPermaLink="false">http://blog.tenak.net/?p=171</guid>
		<description><![CDATA[So long no posting... Pues sí. Ya hace un mes y medio (o así :) ) que no escribía por aquí. Ocupado con diferentes historias no he tenido las ganas ni el tiempo, bueno, el tiempo quizá sí, pero lo invertiría en otra cosa.
Pues como bien apunta el título, estoy ahora mismo en época de [...]]]></description>
			<content:encoded><![CDATA[<p>So long no posting... Pues sí. Ya hace un mes y medio (o así :) ) que no escribía por aquí. Ocupado con diferentes historias no he tenido las ganas ni el tiempo, bueno, el tiempo quizá sí, pero lo invertiría en otra cosa.</p>
<p>Pues como bien apunta el título, estoy ahora mismo en época de cambios. Servidor se ha cambiado de trabajo como muchos ya sabréis; ahora trabajo en Girona con <a href="http://ecarreras.blogspot.com">Edu</a>, en GISCE Enginyeria, desarrollando una aplicación web de GIS para empresas eléctricas, bien conectadito a el ERP que también desarrollamos en la empresa. Y dicho cambio de curro lleva asociado un razonable cambio de residencia. Sí, sí, ¡Marquitos se va de casa!, jeje. El viernes pasado firmé la reserva de un <a href="http://trinity.tenak.net/~marcos/img/Piso/">pisito de alquiler</a>, en Girona claro está. Desde que tomé este trabajo pensaba irme a vivir a Girona, pero a raíz del <a href="http://trinity.tenak.net/~marcos/img/Coche/">pequeño accidente de coche</a> de hace un par de semanas, la búsqueda de piso se tornó más intensiva. Y ya está, ya tengo que empezar a pensar en la mudanza... Da pereza, ¡pero hay ganas!</p>
<p>Estáis invitados :)</p>
<p>Y en otro plano, el friki, comentar que el desarrollo del nuevo <a href="http://projects.trinity.tenak.net/tkpholog">tkpholog</a> ya está aquí, pero con muuuchos cambios. Incluso de nombre, lo que debería ser el tkpholog2 pasa a ser <a href="http://gitorious.org/projects/djaflog">Djaflog</a>. Los más ávidos habrán intuido que ya no usaré PHP sino Django :) Pues sí, cambiamos de PHP a Python (y Django), también de MySQL a PostgreSQL y, como de perdidos al río, de SVN como control de versiones al &laquo;nuevo&raquo; GIT. ¿Todo sea aprender cosas nuevas, no?</p>
<p>Podéis consultar el <a href="git://gitorious.org/djaflog/mainline.git">repositorio GIT</a> si estáis interesados en el desarrollo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tenak.net/go/171/feed/</wfw:commentRss>
		</item>
		<item>
		<title>De como los gobiernos se venden al dinero y demás historias</title>
		<link>http://blog.tenak.net/go/169/</link>
		<comments>http://blog.tenak.net/go/169/#comentarios</comments>
		<pubDate>Wed, 02 Apr 2008 19:59:24 +0000</pubDate>
		<dc:creator>marcos</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Quejas]]></category>

		<category><![CDATA[Soft Libre]]></category>

		<category><![CDATA[cultura libre]]></category>

		<category><![CDATA[hacktivism]]></category>

		<category><![CDATA[justicia]]></category>

		<category><![CDATA[document]]></category>

		<category><![CDATA[iso]]></category>

		<category><![CDATA[mafia]]></category>

		<category><![CDATA[ooxml]]></category>

		<category><![CDATA[standard]]></category>

		<category><![CDATA[untamientos]]></category>

		<guid isPermaLink="false">http://blog.tenak.net/?p=169</guid>
		<description><![CDATA[Más o menos todos conocemos la historia de OOXML y de cómo Microsoft ha querido (y finalmente logrado) que éste fuese un estándar ISO documental.  Su contrincante: ODT, un rival técnicamente superior en todos los aspectos y desde siempre abierto a quien quisiera consultarlo. 
Pues bien, la aprobación de ODT (exactamente OASIS) como estándar [...]]]></description>
			<content:encoded><![CDATA[<p>Más o menos todos conocemos la historia de <a href="http://es.wikipedia.org/wiki/Microsoft_Office_Open_XML">OOXML</a> y de cómo Microsoft ha querido (y finalmente logrado) que éste fuese un estándar ISO documental.  Su contrincante: <a href="http://es.wikipedia.org/wiki/OpenDocument">ODT</a>, un rival técnicamente superior en todos los aspectos y desde siempre abierto a quien quisiera consultarlo. </p>
<p>Pues bien, la aprobación de ODT (exactamente OASIS) como estándar ISO el 8 de mayo de 2006, fue un golpe bajo a Microsoft, pues las administraciones públicas (sobretodo europeas) empezaban ya a reclamar la documentación en un formato abierto para no discriminar a usuarios de plataformas no-MS. Y todos sabemos el gran mercado que supone la administración pública. A raíz de esta pérdida de mercado que les acechaba, la multinacional de Redmond, intentó aprobar por la vía rápida el formato OOXML como estándar. Por suerte, la vía rápida decidió que no.  Evidentemente MS no cesó en su lucha y empezó el proceso de nuevo por la vía normal y sacando maletines de aquí y de allá para &laquo;hacer ver las bondades técnicas&raquo; de su estándar a gobiernos indecisos :)</p>
<p>Uno de los casos más notable ha sido el de Noruega, <a href="http://www.kriptopolis.org/ooxml-noruega">19 votos en contra, 5 a favor</a>. ¿Y que tiene eso de malo? ¡Que finalmente Noruega dijo sí a OOXML! Im-presionante, como diría aquél. Dicho quede, que <a href="http://www.kriptopolis.org/ooxml-antitrust-europa">la UE no descarta estudiar este hecho</a>.</p>
<p>Y los <a href="http://www.kriptopolis.org/denuncian-irregularidades-votaciones-ooxml">casos así</a> <a href="http://www.kriptopolis.org/uk-puede-apoyar-ooxml">se suceden</a>, no se entiende sinó, que un <a href="http://www.noooxml.org/petition">estándar incompleto, inválido, conflictivo, con errores conocidos y que supone la redundancia de estándares en el ámbito de la documentación</a> (OASIS <strong>ya era estándar</strong> antes) sea finalmente aprobado como estándar internacional.</p>
<p>¿Y qué significa todo esto? Bajo mi punto de vista confirma que poderoso caballero es Don Dinero, que la economía está por encima de toda razón lógica, técnica y moral y que ya no nos gobiernan personas, sinó multinacionales que manejan el poder económico y las decisiones que nos afectan como ciudadanos. </p>
<p>Pues nada, a seguir poniendo el culo y a ver en qué acaba todo esto.</p>
<p><img src='http://www.noooxml.org/local--files/start/isomeeting-350x.jpg' title='Isomeeting 350x' alt='Una votación de la ISO ...' class='alignright' /><br />
<a href='http://blog.tenak.net/wp-content/uploads/2008/04/isomeeting.jpg'></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tenak.net/go/169/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creando webservices con Python</title>
		<link>http://blog.tenak.net/go/162/</link>
		<comments>http://blog.tenak.net/go/162/#comentarios</comments>
		<pubDate>Sun, 30 Mar 2008 19:23:51 +0000</pubDate>
		<dc:creator>marcos</dc:creator>
		
		<category><![CDATA[Documentación]]></category>

		<category><![CDATA[Internet]]></category>

		<category><![CDATA[Soft Libre]]></category>

		<category><![CDATA[complextype]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[type format]]></category>

		<category><![CDATA[webservices]]></category>

		<category><![CDATA[wsdl]]></category>

		<guid isPermaLink="false">http://blog.tenak.net/?p=162</guid>
		<description><![CDATA[Este post nace a raíz de las horas que he &#171;perdido&#187; en el curro intentando desplegar un servidor de webservices en Python, partiendo del descriptor (fichero WSDL). La causa de esas horas &#171;perdidas&#187; es el uso de tipos de datos complejos, es decir, no un simple String por ejemplo, sino una secuencia de éstos (vector [...]]]></description>
			<content:encoded><![CDATA[<p>Este post nace a raíz de las horas que he &laquo;perdido&raquo; en el curro intentando desplegar un servidor de <a href="http://en.wikipedia.org/wiki/Web_Services">webservices</a> en Python, partiendo del descriptor (fichero <a href="http://en.wikipedia.org/wiki/Web_Services_Description_Language">WSDL</a>). La causa de esas horas &laquo;perdidas&raquo; es el uso de tipos de datos complejos, es decir, no un simple String por ejemplo, sino una secuencia de éstos (vector de Strings) y el uso de la herramienta <code>wsdl2py</code> para generar la base de lo que será nuestro servidor.</p>
<p>La librería que usaremos es <a href="http://pywebsvcs.sourceforge.net/zsi.html">ZSI</a>, que es actualmente la que tiene un desarrollo más activo y parece ser que se impone como la de referencia para desarrollar webservices usando Python. Por contra, la documentación disponible es escasa.</p>
<p><!-- more --></p>
<p><strong>Entremos en materia.</strong></p>
<p>Tenemos el <a href="http://blog.tenak.net/wp-content/uploads/2008/03/servicio.wsdl">siguiente descriptor</a> que define el servicio que queremos ofrecer y las operaciones que tiene disponibles. Digamos que el servicio tiene que devolver una lista de pares (peso,Variable) para una petición de un String. Caso práctico: le pedimos al webservice la última lista de la compra que hizo Juan (el String &laquo;Juan&raquo; sería el input del servicio) en la frutería, nos devolverá una lista de parejas (kilos, fruta), por ejemplo :)</p>
<p>Veamos la parte relevante:</p>
<p><pre><ol>
<li>&lt;!-- types --&gt;</li><li>&lt;wsdl:types&gt;</li><li>&lt;schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="Pares_NS"&gt;</li><li>&lt;complexType name="parPesoVariable"&gt;</li><li>&lt;sequence&gt;</li><li>&lt;element name="peso" type="xsd:long" minOccurs="1" maxOccurs="1"/&gt;</li><li>&lt;element name="variable" type="xsd:string" minOccurs="1" maxOccurs="1"/&gt;</li><li>&lt;/sequence&gt;</li><li>&lt;/complexType&gt;</li><li>&lt;complexType name="parPesoVariableList"&gt;</li><li>&lt;sequence&gt;</li><li>&lt;element name="par" type="dat:parPesoVariable" minOccurs="0" maxOccurs="unbounded"/&gt;</li><li>&lt;/sequence&gt;</li><li>&lt;/complexType&gt;</li><li>&lt;/schema&gt;</li><li>&lt;/wsdl:types&gt;</p></li><li><p>  &lt;!-- messages --&gt;</li><li>&lt;wsdl:message name="getParesRequest"&gt;</li><li>&lt;wsdl:part name="input" type="xsd:string"/&gt;</li><li>&lt;/wsdl:message&gt;</li><li>&lt;wsdl:message name="getParesResponse"&gt;</li><li>&lt;wsdl:part name="output" type="dat:parPesoVariableList"/&gt;</li><li>&lt;/wsdl:message&gt;</li>
</ol></pre>
</p>
<p>El primer paso será generar la base de código Python que luego extenderemos para crear nuestro servicio. Para ello usamos el script python <code>wsdl2py</code> y su compañero de viaje <code>wsdl2dispatch</code>. <strong>Atención</strong> como hacemos uso de tipos de dato complejos (<code>complexType</code>), necesitamos pasarle a <code>wsdl2py</code> el argumento <code>--complexType</code> (o <code>-b</code>), sino, tendremos errores en la serialización de los objetos python y del <a href="http://en.wikipedia.org/wiki/XML">XML</a> cuando os habléis con vuestro servicio. Aquí me tiré yo horas por no hacer un <code>--help</code> :)</p>
<p><pre><ol>
<li>$ wsdl2py --complexType --file Servicio.wsdl</li><li>$ wsdl2dispatch --file Servicio.wsdl</li>
</ol></pre>
</p>
<p>Estos dos comandos nos crearán 3 ficheros .py:</p>
<ul>
<li><code>Servicio_services.py</code></li>
<li><code>Servicio_services_server.py</code></li>
<li><code>Servicio_services_types.py</code></li>
</ul>
<p>Para crear nuestro servidor, extenderemos Servicio_services_server en una nueva clase (myServer, por ejemplo).</p>
<p><pre><ol>
<li>from ZSI import *</li><li>class MyServicio(ServicioService):</li><li>_wsdl = "".join(open("Servicio.wsdl").readlines()) # para devolver el WSDL a cliente que lo solicite</p></li><li><p>	def soap_getPares(self, ps, **kw):</li><li>response = ServicioService.soap_getPares(self, ps, **kw)</li><li>request = self.request</li><li>return self.getPares(request)</p></li><li><p>	def getPares(self, req):</li><li>db = DB.connect()</li><li>pares = db.getListaCompra(req.get_element_input())</li><li>return pares</li><li>...</p></li><li><p># y ahora un poco de OptionParser antes de ponerlo en marcha</li><li>op = OptionParser(usage="%prog [options]")</li><li>op.add_option("-l", "--loglevel", help="loglevel (DEBUG, WARN)",</li><li>metavar="LOGLEVEL")</li><li>op.add_option("-p", "--port", help="HTTP port",</li><li>metavar="PORT", default=8080, type="int")</li><li>options, args = op.parse_args()</p></li><li><p>if options.loglevel:</li><li>loglevel = eval(options.loglevel, logging.__dict__)</li><li>logger = logging.getLogger("")</li><li>logger.setLevel(loglevel)</p></li><li><p># Ejecutamos el servidor</li><li>AsServer(port=options.port, services=[MyServicio(),])</li>
</ol></pre>
</p>
<p>Ahora ya sólo faltaría el cliente (y la base de datos, que lo puse ahí vilmente :) ). También, ya habréis visto, los tabuladores del código se los ha pasado el wordpress por el forro, así que no hagáis copypaste ;-)</p>
<p>El cliente, lo dejo como ejercicio al ávido lector (siempre lo había querido decir esto xDD), os dejo un enlace <a href="http://pywebsvcs.sourceforge.net/holger.pdf">una buena guía</a> por si os quedáis atascados.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tenak.net/go/162/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
