17 de octubre de 2013

How to mock a template method with gmock?

With stern voice you have to say:
"You're a stupid template! and your mother dressed you funny! who could use such a stupid stupid template?" –  B. Postow
Ref: http://stackoverflow.com/questions/3426067/how-to-mock-templated-methods-using-google-mock

12 de agosto de 2013

Pasos para migrar MoinMoin a Nginx en Debian/Ubuntu

Ayuda memoria para cuando lo tenga que volver a hacer
  1. Primero los paquetes obvios nginx-full y python-moinmoin.
  2. Ahora estos paquetes uwsgi y uwsgi-plugin-python.
  3. Configurar Uwsgi. Por ejemplo (/srv/wiki/ es donde esta el wiki):
    <uwsgi>
      <uid>www-data</uid>
      <gid>www-data</gid>
      <plugin>python</plugin>
      <wsgi-file>/srv/wiki/moin.wsgi</wsgi-file>
      <memory-report />
      <vhost />
      <no-site />
    </uwsgi>
    
  4. Configurar MoinMoin. Editar /etc/moin/mywiki.py y agregar por lo menos estas líneas
    sitename = u'Mi super Wiki'
    interwikiname = u'SuperWiki'
    data_dir = '/srv/wiki/data/'
    data_underlay_dir = '/srv/wiki/underlay'
    
  5. Configurar Nginx. Crear un archivo "wiki" en /etc/nginx/sites-available con el siguiente contenido
    server {
      server_name wiki;
      root /usr/share/moin/htdocs;
    
      location /moin_static194 {
        access_log off;
        alias /usr/share/moin/htdocs;
      }
    
      location = /favicon.ico {
        rewrite "/favicon.ico" /moin_static194/favicon.ico;
      }
    
      location / {
        gzip off;
        include uwsgi_params;
        uwsgi_param SCRIPT_NAME /;
        uwsgi_modifier1 30;
        uwsgi_pass unix:/run/uwsgi/app/moin/socket;
      }
    }

20 de mayo de 2013

Usando cálculo numérico para mejorar un programa

Este es el problema que teníamos era el siguiente al intentar leer un archivo desde una posición p0 fallaba, pero desde otras posiciones todo funcionaba correctamente.
El archivo en cuestión era un .mpg que contenía un video con audio. Estos archivos no están pensados para que se pueda acceder de manera aleatoria, sino para ser usado en modo de streaming.
Podemos pensar el problema del siguiente modo, queremos encontrar la función h(t) = p tal que dada un tiempo t, nos devuelva la posición donde empieza el cuadro de video t.
Pero lo que podemos averiguar es g(p) = t, es decir dada una posición p a que tiempo t de cuadro de video corresponde. Podemos suponer que al principio tenemos g(0) = 0, y que si P es la posición máxima de video, y T es el tiempo máximo entonces tenemos g(P) =T.
Luego dado un tiempo t intermedio entre 0 y T, podemos aplicar cualquier método de búsqueda de raíces a f(x) = g(x) - t.
En nuestro caso lo que sucedía es que la función g no se comportaba muy bien el la cercanía de la posición problemática. La función g es monótona y creciente, pero la convergencia era lenta, y el programa para evitar demorar demasiado y parecer colgado generaba un error.

19 de mayo de 2013

Pasos para usar ssh sin ingresar un password

  1. Generamos un par de clave privada/pública:
    $ ssh-keygen [-t tipo] [-b longitud]
    Opcionalmente podemos especificar la longitud de la clave y el tipo. El tipo puede ser rsa, dsa, ecdsa. Con longitud especificamos la cantidad de bits de la clave. Podemos presionar Enter cuando nos pide un palabra de paso para cifrar la clave privada, si queremos más seguridad podemos ponerle una palabra de paso y usar ssh-agent para cargar la clave privada.
  2. Copiamos la clave pública a la computadora donde queremos ingresar.
    $ ssh-copy-id -i ~/.ssh/id_rsa.pub
    El par de claves se crean dentro de ~/.ssh, la clave pública en id_rsa.pub y la clave privada en id_rsa. El comando ssh-copy-id agrega la clave pública a , en el archivo ~/.ssh/authorized_keys donde se guardan las de claves autorizadas una por renglón. 

18 de febrero de 2013

Arrancando un pendrive desde Grub2

Si desde el menú del BIOS no podemos arrancar un pendrive, pero tenemos instalado grub2 podemos tipear lo siguiente desde la consola de grub, para arrancar
grub> set root='(hd1,msdos1)'
grub> chainloader +1
grub> boot
Para acceder a la consola aprentamos la tecla c, en la pantalla de inicio. Para saber que particiones estan disponibles tipeamos ls en la consola.

7 de enero de 2013

Configurar una conexión ad-hoc para compartir internet

La idea es que tenemos dos computadoras, una con acceso a internet, y queremos que la otra también puede conectarse a internet, pero no contamos con un router.

Lo primero que vamos a hacer es conectar las dos computadoras, luego vamos a configurar esta conexión para que la segunda computadora pueda acceder a internet.

Ahora en la máquina que tiene la conexión a internet, que vamos a llamar Servidor, ponemos la conexión inalámbrica en modo ad-hoc, con el nombre MYSID, usando WEP con la clave 12345 (algunas versiones de windows sólo funcionan con claves de longitud 5 ó 10), usando como IP 192.68.22.1.
# iwconfig wlan0 mode ad-hoc
# iwconfig wlan0 essid MYSID
# iwconfig wlan0 key s:12345
# ifconfig wlan0 192.168.22.1 up
En la otra computadora, que vamos a llamar Cliente, repetimos estos pasos (cambiando el IP pero dentro del mismo rango por ejemplo 192.168.22.2). Sólo falta configurar Cliente para que use la conexión de Servidor como salida.
# route add default gw 192.168.22.1
Después de estos pasos deberiamos tener conectividad entre las dos computadoras.

Para compartir la conexión de internet de la computadora Servidor con la Cliente, tenemos que configurar Servidor para que pueda enrutar correctamente los paquetes de Cliente, y luego pueda reenviar la respuesta. Este tipo de conexión se llama NAT.
# sysctl -w net.ipv4.ip_forward=1
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i wlan0 -j ACCEPT
El primer comando habilita en el núcleo el reenvio de paquetes. El segundo y tercero habilitan que Cliente se pueda conectar a internet usando la IP de Servidor y poder recibir las respuestas.