Tag Archives: Python

Stock Alerts is back again!

Después de unos meses sin servicio, Stock Alerts vuelve a twittear información recogida desde Yahoo! Finance, sobre la cotización de los indices IBEX35, NASDAQ y FTSE.

Where are my site-packages stored?

The location depends on the operating system, to find out try to execute the following code:

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

Cheers!

Un cuatrimestre más!

Ayer a las 23:59 finalizaba el plazo para la tercera entrega de la práctica de la asignatura Modelos Multidimensionales y Almacenes de Datos y terminaba el segundo cuatrimestre del curso 2008/2009. Ahora queda esperar las notas finales de las tres asignaturas en las que estaba matriculado: Minería de Datos y Inteligencia Artificial 2 (y la mencionada anteriormente). El resultado se presenta muy positivo, y de momento se que Inteligencia Artificial 2 está aprobada. El términos académicos el curso ha sido muy bueno con 7 asignatura cursadas (4 y 3) y una sola suspendida y repetida (IA2).

Ahora queda esperar al último curso en la UOC (2009/2010), el cual se presenta bastante tranquilo y con un nivel de carga muy aceptable: 3 asignaturas para el primer cuatrimestre y el PFC para el segundo.

Más adelante si me acuerdo intentaré colgar la práctica de IA2, implementada en Python.

Conocer la IP asociada a un interfaz de red (solo para Linux)

Transcribo una receta, de código Python, publicada en ActiveState Code por Paul Cannon, donde se ve como conocer la dirección IP asociada a un interfaz de red (bajo Linux) mediante la llamada a sistema ioctl SIOCGIFADDR.

1
2
3
4
5
6
7
8
9
10
11
import socket
import fcntl
import struct
 
def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915, # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

Ejemplo de llamada:

get_ip_address('lo')

Con resultado: 127.0.0.1

Otro ejemplo de llamada:

get_ip_address('eth0')

Con resultado: 192.168.50.19

Tal y como comenta el autor, probablemente esta solución únicamente funcione bajo Linux, dada la dependencia de este con ciertas estructuras (tamaño, etc.) en C y donde SIOCGIFADDR es 0x8915. Incluso es probable que únicamente funcione bajo kernels 2.4 y 2.6. Bajo otras distribuciones de Unix puede ser que requiera algún ajuste; que si alguien sabe siempre será bienvenido.

Publishing objects from Zope's products

Creating Zope homemade products is the best way to developing Python web applications without depending (if you don’t want) from Plone. Until last wednesday, I had tried some methods to manage Python’s objects directly from ZPT pages but didn’t work. Other problem with Zope is the documentation and the community, there are too few documentation, and the community of users/developers is too small (for Plone is bigger). Past wednesday my colleague Xavier finds a way to publishing Python’s object directly in a ZPT, when he was following an error log to solve an occurred error. The way is a KISS (Keep It Simple and Stupid) way. Every object in the application that you wants to publish, is mandatory that the object inherits from OFS.SimpleItem, and the object can be used from a ZPT, calling its methods and properties. This is very important for us because we are developing some Zope web applications, and we need a way to design, develops and testing the applications. Now with this discovering we can organize an application like an Object Oriented application without any method/module to pass data through the main core and the ZPT. And this can help us to use PyUnit or homemade scripts to testing the application and do it independent to the presentation layer.

e.g.: Python Class inherited from OSF.SimpleItem

1
2
3
4
5
6
7
8
##OurObject.py
# -*- coding: latin-1 -*-
import OFS.SimpleItem
 
class OurObject(OFS.SimpleItem.SimpleItem):
    def __init__(self, id = '', description = ''):
        self.id = id
        self.description = description

e.g.: Calling object inside a ZPT

29
30
<h1 tal:content="myInstance/id"></h1>
<input type="text" tal:attributes="value myInstance/description" />