Glade 3 Y Python

6 comments

Posted on 27th noviembre 2008 by Tobal in Linux |Programación |Python |Ubuntu

, , ,

Hola, veamos la forma de crear a partir de un fichero con extensión .glade creado con Glade 3 el archivo en formato .xml para poderlo conectar con nuestro código en Python.

Bien, lo primero que haremos es abrir Glade 3 y crearnos una interfaz gráfica para nuestro programa,por ejemplo una ventana vacía. Antes de cerrar Glade3 acordaros de en el objeto ventana que hemos creado establecer la Propiedad de Visible a “Yes”. Supongamos que lo hemos guardado con el nombre tutorial.glade. Claro con esto no hacemos nada para programar en Python, para solucionarlo vamos a convertir dicho fichero de tipo glade a formato XML. Abrimos terminal y escribimos:

gtk-builder-convert tutorial.glade tutorial.xml

Ya lo tenemos en formato XML, y con éste ya vamos a poder trabajar bajo Python. Seguidamente creamos un fichero en código Python para poder comunicarnos con el fichero tutorial.xml, y así poder ser capaces de ejecutar el programa y que nos aparezca la ventana. Yo le he llamado al fichero tutorial.py, lo podéis crear con el editor que os de la gana: Geany, Netbeans, Gedit, Kate, Anjuta, IDLE, etc, etc. Os pongo el código junto con la explicación de lo que hace:

#!/usr/bin/python

#Importamos la librería pygtk
import pygtk
#Especificamos la versión de pygtk a usar, normalmente la 2.0
pygtk.require("2.0")
#Importamos la librería gtk
import gtk

class TutorialApp(object):
  def __init__(self):
	  #Cargamos el constructor de gtk y lo llamamos builder
      builder = gtk.Builder()
	  #Cargamos con builder nuestro fichero de glade3 convertido a
	  #formato XML
	  #En nuestro caso al fichero le hemos llamado tutorial.xml
      builder.add_from_file("tutorial.xml")
	  #Conectamos la señal de cerrar ventana
      builder.connect_signals({ "on_ventana_destroy" : gtk.main_quit })
	  #Obtenemos el objeto ventana, en mi caso a
	  #al objeto ventana en Glade3 le he llamado ventana
      self.window = builder.get_object("ventana")
	  #Mostramos la ventana por pantalla
      self.window.show()

if __name__ == "__main__":
  #A la clase que he definido como TutorialApp le asigno el nombre app
  app = TutorialApp()
  #De app sobre window le especifico que me lo muestre
  app.window.show()
  #Cargamos gtk, esta orden es imprescindible
  gtk.main()

La ventaja de hacerlo así es que podemos editar nuestras interfaces gráficas de nuestros programas de forma gráfica e intuitiva con Glade3, sin tener que programarlo todo a pelo.
En Glade3 se optó por no generar el código directamente para poderlo convertir a XML, que es más portable, y por ejemplo podemos usar el mismo fichero xml para programar, por ejemplo, en C/C++. Lo malo es que a los desarrolladores de Glade3 se les ha “olvidado” crear una opción con un simple botón para que nos convierta el fichero en formato glade a formato xml, y así evitarnos el tener que hacerlo nosotros a mano por la terminal :(
En el siguiente artículo podréis aprender más sobre dicho tema, con otro ejemplo más elaborado, y enfocado también a C/C++, el artículo está dividido en 3 partes, y aunque esta escrito en inglés es fácilmente entendible.

Saludos :-h

Trazadores Cúbicos De Tipo 1 Con Python

8 comments

Posted on 23rd noviembre 2008 by Tobal in Matemáticas |Programación |Python

, ,

Hola, en general un trazador o función spline en un intervalo [a,b], en matemáticas, son polinomios que están definidos en subintervalos de [a,b] que cumplen ciertas condiciones de regularidad; normalmente cumplen lo que se llama ser función de clase C^n([a,b]) , es decir, que son continuas tanto la función como sus derivadas hasta orden n en [a,b], lo cual es bastante obvio en polinomios.

Los trazadores se utilizan cuando por ejemplo tenemos un conjunto de puntos y queremos encontrar la función que pasa por todos esos puntos y que mejor se aproxima, dicha función a calcular es lo que llamamos trazador o función spline. Esta técnica de los trazadores es muy útil en informática para dibujar figuras no regulares. Por ejemplo, se puede utilizar para dibujar un perro o un edificio con tan sólo dar unos cuantos puntos representativos de dichas figuras y buscando su trazador.

El uso de trazadores en informática es muy útil ya que nos permite encontrar funciones que pasan por una cantidad finita de puntos mediante funciones a trozos, todas ellas polinómicas de grado pequeño, con lo cual el cómputo de operaciones de los algoritmos se reduce drásticamente, además de que dichas funciones a trozos (los trazadores) son funciones “suaves”.

Otro campo matemático parecido a los splines son los NURBS, los cuales nos permiten representar figuras complicadas y libres mediante interacción con el usuario mediante el movimiento de los nodos. Son muy utilizados en campos como la animación, y también se les conoce como B-splines, por ser un caso particular de los que veremos aquí. Si habéis programado con OpenGL sabréis de lo que estoy hablando.
NURB

Pero dejemos de lado estas profundas disquisiciones y profundicemos un poco en los trazadores cúbicos, los cuales son un buen comienzo para adentrarse en este apasionante mundo de la aproximación de figuras libres utilizando las matemáticas. Empecemos definiendo que es una función spline en general.

Sea \Delta=\{ a=x_0 <  x_1   < .... <  x_n= b \} una partición del intervalo [a,b]. S_{\Delta} : [a,b]\longrightarrow\mathbb{R} es una función spline de orden k\in\mathbb{N} asociada a \Delta si S_{\Delta}\in C^{k-1} ([a,b]) y si S_{\Delta} coincide en cada intervalo [ x_i , x_{i+1} ] , i=0,1,...,n-1, con un polinomio de grado \le  k .
Notemos que para k=1 se obtiene una función lineal a trozos, que todos llamamos poligonal.
En éste artículo me centraré sólo en el caso k=3, conocidos como trazadores cúbicos o splines cúbicas. Así pues nuestras splines serán de clase C^2 y de grado menor o igual que 3. Y en concreto a las de tipo I que definiré en breve.
Dado y = ( y_0 , y_1 , …. y_n ) \in\mathbb{R}^{n+1} denotaremos por S_\Delta (y, .) a una función spline cúbica de interpolación que verifica S_\Delta (y,x_i ) = y_i para i = 0,1,…,n-1.
Hay que recalcar que estas condiciones no determinan de forma única la spline cúbica. Si os estáis preguntando qué pinta el y es muy sencillo, en nuestros problemas partiremos de una serie de puntos concretos, por ejemplo, consideremos que queremos interpolar los puntos (0,1), (1,2), (4,0); pues bien, cada abscisa de los puntos representan la partición y las ordenadas de cada punto representan la y, que lógicamente estos son los extremos de cada subintervalo de cada función a trozo de que se compone nuestra función spline.
Para determinar únivocamente las funciones spline se imponen, en general, 3 tipos de condiciones. Como en éste artículo sólo me voy a centrar en las de tipo I, su condición de unicidad va a ser:
S^{\prime\prime}_\Delta (y,a) = S^{\prime\prime}_\Delta (y,b) = 0. Se suelen denominar condiciones naturales.
Ya hablaré de los otros dos tipos en otra ocasión, a modo de información os diré que las de tipo III se utilizan para interpolar funciones periódicas de periodo (b-a).
Para calcular explícitamente los trazadores definiremos primero los momentos de S_{\Delta}(y,.) mediante un vector M cuyas componentes vienen expresadas como M_j = S^{\prime\prime}_{\Delta}(y,x_{j}) para j=0,1,…,n-1.
Denotemos h_j = x_{j+1}-x_j j=0,1,…,n-1 Para calcular los momentos utilizaremos loa siguiente expresión:
\mu_j M_{j-1} + 2M_j + \lambda_j M_{j+1} = d_j  1\le j \le n-1
Donde los vectores \mu,\lambda,d vienen definidos por las expresiones:
\lambda_j = \frac{h_{j+1}}{h_j + h_{j+1}}
\mu_j = 1-\lambda_j
d_j = \frac{6}{h_j + h_{j+1}} \cdot ( \frac{y_{j+1}-y_j}{h_{j+1}}- \frac{y_j-y_{j-1} }{h_j} )
para 1 \le j \le n-1
Para los extremos (j=0, j=n) imponemos las condiciones de tipo I S^{\prime\prime}_\Delta (y,a) =  S^{\prime\prime}_\Delta(y,b) = 0 y obtenemos :
M_0 = M_n = 0
\lambda_0 = d_0 = \mu_n = d_n = 0
Si reunimos todas las fórmulas obtenidas tenemos que llegamos a un sistema lineal AM = d donde A es una matriz tridiagonal en la que su diagonal principal esta formada todos su elementos por el 2, su diagonal superior lo forman el vector \lambda y su diagonal inferior esta formada por el vector \mu .
Con todos estos datos ya podemos pasar a realizar un programa en Python sobre un caso concreto para ver cómo funciona. Las demostraciones de cómo se obtienen las fórmulas anteriores las podéis obtener en cualquier libro de texto universitario que se dedique a la rama matemática de Aproximación Numérica bajo el apartado de interpolación polinómica bajo splines o trazadores.
EJEMPLO
Vamos a determinar la función spline cúbica de tipo I que interpola los puntos:
(0,1), (1,2),(3,0)
Para ello he adaptado el método de trazadores cúbicos de tipo I a un sencillo programa escrito bajo lenguaje Python utilizando las librerías gráficas Matplotlib para poder dibujar la función spline. Su código es el siguiente:

from Numeric import *
from math import *
from numpy.linalg import *
from pylab import *

vectorx = array((0.,1.,3.), Float)
vectory = array((1.,2.,0.), Float)
h = array((0.,0.), Float)
lamda = array((0.0, 0.0),Float)
mu = array((0.0, 0.0),Float)
d = array((0.0, 0.0,0.0),Float)
A = array(([0.0, 0.0, 0.0],[0.0, 0.0, 0.0],[0.0, 0.0, 0.0]), Float)

i = 0
n = 0

while i<len(h) :
	h[i] = vectorx[i+1]-vectorx[i]
	i=i+1
i=1
while i<len(h) :
	lamda[i]=h[i]/(h[i-1]+h[i])
	i=i+1

i = 1
while i<len(h) :
	mu[i-1]=1.-lamda[i]
	i=i+1

i=1
while i<len(h) :
	d[i] = (6./(h[i-1]+h[i]))*((vectory[i+1]-vectory[i])/h[i]-(vectory[i]-vectory[i-1])/h[i-1])
	i=i+1

i=0
n=1
while i<len(mu) :
	A[i][n]=lamda[n-1]
	i=i+1
	n=n+1

i=1
n=0
while n<len(mu) :
	A[i][n]=mu[i-1]
	i=i+1
	n=n+1

i=0
while i<=len(mu) :
	A[i][i]=2.
	i=i+1

M = solve(A,d)

def funcionS1() :
	x = arange(0,3,0.1)
	m = len(x)
	s1 = array(([0.,0.]),Float)
	s2 = array(([0.0,0.]),Float)
	S = zeros(m, Float64)
	i = 0
	l = 0
	while i<=1 :
		while l<m :
			s1[i]=(vectory[i+1]-vectory[i])/(h[i+1])-(1./6.)*(2*M[i]+M[i+1])*h[i+1]
			s2[i]=(1./6.)*((M[i+1]-M[i])/h[i+1])
			S[l] = vectory[i]+s1[i]*(x[l]-vectorx[i])+0.5*M[i]*pow(x[l]-vectorx[i],2.)+s2[i]*pow(x[l]-vectorx[i],3.)
			l = l+1
		i = i+1
        plot(x, S, linewidth=1.0)
        xlabel('Abcisa')
        ylabel('Ordenada')
        title('Metodo I De Los Splines ')
        grid(True)
        axhline(linewidth=1, color='r')
        axvline(linewidth=1, color='r')
        show()

funcionS1()

El código del programa no tiene mayor misterio, a destacar la instrucción para resolver el sistema lineal AM=d, que es:

M = solve(A,d)

He utilizado la función solve de las librerías Numpy, en concreto, las específicas al álgebra lineal, y que para importarlas a nuestros programas se debe hacer de una forma especial al inicio de nuestro código mediante la instrucción:

from numpy.linalg import *

He decidido utilizar la función solve porque nuestro sistema lineal es muy pequeño, pero en casos grandes es aconsejable utilizar métodos de cálculo de sistemas lineales con matrices de coeficientes tridiagonales, para así disminuir drásticamente el número de operaciones que realice nuestro código.
De igual forma cuando calculamos los puntos interpoladores de nuestra función spline, si la cantidad de puntos a calcular es grande, es aconsejable utilizar el Algoritmo de Horner para su cálculo, lo cual es posible gracias a que nuestras funciones spline son funciones polinómicas definidas a trozos.
El resultado del programa lo podéis ver en la siguiente imagen:
Trazador Cúbico Tipo I

Espero pronto poder escribir sobre los trazadores cúbicos de tipo II y III

Saludos :-h

Ripear Audio Con Gnormalize

0 comments

Posted on 21st noviembre 2008 by Tobal in Linux |Ubuntu

,

Hola, ayer os hablé de SoundConverter y cómo darle soporte para archivos de sonido APE, la única pega que tiene SoundConverter es que no nos permite convertir un archivo de audio a formato APE, así que para solucionarlo me acordé que hace tiempo escribí en el blog sobre Gnormalize.

Este programa se basa en el escritorio Gnome, escrito en PERL bajo soporte GTK+, es muy liviano pero tiene muchas más característica que SoundConverter, nos permite conversiones entre formatos mp3, ape, mpc, wav, flac, ogg y mp4. También nos permite editar nuestros archivos de audio ( lo que se llaman Tags), podemos escuchar desde el mismo programa las pistas de sonido, nos permite jugar con las CDB o como se llame eso :P   , y además nos normaliza directamente el archivo u archivos. Lógicamente podemos ripear desde un CD, desde el mismo PC, etc. En fin, un programita bastante completito, liviano y útil.

Para los de Ubuntu podéis instalarlo desde el paquete debianizado que he hecho, os pongo el enlace de descarga:

DESCARGAR GNORMALIZE  0.63 PARA UBUNTU 32 BITS

Gnormalize

GNORMALIZE

Para instalar descomprimir el archivo tar e instalar los archivos deb que hay dentro de la carpeta descomprimida con Gdebi. De regalo he añadido un deb que he encontrado para editar tags con EasyTag de ficheros APE, o para hacerlo por terminal ;)

Para los de GuadalinexV5 pues nada que coja IndioCabreao y qe lo suba a Guadausers si le gusta el programa, lo más seguro es que funcione jejeje

Para los de distros linuxeras como Fedora, Mandriva, Suse, etc; vamos las basadas en rpm podéis descargaros el paquete en formato rpm que ha realizado el creador del programa, DESDE AQUI

Saludos :-h

Soundconverter Con Soporte Para Ape

6 comments

Posted on 20th noviembre 2008 by Tobal in Ubuntu

Hola, esta tarde me he bajado unos ficheros que me venían en formato APE (monkey), los cuales están en desuso pero todavía van rulando por ahí, como no quería volver a bajármelo en otro formato me he acordado que en este repositorio habían unos paquetes debianizados para dar soporte en Linux a este codec de audio. Así que me los he instalado, en la web de SoundConverter he visto que había una versión mucho más reciente que la que tenemos en Intrepid y que permitía pasar de APE a otro formato si teníamos los archivos pertinentes, como los tenía me he debianizado la nueva versión de SoundConverter (la 1.4.1) y en las dependencias le he añadido las de MP3 y APE. Si alguien lo quiere os pongo enlace de descarga:

DESCARGAR SOUNDCONVERTER 1.4.1 CON SOPORTE APE PARA UBUNTU INTREPID IBEX

Es un fichero comprimido en formato 7z, así que para descomporimirlo necesitarés instalar desde Synaptic el paquete p7zip-full para poder descomprimirlo. Una vez descomprimido instalad los 4 paquetes con Gdebi y ya está.

Para ejecutar SoundConverter lo encontraréis en Aplicaciones-> Sonido y vídeo-> Conversor de sonido

Para los de KKDE si queréis soporte APE basta instalar de los paquetes bajados todos menos el de SoundConverter e instalar el programa SoundKonverter de los repositorios.

Para los de Guadalinex V5 lo tendréis en breve en los repositorios Guadausers de IndioCabreao.

Saludos :-h

Amsn0.98-svn Debianizado Para Ubuntu

7 comments

Posted on 18th noviembre 2008 by Tobal in Ubuntu

Hola, me he decidido a ponerme el aMSN versión 0.98 versión beta porque me quería poner cierto plugin que lo requería y un tema dedicado a la marihuana que me ha molao mucho, con efectos de transparencia si se tiene Compiz instalado. Para ello me lo he bajado vía subversion y me lo he debianizado siguiendo instrucciones. Si alguien lo quiere probar os dejo un enlace de descarga:

DESCARGAR AMSN 0.98 BETA PARA UBUNTU 32 BITS

Que quede claro que es una versión beta y que si lo instaláis y no os funciona es vuestra responsabilidad. Cuando lo instalé y lo inicié por primera vez me salió un mensaje de error, cerré dicho mensaje, volví a iniciar aMSN y ya me funcionó correctamente.

En dicha versión he añadido el tema de la marihuana por si alguien le mola ;) Una imagen de cómo me ha quedado:

Saludos :-h

Page 1 of 41234
Rss Feed Tweeter button Facebook button Technorati button Reddit button Myspace button Linkedin button Webonews button Delicious button Digg button Flickr button Stumbleupon button Newsvine button Youtube button