2014-09-24

Billetera, galán, pedazo

Rebranding del piedra, papel o tijera.

Hay 3 elecciones posibles: "billetera", "galán" o "pedazo".

Billetera mata galán.
Galán mata pedazo.
Pedazo mata billetera.

Igual que en el piedra papel o tijera, hay que hacer un gesto con la mano para simbolizar la elección

Billetera
Galán
Pedazo  
Mecánica de juego:
L@s dos jugador@s, simultáneamente, gritan "billetera, galán, pedazo" y justo cuando terminan de decirlo elijen una de las 3 opciones (igual que el "piedra, papel o tijera"). Gana l@ jugador@ que mata a l@ otr@, si elijen la misma opción es empate. Al igual que en el piedra papel o tijera, se puede jugar muchas veces seguidas.

Diviértanse,
Aureliano.

2014-09-21

Mejoras en sandro

Hice varias mejoras en sandro. Ahora se puede definir módulos que son endpoints y se cargan dinámicamente, definir rutas estáticas y ¡debuggear desde eclipse! Estos features llevaron sorprendentemente poco código.

Y ¡sigue pudiéndose compartir fácilmente código entre cliente y server! Ya está tomando forma y tiene cosas que no tienen la mayoría de los frameworks para hacer páginas web.

¿Cuándo hacés tu proyecto en sandro?,
Aureliano.

2014-09-18

Ssh port forwarding con reconexión automática

Ayer mostré cómo forwardear puertos usando ssh. Hoy lo mejoro. Usando autossh se mantiene el tunel levantado cuando la conexión de ssh se cae haciendo una nueva. Pueden correr en el shell así:

autossh -N -L bind_cliente:port_cliente:host_server:port_server usuario@host

Happy hacking, Aureliano.

Rsync iterado, integración con EC2

Ayer hice un script para coordinar directorios con rsync. Hoy lo integré con EC2, usando boto. Así no tengo que andar buscando el nombre de dns de la instancia cada vez. Cambien las constantes que aparecen arriba y úsenlo a piaccere. Para que sea usable tienen que poner la clave para loguearse en la instancia en su agente de SSH.

#!/usr/bin/env python

import subprocess
import sys
import time
import boto
import getpass

AKI = "AKIVAUNACCESSKEY"
USER = "ubuntu"
INAME = "INSTANCENAME"
TARGET = "TARGET_DIR"
SOURCE = "SOURCE_DIR"

def main():
    sak = getpass.getpass("Enter secret access key:")
    ec2 = boto.connect_ec2( AKI, sak )
    dns_name = ec2.get_only_instances(filters={"tag:Name":INAME})[0].dns_name
    while True:
        try:
            subprocess.check_call([
                "rsync",
                "-z",
                "-r",
                "--delete",
                "--exclude=*.pyc",
                "--exclude=*.log",
                SOURCE,
                "%s@%s:%s" % (USER, dns_name, TARGET)
            ])
            print ".",
            sys.stdout.flush()
            time.sleep(1)
        except subprocess.CalledProcessError, e:
            if e.returncode in [10,11,12,14,22,23,24,30,35]: # See http://wpkg.org/Rsync_exit_codes
                print "R",
                sys.stdout.flush()
            else:
                raise

if __name__ == '__main__':
    main()


Espero que les sirva,
Aureliano.

2014-09-17

Ssh port forwarding

Cada día que uso ssh me gusta más. Acá dejo anotado como forwardear un puerto al que me puedo conectar desde el server, para poder conectarme desde el cliente:

ssh -L bind_cliente:port_cliente:host_server:port_server usuario@host

Happy hacking,
Aureliano.

rsync iterado

Hice un scriptcito en python que corre rsync muchas veces para mantener actualizado un directorio. Lo pongo acá por si le sirve a alguien más (o a mi mismo más tarde).

#!/usr/bin/env python

import subprocess
import sys
import time

def main():
    while True:
        try:
            subprocess.check_call([
                "rsync",
                "-z",
                "-r",
                "--delete",
                "--exclude=*.pyc",
                "--exclude=*.log"
            ] + sys.argv[1:])
            print ".",
            sys.stdout.flush()
            time.sleep(1)
        except subprocess.CalledProcessError, e:
            if e.returncode in [10,11,12,14,22,23,24,30,35]: # See http://wpkg.org/Rsync_exit_codes
                print "R",
                sys.stdout.flush()
            else:
                raise

if __name__ == '__main__':
    main()


Happy hacking,
Aureliano.

2014-09-15

¿Por qué ignora esto?

Encontré la extensión hg-isignored que sirve para saber qué regla del .hgignore matchea con un archivo. Podés ver cómo configurarla en esta respuesta de StackOverflow.

Happy hacking,
Aureliano.

Colgadas de pydev

Pydev me colgaba el eclipse cuando abría un archivo con muchos errores. Para que no se cuelgue más tuve que editar el eclipse.ini y agregarle al final
-Djava.net.preferIPv4Stack=true
Más detalles en http://stackoverflow.com/questions/7463691/eclipse-pydev-completion-hangs-yet-again.

2014-09-13

Viejos nuevos proyectos

Estoy con ganas de encarar algún proyecto más o menos grande y tengo varias cosas en la cabeza, así que quería pedirles su opinión sobre qué piensan que estaría bueno hacer. Y si algun@ de ustedes tiene ganas, capacidad y tiempo de hacerlos conmigo, o tiene alguna idea que piense que estaría buena y quiera compartir, también estaría bueno. Las opciones que se me ocurren por ahora son:

  • Seguir con mi framework web homenaje a sandro.
  • Hacer un software para optimizar cortes de tela, haciendo una heurística para resolver 2D packing. La idea sería comercializarlo.
  • Aprender coreano, para poder leer un montón de cosas sobre como jugar al go. L@s mejores jugador@s y la mayoría de la bibliografía, son coreanos, chinos y japoneses. Y el coreano parece el lenguaje más fácil de los 3.
  • Hacer todos los cursos de Easy y dejar de ser un inútil para arreglar cosas en mi casa.
  • Seguir el desarrollo de mi notación de tango y hacer un animador en 3D de los pasos anotados.
Escucho ideas y busco compinches,
Aureliano.

2014-09-04

Manejando el output de Pulse Audio

Encontré cómo hacer para manejar de línea de comando a qué salida de audio (sink) va cada programa. Miren acá http://askubuntu.com/questions/71863/how-to-change-pulseaudio-sink-with-pacmd-set-default-sink-during-playback.

Happy hacking,
Aureliano.