logo

Acerca de

Bienvenido a mi blog, el sitio perfecto para mis inquietudes, experiencias e idas de olla sobre temas de hoy en día.

Historia al azar

Categorías

Últimas entradas

Últimos comentarios

Enlaces

Meta

photo Luis PeraltaEstado Jabber
Ziritione
Castellón Spain
39.997638, -0.064030

Sindica

Sindícame, por cortesía del subliminal Atom.

11 agosto 2009

Para la posteridad:

#!/usr/bin/python26                                                             
# kevent proc demo - luis peralta                                               
# http://www.ziritione.org                                                      
#                                                                               
# tested on python 2.6 % freebsd 7.2                                            

import sys
import select

if __name__ == '__main__':
    print sys.argv
    kq = select.kqueue()
    ke = select.kevent(int(sys.argv[1]),
                       select.KQ_FILTER_PROC,
                       select.KQ_EV_ADD|select.KQ_EV_ADD,
                       select.KQ_NOTE_FORK|select.KQ_NOTE_EXEC|select.KQ_NOTE_TRACK, select.KQ_NOTE_EXIT)
    events = kq.control([ke], 0, 0)
    while True:
        events = kq.control([], 1, 0)
        if len(events) > 0:
            for event in events:
                if event.fflags & select.KQ_NOTE_FORK:
                    print event.ident, "forked"
                if event.fflags & select.KQ_NOTE_EXEC:
                    print event.ident, "called exec"
                if event.fflags & select.KQ_NOTE_EXIT:
                    print event.ident, "exited"
                if event.fflags & select.KQ_NOTE_CHILD:
                    print event.ident, "is child, parent ", event.data

Se puede probar así: python2.6 kevent-test.py $$ &

2 diciembre 2008

¿Cómo hacer un Mac un poco más útil (de hecho, el doble)? Pues instalándole una máquina virtual con un Linux dentro. Que sí, que OSX es muy bonito y para eso lo tengo (para ver pelis en el salón), pero para otro tipo de tareas necesito un jugador de verdad. Así que no mordáis.

La solución de virtualización que he probado es la única que conozco gratuita para Mac: VirtualBox, que bien me recomendó calavering. Instalas sin problema: siguiente, siguiente, aceptar. Montas la máquina virtual (un intrepid de Ubuntu), la configuras, va todo como la seda. Pero ahora quieres que la máquina virtual arranque cuando se inicia OSX y además que no te moleste con un icono en el dock.

Solución: un StartupItem de OSX. La primera cosa que pensé levantaba mi máquina virtual única y exclusivamente, pero intentando hacer las cosas mejor me dije que por qué no hacerlo un poco más genérico. Puesto que VirtualBox permite definir atributos o propiedades sobre cada una de las VMs que maneja, qué mejor que aprovecharlas. Añadamos la propiedad 'launchatboot' a la VM micro:

$ VBoxManage guestproperty set micro launchatboot true
$ VBoxManage guestproperty get micro lauchatboot     
VirtualBox Command Line Management Interface Version 2.0.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

Value: true

Siguiente paso: crear el directorio /Library/StartupItems/VBoxLauncher:

$ sudo mkdir /Library/StartupItems/VBoxLauncher

Ahora editamos el archivo /Library/StartupItems/VBoxLauncher/StartupParameters.plist y le atizamos lo siguiente (descargar):

{
  Description     = "VirtualBox VM boot launcher";
  Provides        = ("VBoxLauncher");
  Uses            = ("VirtualBox");
  OrderPreference = "None";
}

Y por último editamos /Library/StartupItems/VBoxLauncher/VBoxLauncher (descargar):

#!/bin/sh
#
# VBoxLauncher - luis peralta
# http://www.ziritione.org

. /etc/rc.common

# Set this to the user who created the VMs
USER=peralta
PROPERTY="launchatboot"

StartService()
{
   UUIDS=`sudo -i -u $USER /usr/bin/VBoxManage list vms|grep "^UUID:"|cut -d" " -f 13`
   for uuid in $UUIDS
   do
      ConsoleMessage "launching $uuid vm"
      sudo -i -u $USER /usr/bin/VBoxManage guestproperty get $uuid $PROPERTY > /dev/null && sudo -i -b -u $USER /usr/bin/VBoxHeadless -startvm $uuid > /dev/null
   done
}


StopService()
{
   UUIDS=`sudo -i -u $USER /usr/bin/VBoxManage list runningvms|tail +5`
   for uuid in $UUIDS
   do
      sudo -i -u $USER /usr/bin/VBoxManage controlvm "$uuid" poweroff > /dev/null
      ConsoleMessage "$uuid stopped"
   done
}


RestartService()
{
    StopService
    StartService
}


RunService "$1"

Y zás, al siguiente arranque tenemos las máquinas virtuales que tengan la propiedad launchatboot en marcha sin hacer nada. En la web de Apple recomiendan usar launchd en vez de StartupItems para estas cosas, que es el futuro. Desde luego será cosa del futuro porque el script de launchd lo hará otro, no me cabe duda, en el futuro.

10 noviembre 2008

En tiempos, uno de esos proyectillos donde perdía yo el tiempo era ILE:

ILE is an acronym for I Love Email, which is just an indicator of how good I am for choosing project names. The purpose of the component is to notify you when new email has arrived to your account, which you can configure when you register with ILE.

Vamos, un notificador de nuevo correo vía mensajería instantánea. La versión que hubo instalada en miUJI tenía unos 100 usuarios registrados. El proyecto lo dejé de lado porque el autor de los módulos de perl que yo utilizaba (Net::Jabber) los tenía medio abandonados y me encontraba con escollos que ya no podía salvar a no ser que me pusiera en plan borde e hiciera un fork de los mismos. Y luego petaron la máquina que hacía el hosting del proyecto (jabberstudio, hoy muerta) y entre una cosa y otra todo kaput.

Pero hoy he encontrado un tar del bicho en internet (además de descubrir que era parte de los ports de netBSD y que se había empaquetado en alguna que otra distribución de Linux). Qué menos que guardarlo para la posteridad, ¿no? ILE-v0.4.

15 octubre 2008

Hace un tiempo conté cómo generar un hash FNV con Python, esta vez le ha tocado al PHP. En principio la traducción debería haber sido directa, salvo porque el cabroncete del PHP y las operaciones sobre bits con número de tamaño mayor a 32 bits no se llevan nada bien. Vamos, es que es básico. Así que solución apoyándonos en la librería GMP y su extensión para PHP.

function FNV1a32_hash($str) {
        $prime = "16777619";
        $h = "2166136261";
        $i = 0;
        $s = strlen($str);

        while ($i<$s) {
                $h = gmp_xor($h, ord($str[$i++]));
                $h = gmp_mul($h, $prime);
        }
        return dechex((float)gmp_strval(gmp_and($h, "0x00000000ffffffff")));
}
2 septiembre 2008

Camarada, dump y load son tus amigos:

$ svnadmin dump /ruta/repo/viejo > /tmp/repo.dump
$ svnadmin create /ruta/repo/nuevo
$ svnadmin load /ruta/repo/nuevo < /tmp/repo.dump