martes, 13 de septiembre de 2011
domingo, 21 de agosto de 2011
Instalar Eclipse en ubuntu
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts
sábado, 30 de octubre de 2010
Binarios de python para Python de MySQL
sábado, 16 de octubre de 2010
Botones de stock de glade en ubuntu
en gcon-editor activar
/desktop/gnome/interface/{buttons_have_icons,menus_have_icons}
Fuente
http://www.mail-archive.com/pygtk@daa.com.au/msg18483.html
domingo, 10 de octubre de 2010
Webkit en windows
jueves, 24 de junio de 2010
Compilando en Flex
if (/ruta/a/flex/bin/mxmlc -library-path+=/ruta/a /librerias/libs/lib/map_flex_1_18.swc "$GEDIT_CURRENT_DOCUMENT_PATH")
then
/usr/bin/firefox "`echo $GEDIT_CURRENT_DOCUMENT_PATH | awk -F.mxml {'print $1'}`.swf"
fi

lunes, 24 de agosto de 2009
Parser sencillo Python
#!/usr/bin/python
# -*- coding: iso-8859-15
import re
import os
import sys
import fileinput
import time
from datetime import date
from datetime import timedelta
conrec = 1
conart = 1
gtipo = ""
gunidad = ""
greceta = ""
tipos = {"Individual":"I","Colectivo":"C","Colectivas":"C"}
estampas = {}
frec = open('recetas.txt','w')
fart = open('articulos.txt','w')
def procesar_tipo(m):
global gtipo
if gtipo <> m.group(1):
gtipo = m.group(1)
def procesar_unidad(m):
global gunidad
if gunidad <> m.group(1):
gunidad = m.group(1)
def procesar_receta(m, archivo, fecha, hora):
global greceta, gunidad, gtipo, tipos, conrec, frec
if greceta <> m.group(1):
greceta = re.sub('\|','',m.group(1))
conrec += 1
if len(m.groups()) == 3:
nombre = ""
else:
nombre = re.sub('\|','',m.group(3).strip())
fecha_rec = m.group(2)
if (fecha == ''):
estampa = fecha_rec.split("/")
estampa = date(int(estampa[2]),int(estampa[1]),int(estampa[0]))
estampa = estampa + timedelta(days=1);
else:
estampa = fecha
cadena = "%s|%s|%s|%s|%s|%s|%s|%s|%s" % (conrec,greceta.strip(),gunidad,tipos[gtipo],nombre,fecha_rec,archivo,estampa,hora)
#print cadena
frec.write(cadena + "\n")
def qcomas(cadena):
return re.sub(',','',cadena)
def procesar_articulo_cp(m):
global conart, conrec, fart
conart += 1
cadena = "%s|%s|%s|%s|%s|%s" % (conart,conrec,m.group(1).strip(),qcomas(m.group(4)),qcomas(m.group(5)),qcomas(m.group(3)))
#print cadena
fart.write(cadena + "\n")
def procesar_articulo_sp(m):
global conart, conrec, fart
conart += 1
cadena = "%s|%s|%s|%s|%s|%s" % (conart,conrec,m.group(1).strip(),qcomas(m.group(3)),qcomas(m.group(4)),0.0)
#print cadena
fart.write(cadena + "\n")
def parse(linea, archivo, fecha, hora):
tipo = "Reporte de\s+(\w+)"
tipo_surtimiento = "Reporte de Surtimiento\s+(\w+)"
unidad = "UNIDAD\s+(\d+)"
receta = "([\w|\s|\-]+)\s+(\d+\/\d+\/\d+)\s+([\w|\s|\À|,|\(|\)|\.|\Ñ|\/|\`|\-]*[\w|\.]\s\s\s)\s+(\w+)"
#receta = "([\w|\s|\-]+)\s+(\d+\/\d+\/\d+)\s+(\w+)"
receta_sn = "([\w|\s|\-]+)\s+(\d+\/\d+\/\d+)\s+(\w+)"
articulo_cp = "((\w+[\s|\/|\.|\-])*\w+)\s+[\w|\d|\s|\:|\.|,|\;|\(|\)|\/\%|\-|Á|É|Í|Ó|Ú|Ü|á|é|í|ó|ú|ü|À|È|Ì|Ò|Ù|à|è|ì|ò|ù|Ñ|ñ]*\s+\$\s+([\d+,]*\d+\.\d+)\s+([\d+,]*\d+)\s+([\d+,]*\d+)\s+\$\s+([\d+,]*\d+\.\d+)"
articulo_sp = "((\w+[\s|\/|\.|\-])*\w+)\s+[\w|\d|\s|\:|\.|,|\;|\(|\)|\/\%|\-|Á|É|Í|Ó|Ú|Ü|á|é|í|ó|ú|ü|À|È|Ì|Ò|Ù|à|è|ì|ò|ù|Ñ|ñ]*\s+([\d+,]*\d+)\s+([\d+,]*\d+)"
patrones = {"tipo":tipo,"tipo_surtimiento":tipo_surtimiento,"unidad":unidad,"receta_cn":receta,"receta_sn":receta_sn,"articulo_cp":articulo_cp,"articulo_sp":articulo_sp}
for llave,patron in patrones.iteritems():
m = re.match(patron, linea)
if m <> None:
if llave == "tipo_surtimiento":
procesar_tipo(m)
elif llave == "tipo":
procesar_tipo(m)
elif llave == "unidad":
procesar_unidad(m)
elif llave == "receta_cn":
procesar_receta(m, archivo, fecha, hora)
elif llave == "receta_sn":
procesar_receta(m, archivo, fecha, hora)
elif llave == "articulo_cp":
procesar_articulo_cp(m)
elif llave == "articulo_sp":
print "Holas"
procesar_articulo_sp(m)
break
def recorrer_lineas(path, archivo, fecha, hora):
for line in fileinput.input(path + archivo):
parse(line, archivo, fecha, hora)
def recorrer_archivos(directorio):
global frec, fart, estampas
for base, dirs, files in os.walk(directorio+"txt/"):
for f in files:
#print "parsing: %s ..." % (f)
estampa = estampas[f[:-3]]
recorrer_lineas(base,f,estampa['fecha'],estampa['hora'])
#recorrer_lineas(base,f,'','')
frec.close()
fart.close()
def obtener_estampa(directorio):
global estampas
estampa = {}
for base, dirs, files in os.walk(directorio+"pdf/"):
for f in files:
tiempo = os.stat(base + f)
estampa['fecha'] = time.strftime("%Y-%m-%d",time.localtime(tiempo.st_mtime))
estampa['hora'] = time.strftime("%I:%M:%S",time.localtime(tiempo.st_mtime))
estampas[f[:-3]] = estampa
def main():
if len(sys.argv) >=2:
obtener_estampa(sys.argv[1])
recorrer_archivos(sys.argv[1])
else:
print "Debe indicar la ruta de los archivos pdf y txt"
if __name__ == '__main__':
main()
jueves, 30 de julio de 2009
PostgreSQL Encoding
- pg_dump -f your_db.dmp your_db
- iconv -f ISO8859-1 -t UTF-8 your_db.dmp > utf.dmp
- psql your_utf_db < utf.dmp
This assumes, that SQL_ASCII has been storing the content in ISO8859-1, which is a safe bet if you are in the US or western Europe. But don't nail me on that, if it does not work, try different source character sets (manual for iconv: http://www.mkssoftware.com/docs/man1/iconv.1.asp)
sábado, 14 de febrero de 2009
Serpientes y Escaleras 2a parte
Quite el fondo para hacer pruebas y porque estoy pensando en retirarlo y poner algo mas llamativo, esto porque posiblemente pase todo a pygame para darle mayor versatilidad, pero eso ya lo veré en la semana.Pondré los fuentes en la próxima entrega, donde también tratare de explicar un poco como fue codificado el juego.
domingo, 8 de febrero de 2009
Serpientes y Escaleras
Como se ve en el diagrama, el flujo del juego es de izquierda a derecha en algunas lineas y de derecha a izquierda en otras de manera alternada. Habra un dado, aunque en la figura se muestran dos, o un papelito que asomara de un jarrito para seguir las reglas de la página del ILCE, puede haber de manera simultanea 6 jugadores, que podrán estar en la misma máquina o conectados por red.La reglas del juego pueden leerse aquí
lunes, 2 de febrero de 2009
Juegos en Python
De momento les dejo una imagen del tablero en su estado actual.
jueves, 29 de enero de 2009
Bot MSN
En esta ocasión pondré un programa que es una vil copia del sitio de la biblioteca de msnp pero corregido para que reflejen los cambios en las listas de los contactos del bot.
Sin más preámbulo ahí va el código :)
# echobot.py -- echo messages back to sender
import msnp
import time
class MsnChatListener(msnp.ChatCallbacks):
def message_received(self, passport_id, display_name, text, charset):
print '%s: %s' % (passport_id, text)
self.chat.send_message(text, charset)
class MsnListener(msnp.SessionCallbacks):
def chat_started(self, chat):
callbacks = MsnChatListener()
chat.callbacks = callbacks
callbacks.chat = chat
msn = msnp.Session(MsnListener())
msn.login('tlahtoa@hotmail.com', 'password')
msn.sync_friend_list ()
while True:
msn.process(chats = True)
time.sleep(1)
miércoles, 5 de noviembre de 2008
Crónica de una muerte en tiempo
Viendo las noticias del ayer martes, de las que dos fueron las más destacadas en México: por un lado el triunfo de Barack Obama en las elecciones presidenciales de los Estados Unidos de Norteamerica y por otro la muerte del Secretario de Gobernación en el un avionetazo en plena ciudad de México.
Y a esto, me pregunto yo, ¿será que hago caso del dicho "Piensa mal y acertaras"?, desde mi punto de vista esta muerte puede leerse de varias maneras:
El secretario de gobernación no iba en la avioneta y solo fue una pantalla para sacarlo de alguna jugada de manera "decente".
El presidente no puede legitimarse por una piedra en gobernación y se la sacudió.
El triunfo de Obama en unas elecciones limpias podría dar pie a que México viera que el cambio es posible y el PAN no ganara las elecciones de 1999 y aplicaron la pantalla del avionetazo para que no fueran tan relevantes los sucesos en Estados Unidos.
El narco se libro de dos de los actores políticos que, “no lo deja trabajar”.