<?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>Python &#8211; Emanuel Paxtian</title>
	<atom:link href="https://emanuelpaxtian.com/blog/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://emanuelpaxtian.com/blog</link>
	<description></description>
	<lastBuildDate>Sat, 15 Aug 2015 14:12:10 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Eliminar Un Elemento de una Lista en python</title>
		<link>https://emanuelpaxtian.com/blog/codigo-para-eliminar-un-elemento-de-una-lista-en-python/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Sat, 22 Mar 2014 00:10:01 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://6b6d2python.jpg</guid>

					<description><![CDATA[Ejemplo de Listas en Python: Elimina la primera ocurrencia de un elemento en la lista]]></description>
										<content:encoded><![CDATA[<p>Ejemplo de Listas en Python: Elimina la primera ocurrencia de un elemento en la lista</p>
<pre class="brush: python; title: ; notranslate">
# Eliminar la primera ocurrencia de value en la lista.
 
import random
 
def eliminarElemento(lista, value):
    lista.remove(value)
 
def imprimirLista(lista,nombre):
    for i in range(0,len(lista)):
        print nombre + &quot;&#x5B;&quot; + str(i) + &quot;]=&quot; + str(lista&#x5B;i])
 
def leerLista():
    lista=&#x5B;]
 
    i=0
    while i &amp;lt; 10:
        lista.append(int(random.randint(0, 10)))
        i=i+1
    return lista
 
A=leerLista()
imprimirLista(A,&quot;A&quot;)
cn=int(raw_input(&quot;Valor a liminar: &quot;))
eliminarElemento(A,cn)
imprimirLista(A,&quot;A&quot;)
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Corriendo python bajo apache</title>
		<link>https://emanuelpaxtian.com/blog/corriendo-python-bajo-apache/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Thu, 06 Mar 2014 14:48:04 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://8260c2014-03-06_14-47-36.png</guid>

					<description><![CDATA[Vamos a aprender cómo servir aplicaciones Web con Python, utilizando el servidor Apache, No es mucha la bibliografía que puede encontrarse al respecto, pero sí, lo es bastante confusa y&#8230;]]></description>
										<content:encoded><![CDATA[<p>Vamos a aprender cómo servir aplicaciones Web con Python, utilizando el servidor Apache, No es mucha la bibliografía que puede encontrarse al respecto, pero sí, lo es bastante confusa y hasta incluso contradictoria.</p>
<p>¿Qué necesitamos?<br />
En principio, necesitamos hacer que Apache, incorpore un soporte para servir archivos Python. Para ello, necesitaremos habilitarle un módulo, que brinde este soporte.</p>
<p>Existen varios módulos de Apache que brindan soporte para correr archivos Python. Uno de los más populares es el módulo mod_python, que sin embargo, presenta algunos problemas que pueden prevenirse, utilizando el módulo mod_wsgi el cual utilizaremos en este curso.</p>
<p>1) Instalación de mod_wsgi en Apache</p>
<p>Para habilitar mod_wsgi en Apache, basta con instalar el paquete libapache2-mod-wsgi:</p>
<blockquote><p>sudo apt-get install libapache2-mod-wsgi</p></blockquote>
<p>2) Crear la estructura de directorios para nuestra aplicación</p>
<p>Primero, es importante saber, como va a funcionar nuestra aplicación y cómo va a interactuar vía Web.</p>
<p>Debemos tener un directorio destinado a montar toda la aplicación:</p>
<blockquote><p>mkdir /home/yo/curso-python/trunk/python-web</p></blockquote>
<p>Dentro de este directorio, vamos a dividir su arquitectura en dos partes:</p>
<p>Destinada al almacenaje de nuestra aplicación Python pura (será un directorio privado, no servido).<br />
Destinada a servir la aplicación (directorio público servido) en el cuál solo almacenaremos archivos estáticos.</p>
<blockquote><p>mkdir /home/yo/curso-python/trunk/python-web/mypythonapp<br />
mkdir /home/yo/curso-python/trunk/python-web/public_html</p></blockquote>
<p>Dentro de nuestro directorio mypythonapp, almacenaremos entonces, todos los módulos y paquetes de nuestra aplicación Python, mientras que en public_html, estarán todos los archivos estáticos y será el único directorio al que se pueda acceder mediante el navegador Web.</p>
<p>Aprovecharemos este paso, para crear una carpeta, destinada a almacenar los logs de errores y accesos a nuestra Web App:</p>
<blockquote><p>mkdir /home/yo/curso-python/trunk/python-web/logs</p></blockquote>
<p>3) Crear un controlador para la aplicación</p>
<p>Todas las peticiones realizadas por el usuario (es decir, las URI a las cuáles el usuario acceda por el navegador), serán manejadas por un único archivo, que estará almacenado en nuestro directorio mypythonapp.</p>
<blockquote><p>echo &#8216;# -*- coding: utf-8 -*-&#8216; &gt; mypythonapp/controller.py</p></blockquote>
<p>Este archivo controller.py actuará como un pseudo front controller, siendo el encargado de manejar todas las peticiones del usuario, haciendo la llamada a los módulos correspondientes según la URI solicitada.</p>
<p>Dicho módulo, solo se encargará de definir una función, que actúe con cada petición del usuario. Esta función, deberá ser una función WSGI aplicación válida. Esto significa que:</p>
<p>Deberá llamarse application<br />
Deberá recibir dos parámetros: environ, del módulo os, que provee un diccionario de las peticiones HTTP estándar y otras variables de entorno, y la función start_response, de WSGI, encargada de entregar la respuesta HTTP al usuario.</p>
<pre class="brush: php">def application(environ, start_response): 
# Genero la salida HTML a mostrar al usuario output = "&lt;p&gt;Bienvenido a mi &lt;b&gt;PythonApp&lt;/b&gt;!!!&lt;/p&gt;" 
# Inicio una respuesta al navegador 
start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')]) 
# Retorno el contenido HTML 
return output&lt;
</pre>
<p>Más adelante, veremos como crear un Application WSGI Controller, mucho más potente.</p>
<p>4) Configurar el VirtualHost</p>
<p>En la buena configuración de nuestro VirtualHost, estará la clave para correr nuestra aplicación Python a través de la Web.</p>
<p>Mientras que el DocumentRoot de nuestro sitio Web, será la carpeta pública, public_html, una variable del VirtualHost, será la encargada de redirigir todas las peticiones públicas del usuario, hacia nuestro front controller. Y la variable que se encargue de esto, será el alias WSGIScriptAlias:</p>
<blockquote><p>sudo nano /etc/apache2/sites-available/python-web</p></blockquote>
<p>Una vez allí, escribimos el contenido del nuevo virtual host:</p>
<blockquote><p>&lt;VirtualHost *:80&gt;<br />
ServerName python-web</p>
<p>DocumentRoot /home/yo/curso-python/trunk/python-web/public_html<br />
WSGIScriptAlias / /home/yo/curso-python/trunk/python-web/mypythonapp/controller.py<br />
ErrorLog /home/yo/curso-python/trunk/python-web/logs/errors.log<br />
CustomLog /home/yo/curso-python/trunk/python-web/logs/access.log combined</p>
<p>&lt;Directory /&gt;<br />
Options FollowSymLinks<br />
AllowOverride All<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;</p></blockquote>
<p>Una vez configurado nuestro VirtualHost:</p>
<p>Habilitamos el sitio web: sudo a2ensite python-web<br />
Recargamos Apache: sudo service apache2 reload<br />
Habilitamos el sitio en nuestro host: sudo nano /etc/hosts y allí agregamos la siguiente línea:</p>
<blockquote><p>127.0.0.1python-web</p></blockquote>
<p>A partir de ahora, si abrimos nuestro navegador Web e ingresamos la url http://python-web veremos la frase: &#8220;Bienvenido a mi PythonApp&#8221;.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mitos en Python sobre ofuscación y reversing</title>
		<link>https://emanuelpaxtian.com/blog/mitos-en-python-sobre-ofuscacion-y-reversing/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Wed, 05 Mar 2014 20:08:08 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://07dd6simonroses_python_cap11.png</guid>

					<description><![CDATA[Es habitual que se entregue el código fuente de los programas en Python, aunque en algunos casos se aplican diversas técnicas como ofuscación y compilación para proteger el código de&#8230;]]></description>
										<content:encoded><![CDATA[<p>Es habitual que se entregue el código fuente de los programas en Python, aunque en algunos casos se aplican diversas técnicas como ofuscación y compilación para proteger el código de los ojos curiosos. Pero ¿realmente funcionan estas técnicas?</p>
<p>En este artículo veremos algunas herramientas que supuestamente nos ayudan a proteger nuestro código y lo fácil que es subvertirlas.</p>
<p>A continuación tenemos dos programas de ejemplo escritos en Python: el primero es una simple función que nos pide una contraseña y nos muestra un mensaje; el segundo ejemplo es igual, aunque en esta ocasión hemos utilizado una clase.</p>
<pre class="brush: python">def main():

        a = "toomanysecrets"

        res = raw_input("Please enter your password: ")
        
        if res == a:
                print "ACCESS GRANTED"
        else:
                print "ACCESS DENIED"

if __name__ == "__main__":
	main()
</pre>
<p>secretapp1.py</p>
<pre class="brush: python">class DoMain:

        def __init__(self):
                self.a = "toomanysecrets"

        def Ask(self):
                res = raw_input("Please enter your password: ")

                if res == self.a:
                        print "ACCESS GRANTED"
                else:
                        print "ACCESS DENIED"

if __name__ == "__main__":
	dm = DoMain()
	dm.Ask()
</pre>
<p>secretapp2.py</p>
<p>Supongamos que no quiero entregar el código de estos programas, por lo que tengo varias opciones. Nuestra primera opción será ofuscar el código, dificultando su lectura.</p>
<p><strong>Pyobfuscate</strong></p>
<p>Este programa nos permite ofuscar nuestro programa de forma totalmente válida para el intérprete Python. Veamos un ejemplo con SecretApp1 y SecretApp2.</p>
<p><img fetchpriority="high" decoding="async" src="../fotos/simonroses_python_cap1.png" alt="simonroses_python_cap1" width="677" height="354" border="0" /><br />
Fig. 1 – Secretapp1 ofuscado</p>
<p><img decoding="async" src="../fotos/simonroses_python_cap2.png" alt="simonroses_python_cap2" width="677" height="354" border="0" /><br />
Fig. 2 – Secretapp2 ofuscado</p>
<p>A simple vista nuestro código no tiene sentido, pero si analizamos el resultado veremos cómo las cadenas de texto siguen en el código y podemos reconocer sintaxis de Python. No es demasiado difícil reconstruir el código ofuscado.</p>
<p><strong>Htibctobf</strong></p>
<p>Originalmente esta herramienta se escribió para resolver un reto en una competición de hacking en el congreso Hack in the Box.</p>
<p>A diferencia de la anterior herramienta, Htibctobf ofusca el código Python modificando los AST (<a href="http://docs.python.org/2/library/ast.html">Abstract Syntax Trees</a>). Al ejecutar esta herramienta podemos ver nuestro código Python ofuscado en la Fig. 3 y Fig. 4.</p>
<p><img decoding="async" src="../fotos/simonroses_python_cap3.png" alt="simonroses_python_cap3" width="677" height="342" border="0" /><br />
Fig. 3 – Secretapp1 ofuscado</p>
<p><img loading="lazy" decoding="async" src="../fotos/simonroses_python_cap4.png" alt="simonroses_python_cap4" width="677" height="342" border="0" /><br />
Fig. 4 – Secretapp2 ofuscado</p>
<p>Podemos observar el código ofuscado, incluso las cadenas de texto, sin embargo a pesar de todo no es demasiado difícil reconstruir el código original.</p>
<p>Sin duda un interesante concepto con amplias posibilidades pero que requiere de mejoras para ser útil.</p>
<p>En algunos casos quizás baste con ofuscar el código, pero busquemos otras opciones para proteger nuestro código de forma más efectiva: tendremos que recurrir a compilar el código Python creando un ejecutable.</p>
<p><strong>Py2exe</strong></p>
<p>Posiblemente una de las opciones más populares para convertir código Python en ejecutables Windows. <a href="http://www.py2exe.org/">Py2exe</a></p>
<p>En primer lugar tenemos que crear un fichero llamado setup.py que incluya una referencia a nuestro programa que queremos compilar. Ver código setup.</p>
<pre class="brush: python">from distutils.core import setup
import py2exe

setup(console=['secretapp1.py'])
</pre>
<p>setup.py</p>
<p>Ya estamos listos para compilar nuestro código Python en un ejecutable Windows, para ello ejecutamos py2exe. Ver Fig. 5.</p>
<p><img decoding="async" src="../fotos/simonroses_python_cap5.png" alt="simonroses_python_cap5" border="0" /><br />
Fig. 5 – Compilando secretapp1.exe</p>
<p>Una vez finalizado el proceso de compilación, py2exe nos creará un directorio llamado “dist” que incluye nuestro ejecutable y algunas librerías necesarias. En la Fig. 6 podemos ver que py2exe finaliza con éxito y ejecutamos nuestro programa en formato exe.</p>
<p><a href="http://www.simonroses.com/wp-content/uploads/2013/10/simonroses_python_cap6.png"><img loading="lazy" decoding="async" src="../fotos/simonroses_python_cap6.png" alt="simonroses_python_cap6" width="677" height="342" border="0" /></a><br />
Fig. 6 – Compilación completada</p>
<p>Ahora podríamos distribuir este binario sin miedo a entregar nuestro código o quizás no ¿?</p>
<p><strong>Py2exe_extract</strong></p>
<p>Esta herramienta nos permite extraer los objetos Python dentro de los ejecutables creados con py2exe, básicamente invertimos el proceso.<a href="http://code.google.com/p/py2exe-extract/">Py2exe_extract</a></p>
<p>En la Fig. 7 podemos ver como utilizamos py2exe_extract para obtener el fichero objeto (el contenido de este fichero es independiente de la plataforma y se conoce como Bytecode) de nuestra aplicación secretapp1.exe (secretapp1.pyc)</p>
<p><img loading="lazy" decoding="async" src="../fotos/simonroses_python_cap7.png" alt="simonroses_python_cap7" width="677" height="342" border="0" /><br />
Fig. 7 – Extrayendo el fichero objeto</p>
<p>Ahora tenemos que ver cómo podemos obtener el código de este fichero objeto.</p>
<p><strong>Unwind</strong></p>
<p><a href="https://github.com/evanw/unwind">Unwind</a> es un desensamblador para Python Bytecode que podemos utilizar para analizar ficheros objetos “.pyc”. Para este ejemplo he escrito un simple script en Python, mytest.py, que importa el desensamblador y analiza el fichero pyc. Ver código a continuación.</p>
<pre><code>
import unwind

print(unwind.disassemble('secretapp1.pyc'))
</code></pre>
<p>mytest.py</p>
<p>Con este script podemos ejecutar el siguiente comando y obtener un desensamblado del fichero objeto. Ver Fig. 8.</p>
<p><img loading="lazy" decoding="async" src="../fotos/simonroses_python_cap8.png" alt="simonroses_python_cap8" width="669" height="850" border="0" /><br />
Fig. 8 – Python Bytecode</p>
<p><strong>Uncompyle2</strong></p>
<p>Otra opción es utilizar un decompilador como <a href="https://github.com/wibiti/uncompyle2">uncompyle2</a> para obtener el código directamente del fichero objeto “.pyc” sin tener que pasar por el desensamblador como vimos anteriormente.</p>
<p>Esta herramienta es potente y fácil de utilizar, como se puede observar en la Fig. 9 mediante un simple comando obtenemos el código fuente de secretapp1.pyc.</p>
<p><img loading="lazy" decoding="async" src="../fotos/simonroses_python_cap9.png" alt="simonroses_python_cap9" width="677" height="342" border="0" /><br />
Fig. 9 – Código de secretapp1 obtenido del fichero objeto</p>
<p>Wow, tenemos código fuente!</p>
<p>A lo largo del artículo hemos visto algunas técnicas de ofuscación y compilación de código Python para protegerlo, no obstante hemos podido subvertir todo el proceso de protección fácilmente ïŠ</p>
<p>La siguiente lista son otros compiladores Python que podemos utilizar para Windows, Linux o MacOS, pero tienen los mismos problemas.</p>
<ul>
<li><a href="http://cx-freeze.sourceforge.net/">cx_Freeze</a></li>
<li><a href="http://code.google.com/p/shedskin/">Shed Skin</a></li>
<li><a href="http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html">py2app</a></li>
</ul>
<p>También podríamos analizar y subvertir el binario utilizando herramientas como <a href="https://www.hex-rays.com/products/ida/index.shtml">IDA PRO</a> o <a href="http://www.immunityinc.com/products-immdbg.shtml">Immunity Debugger</a>, lo que dejaremos para un futuro post. Otra interesante herramienta que no he comentado es <a href="https://github.com/MyNameIsMeerkat/pyREtic">pyREtic</a>, un potente framework para reversing de in-memory de Python Bytecode.</p>
<p>Que un atacante consiga el código Python es cuestión de tiempo, sin embargo para ponérselo realmente difícil desde un punto de vista defensivo se<br />
tienen que combinar diferentes técnicas.</p>
<p>Fuente simonroses</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Algoritmo que imprime el mínimo, el máximo y la media de tres números en python</title>
		<link>https://emanuelpaxtian.com/blog/algoritmo-que-imprime-el-minimo-el-maximo-y-la-media-de-tres-numeros-en-python/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Tue, 25 Feb 2014 23:41:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://0b572python.jpg</guid>

					<description><![CDATA[Algoritmo que imprime el mínimo, el máximo y la media de tres números en python Sin mas aqui esta el codigo. # Obtenemos números. numeros = [] for i in&#8230;]]></description>
										<content:encoded><![CDATA[<p>Algoritmo que imprime el mínimo, el máximo y la media de tres números en python</p>
<p>Sin mas aqui esta el codigo.</p>
<pre class="brush: python"># Obtenemos números.
numeros = []
for i in ['primer', 'segundo','tercer']:
    texto = u'Introduce el %s número: ' % (i)
    numeros.append(float(raw_input(texto)))

# Ordenamos.
numeros.sort()

# Obtenemos máximo y mínimo.
minimo = numeros[0]
maximo = numeros[2]

# Obtenemos la media aritmética.
media = round((numeros[0] + numeros[1] + numeros[2]) / float(3),3)

# Visualizamos resultados.
cadena = u'Mínimo: %d, Máximo: %d, Media: %f' % (minimo, maximo, media)
print cadena
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Convertir python (py) a ejecutable (exe) en Windows</title>
		<link>https://emanuelpaxtian.com/blog/convertir-python-py-a-ejecutable-exe-en-windows/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Tue, 11 Feb 2014 23:00:27 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://b6cd6LogoPython.png</guid>

					<description><![CDATA[En muchas ocasiones por algunas cuestiones nos interesa convertir nuestro archivo de python a ejecutable. En esta ocasión le mostrare como convertir fácilmente de python a Windows con la librería&#8230;]]></description>
										<content:encoded><![CDATA[<p>En muchas ocasiones por algunas cuestiones nos interesa convertir nuestro archivo de python a ejecutable.</p>
<p>En esta ocasión le mostrare como convertir fácilmente de python a Windows con la librería cx_Freeze el cual descargaremos http://cx-freeze.sourceforge.net/ ahí elegimos la versión que tenemos instalada de python y la versión del sistema si es 32 o 64 bits, luego tendremos que crear un archivo de configuración donde pondremos los datos de información de nuestro sistema y donde importaremos la librería quedando de la siguiente forma.</p>
<pre class="brush:python">#setup.py
from cx_Freeze import setup, Executable
setup(
   name = "Nombre interno",
   version = "0.1",
   description = "Descripcion",
   executables=[Executable("Tuprograma.py")]
)  
</pre>
<p>Donde Tuprograma.py es el código de tu programa una vez tengamos estos nos dirigimos a la consola de Windows y teclearemos el el siguiente comando</p>
<p>Python.exe .\setup.py build</p>
<p>En este ejemplo se supone que el archive de configuración es setup.py y que esta en la misma carpeta donde esta nuestro ejecutable de python</p>
<p>Luego de esto se creara una carpeta llamada build y en ella se encontrara nuestra aplicación ya compilada</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Código Python &#8211;  Insertar Un Elemento en una Lista</title>
		<link>https://emanuelpaxtian.com/blog/codigo-python-insertar-un-elemento-en-una-lista/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Tue, 04 Feb 2014 08:33:59 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://8b164python.jpg</guid>

					<description><![CDATA[Ejemplo en python de como insertar un elemento en una lista de elementos. import random def insertarElemento(lista, indice, elemento): lista.insert(indice,elemento) def imprimirLista(lista,nombre): for i in range(0,len(lista)): print nombre + "["&#8230;]]></description>
										<content:encoded><![CDATA[<p>Ejemplo en python de como insertar un elemento en una lista de elementos.</p>
<pre class="brush:python">import random

def insertarElemento(lista, indice, elemento):
    lista.insert(indice,elemento)

def imprimirLista(lista,nombre):
    for i in range(0,len(lista)):
        print nombre + "[" + str(i) + "]=" + str(lista[i])

def leerLista():
    lista=[]

    i=0
    while i &lt; 10:
        lista.append(int(random.randint(0, 10)))
        i=i+1
    return lista

A=leerLista()
imprimirLista(A,"A")
cn_val=int(raw_input("Ingrese Valor: "))
cn_ind=int(raw_input("Ingrese Indice: "))
insertarElemento(A,cn_ind,cn_val)
imprimirLista(A,"A")
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Nueva identidad Proxy Tor linea de comando en python</title>
		<link>https://emanuelpaxtian.com/blog/nueva-identidad-proxy-tor-linea-de-comando-en-python/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Sat, 01 Feb 2014 09:53:23 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://81ffator_project_logo_hq.png</guid>

					<description><![CDATA[Se me presento el caso de automatizar un sistema para que cada hora me creara una identidad nueva en Tor Tor acepta trae integrado en servidor telnet el cual acepta&#8230;]]></description>
										<content:encoded><![CDATA[<p>Se me presento el caso de automatizar un sistema para que cada hora me creara una identidad nueva en Tor</p>
<p>Tor acepta trae integrado en servidor telnet el cual acepta comando entre ellos el signal newnym el cual concede una nueva conexión a tor<br />
En esta ocasión dejo un pequeño código en python el cual renueva la nueva identidad para ello se debe de entrar a la configuración de tor y ponerle una contraseña para acceder al Telnet.</p>
<p>Hay que hacer mencion que se debe tener la libreria TorCtl instala en pyton para que este funcione ya que sin ella no funcionara el codigo</p>
<pre class="brush: python; title: ; notranslate">
from TorCtl import TorCtl
conn = TorCtl.connect(controlAddr=&quot;127.0.0.1&quot;, controlPort=9051, passphrase=&quot;abc&quot;)
TorCtl.Connection.send_signal(conn, &quot;NEWNYM&quot;)
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Uso de switch en python</title>
		<link>https://emanuelpaxtian.com/blog/uso-de-switch-en-python/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Thu, 02 Jan 2014 15:57:24 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://20977Python-Programming-Language-798x350.png</guid>

					<description><![CDATA[¿No hay Switch en python? Esto es algo que nos ha sorprendido a todos los que alguna vez nos hemos enfrentado al Python. ¿Por qué demonios no hay un switch?&#8230;]]></description>
										<content:encoded><![CDATA[<p>¿No hay Switch en python?</p>
<p>Esto es algo que nos ha sorprendido a todos los que alguna vez nos hemos enfrentado al Python. ¿Por qué demonios no hay un switch? ¿Y ahora qué hago yo? ¿Tengo que anidar un montón de if-else?</p>
<p>Pues no, en Python no existe la estructura switch. Sin embargo no es necesario empezar a anidar if-else, podemos usar diccionarios.</p>
<p>Un diccionario en Python es parecido a lo que en otros lenguajes se llama array asociativo y se define así:</p>
<pre class="brush: python">edades = { 'Paco': 20, 'Luis': 25, 'Lucas': 30 }
</pre>
<p>y la forma de usarlo es:</p>
<pre class="brush: python">edades['Paco']
</pre>
<p>por ejemplo:</p>
<pre class="brush: python">print ("La edad de Paco es "+str(edades['Paco'])+".")
</pre>
<p>Que mostrará: La edad de Paco es 20. Entonces, si quisiéramos algo como esto (ojo, recuerda que este código no funciona en Python):</p>
<pre class="brush: python">nombre = "Luis"
switch(nombre):
   case 'Paco':
     edad = 20
     break
   case 'Luis':
     edad = 25
     break
   case 'Lucas':
     edad = 30
     break
print edad
</pre>
<p>tendríamos que hacer:</p>
<pre class="brush: python">edades = { 'Paco': 20, 'Luis': 25, 'Lucas': 30 }
nombre = 'Luis'
edad = edades[nombre]
print edad
</pre>
<p>Bastante sencillo ¿no? Pero, podrías pensar, esto está muy bien para seleccionar valores como en este caso pero ¿y si lo que quiero es llamar a una función o ejecutar un bloque de código? Pues tranquilo, porque se puede. Mira el siguiente ejemplo:</p>
<pre class="brush: python">def sumar(a, b):
    return a + b
 
def restar(a, b):
    return a - b
 
def multiplicar(a, b):
    return a * b;
 
num1 = raw_input("Num1: ")
num2 = raw_input("Num2: ")
 
print("Opciones\n1.- Sumar\n2.- Restar\n3.- Multiplicar")
 
operaciones = { '1': sumar, '2': restar, '3': multiplicar}
 
seleccion = raw_input('Escoge una: ')
try:
    resultado = operaciones[seleccion](int(num1), int(num2))
    print resultado
except:
    print("Esa no vale")
</pre>
<p>Como en este caso no sabemos la opción que va a elegir el usuario (podría teclear un 4 o cualquier otra cosa) tenemos que usar try-except para evitar errores (algo similar al default de los switch-case).</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>La sentencia if &#8211; else en python</title>
		<link>https://emanuelpaxtian.com/blog/la-sentencia-if-else-en-python/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Wed, 01 Jan 2014 11:03:41 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://8e5c9ifelse.png</guid>

					<description><![CDATA[A menudo es necesario que un programa ejecute unas instrucciones cuando se cumplan unas condiciones y otras cuando no. En esos casos se utiliza la estructura de control if &#8230;&#8230;]]></description>
										<content:encoded><![CDATA[<p>A menudo es necesario que un programa ejecute unas instrucciones cuando se cumplan unas condiciones y otras cuando no. En esos casos se utiliza la estructura de control if &#8230; else &#8230;.. En inglés &#8220;if&#8221; significa &#8220;si&#8221; (condición) y &#8220;else&#8221; significa &#8220;si no&#8221;. La orden en Pyhton se escribe así:</p>
<pre class="brush:plain">if condición:
  aquí van las órdenes que se ejecutan si la condición es cierta
  y que pueden ocupar varias líneas
else:
  y aquí van las órdenes que se ejecutan si la condición es
  falsa y que también pueden ocupar varias líneas
</pre>
<p>La primera línea contiene la condición a evaluar. Esta línea debe terminar siempre por dos puntos (:).<br />
A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera).</p>
<p>Es importante señalar que este bloque debe ir sangrado, puesto que Python utiliza el sangrado para reconocer las líneas que forman un bloque de instrucciones. El sangrado que se suele utilizar en Python es de cuatro espacios, pero se pueden utilizar más o menos espacios. Al escribir dos puntos (:) al final de una línea, IDLE sangrará automáticamente las líneas siguientes. Para terminar un bloque, basta con volver al principio de la línea.</p>
<p>Después viene una línea con la orden else (opcional), que indica a Python que el bloque que viene a continuación se tiene que ejecutar cuando la condición no se cumpla (es decir, cuando sea falsa). Esta línea también debe terminar siempre por dos puntos (:).</p>
<p>En último lugar está el bloque de instrucciones sangrado que corresponde al else.</p>
<pre class="brush:python">edad = int(input("¿Cuántos años tiene? "))
if edad &lt; 18:
    print("Es usted menor de edad")
else:
    print("Es usted mayor de edad")
print("¡Hasta la próxima!")
</pre>
<p>Este programa pregunta la edad al usuario y almacena la respuesta en la variable &#8220;edad&#8221;. Después comprueba si la edad es inferior a 18 años. Si esta comparación es cierta, el programa escribe que es menor de edad y si es falsa escribe que es mayor de edad. Finalmente el programa siempre se despide, ya que la última instrucción está fuera de cualquier bloque y por tanto se ejecuta siempre.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sumar dos números en python  introducidos por teclado.</title>
		<link>https://emanuelpaxtian.com/blog/sumar-dos-numeros-en-python-introducidos-por-teclado/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Wed, 01 Jan 2014 10:39:20 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://107ec2014-01-01_10-35-50.png</guid>

					<description><![CDATA[Estoy comenzando una nueva aventura al aprender un nuevo lenguaje de programación y aquí iré compartiendo lo que voy aprendiendo la verdad es un lenguaje muy fácil y en esta&#8230;]]></description>
										<content:encoded><![CDATA[<p>Estoy comenzando una nueva aventura al aprender un nuevo lenguaje de programación y aquí iré compartiendo lo que voy aprendiendo la verdad es un lenguaje muy fácil y en esta ocasión muestro como sumar dos números que son introducidos por teclado</p>
<p>Sin mas por el momento aqui dejo el codigo</p>
<pre class="brush:python">a=float(input("ingresa numero\n"))  
b=float(input("ingresa numero\n"))  
suma=a+b  
print(str(suma))
</pre>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
