7 de noviembre de 2014

Configurando MariaDB y Apache en Fedora 20

MariaDB

MariaDB es un 'fork' de MySQL por el autor original de MySQL luego de que Oracle haya adquirido los derechos de MySQL a través de la adquisición de Sun. En todos los aspectos MariaDB es un reemplazo de MySQL. Pero según el autor no es una prioridad tener una compatibilidad del 100% con futuras versiones.

Primero arrancamos el servicio MariaDB
# systemctl start mariadb.service

Opcionalmente podemos configurar para que sea más seguro
# mysql_secure_installation

Ahora lo habilitamos desde el arranque
# systemctl enable mariadb.service

Apache

Para arrancar el servicio
# systemctl start httpd.service

Para que este habilitado desde el arranque
# systemctl enable httpd.service

Ahora sólo podemos acceder a la página de prueba de Apache desde la computadora donde esta intalado. Para que se puede acceder desde otras computadoras tenemos que permitir las conexiones en el firewall.
# firewall-cmd --permanent --add-service=http



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.

10 de noviembre de 2012

Nuevas Herramientas

Algunas herramientas que me fueron bastante útiles:
  • FAR: Un manejador de archivos al estilo del viejo Norton Commander para DOS, pero para Windows. Esta es su página oficial.
  • ConEmu: Un emulador de consolas para Windows con tabs. Permite por ejemplo tener varias sesiones de PuTTY abiertas simultáneamente en la misma ventana y cambiar entre ellas por medio de los tabs. El nombre oficial es ConEmu-Maximus5.
  • Clink: Agrega varias mejoras a la línea de comandos, el autocompletado es más parecido al de bash, y permite usar combinaciones de teclas para copiar (Ctrl+C) y pegar (Ctrl+V). Página oficial Clink.
  • Ffmbc: Una versión de FFmpeg con soporte de formatos más 'profesionales', aquí su sitio oficial.
  • grepWin: Para buscar en archivos. Es bastante poderoso, con muchas opciones y muy rápido para obtener resultados. Página oficial.

27 de junio de 2012

Configurando el sonido 5.1 por HDMI en Debian Wheezy

Intente varias veces configurar audio 5.1 usando solo ALSA, pero siempre me encontraba con alguna incompatibilidad con alguna aplicación. A decir verdad ALSA es un componente de bajo nivel, que hace un buen trabajo tratando de abstraer el hardware. Por otro lado muchas aplicaciones solo quieren usar el audio sin tener que preocuparse demasiado por toda la variedad de hardware existente. Si uno tiene mala suerte puede caer en ese pequeño limbo donde ciertas características del hardware son soportadas por ALSA pero no todas las aplicaciones funcionan correctamente sin hacer ajustes. Que es mi caso de sonido 5.1 por HDMI.

Pulseaudio es un intermediario entre las aplicaciones y la parte de bajo nivel (es decir ALSA). Provee una API de alto nivel. Y brinda diferentes implementaciones de bajo nivel para permitir reproducir en diferentes dispositivos, por ejemplo una salida de audio local, un servidor de audio remoto.

Este es un resumen de los pasos que seguí para configurar la salida correctamente.

  • Primero instalamos pulseaudio: sudo aptitude install pulseaudio.
  • Ahora averiguamos cual es la salida HDMI: aplay -l.
    En la salida de ese comando buscamos alguna linea donde aparezca HDMI, en mi caso aparece
    card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
    anotamos la placa (0 en el caso de arriba), y el dispositivo (3 según la salida anterior).
    Si no aparece ninguna linea lo más probable es que ALSA necesite algún parámetro para configurar la placa de audio correctamente, o que la salida HDMI no este soportada todavía.
  • Configuramos Pulseaudio para que la salida de audio sea por HDMI
    Editamos el archivo /etc/pulseaudio/default.pa y agregamos una linea similar a la siguiente
    load-module module-alsa-sink device=hw:0,3
    donde hw:0,3 hace referencia a los valores encontrados en el punto anterior.
  • Reiniciamos Pulseaudio con pulseaudio -k, para comprobar que tome los valores ingresados.
    (A veces tuve que esperar algunos segundos hasta que el servidor de Pulseaudio reinicie, o repetir varias veces pulseaudio -k).
  • Usamos speaker-test -cNN -twav para comprobar si tenemos salida por todos los canales. Reemplazamos NN por 2 para estéreo, 6 para audio 5.1 y 8 para salida 7.1. Este comando reproduce un archivo de audio con el nombre del canal por cada canal, lo que nos sirve para identificar si todas las salidas funcionan, y si los canales estan configurados correctamente.
  • Si todo funciono correctamente entonces terminamos.
  • Si solo tenemos salida estéreo entonces editamos /etc/pulseaudio/daemon, y agregamos una linea como la siguiente:
    default-sample-channels = 6
    Donde reemplazamos 6 por la cantidad correcta de canales que tenemos. Ahora volvermos a reiniciar Pulseaudio y probamos con speaker-test.
  • Si llegamos a este punto seguimos sólo con salida estéreo el problema puede estar en que el driver sólo soporte estéreo.
  • Si los canales no salen correctamente podemos intentar modificar el mapeo de canales. Editamos /etc/pulseaudio/default.pa, modificamos la linea que agregamos anteriormente para que quede algo asi:
    load-module module-alsa-sink device=hw:0,3 channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe
    Este ejemplo es para audio 5.1. Reiniciamos pulseaudio y comprobamos con speaker-test las salidas. Si no es la correcta podemos intercambiar los elementos de la lista que sigue a channel_map.
Esto fue todo.

10 de octubre de 2011

Programmer's Tools (Part III)

Some new utilities I've discovered since the last time.
  • HxD: A really fast hexadecimal file viewer and disk editor. Here is the homepage http://mh-nexus.de/en/hxd/. If you need to load very large files and other editors will fail.
  • Cygwin: The homepage of the project http://www.cygwin.com/ states that cygwin is... “A collection of tools which provide a Linux look and feel environment for Windows”. If you came from a Linux environment this is a must.
  • ImDisk: Small utility that let you mount an image disk as a virtual drive, create arbitrary size ramdisks. The page also contains other utilities http://www.ltr-data.se/opencode.html/#ImDisk (and it also is open source). I use as a ramdisk drive for compiler's temporary files.
  • Xming: An excelent X Windows Server for windows. You can configure it to work together with PuTTY and use your windows workstation to display an application running under linux.
  • Bullzip: A very nice printer driver for windows that generate a PDF file with your printing, it uses Ghostscript to generate the PDF file.