Mostrando entradas con la etiqueta Python. Mostrar todas las entradas
Mostrando entradas con la etiqueta Python. Mostrar todas las entradas

miércoles, 16 de diciembre de 2009

Python en Symbian con PyS60


Hoy nos vamos a cambiar de plataforma. Vamos a ver como instalar el intérprete de Python en un teléfono móvil con sistema operativo Symbian S60 y pondré un par de ejemplos sencillos para dar un primer impulso a todos los que estéis interesados en la programación en Python para dispositivos móviles.

En mi caso voy a utilizar un teléfono Nokia E65. Lo primero que debemos hacer es asegurarnos de que edición de S60 tiene nuestro teléfono. Estó lo podremos solucionar visitando esta página. En el caso del Nokia E65 podemos ver que usa S60 3rd Edition. Visto esto nos dispondremos a descargarnos el intérprete de Python para nuestra versión del sistema operativo y la shell interactiva por si nos interesa hacer alguna prueba.

Nos dirigimos a la página del proyecto PyS60 en sourceforge.net y descargamos la versión que corresponda tanto del intérprete como de la shell interactiva. En el caso de mi dispositivo descargué:

   - PythonForS60_1_4_5_3rdEd.sis  ( Interprete de Python )
   - PythonScriptShell_1_4_5_3rdEd.SIS ( Shell interactiva )

Una vez tengamos esto descargado en nuestro ordenador conectamos el teléfono vía USB y cuando nos muestre el tipo de conexión que queremos realizar elegimos "Transferencia de Datos". Primeramente debemos crear una carpeta en "E:" llamada Python (E:\Python, esto solamente es necesario para los dispositivos de la 3ª Edición) que es donde alojaremos nuestros scripts y donde se alojarán además los scripts de prueba que vienen por defecto en la instalación. Hecho esto podemos volver a conectar el móvil usando esta vez la opción Nokia PC Suite. En el menú elegiremos instalar aplicación y buscaremos primero el intérprete de Python y lo instalaremos. Al finalizar su instalación haremos lo propio con la shell interactiva y ya podemos probar el funcionamiento de Python en nuestro teléfono.

Para ello vamos a aplicaciones y seleccionamos Python. Una vez dentro le damos a opciones y luego Run Script. Se nos mostrarán los siguientes scripts de prueba que podremos ejecutar para ver su funcionamiento:

   - ball.py   ( Una bola que podremos mover con las teclas )
   - filebrowser.py   ( Un navegador de archivos simple )
   - gles_demo.py   ( Figuras en 3D en movimiento )
   - imgviewer.py   ( Un visor de imágenes sencillo )
   - simplecube.py   ( Un cubo en 3D girando )
   - snake.py   ( Típico juego de la serpiente escrito en Python )

Todos estos scripts se encuentran en la carpeta creada anteriromente E:\Python

Ahora desde nuestro ordenador podemos crear nuestro propio "Hello World" para nuestro teléfono. Es muy sencillo, basta con éstas dos líneas:

import appuifw

appuifw.note(u"Hello Symbian!", "info")


Para hacerlo más personal podemos añadir una línea más:

import appuifw

nombre = appuifw.query(u"¿Como te llamas? ", "text")
appuifw.note(u"Bienvenido " + nombre, "info")


Ahora solo tendremos que copiarlo a la carpeta E:\Python de nuestro teléfono y ejecutarlo igual que los anteriores. Un detalle importante que cabe destacar antes de que empecéis a desarrollar aplicaciones es que para imprimir cadenas en pantalla es imprescindible tratarlas como unicode, por tanto no os olvidéis de la "u" delante de la cadena, de otra forma no funcionará.


germaNRG

miércoles, 18 de noviembre de 2009

PyInstaller 1.3


Estoy trabajando ultimamente en proyectos multiplataforma en python y me picó la curiosidad de ver como funcionaban los empaquetadores más conocidos como por ejemplo py2exe o PyInstaller. He leído unos cuantos posts en varios lugares y pude constatar que, a pesar de que py2exe parece más extendido y más conocido, muchos acaban decantándose por PyInstaller ya que, según cuentan los usuarios, da menos problemas en determinados momentos.

Yo finalmente decidí probar ambos (sólo los he probado bajo Windows) ya que lo que más me movía era la simple curiosidad. Después de probar cada uno de ellos con un simple y llano "HolaMundo.py" debo decir que me quedo con PyInstaller por dos cosas. La primera, por su facilidad de uso e instalación. La segunda, porque las opciones que pude ver en un vistazo rápido superan en facilidad y funcionalidad las de py2exe (resaltando lo de "vistazo rápido").

A raíz de esto he decidido crear un ejecutable de el primer programa que posteé en el blog, gDiscover.py, en su versión para Windows. Así, además de portar dicho programa, explico como lo hice y todos podréis hacer vuestros propios ejecutables rapidamente.

Primero descargamos PyInstaller para windows desde su AQUÍ

Como ya he dicho, su instalación es bastante sencilla. Descomprimimos la carpeta pyinstaller-1.3 del archivo comprimido en nuestro directorio de python que en mi caso es C:\Python26\ . Hecho esto abrimos la línea de comandos y nos dirigimos a la carpeta C:\Python26\pyinstaller-1.3 y desde ahí ejecutamos:

        $ Configure.py

PyInstaller 01


Et Voilà! Ya podemos empezar a usarlo. Para crear nuestro ejecutable basta con dos órdenes sencillas desde la carpeta en la que nos encontramos (podéis poner la ruta que queráis. No hace falta cambiar el programa de sitio):

        $ Makespec.py C:\Projects\gDiscoverWin.py

PyInstaller 02

Esta orden se encarga de analizar nuestro archivo .py y sus dependencias y crea una carpeta para nuestro programa dentro de la carpeta pyinstaller-1,3. Además crea un archivo con el mismo nombre que el programa pero con la extensión .spec dentro de esta nueva carpeta que servirá a la siguiente orden para la creación de nuestro ejecutable.

Lo que debemos hacer a continuación es llamar a Build.py con la ruta que nos devolvió la ejecución de Makespec.py de esta forma:

       $ Build.py C:\Python26\pyinstaller-1.3\gDiscoverWin\gDiscoverWin.spec

PyInstaller 03

Hecho esto, en C:\Python26\pyinstaller-1.3\gDiscoverWin\ se nos creará una carpeta BuildgDiscoverWin y otra distgDiscoverWin. La primera simplemente es utilizada por el programa y no nos será de utilidad. En cambio, dentro de distgDiscoverWin estará nuestro archivo .exe con todas las dependencias necesarias para su ejecución.  Solo tenemos que hacer por ejemplo un archivo .rar con todo el interior de esta carpeta y podremos ejecutar nuestro programa sin necesidad de que en el pc donde lo hagamos tenga instalado nada más que un windows XP.

Aquí os dejo la prueba de ello. =)

gDiscoverWin.rar


germanNRG'09

viernes, 13 de noviembre de 2009

Universal Feed Parser

Hace unos días, buceando por algunos blogs, he descubierto un módulo para python 2.6.4 (aprovechando que ya lo instalamos en el post anterior =) ) llamado feedparser.

Encontré varios ejemplos de su uso en aplicaciones sencillas de consola. La mayoría explicaba un ejemplo sencillo de como actualizar tu twitter desde python con este módulo pero, como no tengo twitter, pues me propuse hacer un lector rss para blogger ( MUY cutre, pero también MUY facilmente mejorable) con el fin de explicar su funcionamiento en líneas generales.

Para instalar este módulo en ubuntu no hay mas que teclear en consola

    > sudo apt-get install python-feedparser

Bajo windows podéis descarlos desde aquí

Una vez descargado no tenéis más que descomprimirlo donde más os guste y desde la línea de comandos dirigíos a la carpeta en cuestión. Una vez dentro de ella tecleáis

> setup.py install

y listo. Ya tenemos feedparser listo para ser usado desde python.

Hay poco que explicar sobre él ya que es muy sencillo de utilizar. Voy a poner aquí dos o tres ejemplos básicos para que os hagáis una pequeña idea y luego que el código hable por si mismo!

>>> import feedparser
>>> blog = feedparser.parse('http://devnewbies.blogspot.com/feeds/posts/default')
>>> blog['feed']['title']
u'Todos somos NewBies'
>>> blog.feed.link
u'http://devnewbies.blogspot.com/'
>>> blog.version
'atom10'

Sencillo a más no poder. Y no digáis que no! Aquí abajo os dejo el código para que le echéis un vistazo. Y un poco más abajo un enlace con el archivo .py y el .zip del módulo para windows. El programilla funciona tanto en windows como en Ubuntu. Espero que os sirva de algo =)



#!/usr/bin/env python
# germaNRG'09 - http://devnewbies.blogspot.com

import sys
import re

def addRss(web):
  if web[:7] != "http://": web = "http://" + web
  if web[-1:] != "/": web += "/"
  web += "feeds/posts/default"
  return web

def removeTags(html):
  inside = 0
  text = ''
  for char in html:
    if char == '<': 

      inside = 1 
      continue 
    elif (inside == 1 and char == '>'):
      inside = 0
      continue
    elif inside == 1: continue
    else: text += char
  return text

def badChars(text):
  text = re.sub(" ","\n",text)
  text = re.sub("--->","\n",text)
  text = re.sub("\\u2026","...",text)
  return text

try:
  import feedparser
except:
  print "FeedParser module is required"
  sys.exit()

page = raw_input("Introduzca la direccion de bloger: ")
blog = addRss(page)
rss = feedparser.parse(blog)
try:
  blogTitle = rss.feed.title
  blogLink = rss.feed.link
except:
  print "El blog introducido no responde. Compruebe la direccion."
  sys.exit()

blogPosts = len(rss['entries'])
if not blogPosts:
  print "Este blog no contiene entradas."
  sys.exit()

print "El blog tiene disponibles %s entradas." % blogPosts
req = raw_input("Que entrada desea leer: ")
req = int(req)

req += 1
entTitle = rss.entries[req].title
print "\n\nTitulo del blog: %s" % blogTitle
print "Entrada: %s" % entTitle
ent = rss.entries[req]
entLink = ent.link
entAuthorName = ent.author_detail.name
entAuthorMail = ent.author_detail.email
entDate = ent.updated_parsed ## Devuelve un time.struct_time
try:
  entData = ent.content[0]['value']
  plainText = removeTags(entData)
  plainText = badChars(plainText)
  noData = 0
except:
  noData = 1
  print "Autor del blog: %s" % entAuthorName
  print "Mail del autor: %s \n\n" % entAuthorMail
 

try:
  print "Contenido de la entrada:"  

  print plainText[:150]+"...\n"
  print "Para verla completa dirijase a: %s" % entLink
except:
  print "No se pudo previsualizar la entrada."
  print "Para verla online dirijase a: %s" % entLink



Descarga el programa para leer tus blogs de Blogger favoritos mas el módulo feedparser desde aquí:


      blogger.rar

germaNRG'09

viernes, 6 de noviembre de 2009

Python & Bluetooth - gDiscover.py


Vamos a ver un ejmplo muy sencillo de como interactuar con dispositivos bluetooth desde python en ubuntu 9.10. Es un ejemplo muy simple de un programa que se encarga de descubrir dispositivos bluetooth que se encuentren dentro del alcance del ordenador donde ejecutemos gDiscover. La aplicación podrá devolvernos la dirección MAC de los dispositivos bluetooth que encuentre dentro de su radio de acción, el nombre a mostrar de dichos dispositivos o ambas cosas a la vez según lo desee el usuario. Aunque quizás pueda parecer algo difícil, no lo es. Sabiendo lo mínimo sobre python podremos hacer una aplicación como esta y comprenderla. Tampoco resultara demasiado complicado ampliarla añadiendole más funciones.

Para empezar necesitaremos una distribución Ubuntu 9.10 aunque la aplicación funciona desde la versión 7.04 en adelante (no he probado en las anteriores). También necesitaremos tener instalado en el sistema el intérprete de python 2.6.4 y sus librerias estándar que, en caso de ubuntu, viene instalado por defecto. De todos modos podéis descargarlo desde su página web   --->   Descargar

También vamos a necesitar instalar el paquete python-bluez. Podemos encontrarlo en los repositorios de Ubuntu como podeis ver en la imagen:

        ScreenShot01.jpg


O también podemos descargarlo de la página web del proyecto PyBluez, alojado en GoogleCode  --->   Descargar

Obviamente será indispensable disponer de un dispositivo bluetooth ya sea integrado en el pc o portátil, o uno usb.

Una vez aclarado esto ya estamos listos para empezar a programar. Con respecto a la sintaxis general del programa en python hay muy poco que comentar. Es sencillo y fácil de leer y comprender. No tiene nada de extravagante. En relación al bluetooth basta con importar la libreria instalada con "import bluetooth"

Para ver las funciones disponibles podemos ejecutar el interprete python y teclear lo siguiente

$ python
>>> import bluetooth
>>> list=dir(bluetooth)

Esto nos devolvera una lista con todos los metodos que podemos usar. En nuestro caso por ejemplo vamos a usar los dos siguientes:

>>> list[181]
'discover_devices'

>>> list[186]
'lookup_name'

La función discover_devices() se encargará de buscar dispositivos bluetooth activos dentro del alcance del ordenador donde ejecutamos gDiscover y nos devolverá una lista con las direcciones MAC de todos los dispositivos encontrados. Por otra parte lookup_name(MAC) recibe como argumento una cadena con una dirección MAC y devuelve una lista con el nombre asociado a esa dirección. Fácil ¿Verdad?


Ahí os dejo la aplicación terminada para que le echéis un vistazo. No dudéis en mandarnos vuestras propias versiones o extensiones del programa. Espero que os sirva de ayuda. Para cualquier duda, consulta o sugerencia poneros en contacto con nosotros.


germaNRG'09