<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Blog &#187; python</title>
	<atom:link href="http://www.rz0r.net/category/programing/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rz0r.net</link>
	<description>Otro blog mas de linux</description>
	<lastBuildDate>Tue, 23 Aug 2011 05:26:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Consumir web services SOAP facil con Python Suds</title>
		<link>http://www.rz0r.net/2011/07/consumir-web-services-soap-facil-con-python-suds/</link>
		<comments>http://www.rz0r.net/2011/07/consumir-web-services-soap-facil-con-python-suds/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 05:26:32 +0000</pubDate>
		<dc:creator>rz0r</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://www.rz0r.net/?p=186</guid>
		<description><![CDATA[Suds es un tremendo cliente SOAP para consumir web services es basado en Python a diferencia de los clientes en Java no hay generación de clases, y el API es tipo orientado a objetos. Y lo mejor es el poco código que se debe escribir para consumir un servicio web y para muestra un ejemplo [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=90e8a2b5c540d915d4179fab9eeaf31d&amp;default=http://en.gravatar.com/avatar/90e8a2b5c540d915d4179fab9eeaf31d?s=80&r=any' alt='No Gravatar' width=40 height=40/><p>Suds es un tremendo cliente SOAP para consumir web services es basado en Python a diferencia de los clientes en Java no hay generación de clases, y el API es tipo orientado a objetos. Y lo mejor es el poco código que se debe escribir para consumir un servicio web y para muestra un ejemplo sencillo:</p>
<p>Lo primero instalar el cliente ya sea descargándolo del sitio o instalando el paquetes si nuestra distribución de linux lo incluye en sus repositorios.</p>
<pre class="brush: bash; title: ; notranslate">
# fedora 15
yum -y install python-suds
# tarball
wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.4.tar.gz
tar xzvf python-suds-0.4.tar.gz
cd python-suds-0.4
python setup.py install
</pre>
<p>Para el ejemplo utilizaremos uno de los webservices del sitio webservicesx.net</p>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/env python

from suds.client import Client
url = 'http://www.webservicex.net/globalweather.asmx?WSDL'
client = Client(url)
print client
</pre>
<p>si todo esta correcto la salida del script mostrara esto:</p>
<p>web service output</p>
<pre class="brush: plain; title: ; notranslate">
Suds ( https://fedorahosted.org/suds/ )  version: 0.3.9 GA  build: R659-20100219

Service ( GlobalWeather ) tns=&quot;http://www.webserviceX.NET&quot;
   Prefixes (0)
   Ports (2):
      (GlobalWeatherSoap)
         Methods (2):
            GetCitiesByCountry(xs:string CountryName, )
            GetWeather(xs:string CityName, xs:string CountryName, )
         Types (0):
      (GlobalWeatherSoap12)
         Methods (2):
            GetCitiesByCountry(xs:string CountryName, )
            GetWeather(xs:string CityName, xs:string CountryName, )
         Types (0):
</pre>
<p>El servicio web tiene 2 metodos los cuales podemos invocar de la siguiente manera:</p>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/env python

from suds.client import Client
url = 'http://www.webservicex.net/globalweather.asmx?WSDL'
client = Client(url)
#print client
weather =  client.service.GetWeather('Managua', 'Nicaragua')
print weather
</pre>
<p>esto generara un string conteniendo el xml para que luego pueda ser procesado según se requiera .</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;
&lt;CurrentWeather&gt;
  &lt;Location&gt;Managua A. C. Sandino, Nicaragua (MNMG) 12-09N 086-10W 56M&lt;/Location&gt;
  &lt;Time&gt;Jul 18, 2011 - 12:00 AM EDT / 2011.07.18 0400 UTC&lt;/Time&gt;
  &lt;Wind&gt; from the ESE (110 degrees) at 5 MPH (4 KT):0&lt;/Wind&gt;
  &lt;Visibility&gt; greater than 7 mile(s):0&lt;/Visibility&gt;
  &lt;SkyConditions&gt; partly cloudy&lt;/SkyConditions&gt;
  &lt;Temperature&gt; 77 F (25 C)&lt;/Temperature&gt;
  &lt;DewPoint&gt; 73 F (23 C)&lt;/DewPoint&gt;
  &lt;RelativeHumidity&gt; 88%&lt;/RelativeHumidity&gt;
  &lt;Pressure&gt; 29.88 in. Hg (1011 hPa)&lt;/Pressure&gt;
  &lt;Status&gt;Success&lt;/Status&gt;
&lt;/CurrentWeather&gt;
</pre>
<p>Referencias:</p>
<p>Python Suds</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rz0r.net/2011/07/consumir-web-services-soap-facil-con-python-suds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Permutaciones con Python</title>
		<link>http://www.rz0r.net/2010/04/permutaciones-con-python/</link>
		<comments>http://www.rz0r.net/2010/04/permutaciones-con-python/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 05:24:18 +0000</pubDate>
		<dc:creator>rz0r</dc:creator>
				<category><![CDATA[planeta]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.rz0r.net/?p=139</guid>
		<description><![CDATA[Después de un buen rato sin postear nada en el blog por falta de tiempo, ahora regreso para postear algunos artículos sobre programación. Python es un excelente lenguaje para una tarea como la de generar códigos por ejemplo series o códigos para una lotería o promoción. Python en su versión 2.6 que probé viene con [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=90e8a2b5c540d915d4179fab9eeaf31d&amp;default=http://en.gravatar.com/avatar/90e8a2b5c540d915d4179fab9eeaf31d?s=80&r=any' alt='No Gravatar' width=40 height=40/><p>Después de un buen rato sin postear nada en el blog por falta de tiempo, ahora regreso para postear algunos artículos sobre programación.</p>
<p>Python es un excelente lenguaje para una tarea como la de generar códigos por ejemplo series o códigos para una lotería o promoción.</p>
<p>Python en su versión 2.6 que probé viene con la librería &#8220;<a href="http://docs.python.org/library/itertools.html">Itertools</a>&#8221; la cual provee funciones iterativas para el manejo eficiente de ciclos y secuencias.</p>
<p>Para demostrar el uso de la librería un ejemplo sencillo seria generar códigos sin repetición únicos alfanuméricos de 5 dígitos suponiendo que los caracteres pueden ser: &#8217;3479JKLNPQRTWXY&#8217;.</p>
<p>recordando un poco de matematica  n!/(n-r)!   se pueden hacer 360360 permutaciones.</p>
<p>supongamos que necesitamos los codigos generados en sets de 50,000 y necesitamos 300,000  tendriamos algo como esto</p>
<pre class="brush: python; title: ; notranslate">
import itertools

# permutacion
code = '3479JKLNPQRTWXY'
codigos = itertools.permutations(code,5)

# ruta a los archivos
path_prefix = '/home/strafe/data-codes/'

# numeracion de los archivos
files_number = range(1,6,1)

# lista con los nombres de los archivos
files = []
for x in files_number:
    files.append(path_prefix + &quot;set&quot;+str(x)+&quot;.csv&quot;)

# procesamiento.
inicio=0
fin=50000
for f in files:
    file = open(f,'w')
    x = list(itertools.islice(codigos,inicio,fin,1))
    for i in x:
        print &gt;&gt; file, &quot;&quot;.join(i)

    file.close()
    inicio=fin
    fin=fin+50000   
</pre>
<p>en el codigo se utilizan &#8220;itertools.permutations&#8221; y &#8220;itertools.islice&#8221;,  itertools.permutations hace el trabajo y itertools.islice permite tomar un rango determinado de la tupla.</p>
<p>Por razones de desempeño y uso de memoria es mas eficiente usar itertools.islice ya que de esa manera la memoria no se agotaria en tratar de procesar el resultado de itertools.permutations de una sola vez. </p>
<p>al final se tendria un resultado como este en los archivos:</p>
<p>3PQ4K<br />
3PQ4L<br />
3PQ4N<br />
3PQ4R<br />
&#8230;</p>
<p>referencias:</p>
<p><a href="http://docs.python.org/library/itertools.html">http://docs.python.org/library/itertools.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rz0r.net/2010/04/permutaciones-con-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando Mercurial hgwebdir + Apache + pygments</title>
		<link>http://www.rz0r.net/2008/12/configurando-mercurial-hgwebdir-apache-pygments/</link>
		<comments>http://www.rz0r.net/2008/12/configurando-mercurial-hgwebdir-apache-pygments/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 16:50:20 +0000</pubDate>
		<dc:creator>rz0r</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[planeta]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[Pygments]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.rz0r.net/?p=54</guid>
		<description><![CDATA[Para los ultimos proyectos que he trabajado he venido usando Mercurial para el control de version (SCM) es muy versatil, ha sido portado a diferentes plataformas se ejecuta en Linux/Windows/FreeBSD/Solaris, esta hecho en python y es similar a Git ademas de ser utilizado por diferentes proyectos grandes como Netbeans y otros. Este mini-howto esta basado [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=90e8a2b5c540d915d4179fab9eeaf31d&amp;default=http://en.gravatar.com/avatar/90e8a2b5c540d915d4179fab9eeaf31d?s=80&r=any' alt='No Gravatar' width=40 height=40/><p>Para los ultimos proyectos que he trabajado he venido usando Mercurial para el control de version (SCM) es muy versatil, ha sido portado a diferentes plataformas se ejecuta en Linux/Windows/FreeBSD/Solaris, esta hecho en python y es similar a Git ademas de ser utilizado por diferentes proyectos grandes como Netbeans y <a href="http://www.selenic.com/mercurial/wiki/index.cgi/ProjectsUsingMercurial" target="_blank">otros</a>.</p>
<p>Este mini-howto esta basado en la documentacion encontrada en la <a href="http://www.selenic.com/mercurial/wiki/index.cgi/HgWebDirStepByStep" target="_blank">wiki de Mercurial</a> con algunas modificaciones para adaptarlo a la distro que uso(Fedora 10) y agregando el uso de pygments para el color de la sintaxis.</p>
<p>lo necesario para iniciar:</p>
<ul>
<li>Apache web server</li>
<li>Mercurial 1.1</li>
<li>Pygments</li>
<li>Python 2.5</li>
</ul>
<p>la version de mercurial que viene con Fedora 10 al momento de escribir esto era 1.0.2 por lo que tuve que descargar la nueva version e instalarla, si la nueva version ya se encuentra en los repositorio solo habra que instalar normalmente con yum.</p>
<pre class="brush: python; title: ; notranslate">
wget http://www.selenic.com/mercurial/release/mercurial-1.1.1.tar.gz
tar xzvf mercurial-1.1.1.tar.gz
cd mercurial-1.1.1
# Editamos el archivo Makefile
# cambiamos PREFIX=/usr/local a  PREFIX=/usr
# si python esta bien instalado y sus dependencias ejecutamos

make all;  make install;  hg version
# se mostrara algo similar a esto &quot;Mercurial Distributed SCM (version 1.1+20081203)&quot;

# loggeado como usuario root
yum install -y python-pygments httpd
</pre>
<p>Ahora que ya tenemos todo lo necesario configuraremos el cgi de Mercurial y los repositorios.</p>
<pre class="brush: python; title: ; notranslate">
# siempre como root creamos los siguiente directorios
mkdir -p /var/www/hg/repos
</pre>
<p>Creamos el archivo de configuracion &#8220;hgweb.config&#8221; en /var/www/hg/</p>
<pre class="brush: python; title: ; notranslate">
[collections]
repos/ = repos/
[web]
style = gitweb
</pre>
<p>copiamos el cgi &#8220;hgwebdir.cgi&#8221; en /var/www/hg/ y le cambiamos los permisos</p>
<pre class="brush: python; title: ; notranslate">
chmod a+x hgwebdir.cgi
</pre>
<p>ahora configuramos el cgi en Apache, creamos un archivo de configuracion &#8220;hg.conf&#8221; en /etc/httpd/conf.d</p>
<pre class="brush: python; title: ; notranslate">
ScriptAliasMatch ^/hg(.*) /var/www/hg/hgwebdir.cgi$1
&lt;Directory /var/www/hg&gt;
Options ExecCGI FollowSymLinks
AllowOverride None
&lt;/Directory&gt;
</pre>
<p>Predeterminadamente el web server Apache que viene en Fedora incluira todas los archivos de configuraciones en /etc/httpd.conf.d/ con el sufijo &#8220;.conf&#8221;</p>
<p>comprobamos la configuracion con</p>
<pre class="brush: python; title: ; notranslate">
# esto debera retornar un mensaje de 'Sintaxis is OK'
/usr/sbin/httpd -t
</pre>
<p>Ahora queda configurar los repositorios, creamos un proyecto llamado &#8220;zf-test&#8221;</p>
<pre class="brush: python; title: ; notranslate">
mkdir zf-test
hg init
hg add
hg ci -m &quot;repositorio inicializado&quot;
cd ..
mv -r zf-test /var/www/hg/repos/
</pre>
<p>Una vez inicializado el repositorio y agregado los archivo lo movemos a al directorio de los repositorios y configuramos el repositorio del proyecto dentro del directorio .hg creamos un archivo llamado &#8220;hgrc&#8221;</p>
<pre class="brush: python; title: ; notranslate">
[web]
contact = JM
description = Aplicacion de Prueba Zend Framework.

style = gitweb
allow_push = *
allow_archive = zip gz bz2
push_ssl = false

pygments_style = autumn

[extensions]
hgext.highlight =
</pre>
<p>La configuracion indica lo siguiente style es la plantilla que usar hgwebdir para mostrar el directorio del proyecto en el browser, &#8220;allow_push = *&#8221; permite hacer cambios a cualquiera, esto esta asi porque esta pensado para funcionar en una intranet o red privada, si se hiciera publico se podria implementar las extensiones de mercurial para ACL y autenticacion via http con apache ademas de usar SSL para las conexiones y restringir los usuario que pueden hacer &#8220;push&#8221; o escribir en el repositorio.</p>
<p>La opcion allow_archive permite bajar el repositorio del proyecto completo en un archivo comprimido en formato zip, bz2 o gzip, la opcion hgext.highlight activa el coloreado de sintaxis para los archivos y el diff  utilizando pygments.</p>
<p>La libreria pygments cuenta con varios esquemas el usado aqui es &#8220;autumn&#8221; el usado por default por mercurial es &#8220;colorful&#8221;</p>
<p>El cgi hgwebdir puede usar otras plantillas que vienen con mercurial que son: gitweb, coal, monoblue, spartan y paper.</p>
<p>el paso mas importante para finalizar, para permitir la escritura y ejecucion del cgi el propietario de los repos y el cgi debe ser el usuario del web server Apache, en este caso es &#8220;apache&#8221;</p>
<pre class="brush: python; title: ; notranslate">
cd /var/www
chown apache:apache -R hg
</pre>
<p>He aqui algunos screenshots del hgwebdir usando la extension pygments corriendo en Apache.</p>
<div id="attachment_78" class="wp-caption alignleft" style="width: 310px"><a href="http://www.rz0r.net/wp-content/uploads/2008/12/mercurial-repositories-index.png"><img class="size-medium wp-image-78" title="mercurial-repositories-index" src="http://www.rz0r.net/wp-content/uploads/2008/12/mercurial-repositories-index-300x221.png" alt="mercurial-repositories-index" width="300" height="221" /></a><p class="wp-caption-text">mercurial-repositories-index</p></div>
<div id="attachment_83" class="wp-caption alignnone" style="width: 310px"><a href="http://www.rz0r.net/wp-content/uploads/2008/12/summary.png"><img class="size-medium wp-image-83" title="summary" src="http://www.rz0r.net/wp-content/uploads/2008/12/summary-300x221.png" alt="Sumario del repositorio del proyecto" width="300" height="221" /></a><p class="wp-caption-text">Sumario del repositorio del proyecto</p></div>
<div id="attachment_79" class="wp-caption alignnone" style="width: 310px"><a href="http://www.rz0r.net/wp-content/uploads/2008/12/files_display.png"><img class="size-medium wp-image-79" title="files_display" src="http://www.rz0r.net/wp-content/uploads/2008/12/files_display-300x221.png" alt="Vista de archivos en el repositorio" width="300" height="221" /></a><p class="wp-caption-text">Vista de archivos en el repositorio</p></div>
<div id="attachment_82" class="wp-caption alignnone" style="width: 310px"><a href="http://www.rz0r.net/wp-content/uploads/2008/12/pygments_in_action.png"><img class="size-medium wp-image-82" title="pygments_in_action" src="http://www.rz0r.net/wp-content/uploads/2008/12/pygments_in_action-300x224.png" alt="Pygments en accion" width="300" height="224" /></a><p class="wp-caption-text">Pygments en accion</p></div>
<div id="attachment_81" class="wp-caption alignnone" style="width: 310px"><a href="http://www.rz0r.net/wp-content/uploads/2008/12/pygments2.png"><img class="size-medium wp-image-81" title="pygments2" src="http://www.rz0r.net/wp-content/uploads/2008/12/pygments2-300x221.png" alt="pygments diff" width="300" height="221" /></a><p class="wp-caption-text">pygments diff</p></div>
<div id="attachment_80" class="wp-caption alignnone" style="width: 310px"><a href="http://www.rz0r.net/wp-content/uploads/2008/12/mercurial_graph.png"><img class="size-medium wp-image-80" title="mercurial_graph" src="http://www.rz0r.net/wp-content/uploads/2008/12/mercurial_graph-300x221.png" alt="Mercurial Visual Graph extension" width="300" height="221" /></a><p class="wp-caption-text">Mercurial Visual Graph extension</p></div>
<p>Referencia:</p>
<p><a href="http://www.selenic.com/mercurial/wiki/index.cgi/Mercurial" target="_blank">Mercurial</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rz0r.net/2008/12/configurando-mercurial-hgwebdir-apache-pygments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

