domingo, 11 de diciembre de 2011

Django-IDE: Ahora en GitHub!

Ya está subido el código de lo que hay hasta ahora, de la IDE que estoy cocinando:

Introducing: Django-IDE 

Hay mucho por hacer y mucho por mejorarle, por lo que, colaboradores bienvenidos!

martes, 25 de octubre de 2011

Django-IDE: Video preview

Luego de escribir este post IPnaf IDE - La IDE definitiva para python, y recibir algunos comentarios que me hicieron pensar (y ver que, estaba un poco equivocado en mis comentatios), me dije "y por qué no puedo ser yo quién arme una IDE?"

Y así fue que, pensando un poco, me puse a intentar llenar un hueco que, creo que está lo suficientemente vacío como para que un esfuerzo allí, valga la pena.
Entonces, empezó a nacer Django-IDE.

Les dejo un video con una preview muy muy muuuuy temprana (no tiene para nada todos los features que va a tener), en fin, acá va:




Ver en youtube

What is Django-IDE good for?

Django-IDE helps you to:
  • Easily create Django projects.
  • Manage and edit existing project
  • Edit and Save your code, with a editor based on Ace.
  • Run and debug.
La estoy armando a pulmón, esto es, codeo un poco los findes, y cuando puedo...
Espero comments!!! :)

martes, 11 de octubre de 2011

It Sucks! (parte 2)

Ejemplo: WebService SOAP doloroso: 
Producto: MSCRM 2011
Accion: Login con Live + retrieve de una cuenta


 




Es necesario? Realmente tiene que ser tan mugroso?

Para mí, es un Epic Fail.

viernes, 7 de octubre de 2011

IPnaf IDE - La IDE definitiva para python

Dentro del titulo mentiroso, que usé para atraer la atención (el plan B era poner "cerveza gratis!") encierro un pensamiento mío, pero que creo que muchos compartimos. Pero, primero lo primero:

IPnaf IDE quiere decir: IPnaf Please Not Another Fucking IDE!!

Aunque, debería ser "not another fucking python IDE!" Y a qué me refiero con esta misteriosa frase?? He visto, y ultimamente mucho mas, una proliferacion de lo que hacen llamar IDEs. Pero, me voy a centrar en IDEs para el lenguaje pythyon: cito, spyder, Ninja, entre otros, que aparecieron como "somos la IDE definitiva".

Hay un chiste de Xkcd donde, la idea más o menos es que, alguien dice "uh, hay n maneras de hacer x! No puede ser, hay que generar un standard. Horas luego hay n+1 maneras de hacer x"

Y es así. Siempre. Siempre?? Bueno, no siempre, pero en el 99.9% de los casos. Otras veces, ese pensamiento da lugar a innovaciones. Pero, es lo común?? Diríamos que no.

Vuelvo a los ejemplos que cité: Spyder y Ninja. Ambas las bajé, instalé y probé. Aclaro que no tengo nada en contra de quienes la desarrollan (ni los conozco) ni me parece que su trabajo y esfuerzo sea malo. Al contrario. Pero, veo que está desperdiciado. Gente con talento claro, pone esfuerzo en cosas que ya existen y, sin innovaciones reales. A qué me refiero??

Spyder y Ninja [0] son, sin duda esfuerzos de desarrollo y diseño. Pero, que son? Editores de texto lindos y python friendly. Nada más. Ah, y que ejecutan código. Nada que no puede hacer con Emacs y un poco de tiempo + macros.

Debugger? No, gracias. [1]

Ojo, no es que sea fácil hacer un debugger como la gente, que corrar el código paso a paso y podamos inspeccionar varibles, ejecutar código en el contexto de ejecución, editar código on the fly, hacer remote debugging etc. [2]
Pero, es lo que falta!! (en general) Y si, es más lindo ponerse a escribir la IDE desde cero [3], y luego agregarle esas funcionalidades superstar, pero, primero hay que hacer el editor, el highlighter, el buscador de código, el generador de plugins, el pseudo intellisense, etc. Y, para cuando llegamos a las funcionalidades breakers, rockstar, "la papa", quizá el proyecto ya murió.

"No necesitamos esos features de maricones". Diría el macho programmer. (y esto me hizo acordar a otro chiste de Xkcd) pero, la realidad es que, cuando más cómodo esté uno, mejor trabaja y más se puede concentrar en el problema puntual que esté resolviendo.

Por qué no tomar una IDE existente y opensource y mejorarla en vez de arrancer una from scratch?

Entonces, si se van a poner a programar, aviso, no necesitamos más IDEs =) 

EOF

[0] Elegí Spyder y Ninja porque son 2 que recuerdo haber visto últimamente, y que además las instalé y probé.

[1]  Creo que Spyder estaba implementando pdb y winpdb. De todos modos, mi punto sigue en pie.

[2] Acá es cuando alguien me va a decir, "vos, porque estás acosbumbrado a visual basic" Puedo asegurar que he programado en editores de texto plano como en Visual Studio, Eclipse o Netbeans. Uno puede usar un debugger o usar prints, pero, las funcionalidades rock star en las IDEs, son geniales!! No es que uno no pueda vivir sin ellas, pero, si existen, mucho mejor!!

[3] Es como el caso de las n distribuciones de Linux. Ya hay suficientes en variedad como para parar un poco, si tenés tantas ganas de laburar en una distro, contribuí con una que exista!!!

jueves, 6 de octubre de 2011

It Sucks!

Ultimamente he tenido que interactuar con varios productos de una empresa "muy conocida" (que tienen, entre otros productos un CRM y un ERP) y, me he topado con un viejo amigo: los webservices.

Y, claro, no es que no los conociera pero, hacía mucho que no me topaba y, ya había olvidado lo feo que son, lo lentos, lo roto que está el modelo en general (SOAP, REST o POX, da igual)

O lidias con librerias horrendas, o parseas xmls.

Y me pregunto: Por qué? No deberíamos (los informáticos) facilitar el acceso a los datos?? No debería ser todo, cada vez más fácil y lindo?

OData, ya es algo, pero, como todo, hasta que sea realmente un standard, vamos a seguir sufriendo con, mixturas de tecnologias (y tampoco se si es la solución al problema)

En fin, mi opinón es que, en lo que es acceso a datos abierto y fácil para todos, We Suck!

Lecturas relacionadas:
SOAP
REST SOAP POX

martes, 23 de agosto de 2011

lunes, 1 de agosto de 2011

La frase del día...

"Google+ isn’t about sharing cat pictures, it’s about serving ads. Twitter’s massive network of 140-character bits of information isn’t about connecting people across the globe or to view current trends in worldwide thinking, it’s about serving ads. Facebook isn’t about entertaining yourself with games or sharing interesting links, it’s about serving ads."

No es que no lo sepamos, pero...


Fuente.
Info relacionada.

miércoles, 27 de julio de 2011

Otra idea loca: MyGoogle

Lamentablemente, esto no puedo, ni siquiera soñar con llevarlo a la práctica (ni siquiera sé si lo puede hacer google) y, aunque la idea es simple, su implementación no lo es tanto.

Google, como buscador es un servicio, personalizado (hasta cierto punto) pero... Qué pasa si yo quiero mi buscador? Y no me refiero un buscador de mis archivitos en mi pc, no.

Yo quiero mi google.

Quiero decirle a mi "googlito" que indexe, por ejemplo, datos sobre fútbol, porque quiero una base de datos del tema, o que indexe info sobre la bolsa, porque soy un corredor de bolsa y quiero datos estadísticos.
Es decir, quiero que mi "googlito" me genere una base de datos, que yo pueda consultar (como hoy se consulta el google normal) pero, "saborizada" con mi forma particular de indexar.

Así, tendría una cuenta de google index (como hoy tengo de Gmail, por ejemplo)  donde customizo "mi google", diciendole (de alguna forma) como quiero que indexe, con qué criterios, qué relaciones, etc, etc.

Así mismo, puedo publicar esos "googles" customizados para que los usen otras personas.
De esta forma, no sé, Bonadeo capaz tiene su google (como hoy tenés tu twitter) donde, vas a www.google.com/#bonadeo y buscás data sobre, que se yo, tennis de forma más personalizada y enfocada en el tema tennis, y no tan general como hoy buscaríamos sobre tennis en el google normal.

Es medio porrera la idea, pero, ojalá papa noel me traiga algo así para navidad.

martes, 19 de julio de 2011

Led fucking Zeppelin

No hay mucho que agregar, Black Dog + muchos fans toncandola + muy buena edición = este video :)

jueves, 14 de julio de 2011

Volvi a programar en mi "spare time": web_alert - Parte 2

En un post anterior, estuve contando sobre un proyectito que arranqué, por puro hobbie pero, esperando que sea útil a la vez.

La cosa es que me encontré con algo que me desaminó un poco: http://www.webalertpro.com/

Primero, es casi exactamente la misma idea.
Segundo, tiene casi el mismo nombre!

Obviamente, esto es culpa de mi, evidente, falta de inventiva.

Por ahora sigue el proyecto, pero lamentablemente, perdió un poco de empuje.

martes, 28 de junio de 2011

Volvi a programar en mi "spare time": web_alert

Proyecto: web_alert
Objetivos: Divertirme, aprender y, en una de esas, sale algo útil.
Lenguajes: Python, obvio!

Queriendo meterme un poco con python+web, empecé un proyectito al que nombré "web_alert".

Primero lo armé versión consola y "on demand", luego la idea es que sea una especie de servicio web.

Qué haría? Fácil, toma como input urls que el usuario suministra y tags de interés que el usuario suministra, por ejemplo:

urls: http://barrapunto.com, http://www.lanacion.com.ar
tags: panchos, celulares, perros

La aplicación 'mira' esas urls, y genera como output links relacionados con los tags que le pasas como input y, te lo presenta donde vos le digas, por ejemplo:

mail, twitter, facebook.

Sirve? No se, pero que me voy a divertir, seguro. =)

P.D: Previews y el código en google, coming soon...

EDITADO: Este post estaba en planeta python y desapareció, jua! =)

jueves, 16 de junio de 2011

Advide from an old programmer

Advice From An Old Programmer

You have finished this book and have decided to continue with programming. Maybe it will be a career for you, or maybe it will be a hobby. You will need some advice to make sure you continue on the right path, and get the most enjoyment out of your newly chosen hobby.
I have been programming for a very long time. So long that it is incredibly boring to me. At the time that I wrote this book I knew about 20 programming languages and could learn new ones in about a day to a week depending on how weird they were. Eventually though this just became boring and couldn't hold my interest.
What I discovered after this journey of learning is that the languages did not matter, it's what you do with them. Actually, I always knew that, but I'd get distracted by the languages and forget it periodically. Now I never forget it, and neither should you.
Which programming language you learn and use does not matter. Do not get sucked into the religion surrounding programing languages as that will only blind you to their true purpose of being your tool for doing interesting things.
Programming as an intellectual activity is the only art form that allows you to create interactive art. You can create projects that other people can play with, and you can talk to them indirectly. No other art form is quite this interactive. Movies flow to the audience in one direction. Paintings do not move. Code goes both ways.
Programming as a profession is only moderately interesting. It can be a good job, but if you want to make about the same money and be happier, you could actually just go run a fast food joint. You are much better off using code as your secret weapon in another profession.
People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.
Of course, all of this advice is pointless. If you liked learning to write software with this book, you should try to use it to improve your life any way you can. Go out and explore this weird wonderful new intellectual pursuit that barely anyone in the last 50 years has been able to explore. Might as well enjoy it while you can.
Finally, I will say that learning to create software changes you and makes you different. Not better or worse, just different. You may find that people treat you harshly because you can create software, maybe using words like "nerd". Maybe you will find that because you can dissect their logic that they hate arguing with you. You may even find that simply knowing how a computer works makes you annoying and weird to them.
To this I have one just piece of advice: they can go to hell. The world needs more weird people who know how things work and who love to figure it all out. When they treat you like this, just remember that this is your journey, not theirs. Being different is not a crime, and people who tell you it is are just jealous that you have picked up a skill they never in their wildest dreams could acquire.
You can code. They cannot. That is pretty damn cool.

Fuente

miércoles, 1 de junio de 2011

El programador pesimista

Esto es algo que, si bien suena obvio, parece que no lo es porque, una y otra vez me encuentro con gente del "ambiente" que parece ignorarlo o, por lo menos, lo pasa por alto.

Todo el mundo Muchos programamos como si el mundo fuera de colores y los duendes con sombreros divertidos bailaran a nuestro alrededor.
Es decir, como si todo fuera a salir bien.

Y es por programar de esta forma, optimista que, uno se sobresalta y se rompe la cabeza cuando algo sale mal[0].

    posible duendes divertidos

  es sarcasmo Marge

El programador pesimista

Lo que propongo (o más bien, resalto porque estoy seguro de que esto no se me ocurrió a mi) es, programemos como si todo fuera a fallar.

Si lo que estoy escribiendo se rompe, cómo evito datos incongruentes? como le doy la posibilidad al usuario de arreglarlo él mismo? o cancelarlo? o volver a hacerlo?

Cómo escribo el código/comentarios de manera que, si falla o se rompe pueda arreglarlo fácil sin tener que volver a pensar todo de nuevo?

Cómo escribo ese mismo código para que, si hay un problema y lo tiene que arreglar un compañero (porque yo no estoy) lo pueda hacer sin problemas y entienda todo como si fuera yo?

Es decir, pensar en el peor escenario posible y, anticiparse con medias preventivas que, en el momento son hasta triviales, pero nos pueden ahorrar horas.

Posibles programadores pesimistas:




Framework web minimo

Estaba buscando algún framework web, chiquito y sencillo. Quería tirar código y que salga andando algo, fácil, sin instalar mucho ni configurar.
Se me ocurrió preguntar en la lista de python argentina[0].
Al instante, muchas respuestas y, una de ellas me nombraba web.py (que lo conocía) y otro más[1], que es el motivo de este post:


Muy zarpado. Lo primero que me cautivó:

"Bottle does not depend on any external libraries. You can just download bottle.py into your project directory and start coding."

Un solo archivo! Lo importo y, habemus web. Eso es lo que quería!

Luego, el hello world:

from bottle import route, run

@route('/hello')
def hello():
    return "Hello World!"

 
Cada vez se ponía mejor. Sintaxis clara y, una linda manera de resolver la relación url-código: Decoradores.

Creó que me enamoré =)
 


[0] PyAr
[1] Bottle

lunes, 30 de mayo de 2011

Todo Inventado, o...

Un poco para paliar el famoso burnout de, nosotros, los programadores, me decidí a ponerme a programar algo que me guste, en un lenguaje que no use para el trabajo (python, probablemente) y, de paso, si es útil, mejor!

Pero, o bien estoy escaso de ideas o bien, todo está inventado pero, cada cosa que se me """ocurre""" ya existe.
Dos ejemplos:

1) Un buscador de imagenes inverso. Esto es, en vez de poner una palabra y que tire imagenes, poder subir una imagen y que te tire que palabras tiene asociadas.
Ya existe.

2) Un visitador de páginas. Esto es, un servicio que, entre a una web y que, cuando hay cambios en la misma (según keywords) me genere un mail, feed o postee en algun lado o, whatever.
Ya hay algo parecido.
Otro.

Estos son 2 ejemplos cercanos, me viene pasando hace mucho. Será que estoy viejo y falto de creatividad?? O será que, realmente, la frase poco feliz "ya está todo inventado" es cierta?

Acepto donadores de ideas.

Nota: Probablemente exista un post así, en otro blog. :)

sábado, 21 de mayo de 2011

Ubuntu: Hasta los grandes deben aprender sobre interfaces

Ayer, no me andaba el teclado numérico en Ubuntu. 
Me extrañó mucho dado que hacía poco estaba funcionando y, que todo ese sector del teclado se haya roto me parecía raro.

Busqué en google.
Me encontré con que, a varios les había pasado lo mismo, en algún momento.
No se si fue al actualizarse una versión, o si hay algún atajo raro que hace esto, o que tipo de bug raro lo ocasionó.

Al parecer, existe una opción de manejar el mouse con el teclado que, se activó mágicamente.




Claro, si uno conoce que existe la opción, es probable que se de cuenta rápido de cuál es el problema.
El tema es que, yo no conocía que existía esa opción y, como al querer teclear los números, uno pasa rápidamente por las teclas, no percibía que había un movimiento en el puntero del mouse (que sí es obvio cuando uno deja apretada una de las teclas)

Entonces, para qué toda esta historieta?

Cuando hay una opción activada y esta es poco convencional y además produce un resultado confuso (en este caso, uno piensa que no funciona el teclado numérico) se debe indicar en pantalla, con un icono o algo que dicha opción está activada.

Sorry Ubuntu, pero en esta le pifiaron.

sábado, 23 de abril de 2011

Clap, clap, clap

“If Java had true garbage collection, most programs would delete themselves upon execution.”

(Robert Sewell)

jueves, 21 de abril de 2011

Escribir codigo que, simplemente funcione

No hay mucho para explicar o agregar: 
 
> can you try following change ? it will push gart to 0x80000000
>
> diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c
> index 86d1ad4..3b6a9d5 100644
> --- a/arch/x86/kernel/aperture_64.c
> +++ b/arch/x86/kernel/aperture_64.c
> @@ -83,7 +83,7 @@ static u32 __init allocate_aperture(void)
>         * so don't use 512M below as gart iommu, leave the space for kernel
>         * code for safe
>         */
> -       addr = memblock_find_in_range(0, 1ULL<<32, aper_size, 512ULL<<20);
> +       addr = memblock_find_in_range(0, 1ULL<<32, aper_size, 512ULL<<21);

What are all the magic numbers, and why would 0x80000000 be special?

Why don't we write code that just works?

Or absent a "just works" set of patches, why don't we revert to code
that has years of testing?

This kind of "I broke things, so now I will jiggle things randomly
until they unbreak" is not acceptable.

Either explain why that fixes a real BUG (and why the magic constants
need to be what they are), or just revert the patch that caused the
problem, and go back to the allocation patters that have years of
experience.

Guys, we've had this discussion before, in PCI allocation. We don't do
this. We tried switching the PCI region allocations to top-down, and
IT WAS A FAILURE. We reverted it to what we had years of testing with.

Don't just make random changes. There really are only two acceptable
models of development: "think and analyze" or "years and years of
testing on thousands of machines". Those two really do work.

                   Linus

miércoles, 23 de marzo de 2011

Intención del código (o, me descargo un poco)

Este post, probablemente, parezca una pelotudez. Probablemente alguien diga "esto es obvio"o "no me digas", pero, es que lo he visto tantas veces, me he topado con esto tanto, que empiezo a creer que no es tan obvio.


Me ha tocado leer/mantener código que no fue escrito por mi. Es decir, meterme a tocar, mejorar, fixear, código ajeno en vez de escribirlo desde cero. En esos casos, me he topado con cosas como esta (*):

Function Foobar(n){
    n = n * 3
    return n
}


El tema es el siguiente, dada una función escrita en algún lenguaje de programación, puedo saber si está bien?

Esa función, es correcta o no es correcta?? Digamos, desde el punto de vista de la sintaxis (suponiendo que eso es la sintaxis de algún lenguaje) puede no fallar. Pero, está bien? Cómo se que intención tenía? Qué se supone que hace? O que esperar? Por qué nos cuesta tanto documentar eso en comentarios?

En casos peores, he visto cosas como:

Function Foobar(n){ //Devuelve n multiplicado por 3
    n = n * 3
    return n
}


Donde, no solo sigo teniendo el problema de no saber si está bien o no, sino que, además, me dice algo que es obvio.

Entonces, queridos amigos programadores, cuando comentemos procuremos poner la intención de ese cacho de código. NO quiero que me digan lo que puedo ver leyendo el código, sino, justamente, lo que se les pasó por la cabecita cuando lo escribieron. Por qué? Porque es mucho más sencillo arreglarla (si fuera necesario) sabiendo que se supone que hace, que tener que deducirlo teniendo en cuenta quien la llama, por ejemplo. Además, si la función estuviera mal, es más complejo deducir que en realidad, quisieron poner, no se, n = n + 3, por decir algo, aumentando mis posibilidades de romper algo que estaba bien, pero que parecía mal.

Gracias

(*) Aclaración para los despistados, esa función es solo ilustrativa, no es un caso real =)

jueves, 10 de marzo de 2011

Magia Negra: Un ActiveRecord en pytnon

Pensando en un proyecto cuasi muerto que tengo, me vino a la mente que, aprovechando el código ya escrito y con muy poco esfuerzo/código más, puedo armar un framework que implemente ActiveRecord


Y acá está (solo está creado el espacio y subido un commit inicial) pero promete.
El nombre, inspirado en el efecto mágico y, un tributo a las viejas bandas del metal quizá?

Status: Muerto por falta de interés.

lunes, 31 de enero de 2011

Quick Hack

Tenia que resolver lo siguiente:

Una macbook que baja mails desde un servidor propio (con un Kerio en la empresa)

Un router que no soporta loopback

Entonces, cuando la mac esta fuera de la empresa, se podia hacer referencia, en el cliente de mail, al DNS, que llamaremos empresa.dyndns.ws (para no revelar datos reales)
Pero, dentro de la empresa, el DNS empresa.dyndns.ws, simplemente no funciona.
Habia que resolverlo, y rapido[0].

Python al rescate!
Colorized Source Code


He aquí el script (es feo, muy feo, pero salio rapidisimo y con fritas!)

import os
from subprocess import Popen, PIPE, STDOUT
esta = False
p = Popen(['ping','-c','1','server'], stdout = PIPE)
output = p.stdout.read()
p.wait()

if 'bytes from' in output:
    ok = True
else:
    ok = False

f = open('/etc/hosts', 'r')
f2 = open('/etc/hosts2', 'w')

for i in f:
    if 'empresa.dyndns' in i:
        esta = True
        if ok:
            f2.write(i)   
    else:
        f2.write(i)      

if not esta and ok:
    f2.write('192.168.0.1    empresa.dyndns.ws \n')	


f.close()
f2.close()

os.remove('/etc/hosts')
os.rename('/etc/hosts2','/etc/hosts')

Basicamente, hace un ping al nombre del servidor donde esta el servidor de mail (el Kerio) con el nombre local, 'server'. Si esta, estoy en le empresa, sino, no.
Entonces, basado en eso, toco el archivo hots (gracias Apple por hacer su OS un UNIX) y listo[1]. Se agrego al inicio y se corre con permisos de root y logramos lo que esta persona queria, una solucion rapida y magica.

No estoy orgulloso del script en si, sino, del poder de python para hacer estos quick hacks, que te salvan la papas. =)


[0] Dicen que rapido y bien, es imposible.
[1] Pero, como decia TuSam, puede fallar. Por ejemplo, si justo hay otro 'server', donde esta esta persona (shit happens)

lunes, 17 de enero de 2011

Status: RESOLVED FIXED

Mi primer bug en mozilla! (si, es trivial pero, me pone contento igual!)

https://bugzilla.mozilla.org/show_bug.cgi?id=606824
http://hg.mozilla.org/mozilla-central/rev/a5092e4ae324

Solo puedo agregar lo siguiente:

=)