sábado, 19 de marzo de 2011

Python Editor, un completo IDE para Python


IDE muy completo me gusto porque con  solo abrir el codigo te hace automaticamente los diagramas UML y tambien te genera la ducumentacion con pydoc y si modificas el codigo se actualiza 
automaticamente todo.

Son innumerables los editores e IDEs que existen para trabajar con Python. Hablar de todos ellos seria practicamente imposible, pero hoy voy a comentar uno que me gusta especialmente: se llama Stani’s Python Editor, abreviado SPE.
Es un IDE para python bastante completito para todos aquellos que esten empezando: resaltado de sintaxis, te muestra ayuda contextual de las funciones y los modulos, debugger, generación dinamica de diagramas UML y documentación, posibilidad de invocar a utilidades externas, entre ellas al diseñador gráfico y mucho más.

Si quieres probarlo puedes instalarlo con:

$ sudo apt-get install spe

bastante completo para cualquier proyecto básico que quieras hacer.

Podredumbre del software

Podredumbre del software

Por Joaquin Gracia
Basado en un artículo de Robert C. Martin
22 de Agosto de 2004

¿Qué le pasa al software? El diseño de muchas aplicaciones comienza con una imagen clara en la mente del diseñador. En este estado el diseño es claro, conciso y elegante. Diseñadores y programadores desean verlo funcionar. Algunos de estos proyectos mantienen esta pureza de diseño hasta la primera versión.
Pero algo comienza a pasar. Al principio apenas es perceptible. Un parche por aquí, una ñapa por allá, aunque el diseño todavía mantiene la filosofía inicial. El software comienza a pudrirse. Las ñapas continúan y poco a poco el software se corrompe mas y mas hasta llegar un punto en el que afecta a toda la aplicación. El programa se convierte en una ingente masa de código que cada vez es más difícil de mantener. Entonces el esfuerzo requerido para hacer el más simple de los cambios es tal que los responsables de producto se plantean hacer un rediseño de la aplicación.
Los rediseños normalmente no fructifican. Aunque las intenciones de los diseñadores son buenas se dan cuenta de que es una tarea imposible. El sistema continua evolucionando, cambiando y el nuevo rediseño nunca termina. Un día la cantidad de problemas vuelve a ser tal que se los diseñadores lloran por otro rediseño.

Síntomas de un mal diseño

Hay cuatro indicios principales que nos indican que el software se esta pudriendo. No son independientes y están relacionados unos con otros, son: rigidez, fragilidad, inmovilidad y viscosidad.
Rigidez. Es la tendencia del software a ser difícil de cambiar, incluso en las cosas más sencillas. Cada cambio produce una cascada de cambios en módulos dependientes. Lo que parecía un cambio de dos días en un módulo resulta ser varias semanas de cambios de módulos tirando del hilo a través de la aplicación.
Cuando el software toma este camino, los gestores temen decir a los programadores que arreglen pequeños problemas que no son críticos. Esto ocurre porque ellos no saben con seguridad cuando acabaran los programadores. Todo el mundo hace "check-in" y nadie hace "check-out".
El miedo del gestor puede llegar a ser tan agudo que se niegue a realizar modificaciones en la aplicación. De manera que, lo que empezó siendo un diseño ineficiente acaba siendo una mala política de gestión.
Fragilidad. Muy relacionada con la rigidez está la fragilidad. La fragilidad es la tendencia que tiene el software a romperse por muchos sitios cada vez que se cambia algo. Muchas de las roturas ocurren en sitios que no están relacionados conceptualmente con el área que se está cambiando. Cada vez que los gestores autorizan un cambio tienen miedo de que el programa se rompa por algún lugar inesperado.
Conforme la fragilidad empeora, la probabilidad de que el software se rompa incrementa con el tiempo, acercándose cada vez más a 1. Este software es imposible de mantener. Cada arreglo lo hace peor, introduciendo más problemas de los que son solucionados.
Este software causa que los gestores y los clientes tengan la impresión de que los desarrolladores han perdido el control del software, perdiéndose así la credibilidad de los desarrolladores. Y frases como "Rompes más de lo que arreglas", comienzan a ser habituales.
Inmovilidad. La inmovilidad es la resistencia del software a ser reutilizado en otros proyectos o parte de otros proyectos. Pasa muchas veces que un programador descubre que necesita un módulo que es muy parecido a otro que ha desarrollado otro programador. Sin embargo, también pasa muchas veces que el módulo en cuestión depende demasiado de la aplicación en la que está integrado. Después de mucho trabajo los desarrolladores descubren que el trabajo necesario para separar las partes reutilizables de las partes no reutilizables es demasiado alto. Y entonces el software simplemente se rescribe en vez de ser reutilizado.
Viscosidad. La viscosidad de diseño es la dificultad de mantener la filosofía del diseño original. Cuando se afronta un cambio los programadores encuentran normalmente más de una manera de realizarlo. Algunas de estas formas preservan la filosofía del diseño y otras no. Cuando las formas de implementar el cambio preservando el diseño son más difíciles de realizar que las que no lo preservan, entonces la viscosidad del diseño es alta. Es fácil hacerlo mal y difícil hacerlo bien.
Estos cuatro síntomas son reveladores de un diseño de arquitectura pobre. Cualquier aplicación que muestra estos síntomas adolece de un diseño pobre.

¿Qué causa que el diseño se deteriore?

Requisitos cambiantes

La causa de la degradación del diseño es muy conocida. Los requisitos han ido cambiando de manera que no estaba previsto en el diseño inicial. A menudo los cambios necesitan hacerse rápidamente y hechos por programadores que no están familiarizados con el diseño original. Entonces, aunque los cambios funciona, violan el diseño original. Poco a poco los cambios continúan y las violaciones se acumulan hasta que el diseño se rompe.
Aún así no podemos echar la culpa a que los requisitos cambian y cruzarnos de brazos. Como desarrolladores, todos sabemos que los requisitos van a cambiar. Así que debemos realizar un diseño que soporte modificaciones sin que este pierda su consistencia.

Control de dependencias

¿Qué tipos de cambios hacen que un diseño se pudra? Los cambios que introducen nuevas e imprevistas dependencias. Cada una de las cuatro causas mencionadas anteriormente están relacionadas directa o indirectamente con dependencias entre módulos del software. Son las dependencias de la arquitectura lo que se degrada y con ellas el mantenimiento del software.
Para anticiparse a la degradación de las dependencias del diseño de la arquitectura, deben ser controladas las dependencias entre módulos de una aplicación. Este control consiste en la creación de "cortafuegos" de dependencias. A través de estos cortafuegos las dependencias no se propagan.
El diseño orientado a objetos esta repleto de principios y técnicas que nos permiten construir estos cortafuegos y controlar estas dependencias.
En posteriores artículos examinaremos estos principios y técnicas (patrones de diseño) que ayudan a controlar las dependencias de la arquitectura.

miércoles, 16 de marzo de 2011

Memoria ubuntu

Como hacer un Pendrive de ubuntu persistente y live:



Lili es un programa para windows y es super sencillo de usar, solo hay que seguir unos cuantos pasos:

LiLi - Linux Live USB Creator
Pasos a seguir
1.    Seleccionas la unidad USB donde vas a instalar Linux.
2.    Elije la fuente que vas a usar (CD, ISO, o bajar de internet la ISO)
3.    Persistencia: Esto quiere decir que escojas qué tamaño de tu USB vas a usar para guardar datos (en caso de que no instales Ubuntu, sino que lo uses a modo Live-USB) y tenerlos siempre que ejecutes Ubutu desde la USB
4.    Selecciona el tipo de archivos a usar, si quieres darle formato a tu USB, ocultar los archivos.
5.    Crear: Clickea sobre el rayo para comenzar a instalar.
Una caracteristica especial de LiLi es que si en el paso 4 seleccionan “Enable Lauching LinuxLive directly in Windows” entonces podran virtualizar Linux en Windows sin ningun tipo de instalacion o configuracion extra.

Para correr la memoria en algunas computadoras hay que configurar el bios para que arranque o bootear como primer dispositivo al momento de prender la compu aparece que presiones  F2,F9,F12 depende del bios algunas veces ya lo traen configurado y carga sola cuando inicia cargara los controladores y iniciara le pones en modo de prueba y ya y iniciara

Programa :

Ubuntu:

Nota: recuerda ponerle persistencia es para que se guarden los datos si no le pones nada sera live y asi no se guardan datos ni nada 

programa oficial de instalacion ubuntu

martes, 15 de marzo de 2011

Diagrama UML






Diagramas UML. ¿Qué es UML? UML es un conjunto de herramientas, que permite modelar (analizar y diseñar) sistemas orientados a objetos.
Ahora la frase más importante de todo el artículo: "El 80% de los problemas se pueden resolver usando tan solo el 20% de UML"

Herramientas UML

Pero volviendo a la definición de UML como "conjunto de herramientas", si nos imaginamos UML como una caja de herramientas con su martillo, destornillador, alicates, etc. Veamos qué contiene nuestra caja de herramientas:
UML Tools
  • Diagrama de casos de uso
  • Diagrama de clases
  • Diagrama de estados
  • Diagrama de secuencias
  • Diagrama de actividades
  • Diagrama de colaboraciones
  • Diagrama de componentes
  • Diagrama de distribución
Pero siguiendo con la analogía, si vamos a colgar un cuadro no usaremos todas las herramientas de nuestra caja, posiblemente sólo usemos el martillo para clavar el clavo.
Lo mismo pasa con UML, una vez que conozcamos las herramientas usaremos en cada momento las más adecuadas a nuestras necesidades. Nos os voy a decir que esto sea fácil, pues hay que saber para qué sirven y qué limitaciones tienen unas y otras para conocer su utilidad. Pero se puede alcanzar este conocimiento con un poco de práctica y sentido común.

Primeramente pongo la definicion de UML 
Lenguaje Unificado de Modelado (LUM o UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje demodelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables. 


Herramienta case:BOUML

Características

  • Le permite dibujar diagramas UML 2.0 después de la norma.
  • Realiza el diagrama, y ​​revertir la ingeniería directa para varios idiomas.
  • Es multiplataforma .
  • Es muy rápido en comparación con otros modeladores UML. [1]
  • apoyo XMI.

Generación de código e ingeniería inversa
BOUML puede generar automáticamente el código de los diagramas de clase UML y reconstruirlas de las fuentes existentes utilizando los siguientes lenguajes: C + + , Java , PHP . También puede generar código para Python y IDL , pero no extraer el modelo de UML para estos idiomas.




martes, 1 de marzo de 2011

(T) 2.- Integracion de clases

Implementación de varias clases que se comunican.

Primeramente se nota algo raro en el codigo pues es el sistema de plantillas django se explica en el siguiente
texto : El sistema de plantillas de Django
Te has fijado que el algunos programas el HTML estaba directamente dentro del código en Python!
Esta disposición de las cosas nos lleva a varios problemas:
Obviamente, cualquier cambio en el diseño de la página conllevará un cambio del código. El diseño de
un sitio tiende a cambiar mucho más rápidamente que el código subyacente, así que sería
conveniente si los cambios del HTML estuvieran separados de los cambios del código.
• Segundo, escribir código de backend en Python y diseñar/escribir HTML son dos disciplinas diferentes,
y la mayoría de los entornos profesionales de desarrollo Web dividen estas responsabilidades entre
personas distintas (o inclusos departamentos distintos). Los diseñadores y programadores de
HTML/CSS no deberían tener que editar código en Python para hacer su trabajo; sólo deberían tratar
con HTML.
• Asimismo, es más eficiente que los programadores puedan trabajar en su código en Python y los
diseñadores en sus plantillas de forma simultánea, en lugar de que una persona tenga que esperar
que la otra acabe de editar un único fichero que contiene tanto Python como HTML.

Por estas razones, es mucho más limpio y mantenible separar el diseño de la página del propio código en
Python. Y podemos conseguirlo con el sistema de plantillas de Django.
Introducción al sistema de plantillas
Una plantilla de Django es una cadena de texto pensada para separar la presentación de un documento de
sus datos. Una plantilla define variables y varios trozos de lógica básica (tags) que regulan la manera en que
debería mostrarse el documento. Normalmente, las plantillas se usan para producir HTML, pero las plantillas
de Django son igualmente capaces de generar cualquier formato basado en texto.
                                         Fuente : http://the-geek.org/django-book/chapter4/

class Menu(webapp.RequestHandler):
def get(self):
template_values = {}
path=os.path.join(os.path.dirname(__file__),'index.html')
self.response.out.write(template.render(path,template_values))
class Formulario(search.SearchableModel):
nombre= db.StringProperty()
apellido = db.StringProperty()

class Index(webapp.RequestHandler):
def get(self):
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'registro.html')
self.response.out.write(template.render(path, template_values))

class datosprincipales(webapp.RequestHandler):
def post(self):
template_values = {
'txtedad': self.request.get('txtedad'),
'txtApellidos': self.request.get('txtApellidos').upper(),
*Faltan mas por agregar
}
path = os.path.join(os.path.dirname(__file__), 'datos.html')
self.response.out.write(template.render(path, template_values))

class guardar(webapp.RequestHandler):
def post(self):
formulario = Formulario()
template_values = {
'txtApellidos': self.request.get('txtApellidos').upper(),
'txtNombres': self.request.get('txtNombres').upper(),
'txtCorreo': self.request.get('txtCorreo').lower(),
'tieneCorreo': (formulario.correo != '')
}
path = os.path.join(os.path.dirname(__file__), 'mensaje.html')
self.response.out.write(template.render(path, template_values))
class buscar(webapp.RequestHandler):
def get(self):
txtFullText = self.request.get('txtFullText').upper()
if txtFullText <> '':
formularios = Formulario.all().search(txtFullText)
template_values = {
'formularios': formularios
}
else:
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'busqueda.html')
self.response.out.write(template.render(path