ff-multiconverter, multimedia, audio, video, linux, ubuntu ubuntu kylin, china, releases, linux terminal, ubuntu, linux, comandos, shell conky, gadgets, ubuntu, linux SpeedTest-Cli, velocidad, red, consola, terminal tag foto 6 pinta, grafica, linux, ubuntu djl, juegos, yum, synaptic, paquetes ubuntu, releases, canonical psensor, ubuntu, linux, sistema, monitor

Guia Python: herencia y método especial.

python logoPython es un lenguaje de script desarrollado por Guido van Rossum.

Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad).

Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

Se puede ejecutar instrucciones de Python desde la línea de comando o creando archivos con extensión *.py. Cuando uno comienza a aprender este lenguaje la línea de comandos nos provee una retroalimentación del resultado en forma inmediata.

El objetivo de este tutorial es presentar en forma progresiva los conceptos fundamentales de este lenguaje y poder analizar los problemas resueltos y codificar los problemas propuestos en este mismo sitio, sin tener que instalar en un principio el Python en su equipo (o luego de instalado poder avanzar con el tutorial en cualquier máquina conectada a internet).

Herencia.
python Estructura condicional if-elif.
Otra característica que tiene que tener un lenguaje para considerarse orientado a objetos es la HERENCIA.
La herencia significa que se pueden crear nuevas clases partiendo de clases existentes, que tendrá todas los atributos y los métodos de su 'superclase' o 'clase padre' y además se le podrán añadir otros atributos y métodos propios.
En Python, a diferencia de otros lenguajes orientados a objetos (Java, C#), una clase puede derivar de varias clases, es decir, Python permite la herencia múltiple.

Superclase o clase padre.
Clase de la que desciende o deriva una clase. Las clases hijas (descendientes) heredan (incorporan) automáticamente los atributos y métodos de la la clase padre.

Subclase.
Clase desciendiente de otra. Hereda automáticamente los atributos y métodos de su superclase. Es una especialización de otra clase. Admiten la definición de nuevos atributos y métodos para aumentar la especialización de la clase.
Veamos algunos ejemplos teóricos de herencia:
1) Imaginemos la clase Vehículo. Qué clases podrían derivar de ella
Vehiculo

   Colectivo                Moto                    Auto
                            
                                             FordK        Renault 9
Siempre hacia abajo en la jerarquía hay una especialización (las subclases añaden nuevos atributos y métodos)
2) Imaginemos la clase Software. Qué clases podrían derivar de ella?
Software

             DeAplicacion                                        DeBase

ProcesadorTexto       PlanillaDeCalculo                          SistemaOperativo

Word   WordPerfect    Excel     Lotus123                         Linux    Windows
      
Si vemos que dos clase responden a la pregunta ClaseA "..es un.." ClaseB es posible que haya una relación de herencia.
Por ejemplo:
Auto "es un" Vehiculo
Circulo "es una" Figura
Mouse "es un" DispositivoEntrada
Suma "es una" Operacion
Ahora plantearemos el primer problema utilizando herencia en Python. Supongamos que necesitamos implementar dos clases que llamaremos Suma y Resta. Cada clase tiene como atributo valor1, valor2 y resultado. Los métodos a definir son cargar1 (que inicializa el atributo valor1), carga2 (que inicializa el atributo valor2), operar (que en el caso de la clase "Suma" suma los dos atributos y en el caso de la clase "Resta" hace la diferencia entre valor1 y valor2, y otro método mostrarresultado.
Si analizamos ambas clases encontramos que muchos atributos y métodos son idénticos. En estos casos es bueno definir una clase padre que agrupe dichos atributos y responsabilidades comunes.
La relación de herencia que podemos disponer para este problema es:
Operacion

                        Suma                              Resta
Solamente el método operar es distinto para las clases Suma y Resta (esto hace que no lo podamos disponer en la clase Operacion), luego los métodos cargar1, cargar2 y mostrarresultado son idénticos a las dos clases, esto hace que podamos disponerlos en la clase Operacion. Lo mismo los atributos valor1, valor2 y resultado se definirán en la clase padre Operacion.
En Pyton la codificación de estas tres clases es la siguiente:
class Operacion:
    def cargar1(self,v1):
        self.valor1=v1
    def cargar2(self,v2):
        self.valor2=v2
    def imprimir(self):
        print self.resultado
        print '<br>'


class Suma(Operacion):
    def operar(self):
        self.resultado=self.valor1+self.valor2


class Resta(Operacion):
    def operar(self):
        self.resultado=self.valor1-self.valor2


s=Suma()
s.cargar1(10)
s.cargar2(20)
s.operar()
print 'La suma es:'
s.imprimir()
r=Resta()
r.cargar1(10)
r.cargar2(2)
r.operar()
print 'La resta es:'
r.imprimir()
Veamos como es la sintaxis para indicar que una clase hereda de otra:
class Suma(Operacion):
Indicamos entre paréntesis el nombre de la clase padre (con esto estamos indicando que todos los métodos y atributos de la clase Operación son también métodos de la clase Suma.
Luego la característica que añade la clase Suma es el siguiente método:
def operar(self):
        self.resultado=self.valor1+self.valor2
El método operar puede acceder a los atributos heredados.
Ahora podemos decir que la clase Suma tiene cuatro métodos (tres heredados y uno propio) y 3 atributos
Si creamos un objeto de la clase Suma tenemos:
s=Suma()
s.cargar1(10)
s.cargar2(20)
s.operar()
print 'La suma es:'
s.imprimir()
Podemos llamar tanto al método propio de la clase Suma "operar()" como a los métodos heredados. Quien utilice la clase Suma solo debe conocer que métodos tiene (independientemente que pertenezcan a la clase Suma o a una clase superior)
La lógica es similar para declarar la clase Resta:
class Resta(Operacion):
    def operar(self):
        self.resultado=self.valor1-self.valor2
y la definición de un objeto de dicha clase:
r=Resta()
r.cargar1(10)
r.cargar2(2)
r.operar()
print 'La resta es:'
r.imprimir()
La clase Operación agrupa en este caso un conjunto de atributos y métodos comunes a un conjunto de subclases (Suma, Resta). No tiene sentido definir objetos de la clase Operacion.
El planteo de jerarquías de clases es una tarea compleja que requiere un perfecto entendimiento de todas las clases que intervienen en un problema, cuales son sus atributos y responsabilidades.
Método especial __str__
python Estructura de datos tipo tupla.
Podemos hacer que se ejecute un método definido por nosotros cuando pasamos un objeto a la función print o cuando llamamos a la función str.
Que sucede cuando llamamos a la función print y le pasamos como parámetro un objeto?
class Persona:
    def __init__(self,nom,ape):
        self.nombre=nom
        self.apellido=ape

per=Persona('Jose','Rodriguez')
print per
Nos muestra algo parecido a esto:
<__main__.Persona instance at 0xf9e0a60ec5872050>
Python nos permite redefinir el método que se debe ejecutar. Esto se hace definiendo en la clase el método especial __str__
En el ejemplo anterior si queremos que se muestre el nombre y apellido separados por coma cuando llamemos a la función print el código que debemos implementar es el siguiente:
class Persona:
    def __init__(self,nom,ape):
        self.nombre=nom
        self.apellido=ape
    def __str__(self):
        cadena=self.nombre+','+self.apellido
        return cadena

per=Persona('Jose','Rodriguez')
print per
Como vemos debemos implementar el método __str__ y retornar un string, este luego será el que imprime la función print:
def __str__(self):
        cadena=self.nombre+','+self.apellido
        return cadena
Esta característica definida en Python nos permite crear programas muy legibles y flexibles.
El método __str__ también se ejecuta si llamamos a la función str y pasamos como parámetro un objeto que tiene definido dicho método:
class Persona:
    def __init__(self,nom,ape):
        self.nombre=nom
        self.apellido=ape
    def __str__(self):
        cadena=self.nombre+','+self.apellido
        return cadena

per1=Persona('Jose','Rodriguez')
per2=Persona('Ana','Martinez')
print str(per1)+'-'+str(per2)  # Jose,Rodriguez-Ana,Martinez
python Estructura de datos tipo diccionario
Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Los 10 artículos más leídos en El Mundo de Ubuntu en el mes de Julio 2013.

1.- Medusa, la mejor alternativa a AutoCAD en Linux.


De sobra nos es conocido que el rey indiscutible del CAD es AutoCad, ningún programa ha sido capaz de hacerle sombra, aunque los precios del software son, por ser amables, abusivos.
La única distribución que, desde mi punto de vista, permite trabajar de forma cómoda al estilo de AutoCad es ZWCAD que se puede adquirir por un precio inferior.

2.- Ubuntu 13.04 disponible para descarga (Información de pantalla, video, tutorial).

raring ringtail open developmentCanonical oficialmente ha publicado hoy su version 13.04 nombre en codigo “Raring Ringtail”Se están notando las ventajas de optimizar el sistema operativo para dispositivos móviles con pocos recursos.
El sistema consume menos Ram y se agiliza su utilización.
Los cambios más destacados, respecto al consumo son:
  • Se ha reducido el uso de memoria que hacían algunos paquetes, cargando datos e imágenes CSS de GTK3, sólo cuando se necesitan.
  • Se arreglaron problemas de memoria en los paquetes libdbusmenu, update-notifier, upower, whoopsie y otros más.

3.- FreetuxTV excelente aplicación para ver la TV o escuchar la radio en Ubuntu.


Si buscas una aplicación que te permita ver la televisión en directo o escuchar la radio de cualquier parte del mundo en GNU/Linux puede que FreeTuxTV te sea de gran utilidad ya que nos permite hacer esto mismo de forma sencilla.
La interfaz de FreetuxTV es muy sencilla y cuando lo iniciamos ya podremos agregar los canales en español, también podremos grabar lo que estamos viendo muy útil si quieres mantenerlo en tu equipo para verlo cuando quieras.

4.- 7 aplicaciones multimedia presentes en los repositorios oficiales de Ubuntu.

ubuntu_audioUbuntu ofrece una amplia gama de aplicaciones multimedia desde sus repositorios Main, Universe y Multiverse.
Para ayudarte a escoger al reproductor de música o el editor de vídeo más conveniente, es útil distinguir entre los reproductores de medios de comunicación ellos mismos (o 'front-ends) y los motores de reproducción (playback)(' back-ends') que utilizan. Los front ends son las aplicaciones con las que interactuas con tu escritorio.
Algunos están integrados fuertemente con los entorno de escritorio, el GNOME y KDE; otros son independientes de plataforma.

5.- DJL es un instalador de juegos que proporciona una interfaz sencilla y muchas utilidades.

djl_depotDJL es es un administrador de juegos escrito en Python, que nos permitirá instalar una gran cantidad de títulos (ver el detalle al final del post) en Linux.
Es un gestor de juegos, que nos sirve tanto para lanzar los juegos que hemos instalado con él, como para instalar juegos desde la red
He mirado los juegos disponibles en el repositorio y no me puedo quejar, están tanto los más famosos como los no tan conocidos.
Para usarlo debemos descargar la última versión, descomprimirla e instalarla.

6.- La campaña de financiación colectiva (crowdfunding) de Ubuntu Edge paso a paso.

ubuntu edgeLa campaña de financiación colectiva que Canonical puso en marcha hace una semana comenzó con gran fuerza, pero en las últimas horas el empuje de esas inversiones se ha ralentizado de forma notable.
¿Conseguirán recaudar los 32 millones de dólares que persiguen para desarrollar y fabricar sus Ubuntu Edge?
El problema reside en que la avalancha de peticiones iniciales se ha debido a los importantes descuentos que Canonical ofreció. El Ubuntu Edge se podía conseguir por 600 dólares (más 30 de gastos de envío) frente a los 830 dólares que supondrían el coste final. Esa oferta se ha visto continuada con algunas más, pero éstas son cada vez menos atractivas.

7.- Cómo instalar un emulador de Android en Ubuntu.

Este emulador lo pueden encontrar en la página oficial de Android para desarrolladores.
Pensado para desarrolladores, incluye:
Herramientas.
Ejemplos de código.
Documentación.
Permite seleccionar cuales de los anteriores desea instalarse.
Posibilidad de descargar cualquier versión del Sistema Operativo (1.6,3.0,4,etc).
Todo para apoyar el desarrollo de aplicaciones para esta plataforma. Además permite:
Navegar por internet, utilizando la conexión de tu ordenador.
Navegar por la interfaz y algunas configuraciones del dispositivo virtual.

8.- 10 Artículos Recomendados sobre Seguridad en Ubuntu.

ubuntu-TuxLa mayor amenaza de seguridad informática no son los programas en sì mismos, es el hombre, el usuario.
Siempre hablamos de los virus y de la seguridad informática, de cómo es muy difícil penetrar en un sistema Gnu/Linux y muy fácil entrar en Windows.
Pero difícil no significa imposible y cada vez más y más amenazas se crean para Gnu/Linux y en especial para Ubuntu, al ser uno de los sistemas más usados dentro de la familia Gnu/Linux. Los rootkits son un buen ejemplo de amenaza que se ha llegado a Ubuntu, aunque al igual que hay una forma de que llegue, siempre hay una forma de sacarlo de nuestro sistema.

9.- Instalar Angry Birds en Ubuntu 12.04 “Precise Pangolin”.

Angry_Birds_PlushiesAngry Birds  es un videojuego creado en 2009 por la empresa finlandesa Rovio Mobile. Desde entonces, el juego ha sido adaptado a dispositivos de pantalla táctil, como los basados en Maemo, iOS, Symbian, Java y Android.
Con más de un billón de descargas en 2012, esta aplicación quizá sea la más popular del año en la App Store de Apple. Además es también el juego más vendido de la historia en soportes móviles.
Actualmente la compañía trabaja en desarrollar versiones para PC, Xbox360, PS3, HTML5 y otras plataformas. Sin embargo, Angry Birds no es sólo un fenómeno digital: los personajes son tan populares que la empresa está empezando a comercializar juguetes físicos de los pájaros y hacia el futuro pretenden comercializar disfraces, dibujos animados y todo tipo de merchandising.

10.- Introducción a Inkscape programa de diseño vectorial.

inkscape-draw-freely-program-LOGOInkscape es un programa de diseño vectorial. Esto significa que los gráficos así creados se podrán escalar a cualquier tamaño sin que pierdan calidad, o reformar una vez hechos sin tener que borrar cada línea.
También tiene la capacidad de exportar lo que dibujemos a un formato de mapa de bits para utilizarlo en cualquier aplicación, como fondo de pantalla, en una página web, etc.
Inkscape se encuentra desarrollado principalmente para el sistema operativo GNU/Linux, pero es una herramienta multiplataforma.
Es una aplicación disponible en muchas lenguas, incluyendo sistemas de escritura complejos (como sistemas de escritura de derecha a izquierda como árabe, hebreo...).

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Guia Python: métodos constructores de una clase.

python logoPython es un lenguaje de script desarrollado por Guido van Rossum.

Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad)

Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

Se puede ejecutar instrucciones de Python desde la línea de comando o creando archivos con extensión *.py. Cuando uno comienza a aprender este lenguaje la línea de comandos nos provee una retroalimentación del resultado en forma inmediata.

El objetivo de este tutorial es presentar en forma progresiva los conceptos fundamentales de este lenguaje y poder analizar los problemas resueltos y codificar los problemas propuestos en este mismo sitio, sin tener que instalar en un principio el Python en su equipo (o luego de instalado poder avanzar con el tutorial en cualquier máquina conectada a internet).

Métodos de una clase.

python Atributos de una clase
Los métodos son como las funciones en los lenguajes estructurados, pero están definidos dentro de una clase y operan sobre los atributos de dicha clase.
Los métodos también son llamados las responsabilidades de la clase. Para encontrar las responsabilidades de una clase hay que preguntarse qué puede hacer la clase.
El objetivo de un método es ejecutar las actividades que tiene encomendada la clase a la cual pertenece.
Los atributos de un objeto se modifican mediante llamadas a sus métodos.
Confeccionaremos un nuevo problema para concentrarnos en la definición y llamada a métodos.
Problema:Confeccionar una clase CabeceraPagina que permita mostrar un título, indicarle si queremos que aparezca centrado, a derecha o izquierda.
Definiremos dos atributos, uno donde almacenar el título y otro donde almacenar la ubicación.
Ahora pensemos que métodos o responsabilidades debe tener esta clase para poder mostrar la cabecera de la página. Seguramente deberá tener un método que pueda inicializar los atributos y otro método que muestre la cabecera dentro de la página.
Veamos el código de la clase CabeceraPagina
class CabeceraPagina:
    def inicializar(self,tit,ubi):
      self.titulo=tit
      self.ubicacion=ubi

    def graficar(self):
        print '<div style="font-size:40px;text-align:'+self.ubicacion+'">'
        print self.titulo
        print '</div>'


cabecera=CabeceraPagina()
cabecera.inicializar('El blog del programador','center')
cabecera.graficar()
La clase CabeceraPagina tiene dos atributos donde almacenamos el texto que debe mostrar y la ubicación del mismo ('center', 'left' o 'right'), nos valemos de CSS para ubicar el texto en la página.
No es obligatorio en Python definir previo a los métodos todos los atributos. Como vemos se definen e inicializan al llamar al método inicializar.
Ahora analicemos lo que más nos importa en el concepto que estamos concentrados (métodos de una clase):
def inicializar(self,tit,ubi):
        self.titulo=tit
        self.ubicacion=ubi
Un método tiene un nombre, conviene utilizar verbos para la definición de métodos (mostrar, inicializar, graficar etc.) y sustantivos para la definición de atributos (color, enlace, titulo etc.)
Un método debe tener como primer parámetro el identificador self, el mismo nos permite acceder a los atributos de la clase, además puede tener otros parámetros que inicializan atributos del objeto:
self.titulo=tit
        self.ubicacion=ubi
Luego para llamar a los métodos debemos crear un objeto de dicha clase:
cabecera=CabeceraPagina()
cabecera.inicializar('El blog del programador','center')
cabecera.graficar()
Es importante notar que siempre que llamamos a un método le antecedemos el nombre del objeto. El orden de llamada a los métodos es importante, no va a funcionar si primero llamamos a graficar y luego llamamos al método inicializar.

Método constructor de una clase.
python Atributos de una clase1
El constructor es un método especial de una clase. El objetivo fundamental del constructor es inicializar los atributos del objeto que creamos.
Básicamente el constructor remplaza al método inicializar que habíamos hecho en el concepto anterior.
Las ventajas de implementar un constructor en lugar del método inicializar son:
  1. El constructor es el primer método que se ejecuta cuando se crea un objeto.
  2. El constructor se llama automáticamente. Es decir es imposible de olvidarse de llamarlo ya que se llamará automáticamente.
  3. Quien utiliza POO (Programación Orientada a Objetos) conoce el objetivo de este método.
Otras características de los constructores son:
  • El constructor se ejecuta inmediatamente luego de crear un objeto y no puede ser llamado nuevamente.
  • Un constructor no puede retornar dato.
  • Un constructor puede recibir parámetros que se utilizan normalmente para inicializar atributos.
  • El constructor es un método opcional, de todos modos es muy común definirlo.
Veamos la sintaxis del constructor:
def __init__([parámetros]):
       [algoritmo]
Debemos definir un método llamado __init__ (es decir utilizamos dos caracteres de subrayado, la palabra init y seguidamente otros dos caracteres de subrayado).
Confeccionaremos el mismo problema del concepto anterior para ver el cambio que debemos hacer de ahora en más.
Problema:Confeccionar una clase CabeceraPagina que permita mostrar un título, indicarle si queremos que aparezca centrado, a derecha o izquierda.
class CabeceraPagina:
    def __init__(self,tit,ubi):
        self.titulo=tit
        self.ubicacion=ubi

    def graficar(self):
        print '<div style="font-size:40px;text-align:'+self.ubicacion+'">'
        print self.titulo
        print '</div>'



cabecera=CabeceraPagina('El blog del programador','center')
cabecera.graficar()
Ahora podemos ver como cambió la sintaxis para la definición del constructor:
def __init__(self,tit,ubi):
        self.titulo=tit
        self.ubicacion=ubi
Veamos como se modifica la llamada al constructor cuando se crea un objeto:
cabecera=CabeceraPagina('El blog del programador','center')
cabecera.graficar()
Es decir el constructor se llama en la misma línea donde creamos el objeto, por eso disponemos después del nombre de la clase los parámetros:
cabecera=CabeceraPagina('El blog del programador','center')
Generalmente todo aquello que es de vital importancia para el funcionamiento inicial del objeto se lo pasamos mediante el constructor.

Llamada de métodos dentro de la clase.
Hasta ahora todos los problemas planteados hemos llamado a los métodos desde donde definimos un objeto de dicha clase, por ejemplo:
cabecera=CabeceraPagina('El blog del programador','center')
cabecera.graficar()
Utilizamos la sintaxis:
[nombre del objeto].[nombre del método]
Es decir antecedemos al nombre del método el nombre del objeto y el operador punto
Ahora bien que pasa si queremos llamar dentro de la clase a otro método que pertenece a la misma clase, la sintaxis es la siguiente:
self.[nombre del método]
Es importante tener en cuenta que esto solo se puede hacer cuando estamos dentro de la misma clase.
Confeccionaremos un problema que haga llamadas entre métodos de la misma clase.
Problema:Confeccionar una clase Tabla que permita indicarle en el constructor la cantidad de filas y columnas. Definir otra responsabilidad que podamos cargar un dato en una determinada fila y columna. Finalmente debe mostrar los datos en una tabla HTML.
class Tabla:
    mat=[]
    cantfilas=0
    cantcolumnas=0

    def __init__(self,fi,co):
        self.cantfilas=fi
        self.cantcolumnas=co
        for f in range(0,fi):
            self.mat.append([])
            for c in range(0,co):
                self.mat[f].append('')

    def cargar(self,fi,col,valor):
        self.mat[fi][col]=valor

    def iniciotabla(self):
        print '<table border="1">'
   
    def iniciofila(self):
        print '<tr>'

    def mostrar(self,fi,co):
        print '<td>'
        print self.mat[fi][co]
        print '</td>'

    def finfila(self):
        print '</tr>'

    def fintabla(self):
        print '</table>'

    def graficar(self):
        self.iniciotabla()
        for f in range(0,self.cantfilas):
            self.iniciofila()
            for c in range(0,self.cantcolumnas):
                self.mostrar(f,c)
            self.finfila()
        self.fintabla()
   
tabla1=Tabla(3,4)
tabla1.cargar(0,0,1)
tabla1.cargar(0,1,2)
tabla1.cargar(0,2,3)
tabla1.cargar(0,3,4)
tabla1.cargar(1,0,5)
tabla1.cargar(1,1,6)
tabla1.cargar(1,2,7)
tabla1.cargar(1,3,8)
tabla1.cargar(2,0,9)
tabla1.cargar(2,1,10)
tabla1.cargar(2,2,11)
tabla1.cargar(2,3,12)
tabla1.graficar()
Vamos por parte, primero veamos los tres atributos definidos,el primero se trata de una lista donde almacenaremos todos los valores que contendrá la tabla HTML y otros dos atributos que indican la dimensión de la tabla HTML (cantidad de filas y columnas):
mat=[]
  cantfilas=0
  cantcolumnas=0
El constructor recibe como parámetros la cantidad de filas y columnas que tendrá la tabla, además creamos la lista con tantas filas como indica el parámetro fi e insertamos una lista en cada componente (es decir que cada componente de la lista es una lista que representa los elementos de la fila respectiva) Dentro de un for interno agregamos string vacíos a cada elemento de la lista interna:
self.cantfilas=fi
      self.cantcolumnas=co
      for f in range(0,fi):
          self.mat.append([])
          for c in range(0,co):
              self.mat[f].append('')
Otro método de vital importancia es el de cargar datos. Llegan como parámetro la fila, columna y dato a almacenar:
def cargar(self,fi,col,valor):
        self.mat[fi][col]=valor
Otro método muy importante es el graficar:
def graficar(self):
        self.iniciotabla()
        for f in range(0,self.cantfilas):
            self.iniciofila()
            for c in range(0,self.cantcolumnas):
                self.mostrar(f,c)
            self.finfila()
        self.fintabla()
El método graficar debe hacer las salidas de datos dentro de una tabla HTML. Para simplificar el algoritmo definimos otros cinco métodos que tienen por objetivo hacer la generación del código HTML propiamente dicho. Así tenemos el método iniciotabla que hace la salida de la marca table e inicialización del atributo border:
def iniciotabla(self):
        print '<table border="1">'
De forma similar los otros métodos son:
def iniciofila(self):
        print '<tr>'

    def mostrar(self,fi,co):
        print '<td>'
        print self.mat[fi][co]
        print '</td>'

    def finfila(self):
        print '</tr>'

    def fintabla(self):
        print '</table>'
Si bien podíamos hacer todo esto en el método graficar y no hacer estos cinco métodos, la simplicidad del código aumenta a medida que subdividimos los algoritmos. Esto es de fundamental importancia con algoritmos más complejos./p>
Lo que nos importa ahora ver es como llamamos a métodos que pertenecen a la misma clase:
def graficar(self):
        self.iniciotabla()
        for f in range(0,self.cantfilas):
            self.iniciofila()
            for c in range(0,self.cantcolumnas):
                 self.mostrar(f,c)
            self.finfila()
        self.fintabla()
Es decir le antecedemos la palabra self al nombre del método a llamar. De forma similar a como accedemos a los atributos de la clase.
Por último debemos definir un objeto de la clase Tabla y llamar a los métodos respectivos:
tabla1=Tabla(3,4)
tabla1.cargar(0,0,1)
tabla1.cargar(0,1,2)
tabla1.cargar(0,2,3)
tabla1.cargar(0,3,4)
tabla1.cargar(1,0,5)
tabla1.cargar(1,1,6)
tabla1.cargar(1,2,7)
tabla1.cargar(1,3,8)
tabla1.cargar(2,0,9)
tabla1.cargar(2,1,10)
tabla1.cargar(2,2,11)
tabla1.cargar(2,3,12)
tabla1.graficar()
Es importante notar que donde definimos un objeto de la clase Tabla no llamamos a los métodos iniciotabla(), iniciofila(), etc.

python banner
Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

La campaña de financiación colectiva (crowdfunding) de Ubuntu Edge paso a paso.

ubuntu edgeLa campaña de financiación colectiva que Canonical puso en marcha hace una semana comenzó con gran fuerza, pero en las últimas horas el empuje de esas inversiones se ha ralentizado de forma notable.
¿Conseguirán recaudar los 32 millones de dólares que persiguen para desarrollar y fabricar sus Ubuntu Edge?

El problema reside en que la avalancha de peticiones iniciales se ha debido a los importantes descuentos que Canonical ofreció. El Ubuntu Edge se podía conseguir por 600 dólares (más 30 de gastos de envío) frente a los 830 dólares que supondrían el coste final. Esa oferta se ha visto continuada con algunas más, pero éstas son cada vez menos atractivas.

Ubuntu Edge es un proyecto crowfunding que pretende comercializar un potente smartphone que, incluso, podría servir de base para un PC y ser proyectado a pantalla completa.

Ubuntu Edge se ha propuesto revolucionar el mercado de los smartphones con el lanzamiento de un servicio financiado a través de crowfunding basado en la creación de un dispositivo que mezclaría las características de un smartphone y un PC.

Entre otras características, el terminal podría conectarse a nuestro PC y pasar de ser un teléfono móvil a la base del ordenador personal. Entre sus principales características destacarían las siguientes:

· Diseño elegante y pantalla de 4,5 pulgadas que podría ser manejada con una mano. Su resolución óptima sería de 300 ppi y estaría protegida por un cristal de zafiro, duro y resistente material que sólo puede ser dañado o rayado por un diamante.
· Hardware: su funcionamiento dependería de un procesador de 4 Gb de memoria RAM y sería capaz de almacenar datos con una capacidad máxima de 128 Gb de memoria interna. La batería utilizaría tecnología de silicio-ánodo que permite exprimir al máximo su rendimiento y contener más energía que cualquier otra batería del mismo tamaño.
· Software: con doble sistema operativo, mobile OS y Android.
Y si lo que te preocupa es que tu aplicaciones Android no son compatibles con PC, no tienes por qué. Desde el primer momento se realizaría una actualización que hará que todos los contenidos de Android sean compatibles con el sistema operativo de Ubuntu y así puedas utilizarlo también en su versión para ordenador.
Como va la campaña.
La expectación que ha generado el proyecto de Canonical ha hecho que durante los primeros días surgieran muchísimas peticiones para apoyar el desarrollo de este singular smartphone, que llegaría con Android y Ubuntu preinstalados y que estaría dotado de unas prestaciones hardware notables.
ubuntu-edge-campana-1
Dos desarrolladores quisieron seguir de cerca la evolución de la campaña de crowdfunding, y desarrollaron dos gráficos que mostraban el nivel de recaudaciones. El primero, de MoveBits, parece haber dejado de funcionar en los últimos días, algo extraño considerando que el pequeño y elegante código en Ruby parecía estar cumpliendo perfectamente al comienzo de la campaña.
El segundo apareció poco después en la página Ubuntu-Edge.info, y en este caso las estadísticas han seguido funcionando de forma continua, mostrando además como referencia una diagonal con el “objetivo” lineal de recaudación de cada día.
ubuntu-edge-campana-2
Esa situación hace que no quede claro si la campaña de financiación colectiva tendrá éxito, algo en lo que influyen varios factores. El primero, la desaparición de las atractivas ofertas (o “perks”, como los denominan en Indiegogo) iniciales por ir agotándose. En segundo, el apoyo de los medios, que supusieron también un importante impulso inicial para el proyecto.

Canonical realizó algunas ofertas adicionales para tratar de volver a reimpulsar la campaña, pero las más relevantes ya están agotadas y actualmente el Ubuntu Edge se puede conseguir a 700 dólares (si aprovechamos la opción Double Edge, en la que reservamos 2 dispositivos por 1.400 dólares), o bien 775 dólares en el caso de querer reservar solo uno. Ese segundo precio es lógicamente menos atrayente para muchos interesados que llegan algo más tarde a la campaña de financiación.


Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog: