<?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; programing</title>
	<atom:link href="http://www.rz0r.net/category/programing/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>Zend Framework Shared Hosting</title>
		<link>http://www.rz0r.net/2011/05/zend-framework-shared-hosting/</link>
		<comments>http://www.rz0r.net/2011/05/zend-framework-shared-hosting/#comments</comments>
		<pubDate>Sat, 07 May 2011 05:08:51 +0000</pubDate>
		<dc:creator>rz0r</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.rz0r.net/?p=174</guid>
		<description><![CDATA[Por lo general cuando desarrollo una aplicación usando Zend Framework esta es desplegada en servidores compartidos donde no es posible realizar una configuración de virtual host en Apache. por lo que utilizo una estructura diferente para la aplicacion de tal modo que las aplicaciones quedan dentro del directorio “zend_apps”, las librerías del framework en “zf” [...]]]></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>Por lo general cuando desarrollo una aplicación usando Zend Framework esta es desplegada en servidores compartidos donde no es posible realizar una configuración de virtual host en Apache. por lo que utilizo una estructura diferente para la aplicacion</p>
<pre class="brush: plain; title: ; notranslate">
home
|-- [account]
    |-- zend_apps
    |    |-- mobile
    |        |-- application
    |        |-- docs
    |        |-- library
    |        `-- test
    `-- zf
    |   `-- library
    `-- public_html
        `-- mobile
            |-- css
            |-- img
            |-- js
            |-- index.php
            `-- .htaccess
</pre>
<p>de tal modo que las aplicaciones quedan dentro del directorio “zend_apps”, las librerías del framework en “zf” y los archivos que seran publicos(hojas de estilo, imagenes  y javascript) en un folder dentro del directorio raiz del sitio o si se requiere en el mismo directorio raiz “public_html”  y solo se modifica  el  index.php y el archivos .htaccess para corregir las rutas.</p>
<pre class="brush: php; highlight: [4,5,17]; title: ; notranslate">
&lt;?php
// file: index.php

$apps_path = getenv('ZendApps');  // applications path
$zf_libs = getenv('ZFpath'); // Zend Framework libs path

defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', $apps_path . DIRECTORY_SEPARATOR . 'mobile/application');

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
                                              realpath(APPLICATION_PATH . '/../library'),
                                              realpath($zf_libs . '/library'),
                                              get_include_path(),
                                         )));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
);
$application-&gt;bootstrap()
        -&gt;run();
</pre>
<p>Para que los cambios funcionen es necesario agregar variables de entorno en el htaccess utilizando las directivas del modulo de Apache mod_env en el cual debe estar habilitado en el servidor y tendremos un htaccess como este:</p>
<pre class="brush: plain; highlight: [2,3]; title: ; notranslate">
# htaccess
SetEnv ZendApps &quot;/home/username/zend_apps&quot;
SetEnv ZFpath &quot;/home/username/zf&quot;
SetEnv APPLICATION_ENV &quot;production&quot;
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</pre>
<p>con este cambio la aplicacion funcionara correctamente y no es necesario configurar un virtual host.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rz0r.net/2011/05/zend-framework-shared-hosting/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>Google Code ahora con soporte para Mercurial.</title>
		<link>http://www.rz0r.net/2009/06/google-code-ahora-con-soporte-para-mercurial/</link>
		<comments>http://www.rz0r.net/2009/06/google-code-ahora-con-soporte-para-mercurial/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 04:52:24 +0000</pubDate>
		<dc:creator>rz0r</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://www.rz0r.net/?p=120</guid>
		<description><![CDATA[Una muy buena eleccion de google code al incluir el soporte para mercurial en mi opinion personal es mas eficiente que otros VCS y DVCS(sistemas de control de version distribuidos) la transicion es mas sencilla viniendo de otros VCS, portable funciona en freebsd/solaris/linux/windows y puedes usar ssh o http para la comunicacion con el repositorio. [...]]]></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>Una muy buena eleccion de google code al incluir el soporte para mercurial en mi opinion personal es mas eficiente que otros VCS y DVCS(sistemas de control de version distribuidos) la transicion es mas sencilla viniendo de otros VCS, portable funciona en freebsd/solaris/linux/windows  y puedes usar ssh o http para la comunicacion con el repositorio.</p>
<p>Segun google Mercurial tuvo mejor desempeño que Git a como se puede ver en su <a href="http://code.google.com/p/support/wiki/DVCSAnalysis" target="blank">analisis</a></p>
<p>Tambien se puede comparar y ver un analisis mas detallado entre los DVCS (hg/bazzar/git) en el sitio de <a href="http://www.python.org/dev/peps/pep-0374/" target="blank">Python</a>.</p>
<p>para probarlo he creado <a href="http://code.google.com/p/jms-scripts/" target="blank">mi repositorio</a> y funciona muy bien. aunque por el momento he estado usando <a href="http://www.bitbucket.org" target="blank">Bitbucket</a> probablemente me cambie a google code por el 1GB de espacio ofrecido.</p>
<p>Referencia:</p>
<p><a href="http://hgbook.red-bean.com/" target="blank">http://hgbook.red-bean.com/</a><br />
<a href="http://google-code-updates.blogspot.com/2009/05/mercurial-now-available-to-all-open.html" target="blank">http://google-code-updates.blogspot.com/2009/05/mercurial-now-available-to-all-open.html</a><br />
<a href="http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/" target="blank">http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/</a><br />
<a href="http://betterexplained.com/articles/a-visual-guide-to-version-control/" target="blank">http://betterexplained.com/articles/a-visual-guide-to-version-control/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rz0r.net/2009/06/google-code-ahora-con-soporte-para-mercurial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP como simple CGI en Apache Windows.</title>
		<link>http://www.rz0r.net/2009/06/php-como-simple-cgi-en-apache-windows/</link>
		<comments>http://www.rz0r.net/2009/06/php-como-simple-cgi-en-apache-windows/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 04:50:39 +0000</pubDate>
		<dc:creator>rz0r</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://rz0r.wordpress.com/?p=60</guid>
		<description><![CDATA[Por lo general paso la mayor parte del tiempo programando en Linux, pero a veces debo usar otros entornos como windows,  por lo que esta vez mostrare una forma diferente de configurar PHP en windows, la mas común es configurar el PHP como modulo, pero también se puede hacer como CGI  aplicando la siguiente configuración en [...]]]></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>Por lo general paso la mayor parte del tiempo programando en Linux, pero a veces debo usar otros entornos como windows,  por lo que esta vez mostrare una forma diferente de configurar PHP en windows, la mas común es configurar el PHP como modulo, pero también se puede hacer como CGI  aplicando la siguiente configuración en el httpd.conf  de Apache (esto servirá para versión 2.2.x)</p>
<pre class="brush: plain; title: ; notranslate">
# php configuration as CGI
ScriptAlias /php/ &quot;c:/php/&quot;
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Action application/x-httpd-php &quot;/php/php-cgi.exe&quot;
SetEnv PHPRC C:/php
&lt;Directory &quot;C:/php&quot;&gt;
    AllowOverride All
    Options None
    Order allow,deny
    Allow from all
&lt;/Directory&gt;

&lt;IfModule dir_module&gt;
    DirectoryIndex index.html index.php
&lt;/IfModule&gt;
</pre>
<p>Asumiendo que PHP fue extraído en el directorio &#8220;c:/php&#8221;  definimos el script action(el ejecutable del CGI), los types( para el manejo de las extensiones .php ), el script alias(ubicación del php), el SetEnv PHPRC para la ubicación del archivo de configuración y las directivas para el directorio. </p>
<p>Reiniciamos el servicio y con esto bastara para tener funcionando el PHP como un simple CGI en Apache 2.2.x.<br />
la ventaja de usar el PHP como CGI es que cuando cambies la configuración del &#8220;php.ini&#8221; no sera necesario reiniciar el servicio. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rz0r.net/2009/06/php-como-simple-cgi-en-apache-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

