martes, noviembre 27, 2007

Emacs con antialias

Hoy me tomé unos minutos para continuar con el tuning de mi emacs, ya antes había pasado por aplicar happyemacs que ayudó rápidamente a dejarlo apropiado a las necesidades de un programador. Pero esta vez opté por algo menos útil a primera vista, aunque sumamente agradable a la estética y al descanso de los ojos, pues esto es texto con suavizado de bordes, mejor conocido como antialias :)

Pues bien no hay nada mejor como un par shots para que noten la diferencia (parecerá publicidad de slim center xD)


Antes



Después


La receta para esto es la siguiente (para ubuntu):
Agregar el repositorio de AlexandreVassalotti:
deb     http://ppa.launchpad.net/avassalotti/ubuntu feisty main
deb-src http://ppa.launchpad.net/avassalotti/ubuntu feisty main


Aplicar
# apt-get update && apt-get install emacs-snapshot emacs-snapshot-el


con eso instalarán la versión de cvs empaquetada, con soporte de Xft, que es el que dá el soporte de antialias.

Ahora es necesario darle unos pequeños tweaks al Xresources para indicarle a emacs la tipografía que debe usar, si activar o no el antialias, etc..
Aquí está mi Xresources

freyes@yoda:~$ cat .Xresources
Emacs.font: DejaVu Sans Mono-10
Xft.antialias: 1
Xft.dpi: 96
Xft.hinting: 1
Xft.hintstyle: hintfull

Habla por sí sola, para mayor información dirigete a tu buscador favorito.

Una vez que terminaste de editar tu Xresources debes recargar el archivo para que la X tome esta nueva configuración y eso se hace de la siguiente manera:
xrdb -merge ~/.Xresources


Y ahora puedes ejecutar emacs :)

Estadistica con postgresql

Postgresql es una potente base de datos relacional orientada a las transacciones, es decir, si quieres hacer BI tas cagao :-D
Dentro de las cosas más rulez que tiene postgresql está su capacidad de para hacer procedimientos almacenados que dentro del mundo postgres son conocidas simplemente como funciones (un procedimiento es una función que retorna void :) just like in C), probablemente estés pensando "la media wa con mi sql server de 5 millones de pesos puedo hacer lo mismo con un lindo TransactSQL", pues tienes razón, pero a medias, porque las funciones en postgresql las puedes programar con plpgsql que es el lenguaje nativo para hacer funciones, pero además si consideras que puede ser lento o simplemente no se ajusta a tus necesidades es posible programar las funciones con C, Python, TCL, Java, Perl, R y otros más, traten de hacer eso son Sql server xD

quisiera determe en R, porque cuando tienes una base de datos y deseas obtener _información_ a partir de esos datos debes comenzar a aplicar métodos estadisticos, pues bien ahora eso se vuelve tribial si usas R :) tiene funciones para todas las cosas de estadistica que se te puedan ocurrir percentiles, mediana, etc...es como el equivalente a python para el mundo de la estadistica

Totalmente recomendado aprender a usar R desde postgres para que puedan hacer lindos reportes para sus jefes y por cero peso, y quizás como los hacen ahorrar en licencias usen ese dinero para enviarlos a capacitación en gringolandia o algún otro lugar XD

Como una muestra del nivel de R es que en la nasa lo usa.

nota: hoy mientras tenia estacionado mi nick en el canal #postgresql-es de freenode un tipo pegó este link -> http://pastebin.ubuntu.com/2279/ nada que decir :D solamente hilarante jajaaj

domingo, noviembre 18, 2007

Gracias San claudio ... Bravo

Hoy si no fuera por Claudio Bravo nos habrian metido la pelota en el orto los uruguayos. Además con la ayuda de Aturo 'regaeton' Vidal nos salvamos de varias, aunque si no fuera por la falta de experiencia no se habria ganado la amarilla que lo deja fuera del siguiente partido contra Paraguay.

Rumbo a Sudáfrica 2010

Es poco probable que tenga las lukas para ir a sudáfrica 2010, pero quizás a Brasil 2014 :D

jueves, noviembre 15, 2007

Escultura de gato, by naty

Hoy acompañé a la naty su taller de escultura para ver como era el gato que lleva varias clases haciendo, hoy le correspondia sacar todo el yeso que tenia encima del cemento asi que era divertido ver como abajo de una masa blanca se escondia un lindo gato egipcio-style, la profe de la naty me pasó el martillo para que le ayudara asi que 'manos a la obra' xD me fui por las partes poco delicadas para que no me mataran por pasar a llevar el gato, y luego de 3 horas de trabajo de la naty (yo solo trabajé como 1 hora xD) el resultado es el de la foto :)
Escultura de gato de natalia
Un lindo gato artesanal ;)

Banco de chile de y su servicio internet

Hoy activé mi cuenta de banco para acceder a los servicios internet y todo bien hasta que el asistente telefónico me dijo que debia usar internet explorer para dar de alta mi cuenta y ahi saqué mi carta bajo la manga y le dije que usaba otro navegador (sin entrar en detalles filosofales que no venian al caso), pero que no se preocupara ya que habia usado el portal internet del banco con navegadores 'alternativos' y funcionaba todo bien, pero el me contrataca diciendome 'lo que pasa es que cuando se de de alta la cuenta se le hacen preguntas de seguridad y luego al finalizar debe aparecerle un mensaje avisandole que el cambio de clave fue exitoso, mensaje que _solamente_ se puede ver en internet explorer, los otros navegadores no lo muestran ycuando trata de entrar con su nueva clave no podrá hacerlo, ni tampoco con la clave vieja", lo cual provocó un "WTF?" del porte de un buque.

Primero, dedito para abajo que la cuenta quede en el limbo al usar otro navegador, eso muestra claramente que la transacción que se procesa para activar la cuenta no es atómica.

Segundo, doble dedito para abajo el hecho que sepan el bug, esté documentado el bug, y no sean capaces de repararlo.

En chile, desde mi punto de vista, siempre han sido relativamente neutrales frente a los ojos de los clientes, es la primera vez que vivo una situación así, si bien no es tan grave como si me hubiera dicho que no puedo ocupar el portal sin explorer (recuerdan el caso DEMRE+PSU+firefox?)
creo que cuando tenga tiempo mandaré un mail al soporte del banco para noten la molestia.

Escuchando: OST The lord of the rings

martes, noviembre 13, 2007

Ares nativo en linux

para los que usan ares, o les gustaria usarlo en linux (JP?, nico?) les recomiendo que lean ares en ubuntu-kubuntu sin wine, ya que existe un plugin de gift que implementa el protocolo de ares

viernes, noviembre 09, 2007

Maldito IMAP de gmail

creo que la gente de gmail subestimo la popularidad del servicio Imap, acabo de configurar mi evolution para que usara ese servicio y de repente anda rápido, pero a veces es desesperantemente lento, así que volveré a usar el viejo y vigente POP3, al menos no necesito usar la conexión a cada rato para el correo

jueves, noviembre 08, 2007

posteando desde la palm

estoy conectado desde la palm a internet via bluetooth, usando mi linux como gateway/router
funciona bastante bien ;-)

miércoles, noviembre 07, 2007

Pastebin

hoy probando con gay isaac el kernel 2.6.24 que empaquetó para ubuntu, me dí cuenta que una herramienta que para mí es 'como popular', esa herramienta es Pastebin, un clipboard para textos en internet

asi que ya saben si quieren compartir con alguien un copy-paste (típico cuando necesitas compartir un trozo de código) usen Pastebin, porque incluso es posible que haga sintax highlight
Denle una mirada a un script que deje pegado

martes, octubre 30, 2007

holy shit

This is one of the most biggest class diagram that i have done, and still is growing, because there is a lot of properties and methods that still i must define.

If somebody have some paper, book, article or anything about recomendations of how to define a plugin architecture, please let me know, i am looking for related information to improve the quality of the plugins architecture of my case tool, but the lack of material is impressive, so i am trying to imitate the architectures defined in other software tools (like media players)

listeining: am ende der stille, lacrimosa

viernes, octubre 26, 2007

desseas bajar los videos de youtube o algun otro sitio similar?

Pues existen plugins para firefox que lo hacen, pero tienen el problema de que cuando cambio el formato de youtube y google video, esos plugins dejaron de funcionar, si bien hay plugins que ya repararon eso siempre estará latente el que queden rotos.

por eso usen http://keepvid.com :) un gran sitio donde le pasas la url completa de la pagina del video y listo, te dá la opción de bajarlo como avi, formato para ipod, o simplemente flv :) gran sitio

simplemente recomendado

Linus habla sobre git

A todas las personas que les interesa interiorizarse sobre los SCM (Source Code Management) les recomiendo ver la charla de que dio linus en google (en inglés of course :P)
Gracias a ese video pude entender la manera en que está configurado git para gestionar el kernel, ahora sé algunas utilidades que dá el DSCM versus un sistema centralizado.

el problema que me ha provocado es "que mierda uso para gestionar el código de mi proyecto de título" :(

SVN es simple, lo conozco y sería sencillo conseguir hosting para el código (linuxdiinf, sf.net, berlios, etc), PERO es molesto que los branchs sean globales y no se pueda hacer branches locales para trabajar, además que debes estar conectado para hacer los commits y otras operaciones

GIT es relativamente simple, pero no lo conozco, no sé en donde podría conseguir hosting para git

oh!, dear lazy web, conoces algún servicio de hosting de git? :P

martes, octubre 23, 2007

Certificación de Inglés by Corfo

Hoy hice el examen online de inglés que está impulsando fuertemente corfo, saqué 22 correctas de 25 (nada mal), ahora debo reservar hora para ir a dar el siguiente examen que es presencial, y probablemente el 'de verdad', el online está según parece para no desperdiciar recursos en gente que va ir a dar jugo solamente al examen, en terminos sencillos un filtro xD

domingo, octubre 14, 2007

sábado, octubre 06, 2007

OLPC: Give 1 Get 1

El grupo de OLPC ha decidido lanzar un stock limitado de unidades de XO a la venta (por desgracia solamente para el mercado norteamericano), a partir del 12 de noviembre estará disponible la opción de compra, en la que podrás comprar 2 laptops, uno será enviado a un niño de escasos recursos de un país en desarrollo (probablemente algún país africano) y el otro laptop lo enviaran a tu casa (en el sitio dice que se lo enviaran a tu niño, pero les faltó decir que es para el niño que llevamos dentro), el precio será de US$400.

Espero que la medida resulte, porque en el mercado norteamericano por alrededor de 400 dolares es posible comprar un equipo bastante poderoso ( Toshiba Satellite 15.4” Widescreen Laptop (L45S7423) US$499)

Sitio oficial de la iniciativa Give 1

viernes, octubre 05, 2007

Un repositorio de buenos papers

Hoy investigando acerca de los RDBMS para mi proyecto de título fui a dar al portal de la ACM y resultó ser un lugar increiblemente bueno y que debido a que se requiere un registro (gratuito y de pago) para acceder a los contenidos no aparece en los resultados del papá de los buscadores.

Les recomiendo que visiten el sitio y busquen temas que les interesen, por ejemplo yo me bajé "The Relational Model for Database Management" de Edgar Codd, además busqué por el topico 'case tools' y aparecienron muchos papers de todo tipo con información interesante, como por ejemplo Why are CASE tools not used?" de Juhani Iivari

Escuchando: Night Train from Back To The Future OST

sábado, septiembre 29, 2007

Cosas que un desarrollador debe saber

Es habitual que cuando uno aprende a programar (ya sea educación formal o autodidacta) en lo que se pone énfasis es en el lenguaje, es decir, la controles de flujo, las iteraciones, etc. Luego cuando uno domina eso y comienza a desarrollar programas más grandes y comienzan a aparecer errores difíciles de encontrar lo que uno instintivamente hace es comenzar a poner print's (printf(), writeln, etc.) de la variables de interés, luego cuando son problemas más complejos y que hacen uso intensivo de cpu y uno busca mejorar el rendimiento (algoritmos golosos, dividir para conquistar, programación dinámica, etc.) nuevamente se echa mano a los print's y más o menos calcula en que parte se tarda más en pasar el flujo (los más avezados imprimen la hora y los aún más avezados hacen un difftime), PERO ¿por que mierda, los profesores, no nos dicen que existen herramientas para hacer lo mismo?. Yo en la universidad nunca le escuché a hablar a un profe del profiling, de usar un debugger, etc.

Pues bueno aquí va un pequeño esbozo de en que momento usar que cosas:

Si tu programa tiene errores y hace cálculos absurdos, lo que debes utilizar es un debugger, con eso puedes hacer lo mismo que con los print's (pero sin contaminar el código con print's) y muchas otras cosas más, como por ejemplo cuando tu aplicación se va de sgfault puedes imprimir el stack, puedes ver los valores que habian en las variables antes del segfault, puedes poner breakpoints (un breakpoint es un punto del código donde se queda en pausa el código y puedes comenzar a ejecutar step-by-step o hasta el siguiente break, etc.). Traten de hace eso con solamente print's XD. La primera vez que usen el debugger les quitará harto tiempo en aprender las cosas básicas (en especial si usas gdb como los machitos, aka sin-gui :P), pero a largo plazo el beneficio es enorme. (si usas python te puede interesar ver Introducing the pydb Debugger)

Si tu programa ha crecido y comenzó a ponerse un devorador de memoría y/o cpu, pues entonces haz profiling de tu aplicación :) y el profiling es aplicable también a la red (en caso de que tu software haga uso de ella), los datos obtenidos los podrás graficar y análizar los casos en que tu aplicación se pone lenta etc. (si les interesa el tema les recomiendo el video Linux.conf.au Profiling Desktop Apps)

Eso fue el consejo del día de hoy :P

PD: se dice que el profiling en linux es algo limitado debido a la falta de hooks en el kernel, pero eso no me consta empíricamente :P
PD2: más información en wikipedia: Performance analysis y Debugging

domingo, septiembre 23, 2007

Free Software rompiendo esquemas

Aún no dejo de sorprenderme cuando una gran empresa (aka como privativa, con el unico objetivo el de maximizar las ganancias) utiliza software libre (es una pena que en la gran mayoria de los casos nacionales no haya retribución directa), entiendo que probablemente se deba a empresas de software contratadas para desarrollar un portal y que utilizan un proyecto maduro para reducir costos, tiempo de desarrollo y finalmente ser más competitivos frente a sus clientes.

En este caso es redtv el que utiliza joomla.


una consulta, alguien sabe si el proyecto joomla 'obliga' a mantener en el footer (pie de página) los copyright?, porque al menos en el sitio de redtv no están, se esfumó cualquier mención al proyecto

update: no hay problema con remover el copytight del footer, siempre y cuando no se remueva de los archivos .php (source: http://forum.joomla.org/index.php?topic=49646.5;wap2)

viernes, septiembre 21, 2007

Haz tus documetos OpenDocument desde Python

Eso, mediante una libreria llamada odfpy es posible generar archivos ODF, la libreria está construida sobre el parseador XML clásico de Python y se encarga de validar el xml generado (para generar archivos odf válidos), es sumamente útil si necesitan generar reportes y cosas así.
El clásico helloworld con odfpy


from odf.opendocument import OpenDocumentText
from odf.text import P

textdoc = OpenDocumentText()
p = P(text="Hello World!")
textdoc.text.addElement(p)
textdoc.save("helloworld", True)

easy, no?.



PD: la libreria está _muy_ bien documentada, con buenos ejemplos, está en un archivo odt (no podia ser de otra forma :P)

miércoles, septiembre 19, 2007

Moviendo un cuadrado :P

Jugando con GooCanvas logre finalmente mover un elemento (item) sobre el canvas :)

video

Here is the code (python code, using pygoocanvas)


import goocanvas
import cairo
import gtk

def boton_presionado(item, target_item, event):
print "boton presionado"
fleur = gtk.gdk.Cursor(gtk.gdk.FLEUR)
canvas = item.get_canvas ()
canvas.pointer_grab(item,
gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_RELEASE_MASK,
fleur, event.time)
return True

def on_button_release(item, target, event):
canvas = item.get_canvas ()
canvas.pointer_ungrab(item, event.time)
return True

def on_enter_notify (item,target,event):
item.props.fill_color = "red"
return True

def on_leave_notify(item, target, event):
item.props.fill_color = "black"
return True

def on_motion(item, target, event):
canvas = item.get_canvas ()
change = False
if not event.state == gtk.gdk.BUTTON1_MASK:
return False

y = event.y
x = event.x
item.props.x = x - 5.0
item.props.y = y - 5.0

return True


def main():
window = gtk.Window();
window.set_title("titulo")
window.set_default_size(640,480)

window.connect("delete-event",gtk.main_quit)

scrolled_win = gtk.ScrolledWindow()
window.add(scrolled_win)

canvas = goocanvas.Canvas()
canvas.set_size_request(600,450)
canvas.set_bounds(0,0,1000,1000)

scrolled_win.add(canvas)

root = goocanvas.Group()

rect_item = goocanvas.Rect(parent=root,x=100, y=100,
width=200, height=100,
stroke_color="red", fill_color="blue",
line_width=5.0)

rect_item.connect("enter_notify_event", on_enter_notify)
rect_item.connect("leave_notify_event", on_leave_notify)
rect_item.connect("button_press_event", boton_presionado)
rect_item.connect("button_release_event", on_button_release)
rect_item.connect("motion_notify_event", on_motion)
#rect_item.connect("key_press_event",tecla_presionada)

text_item = goocanvas.Text(parent=root,text="Hello, World!",
x=250, y=150,
width=200, anchor=gtk.ANCHOR_SE,
fill_color="blue")

text_item.rotate(45, 300, 300)
canvas.set_root_item(root)

window.show_all()
gtk.main()

if __name__ == "__main__":
main()

nota: por desgracias los tabs se pierden en el blog, si alguien quiere el .py deje un comentario.