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. :)
lunes, 30 de mayo de 2011
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.
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)
(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 (*):
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:
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 =)
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
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!)
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)
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!
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)
Suscribirse a:
Entradas (Atom)


