Revisar camino interesante
Practicas en diferentes lenguajes, comunicación con hardware, proyectos electrónica, todo lo que me de la gana de hacer!!
Buscar este blog
junio 29, 2011
Icarus 0.1.6a va por buen camino
Se anade un lanzado de cuatro botones con iconos, se mejora el reloj y el capturador de pantalla y correcciones menores, ahora todo si es widgets en pantalla
tomar capturas de pantalla con python - parte 2
Se anadio la captura por recuadro, esto quiere decir que se puede tomar solo un area de la pantalla sin tener que tomar la captura de toda la pantalla dando clic en la hoja que tiene la ventana.
import pygtk; pygtk.require('2.0')
import gtk
import os, datetime
import sys
version="0.2"
data = [
"16 16 3 1",
" c None",
". c #000000",
"X c #FFFFFF",
" ",
" ...... ",
" .XXX.X. ",
" .XXX.XX. ",
" .XXX.XXX. ",
" .XXX..... ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" ......... ",
" ",
" "
]
class icarus_pantallazo:
def main(self):
root = gtk.gdk.get_default_root_window();
rootwidth, rootheight = root.get_size();
current_dt=datetime.datetime.now()
dia_numero= "%02d" % current_dt.day
meses_numero="%02d" % current_dt.month
anio=str(current_dt.year)
hora_24="%02d" % current_dt.hour
minuto="%02d" % current_dt.minute
segundo="%02d" % current_dt.second
self.fecha="_"+dia_numero+"-"+meses_numero+"-"+anio+"_"+hora_24+":"+minuto+":"+segundo
#
self.pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 1, 8, rootwidth, rootheight);
self.pix.get_from_drawable(root, root.get_colormap(), 0, 0, 0, 0, rootwidth, rootheight);
def guardar(self,modo):
if modo==1:
#crear ventana para tomar el recuadro
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_decorated(True)
self.window.connect("delete_event", self.close_application)
self.window.set_events(self.window.get_events() | gtk.gdk.BUTTON_PRESS_MASK)
self.window.connect("button_press_event", self.press_aplication)
self.window.show()
pixmap, mask = gtk.gdk.pixmap_create_from_xpm_d(self.window.window, None, data)
self.image = gtk.Image()
self.image.set_from_pixmap(pixmap, mask)
self.image.show()
# To display the image, we use a fixed widget to place the image
self.fixed = gtk.Fixed()
self.fixed.set_size_request(50,50) #16,16
self.fixed.put(self.image, 0, 0)
self.window.add(self.fixed)
self.fixed.show()
self.window.shape_combine_mask(mask, 0, 0)
gtk.main()
#
if self.pix!=None:
home = os.environ['HOME']
self.pix.save(home+"/pantallazo"+self.fecha+".png", "png")
print "Tomo foto"
return 0
return 1
def press_aplication(self, widget, event):
#print event
if event.x<=16 and event.y<=16 and event.button==1:
dimension=self.window.get_size()
posicion=self.window.get_position()
pix_aux = self.pix.subpixbuf(posicion[0],posicion[1], dimension[0], dimension[1])
self.pix=pix_aux
self.window.hide()
gtk.main_quit()
#self.pix=None
return 0
def close_application(self, widget, event, data=None):
gtk.main_quit()
self.pix=None
#del self.window
return gtk.FALSE
if __name__ == '__main__':
a=icarus_pantallazo()
a.main()
if sys.argv[1].lower()=="completa":
a.guardar(0)
elif sys.argv[1].lower()=="recuadro":
a.guardar(1)
else:
print "parametro incorrecto"
$python archivo.py recuadro "toma la captura del area marcada por la ventana"
o
$python archivo.py completa "Toma la captura completa"
Descargar despues de descargar anadir la extension py
import pygtk; pygtk.require('2.0')
import gtk
import os, datetime
import sys
version="0.2"
data = [
"16 16 3 1",
" c None",
". c #000000",
"X c #FFFFFF",
" ",
" ...... ",
" .XXX.X. ",
" .XXX.XX. ",
" .XXX.XXX. ",
" .XXX..... ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" .XXXXXXX. ",
" ......... ",
" ",
" "
]
class icarus_pantallazo:
def main(self):
root = gtk.gdk.get_default_root_window();
rootwidth, rootheight = root.get_size();
current_dt=datetime.datetime.now()
dia_numero= "%02d" % current_dt.day
meses_numero="%02d" % current_dt.month
anio=str(current_dt.year)
hora_24="%02d" % current_dt.hour
minuto="%02d" % current_dt.minute
segundo="%02d" % current_dt.second
self.fecha="_"+dia_numero+"-"+meses_numero+"-"+anio+"_"+hora_24+":"+minuto+":"+segundo
#
self.pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 1, 8, rootwidth, rootheight);
self.pix.get_from_drawable(root, root.get_colormap(), 0, 0, 0, 0, rootwidth, rootheight);
def guardar(self,modo):
if modo==1:
#crear ventana para tomar el recuadro
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_decorated(True)
self.window.connect("delete_event", self.close_application)
self.window.set_events(self.window.get_events() | gtk.gdk.BUTTON_PRESS_MASK)
self.window.connect("button_press_event", self.press_aplication)
self.window.show()
pixmap, mask = gtk.gdk.pixmap_create_from_xpm_d(self.window.window, None, data)
self.image = gtk.Image()
self.image.set_from_pixmap(pixmap, mask)
self.image.show()
# To display the image, we use a fixed widget to place the image
self.fixed = gtk.Fixed()
self.fixed.set_size_request(50,50) #16,16
self.fixed.put(self.image, 0, 0)
self.window.add(self.fixed)
self.fixed.show()
self.window.shape_combine_mask(mask, 0, 0)
gtk.main()
#
if self.pix!=None:
home = os.environ['HOME']
self.pix.save(home+"/pantallazo"+self.fecha+".png", "png")
print "Tomo foto"
return 0
return 1
def press_aplication(self, widget, event):
#print event
if event.x<=16 and event.y<=16 and event.button==1:
dimension=self.window.get_size()
posicion=self.window.get_position()
pix_aux = self.pix.subpixbuf(posicion[0],posicion[1], dimension[0], dimension[1])
self.pix=pix_aux
self.window.hide()
gtk.main_quit()
#self.pix=None
return 0
def close_application(self, widget, event, data=None):
gtk.main_quit()
self.pix=None
#del self.window
return gtk.FALSE
if __name__ == '__main__':
a=icarus_pantallazo()
a.main()
if sys.argv[1].lower()=="completa":
a.guardar(0)
elif sys.argv[1].lower()=="recuadro":
a.guardar(1)
else:
print "parametro incorrecto"
$python archivo.py recuadro "toma la captura del area marcada por la ventana"
o
$python archivo.py completa "Toma la captura completa"
Descargar despues de descargar anadir la extension py
junio 25, 2011
Icarus 0.1.5b
Mejorado Icarus ya dispone de una interfaz grafica para realizar las acciones
- Activar
- Desactivar
- Seleccionar demonio
- Pantallazo
- Salir
Para poder usarlo es necesario dar click derecho en el tray en el icono de Icarus que tiene la siguiente forma
Demonios anadidos:
- Pantallazo
- Aviso de bataria baja
- wallv2 - Widgets Pasivo
Solo es necesario correrlo una vez y listo queda funcionando asi se cierre Icarus
Aca una imagen del about del programa.
Como instalar
se lo instala descomprimiendo la archivo y ejecutando el archivo setup.py de la siguiente manera:
$sudo python setup install
para desintalar
$sudo python setup.py uninstall
todo el codigo esta bajo gplv2
Descargar
link
junio 20, 2011
Pasar de pdf a Html por consola
Primero se tiene que instalar el siguiente paquete (realizado en ubuntu 11.04 server)
$ sudo apt-get install poppler-utils
$ sudo apt-get install poppler-utils
esto nos instalara las siguientes herramientas
{pdftoabw pdftohtml pdftoppm pdftops pdftotext }
de la cual vamos a usar "pdftohtml"de la siguiente manera
junio 19, 2011
SMF MELI
Como crear un foro de una manera simple con la explicacion de metacortex de http://www.forosdelweb.com/ el articulo de el lo encuentras en AQUI al final del articulo encontraran una implementacion del mismo perdon la tardanza pero me olvide de hacer el articulo después de terminar el foro pero que son mas de 100 días de retraso por ese motivo utilizo el articulo de metacortex la pereza e grande...
Aquí un ejemplo ya instalado en nuestro servidor
http://www.softwarelibrespe.org/foro/index.php
Cifrado de Vigenere - parte 2
se añadieron diccionarios del tipo siguiente tipo
>>diccionario={"hola":"que fue",0:"cero""A":"letra A"}
>>print diccionario["A"]
"letra A"
>>print diccionario[0]
"cero"
para el abecedario y la palabra clave teniendo mas de una que puede ser escogida aleatoriamente o segun su clave en el diccionario
import random
letras_diccionario={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I',9:'J',10:'K',11:'L',12:'M',13:'N',14:'O',15:'P',16:'Q',17:'R',18:'S',19:'T',20:'U',21:'V',22:'W',23:'X',24:'Y',25:'Z',26:'1', 27:'2', 28:'3', 29:'4', 30:'5', 31:'6', 32:'7', 33:'8', 34:'9', 35:'0',36:' '}
palabra_clave={"facebook":"nadie es perfecto y yo soy nadie","correo":"la unica lucha que verdaderamente se pierde es la que se abandona","notas":"la casa es de todos","programas":"qwerty ytrewq danny ynnad"}
def codificacion(palabra_clave,mensaje):
mensaje_codificado=" "
mensaje=mensaje.upper()
palabra_clave=palabra_clave.upper()
longitud=len(mensaje)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_quiero=mensaje[i]
#inicial='Y'
#letra_quiero='P'
mensaje_codificado+=vigerene(inicial,letra_quiero)
return mensaje_codificado.lstrip() #Quita el espacio del comienzo
def vigerene(a1,a2,opcion=0):
#a1 letra de la palabra clave y a2 la letra real
inicial=letra_numero(a1)
letra_quiero=letra_numero(a2)
letras=letras_diccionario.values() #genera la lista de valores
letras1=letras[inicial:]+letras[:inicial]
if opcion==0:
return letras1[letra_quiero]
else:
return letras1
def recuperar_virgerene(palabra_clave,mensaje_codificado):
mensaje_original=" "
letras=letras_diccionario.values() #genera la lista de valores
pocision_original=0
longitud=len(mensaje_codificado)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave.upper()*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_resultado=mensaje_codificado[i]
letras1=vigerene(inicial,'Z',opcion=1) #pongo uno ya que no tiene importancion
pocision_original=letras1.index(letra_resultado)
mensaje_original+=letras[pocision_original]
return mensaje_original.lstrip() #Quita el espacio del comienzo
#ord de numero a letra son comandos
#chr de letra a numero son comandos
def letra_numero(letra):
clave=letras_diccionario.values()
return clave.index(letra)
def numero_letra(numero):
return letras_diccionario[numero]
def ciclo_pista (valor_a_probar,numero):
pista="36A81"
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
if aux==numero:
pista=valor_a_probar
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista
def generar_pista(numero):
#buscar una manera de generar un numera de 5 digitos que sumandos
#todos sus digitos hasta tener un digito sea igual a la variable numero
#sin contar el cero
pista="36A81"
if numero==0:
pista="36A81"
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista
def verificar_pista(valor_a_probar):
if valor_a_probar!="36A81":
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
else:
aux=0
return aux
def ingreso_mensaje():
mensaje=raw_input("Ingrese el mensaje: ")
#mensaje="hola como?"
mensaje_alter=mensaje.split()
mensaje=" "
for i in range(len(mensaje_alter)):
#Signo de puntuacion para ser quitados
mensaje_alter[i]=mensaje_alter[i].rstrip("?")
mensaje_alter[i]=mensaje_alter[i].lstrip("?")
mensaje_alter[i]=mensaje_alter[i].rstrip(".")
mensaje_alter[i]=mensaje_alter[i].lstrip(".")
mensaje_alter[i]=mensaje_alter[i].rstrip(",")
mensaje_alter[i]=mensaje_alter[i].lstrip(",")
mensaje_alter[i]=mensaje_alter[i].rstrip(":")
mensaje_alter[i]=mensaje_alter[i].lstrip(":")
mensaje_alter[i]=mensaje_alter[i].rstrip('"')
mensaje_alter[i]=mensaje_alter[i].lstrip('"')
mensaje_alter[i]=mensaje_alter[i].rstrip("!")
mensaje_alter[i]=mensaje_alter[i].lstrip("!")
mensaje_alter[i]=mensaje_alter[i].rstrip("$")
mensaje_alter[i]=mensaje_alter[i].lstrip("$")
mensaje_alter[i]=mensaje_alter[i].rstrip(")")
mensaje_alter[i]=mensaje_alter[i].lstrip(")")
mensaje_alter[i]=mensaje_alter[i].rstrip("(")
mensaje_alter[i]=mensaje_alter[i].lstrip("(")
mensaje+=mensaje_alter[i]+" "
mensaje=mensaje.lstrip()
mensaje=mensaje.rstrip()
return mensaje
def main():
clave=palabra_clave.values()
mensaje=ingreso_mensaje()
valor_tabla=random.randint(0,len(clave)-1) # genera aleatoriamente cualquiera de las llaves privadas
#valor_tabla=clave.index(palabra_clave["facebook"]) #una escoje alguna de las llaves privadas segun su clave de diccionario
pista=generar_pista(valor_tabla)
#el primer par dice que clave utilizo
#Codificacion
print "Mensaje: ",mensaje.upper()
resultado=codificacion(clave[valor_tabla],mensaje)
resultado=resultado.lstrip()
resultado1=pista+" "+resultado
print "resultado: ", resultado1
#recuperacion
valor_tabla=verificar_pista(resultado1[:5])
mensaje_original=recuperar_virgerene(clave[valor_tabla],resultado1[6:])
print "Decodificado: ",mensaje_original
print "Correcto?:", mensaje_original==mensaje.upper()
return 0
if __name__ == '__main__':
main()
Descargar codigo
>>diccionario={"hola":"que fue",0:"cero""A":"letra A"}
>>print diccionario["A"]
"letra A"
>>print diccionario[0]
"cero"
para el abecedario y la palabra clave teniendo mas de una que puede ser escogida aleatoriamente o segun su clave en el diccionario
import random
letras_diccionario={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I',9:'J',10:'K',11:'L',12:'M',13:'N',14:'O',15:'P',16:'Q',17:'R',18:'S',19:'T',20:'U',21:'V',22:'W',23:'X',24:'Y',25:'Z',26:'1', 27:'2', 28:'3', 29:'4', 30:'5', 31:'6', 32:'7', 33:'8', 34:'9', 35:'0',36:' '}
palabra_clave={"facebook":"nadie es perfecto y yo soy nadie","correo":"la unica lucha que verdaderamente se pierde es la que se abandona","notas":"la casa es de todos","programas":"qwerty ytrewq danny ynnad"}
def codificacion(palabra_clave,mensaje):
mensaje_codificado=" "
mensaje=mensaje.upper()
palabra_clave=palabra_clave.upper()
longitud=len(mensaje)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_quiero=mensaje[i]
#inicial='Y'
#letra_quiero='P'
mensaje_codificado+=vigerene(inicial,letra_quiero)
return mensaje_codificado.lstrip() #Quita el espacio del comienzo
def vigerene(a1,a2,opcion=0):
#a1 letra de la palabra clave y a2 la letra real
inicial=letra_numero(a1)
letra_quiero=letra_numero(a2)
letras=letras_diccionario.values() #genera la lista de valores
letras1=letras[inicial:]+letras[:inicial]
if opcion==0:
return letras1[letra_quiero]
else:
return letras1
def recuperar_virgerene(palabra_clave,mensaje_codificado):
mensaje_original=" "
letras=letras_diccionario.values() #genera la lista de valores
pocision_original=0
longitud=len(mensaje_codificado)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave.upper()*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_resultado=mensaje_codificado[i]
letras1=vigerene(inicial,'Z',opcion=1) #pongo uno ya que no tiene importancion
pocision_original=letras1.index(letra_resultado)
mensaje_original+=letras[pocision_original]
return mensaje_original.lstrip() #Quita el espacio del comienzo
#ord de numero a letra son comandos
#chr de letra a numero son comandos
def letra_numero(letra):
clave=letras_diccionario.values()
return clave.index(letra)
def numero_letra(numero):
return letras_diccionario[numero]
def ciclo_pista (valor_a_probar,numero):
pista="36A81"
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
if aux==numero:
pista=valor_a_probar
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista
def generar_pista(numero):
#buscar una manera de generar un numera de 5 digitos que sumandos
#todos sus digitos hasta tener un digito sea igual a la variable numero
#sin contar el cero
pista="36A81"
if numero==0:
pista="36A81"
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista
def verificar_pista(valor_a_probar):
if valor_a_probar!="36A81":
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
else:
aux=0
return aux
def ingreso_mensaje():
mensaje=raw_input("Ingrese el mensaje: ")
#mensaje="hola como?"
mensaje_alter=mensaje.split()
mensaje=" "
for i in range(len(mensaje_alter)):
#Signo de puntuacion para ser quitados
mensaje_alter[i]=mensaje_alter[i].rstrip("?")
mensaje_alter[i]=mensaje_alter[i].lstrip("?")
mensaje_alter[i]=mensaje_alter[i].rstrip(".")
mensaje_alter[i]=mensaje_alter[i].lstrip(".")
mensaje_alter[i]=mensaje_alter[i].rstrip(",")
mensaje_alter[i]=mensaje_alter[i].lstrip(",")
mensaje_alter[i]=mensaje_alter[i].rstrip(":")
mensaje_alter[i]=mensaje_alter[i].lstrip(":")
mensaje_alter[i]=mensaje_alter[i].rstrip('"')
mensaje_alter[i]=mensaje_alter[i].lstrip('"')
mensaje_alter[i]=mensaje_alter[i].rstrip("!")
mensaje_alter[i]=mensaje_alter[i].lstrip("!")
mensaje_alter[i]=mensaje_alter[i].rstrip("$")
mensaje_alter[i]=mensaje_alter[i].lstrip("$")
mensaje_alter[i]=mensaje_alter[i].rstrip(")")
mensaje_alter[i]=mensaje_alter[i].lstrip(")")
mensaje_alter[i]=mensaje_alter[i].rstrip("(")
mensaje_alter[i]=mensaje_alter[i].lstrip("(")
mensaje+=mensaje_alter[i]+" "
mensaje=mensaje.lstrip()
mensaje=mensaje.rstrip()
return mensaje
def main():
clave=palabra_clave.values()
mensaje=ingreso_mensaje()
valor_tabla=random.randint(0,len(clave)-1) # genera aleatoriamente cualquiera de las llaves privadas
#valor_tabla=clave.index(palabra_clave["facebook"]) #una escoje alguna de las llaves privadas segun su clave de diccionario
pista=generar_pista(valor_tabla)
#el primer par dice que clave utilizo
#Codificacion
print "Mensaje: ",mensaje.upper()
resultado=codificacion(clave[valor_tabla],mensaje)
resultado=resultado.lstrip()
resultado1=pista+" "+resultado
print "resultado: ", resultado1
#recuperacion
valor_tabla=verificar_pista(resultado1[:5])
mensaje_original=recuperar_virgerene(clave[valor_tabla],resultado1[6:])
print "Decodificado: ",mensaje_original
print "Correcto?:", mensaje_original==mensaje.upper()
return 0
if __name__ == '__main__':
main()
Descargar codigo
junio 13, 2011
Cifrado de Vigenere
"
El cifrado Vigenère es un cifrado basado en diferentes series de caracteres o letras del cifrado César formando
estos caracteres una tabla, llamada tabla de Vigenère, que se usa como clave. El cifrado de Vigenère es un
cifrado polialfabético y de sustitución.
El cifrado Vigenère se ha reinventado muchas veces. El método original fue descrito por Giovan Batista Belaso
en su libro de 1553 La cifra del Sig. Giovan Batista Belaso. Sin embargo, fue incorrectamente atribuido más tarde
a Blaise de Vigenère, concretamente en el siglo XIX, y por ello aún se le conoce como el "cifrado Vigenère".
Este cifrado es conocido porque es fácil de entender e implementar, además parece irresoluble; esto le hizo
valedor del apodo el código indescifrable (le chiffre indéchiffrable, en francés)." wikipedia
aqui el codigo
def codificacion(palabra_clave,mensaje):
mensaje_codificado=" "
mensaje=mensaje.upper()
palabra_clave=palabra_clave.upper()
longitud=len(mensaje)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_quiero=mensaje[i]
#inicial='Y'
#letra_quiero='P'
mensaje_codificado+=vigerene(inicial,letra_quiero)
return mensaje_codificado.lstrip() #Quita el espacio del comienzo
def vigerene(a1,a2,opcion=0):
#a1 letra de la palabra clave y a2 la letra real
inicial=letra_numero(a1)
letra_quiero=letra_numero(a2)
letras=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
letras1=letras[inicial:]+letras[:inicial]
if opcion==0:
return letras1[letra_quiero]
else:
return letras1
def recuperar_virgerene(palabra_clave,mensaje_codificado):
mensaje_original=" "
letras=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
pocision_original=0
longitud=len(mensaje_codificado)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave.upper()*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_resultado=mensaje_codificado[i]
letras1=vigerene(inicial,'Z',opcion=1) #pongo uno ya que no tiene importancion
pocision_original=letras1.index(letra_resultado)
mensaje_original+=letras[pocision_original]
return mensaje_original.lstrip() #Quita el espacio del comienzo
def letra_numero(letra):
return ord(letra)-65
def numero_letra(numero):
return chr(numero+65)
def main():
palabra_clave="meliespe"
mensaje=raw_input("Ingrese el mensaje: ")
#mensaje="hola como?"
mensaje_alter=mensaje.split()
mensaje=" "
for i in range(len(mensaje_alter)):
#Signo de puntuacion para ser quitados
mensaje_alter[i]=mensaje_alter[i].rstrip("?")
mensaje_alter[i]=mensaje_alter[i].rstrip(".")
mensaje_alter[i]=mensaje_alter[i].lstrip(".")
mensaje_alter[i]=mensaje_alter[i].rstrip(",")
mensaje_alter[i]=mensaje_alter[i].lstrip(",")
mensaje_alter[i]=mensaje_alter[i].rstrip(":")
mensaje_alter[i]=mensaje_alter[i].lstrip(":")
mensaje_alter[i]=mensaje_alter[i].rstrip('"')
mensaje_alter[i]=mensaje_alter[i].lstrip('"')
mensaje_alter[i]=mensaje_alter[i].rstrip("!")
mensaje_alter[i]=mensaje_alter[i].lstrip("!")
mensaje_alter[i]=mensaje_alter[i].rstrip("$")
mensaje_alter[i]=mensaje_alter[i].lstrip("$")
mensaje+=mensaje_alter[i]
mensaje=mensaje.lstrip()
#Codificacion
print "Mensaje: ",mensaje.upper()
resultado=codificacion(palabra_clave,mensaje)
resultado=resultado.lstrip()
print "resultado: ", resultado
#recuperacion
mensaje_original=recuperar_virgerene(palabra_clave,resultado)
print "Decodificado: ",mensaje_original
print "Correcto?:", mensaje_original==mensaje.upper()
return 0
if __name__ == '__main__':
main()
No esta implementado con la forma matemática sino de una forma manual por así decirlo
Cifrado de Vigenère
El cifrado Vigenère es un cifrado basado en diferentes series de caracteres o letras del cifrado César formando
estos caracteres una tabla, llamada tabla de Vigenère, que se usa como clave. El cifrado de Vigenère es un
cifrado polialfabético y de sustitución.
El cifrado Vigenère se ha reinventado muchas veces. El método original fue descrito por Giovan Batista Belaso
en su libro de 1553 La cifra del Sig. Giovan Batista Belaso. Sin embargo, fue incorrectamente atribuido más tarde
a Blaise de Vigenère, concretamente en el siglo XIX, y por ello aún se le conoce como el "cifrado Vigenère".
Este cifrado es conocido porque es fácil de entender e implementar, además parece irresoluble; esto le hizo
valedor del apodo el código indescifrable (le chiffre indéchiffrable, en francés)." wikipedia
aqui el codigo
def codificacion(palabra_clave,mensaje):
mensaje_codificado=" "
mensaje=mensaje.upper()
palabra_clave=palabra_clave.upper()
longitud=len(mensaje)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_quiero=mensaje[i]
#inicial='Y'
#letra_quiero='P'
mensaje_codificado+=vigerene(inicial,letra_quiero)
return mensaje_codificado.lstrip() #Quita el espacio del comienzo
def vigerene(a1,a2,opcion=0):
#a1 letra de la palabra clave y a2 la letra real
inicial=letra_numero(a1)
letra_quiero=letra_numero(a2)
letras=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
letras1=letras[inicial:]+letras[:inicial]
if opcion==0:
return letras1[letra_quiero]
else:
return letras1
def recuperar_virgerene(palabra_clave,mensaje_codificado):
mensaje_original=" "
letras=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
pocision_original=0
longitud=len(mensaje_codificado)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave.upper()*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_resultado=mensaje_codificado[i]
letras1=vigerene(inicial,'Z',opcion=1) #pongo uno ya que no tiene importancion
pocision_original=letras1.index(letra_resultado)
mensaje_original+=letras[pocision_original]
return mensaje_original.lstrip() #Quita el espacio del comienzo
def letra_numero(letra):
return ord(letra)-65
def numero_letra(numero):
return chr(numero+65)
def main():
palabra_clave="meliespe"
mensaje=raw_input("Ingrese el mensaje: ")
#mensaje="hola como?"
mensaje_alter=mensaje.split()
mensaje=" "
for i in range(len(mensaje_alter)):
#Signo de puntuacion para ser quitados
mensaje_alter[i]=mensaje_alter[i].rstrip("?")
mensaje_alter[i]=mensaje_alter[i].rstrip(".")
mensaje_alter[i]=mensaje_alter[i].lstrip(".")
mensaje_alter[i]=mensaje_alter[i].rstrip(",")
mensaje_alter[i]=mensaje_alter[i].lstrip(",")
mensaje_alter[i]=mensaje_alter[i].rstrip(":")
mensaje_alter[i]=mensaje_alter[i].lstrip(":")
mensaje_alter[i]=mensaje_alter[i].rstrip('"')
mensaje_alter[i]=mensaje_alter[i].lstrip('"')
mensaje_alter[i]=mensaje_alter[i].rstrip("!")
mensaje_alter[i]=mensaje_alter[i].lstrip("!")
mensaje_alter[i]=mensaje_alter[i].rstrip("$")
mensaje_alter[i]=mensaje_alter[i].lstrip("$")
mensaje+=mensaje_alter[i]
mensaje=mensaje.lstrip()
#Codificacion
print "Mensaje: ",mensaje.upper()
resultado=codificacion(palabra_clave,mensaje)
resultado=resultado.lstrip()
print "resultado: ", resultado
#recuperacion
mensaje_original=recuperar_virgerene(palabra_clave,resultado)
print "Decodificado: ",mensaje_original
print "Correcto?:", mensaje_original==mensaje.upper()
return 0
if __name__ == '__main__':
main()
No esta implementado con la forma matemática sino de una forma manual por así decirlo
la tabla de transformación
tomar capturas de pantalla con python
Acabas de instalar tu entorno gráfico no tienes como tomar capturas de pantalla bueno la solucion es python. Como?
import gtk
import os, datetime
class icarus_pantallazo:
def main(self):
root = gtk.gdk.get_default_root_window();
rootwidth, rootheight = root.get_size();
#lo comentado creo que va para cambiar la imagen
#gc = gtk.gdk.GC( root )
#
current_dt=datetime.datetime.now()
dia_numero= "%02d" % current_dt.day
meses_numero="%02d" % current_dt.month
anio=str(current_dt.year)
hora_24="%02d" % current_dt.hour
minuto="%02d" % current_dt.minute
segundo="%02d" % current_dt.second
fecha="_"+dia_numero+"-"+meses_numero+"-"+anio+"_"+hora_24+":"+minuto+":"+segundo
#
pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 1, 8, rootwidth, rootheight);
pix.get_from_drawable(root, root.get_colormap(), 0, 0, 0, 0, rootwidth, rootheight);
home = os.environ['HOME']
pix.save(home+"/pantallazo"+fecha+".png", "png")
#root.draw_image(gc,"test.png")
return 0
if __name__ == '__main__':
a=icarus_pantallazo()
a.main()
Entonces este script lo relacionas con alguna combinacion de teclas y listo a tomar capturas de pantalla como esta.
import gtk
import os, datetime
class icarus_pantallazo:
def main(self):
root = gtk.gdk.get_default_root_window();
rootwidth, rootheight = root.get_size();
#lo comentado creo que va para cambiar la imagen
#gc = gtk.gdk.GC( root )
#
current_dt=datetime.datetime.now()
dia_numero= "%02d" % current_dt.day
meses_numero="%02d" % current_dt.month
anio=str(current_dt.year)
hora_24="%02d" % current_dt.hour
minuto="%02d" % current_dt.minute
segundo="%02d" % current_dt.second
fecha="_"+dia_numero+"-"+meses_numero+"-"+anio+"_"+hora_24+":"+minuto+":"+segundo
#
pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 1, 8, rootwidth, rootheight);
pix.get_from_drawable(root, root.get_colormap(), 0, 0, 0, 0, rootwidth, rootheight);
home = os.environ['HOME']
pix.save(home+"/pantallazo"+fecha+".png", "png")
#root.draw_image(gc,"test.png")
return 0
if __name__ == '__main__':
a=icarus_pantallazo()
a.main()
Entonces este script lo relacionas con alguna combinacion de teclas y listo a tomar capturas de pantalla como esta.
Python: Módulos y paquetes
Python: Módulos y paquetes
Muy interesante para poder realizar modulos y paquetes en python
modulo
import ergus
paquetes
imports ergus.lo_que_sea
junio 09, 2011
junio 07, 2011
Icarus - Widgets pasivos
Reloj wallpaper con svg y nitrogen
Esta fue la entrada anterior, ahora cambio de tal modo que se gano un nombre le llame icarus por que tarde o temprano va a caer en alguna maquina ^_^
Los cambios realizados son:
- ninguna dependencia de cron para funcionar
- trabaja por hilos para hacer las actualizaciones mediando la libreria ergus hecha para el proyecto
- se maneja por opciones start,stop e imagen
La primera es para los widgets pasivos como reloj y sensores (todavía no esta hecho), solo funciona por el momento con gnome o escritorio que tengan gconftool-2 para el resto para openbox con esetroot y Xcfe4 con su nativo, pero estos solo el ultimo no eh probado para ver si funciona con svg, si no funciona toca modificar demonio_wallv2 en la funcion generador toca añadir el comando pasar_svg_png(el archivo svg,carpeta a donde va). y agregarlo por icarus imagen con un os.popen dentro del mismo metodo y despues se va a icarus a comentar la verificacion del start.
se lo instala descomprimiendo la archivo y ejecutando el archivo setup.py de la siguiente manera:
$sudo python setup install
para desintalar
$sudo python setup.py uninstall
todo el codigo esta bajo gplv2
junio 05, 2011
Reloj wallpaper con svg y nitrogen
la diferencia con el articulo anterior es que el código cambio completamente ya que se puede modificar los valores del svg directamente desde código ahorrando y mejorando completamente la escritura y implementacion para cualquier diseño, el proyecto cuanta con la clase ergus que es la tiene todos los comandos para realizarlo, por el momento esta diseñado para funcionar con nitrogen esto se puede cambiar tranquilamente también lo que es de la transformacion de svg a png si tu setter walllpaper soporta ese formato.
para que se vea la diferencia asi quedo:
dia_numero, dia_letra, meses_numero,mes,anio,hora_24,hora_12,minuto,ampm,hora=valores_reloj()
doc=abrir_archivo(archivo)
doc,a=cambiar_texto(doc,"tspan","hora1",hora)
doc,a=cambiar_texto(doc,"tspan","ampm1",ampm)
doc,a=cambiar_texto(doc,"tspan","mes1",mes)
doc,a=cambiar_texto(doc,"tspan","dia_numero1",dia_numero)
doc,a=cambiar_texto(doc,"tspan","dia_nombre1",dia_letra)
doc,a=cambiar_texto(doc,"tspan","ano_monbre1",anio)
cerrar_archivo(doc,archivo)
Nota: el "tspan" es la etiqueta que contiene el texto y el siguiente parámetro es el id de esta etiqueta.
Y esto cambia los valores del svg del reloj y después toca realizar estos comandos para aplicarlo a nitrogen ya que este no acepta svg.
pasar_svg_png("protector.svg","/home/badanni/wallpapers/")
poner_fondo_pantalla()
igual que el anterior el programa esta atado a cron para que lo repita cada minuto para actualizar la hora de pantalla. pero por utilizar una clase exterior toca utilizar un script en bash para que lo ejecute cron este quedo así:
#! /usr/bin/bash
cd /home/badanni/wallpapers
python reloj_wallv2.py
se le pone cd a la carpeta donde esta todo ya que el archivo librería esta en este lugar y cron al ejecutar lo hace desde la ubicación home(esto creo que pasa por la configuración de mi cron).
El link para descargar el programa.
Ergus-reloj_wall
junio 04, 2011
Configurando Cron
Primeramente se puede decir que cron es como una agenda para la computadora diciendole cuando hacer algo, para instalar toca poner:
ya instalado toca revisar si existen los archivos "cron.allow" y "cron.deny" el primero dice quien puede usarlo y el segun quien no, cuando instalas estos archivos no existen y solo tiene permiso el root de usarlo.
Para crearlos solo pon lo en /etc/ y ya el contenido de cron.allow debe ser tu nombre de usuario y uno por linea y el de cron.deny igual pero para los usuario que no pueden usarlo.
Ya hecho esto se tipea lo siguiente
Y nos preguntara por un editor de texto para comenzar a planificar las actividades de la maquina ya hecho esto toca comenzar a escribir, el modo de ejecución se especifica de la siguiente manera:
Un ejemplo para esto seria
30 10 * * * /usr/bin/who>> /home//quien
entonces que hara esto todos los dias a las 10:30 almacena el resultado de who en el archivo quien en la direccion puesta, ahora supongamos que lo queremos hacer solo para los lunes
30 10 * * 1 /usr/bin/who>> /home//quien
Y si se necesita que se realize cada cierto intervalo de tiempo.
*/15 * * 1 /usr/bin/who>> /home//quien
Este lo que hace es todos los lunes cada 15 minutos almacena el resultado de who en el archivo quien
Tener en cuenta que esto sirve solo para aplicaciones sin interfaz gráfica, para las que tiene interfaz gráfica toca anidar antes del comando DISPLAY=:0 como se ve en el siguiente ejemplo
*/1 * * * * DISPLAY=:0 python /home/badanni/wallpapers/reloj_wall.py
eso es todo con esto ya pueden comenzar a utilizar cron.
Nota: una buena pagina para mas informacion es en Linuxesmas
$sudo apt-get install cron
ya instalado toca revisar si existen los archivos "cron.allow" y "cron.deny" el primero dice quien puede usarlo y el segun quien no, cuando instalas estos archivos no existen y solo tiene permiso el root de usarlo.
Para crearlos solo pon lo en /etc/ y ya el contenido de cron.allow debe ser tu nombre de usuario y uno por linea y el de cron.deny igual pero para los usuario que no pueden usarlo.
Ya hecho esto se tipea lo siguiente
$crontab -e
Y nos preguntara por un editor de texto para comenzar a planificar las actividades de la maquina ya hecho esto toca comenzar a escribir, el modo de ejecución se especifica de la siguiente manera:
- Minutos: (0-59)
- Horas: (0-23)
- Días: (1-31)
- Mes: (1-12)
- Día de la semana: (0-6), siendo 1=lunes, 2=martes,... 6=sábado y 0=domingo (a veces también 7=domingo)
- comando
Un ejemplo para esto seria
30 10 * * * /usr/bin/who>> /home/
entonces que hara esto todos los dias a las 10:30 almacena el resultado de who en el archivo quien en la direccion puesta, ahora supongamos que lo queremos hacer solo para los lunes
30 10 * * 1 /usr/bin/who>> /home/
Y si se necesita que se realize cada cierto intervalo de tiempo.
*/15 * * 1 /usr/bin/who>> /home/
Este lo que hace es todos los lunes cada 15 minutos almacena el resultado de who en el archivo quien
Tener en cuenta que esto sirve solo para aplicaciones sin interfaz gráfica, para las que tiene interfaz gráfica toca anidar antes del comando DISPLAY=:0 como se ve en el siguiente ejemplo
*/1 * * * * DISPLAY=:0 python /home/badanni/wallpapers/reloj_wall.py
eso es todo con esto ya pueden comenzar a utilizar cron.
Nota: una buena pagina para mas informacion es en Linuxesmas
Haciendo un reloj de pantalla (descontinuado)
Después del fiasco que tuve con ubuntu 11.04 y su unity que no pude instalar por compatibilidad en la maquina me decidi a levantar de apoco un entorno gráfico a mi gusto apenas acabe eso subo algo, por el momento queria instalar gdesklets funciona bien pero al refrescarse (ejemplo un reloj) se queda en negro entonces a hacer el mio propio y asusnto sanjado despues de tontear un rato con svg para el reloj no pude mismo modificarlo desde python para cambiarle la hora entonces con cada corrida se genera una nueva imagen con la hora actual me queda algo así.
como el script es de una corrida (se ejecuta y finaliza) decidí probar cron para que se encargue de correrlo cada minuto y el resultado es como yo quería(bueno a medias ya que depende de inkspace y nitrogen el uno para realizar imágenes vectorial y el otro para poner imagenes de fondo de pantalla respectivamente, apenas los pueda remplazar con un código de python doy por sanjado el asunto.
El principal problema del script es que el reloj no se mueve es decir se le puede decir que cambie la imagen de fondo pero no el reloj y se debe fijar la imagen manualmente la primera vez después el escript restaura solo (esto es del nitrogen).
la configuracion del cron usada es:
todo el script hace referencia a la direccion /home/badanni/wallpapers/ por problemas de ejecución en cron al ubicar los archivos, como nitrogen necesita de entorno gráfico para funcionar se le debe decir a cron que utilice un display en mi caso 0 para todos a menos que tengas mas de un monitor según lo que entendí sin mas lata el codigo para descargar con la imagen
desde esta etiqueta va otra linea como por ejemplo linea6b pero al final se le quita el ">" del final;
linea6_mover=' transform="translate(%f,%f)"' % (x_nueva,y_nueva)
quedando de la siguiente forma:
linea6=linea6a+linea6b+linea6_mover+'>'
Los valores de x_nueva e y_nueva pueden ser positivo o negativos en negativo x llega hasta -160 e y llega a -200 creo es por que la posicion origina del reloj no esta en (0,0) error mio.
script en Python para mostrar reloj en fondo de pantalla(antiguo)
Ir a este post para ver los cambios
como el script es de una corrida (se ejecuta y finaliza) decidí probar cron para que se encargue de correrlo cada minuto y el resultado es como yo quería(bueno a medias ya que depende de inkspace y nitrogen el uno para realizar imágenes vectorial y el otro para poner imagenes de fondo de pantalla respectivamente, apenas los pueda remplazar con un código de python doy por sanjado el asunto.
El principal problema del script es que el reloj no se mueve es decir se le puede decir que cambie la imagen de fondo pero no el reloj y se debe fijar la imagen manualmente la primera vez después el escript restaura solo (esto es del nitrogen).
la configuracion del cron usada es:
*/1 * * * * DISPLAY=:0 python /home/badanni/wallpapers/reloj_wall.py
todo el script hace referencia a la direccion /home/badanni/wallpapers/ por problemas de ejecución en cron al ubicar los archivos, como nitrogen necesita de entorno gráfico para funcionar se le debe decir a cron que utilice un display en mi caso 0 para todos a menos que tengas mas de un monitor según lo que entendí sin mas lata el codigo para descargar con la imagen
Actualización:
toca separar la linea6 como linea6a hasta llegar a la etiqueta <g ........desde esta etiqueta va otra linea como por ejemplo linea6b pero al final se le quita el ">" del final;
linea6_mover=' transform="translate(%f,%f)"' % (x_nueva,y_nueva)
quedando de la siguiente forma:
linea6=linea6a+linea6b+linea6_mover+'>'
Los valores de x_nueva e y_nueva pueden ser positivo o negativos en negativo x llega hasta -160 e y llega a -200 creo es por que la posicion origina del reloj no esta en (0,0) error mio.
Ir a este post para ver los cambios
Suscribirse a:
Entradas (Atom)