martes, agosto 16, 2011

500 posts intrascendentes...

...de un blog intrascendente.

si seniores, pensar que hace varios anios cree este blog cuando mi hermano se compro su primera camara compacta para postear fotos*.

el experimento no duro mucho  y empece a variar entre informacion interesante, rants de odio hacia el software :P, la etapa de postear screenshots de mi desktop, la etapa de quotear y repostear cosas y ahora que es simplemente un log de lo que considero vale la pena eternizar para cuando este viejo y solo y ya me haya leido todos los mails y chats de gmail en orden cronologico (?) y me ponga a ver que pavadas decia "cuando era joven".

al menos vino ian curtis y nos tomamos una pepsi


* mi hermano ahora labura de fotografo en berlin, para que se den una idea del paso del tiempo, pasen y vean que bonitas fotografias: http://kaig-hu-arg.com/

...then you win...

recien leo esto:

http://www.zdnet.com/blog/open-source/linux-snickers-at-microsofts-victory-declaration/9405

habla de que exceptuando desktops, linux es la fuerza mayoritaria en cloud, servers, mobile y 2da en tablets.

y que como el desktop esta en salida* linux es la fuerza dominante o el segundo en casi todos los segmentos.

esto me hizo acordar dos cosas:



y que por estas epocas hace 10 anios instalaba por primera vez linux en mi maquina :)

feliz decada linux

ahora hay que ponerse a ver cual es el sistema operativo que destrone a linux, no vaya a ser que se quede dormido en los laureles

a la espera del proximo rey**, viva la diversidad :)

* si ya se, tiene para rato
** que el nuevo rey sea libre

sábado, agosto 13, 2011

me gane una mochila un libro y un titulo de ingeniero en sistemas

dia de regalos, se anunciaron los ganadores del spawnfest y gane en la categoria "" por qrly

el premio es una mochila de erlang solutions y un libro de Erlang OTP in action (IRL!)

la UTN por haber aguantado 6 anios asistiendo a sus aulas le entrego a mi viejo por cuestiones geograficas (el E5 no llega hasta Inglaterra todavia) un titulo de ingeniero en sistemas de informacion.

demasiados premios para un dia

lista de lecturas 06/08/11

viernes, agosto 12, 2011

mlog, logging for human beings

siempre empiezo un modulo y empiezo a poner prints, pienso "tendría que usar logging", pero el hecho de no poder recordar como se configura un logger y tanta verbositud hace que siempre termine usando prints.

peor cuando tengo que cambiar a logging tengo que leer la documentación y termino haciendo copy paste del código de los ejemplos.

para eso cree un wrapper que me hace la vida mas simple en mis casos de uso simples.

pego acá parte del readme del modulo (en ingles por fiaca a traducirlo).

si les gusta el código esta acá:

https://github.com/marianoguerra/doodles/tree/master/python

si ven algún error, problema o tienen alguna observación para hacer son bienvenidos, nunca termino de entender el modelo de logging ya sea en python o en java (el único que entiendo es console.log y console.error de js :D)

acá va un ejemplo de uso:



import time
import mlog

# create a logger for the console with default logging level, default format
# and default everything (but nice defaults)
log = mlog.console()
# log some stuff
log.info("hey!")
log.warn("warning...")
log.error("something went wrong! (no it didn't just testing log.error)")

# add a file handler to the logger we where using (see how I pass the logger?)
# if I don't pass the logger instance I get a brand new logger that is
# unrelated to the last one, but in this case I add a handler to the one I have
mlog.file("mlog.log", logger=log)

# log some more stuff
log.debug("I'm on a file now!")
log.info("of course I'm on both")

# who wants file loggers without rotation?
# I give you a nice notation to specify the rotation policy
# add this handler to the logger I already have
mlog.file("every-minute.log", when=mlog.every(1, mlog.MINUTE), logger=log)

log.info("im on a file that rotates every minute")

# give time so it rotates
time.sleep(65)

log.info("65 seconds passed!")

# this is a new logger not related with the others
# change the module name so it's not in the same hierarchy
# as the other ones
other_log = mlog.file("unrelated.log", name="test_mlog_1")

# log something
other_log.info("unrelated logger is unrelated")
running it produces the following output (and files):

$ python test_mlog.py
[2011-08-12 11:44:30,491] test_mlog INFO: hey!
[2011-08-12 11:44:30,491] test_mlog WARNING: warning...
[2011-08-12 11:44:30,491] test_mlog ERROR: something went wrong! (no it didn't just testing log.error)
[2011-08-12 11:44:30,492] test_mlog INFO: of course I'm on both
[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute
[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!

$ ls
README.rst                              mlog.log                                test_mlog.py
every-minute.log                        mlog.py                                 unrelated.log
every-minute.log.2011-08-12_11-44       mlog.pyc

$ cat mlog.log
[2011-08-12 11:44:30,491] test_mlog DEBUG: I'm on a file now!
[2011-08-12 11:44:30,492] test_mlog INFO: of course I'm on both
[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute
[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!

$ cat every-minute.log
[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!

$ cat every-minute.log.2011-08-12_11-44
[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute

$ cat unrelated.log
[2011-08-12 11:45:35,495] test_mlog_1 INFO: unrelated logger is unrelated

miércoles, agosto 10, 2011

csv table to rst table -- python <3

update: roberto alsina sabe! :D hay una directiva no muy conocida en reST que permite hacer lo que hice (csv-table), y anda muy bonito en el wiki de github, dejo el codigo abajo porque es codigo python muy bonito :P

problema, documentar estructura de tablas sql en algun lado

preferiblemente:

  * formato editable con editor de texto
  * versionable
  * facil de escribir y bonito de leer

la forma mas facil de escribir es algo asi como un csv, pero la forma mas facil de leer es algun formato tabular, el wiki de github soporta varios markup pero el markup para tablas siempre es un perno, asi que elegi escribir un conversor de csv a tablas restructured text.

el resultado esta aca



ejemplo:

$ cat personas.csv                                           
dni, nombre, apellido, observacion
1, bob, esponja, vive en una pinia debajo del mar
2, patricio, estrella, amigo de bob que perno seria tener que escribir el markup para una columna tan larga no?
$ python csv2table.py personas.csv > tablas.rst                                    
$ echo >> tablas.rst
$ python csv2table.py personas.csv "Personas con titulo (la tabla no las personas)" >> tablas.rst
$ rst2html tablas.rst > tablas.html

resultado rst (si, rompi todos los estilos de la tierra):

=== ========= ========= ========================================================================================= 
dni  nombre    apellido  observacion                                                                              
=== ========= ========= ========================================================================================= 
1    bob       esponja   vive en una pinia debajo del mar                                                         
2    patricio  estrella  amigo de bob que perno seria tener que escribir el markup para una columna tan larga no? 
=== ========= ========= ========================================================================================= 

Personas con titulo (la tabla no las personas)
==============================================

=== ========= ========= ========================================================================================= 
dni  nombre    apellido  observacion                                                                              
=== ========= ========= ========================================================================================= 
1    bob       esponja   vive en una pinia debajo del mar                                                         
2    patricio  estrella  amigo de bob que perno seria tener que escribir el markup para una columna tan larga no? 
=== ========= ========= ========================================================================================= 


resultado html:

dni nombre apellido observacion
1 bob esponja vive en una pinia debajo del mar
2 patricio estrella amigo de bob que perno seria tener que escribir el markup para una columna tan larga no?

Personas con titulo (la tabla no las personas)

dni nombre apellido observacion
1 bob esponja vive en una pinia debajo del mar
2 patricio estrella amigo de bob que perno seria tener que escribir el markup para una columna tan larga no?

martes, agosto 02, 2011

llego el momento

si seniores, basta de intentar evitar lo inevitable, hoy me voy a aprender de memoria los shorthands de CSS.

parece que la cosa es como un reloj, empezando en las doce y girando en sentido horario (como va a girar un reloj sino).

osea que es: top, right, bottom, left.

si se especifican 3 simplemente el segundo se refiere a left y right: top, right - left, bottom.

si se ponen dos se aplican de a pares: top - bottom, right - left.

espero habermelos aprendido bien porque ahora me quedaron grabados con lo del reloj :D

solo me tomo como 5 anios de consultar w3schools cada vez que necesitaba recordarlo.

PD: te conte que la documentacion de mozilla le pasa el trapo a la de w3schools y que tendrias que linkear a MDC CSS Docs cuantas veces puedas asi rankea arriba de w3schools en google y todos somos felices?

Seguidores

Archivo del Blog