El proyecto ActiveFacts y CQL, Constellation Query Language

Clifford Heath es el creador del projecto Open-Source ActiveFacts que implementa CQL —Constellation Query Language— y el API Constellation.

CQL fue presentado por primera vez en el ORM Workshop 2009 en Portugal, y ahora mismo se encuentra en la versión 0.8.8 que incorpora casi la totalidad de las características de un modelo ORM2 —Object Role Modeling— y que no debe ser confundido con “Object Relational Mapping”.

El lenguaje de consulta Constellation representa un nuevo método de representación de meta-modelos ontológicos ORM2 por medio de lenguaje natural. Al mismo tiempo ofrece un robusto mapeado y un generador de código tanto para modelos orientado a objetos como relacionales.

Un ejemplo de modelo ORM2 para direcciones realizado con Norma

El modelo generaría automáticamente el código CQL

vocabulary CompanyDirectorEmployee;

/*
 * Value Types
 */
Company Name is written as String(48);
Date is written as Date;
Employee Nr is written as Signed Integer(32);
Name is written as String(48);

/*
 * Entity Types
 */
Company is identified by its Name where
	Company is called Company Name;
Company is listed;

Meeting is independent identified by Date and Meeting is board meeting and Company where
	Meeting is held on one Date,
	Meeting is board meeting,
	Company held Meeting,
	Meeting is held by one Company;

Person is identified by given-Name and family-Name where
	Person has one given-Name,
	given-Name is of Person,
	family-Name is of Person,
	Person is called at most one family-Name;
Person was born on at most one birth-Date restricted to {'1900/01/01'..};

Attendance is where
	Person (as Attendee) attended Meeting,
	Meeting was attended by Attendee;

Directorship is where
	Person (as Director) directs Company,
	Company is directed by at least one Director;
Directorship began on one appointment-Date;

Employee is a kind of Person identified by its Nr;
Employee works at one Company,
	Company employs Employee;

Manager is a kind of Employee;
Employee is supervised by at most one Manager [acyclic],
	Manager supervises Employee;
Manager is ceo;

/*
 * Constraints:
 */
either Employee is supervised by Manager(2) or Employee is a Manager(1) that is ceo but not both;

Y para también podría generar el código SQL

CREATE TABLE Attendance (
	-- Attendance is where Person attended Meeting and maybe family-Name is of Person,
	AttendeeFamilyName                      varchar(48) NULL,
	-- Attendance is where Person attended Meeting and Person has given-Name,
	AttendeeGivenName                       varchar(48) NOT NULL,
	-- Attendance is where Person attended Meeting and Company held Meeting and Company is called Company Name,
	MeetingCompanyName                      varchar(48) NOT NULL,
	-- Attendance is where Person attended Meeting and Meeting is held on Date,
	MeetingDate                             datetime NOT NULL,
	-- Attendance is where Person attended Meeting and Meeting is board meeting,
	MeetingIsBoardMeeting                   bit NOT NULL,
	UNIQUE(AttendeeGivenName, AttendeeFamilyName, MeetingDate, MeetingIsBoardMeeting, MeetingCompanyName)
)
GO

CREATE TABLE Company (
	-- Company is called Company Name,
	CompanyName                             varchar(48) NOT NULL,
	-- Company is listed,
	IsListed                                bit NOT NULL,
	PRIMARY KEY(CompanyName)
)
GO

CREATE TABLE Directorship (
	-- Directorship began on appointment-Date,
	AppointmentDate                         datetime NOT NULL,
	-- Directorship is where Person directs Company and Company is called Company Name,
	CompanyName                             varchar(48) NOT NULL,
	-- Directorship is where Person directs Company and maybe family-Name is of Person,
	DirectorFamilyName                      varchar(48) NULL,
	-- Directorship is where Person directs Company and Person has given-Name,
	DirectorGivenName                       varchar(48) NOT NULL,
	UNIQUE(DirectorGivenName, DirectorFamilyName, CompanyName),
	FOREIGN KEY (CompanyName) REFERENCES Company (CompanyName)
)
GO

CREATE TABLE Meeting (
	-- Company held Meeting and Company is called Company Name,
	CompanyName                             varchar(48) NOT NULL,
	-- Meeting is held on Date,
	Date                                    datetime NOT NULL,
	-- Meeting is board meeting,
	IsBoardMeeting                          bit NOT NULL,
	PRIMARY KEY(Date, IsBoardMeeting, CompanyName),
	FOREIGN KEY (CompanyName) REFERENCES Company (CompanyName)
)
GO

CREATE TABLE Person (
	-- maybe Person was born on birth-Date,
	BirthDate                               datetime NULL CHECK(BirthDate >= '1900/01/01'),
	-- maybe Employee is a kind of Person and Employee works at Company and Company is called Company Name,
	EmployeeCompanyName                     varchar(48) NULL,
	-- maybe Employee is a kind of Person and maybe Employee is supervised by Manager and Employee has Employee Nr,
	EmployeeManagerNr                       int NULL,
	-- maybe Employee is a kind of Person and Employee has Employee Nr,
	EmployeeNr                              int NULL,
	-- maybe family-Name is of Person,
	FamilyName                              varchar(48) NULL,
	-- Person has given-Name,
	GivenName                               varchar(48) NOT NULL,
	-- maybe Employee is a kind of Person and maybe Manager is a kind of Employee and Manager is ceo,
	ManagerIsCeo                            bit NULL,
	UNIQUE(GivenName, FamilyName),
	FOREIGN KEY (EmployeeCompanyName) REFERENCES Company (CompanyName)
)
GO

CREATE VIEW dbo.EmployeeInPerson_Nr (EmployeeNr) WITH SCHEMABINDING AS
	SELECT EmployeeNr FROM dbo.Person
	WHERE	EmployeeNr IS NOT NULL
GO

CREATE UNIQUE CLUSTERED INDEX NumberIdentifiesEmployee ON dbo.EmployeeInPerson_Nr(EmployeeNr)
GO

ALTER TABLE Attendance
	ADD FOREIGN KEY (MeetingCompanyName, MeetingDate, MeetingIsBoardMeeting) REFERENCES Meeting (CompanyName, Date, IsBoardMeeting)
GO

ALTER TABLE Attendance
	ADD FOREIGN KEY (AttendeeFamilyName, AttendeeGivenName) REFERENCES Person (FamilyName, GivenName)
GO

ALTER TABLE Directorship
	ADD FOREIGN KEY (DirectorFamilyName, DirectorGivenName) REFERENCES Person (FamilyName, GivenName)
GO

ALTER TABLE Person
	ADD FOREIGN KEY (EmployeeManagerNr) REFERENCES Person (EmployeeNr)
GO

Aquí dejo un enlace a una introducción de CQL en inglés.

Apuntes: Migraciones de IMAP con imapsync

$ lsb_release -sd && uname -mor
Ubuntu 11.10
3.0.0-12-generic x86_64 GNU/Linux

Imapsync es una herramienta imprescindible a la hora de realizar alguna migración de servidores IMAP.

Incluye entre otras funcionalidades:
IMAP sobre TLS (–ssl*), control de subscripciones (–subscribe*, –include, –exclude, –regextrans2), control de cabeceras y estados de los mensajes (–regexflag, –regexmess), fechas (–maxage, –minage), tamaño (–maxsize, –minsize)

#!/bin/bash

# http://ks.lamiral.info/imapsync/
# http://ks.lamiral.info/imapsync/FAQ

# ./imapsync --buffersize 8192000 --nosyncacls --subscribe_all --syncinternaldates --ssl1 --host1 imap.host1 --user1 usuario1 --password1 \"clave1\" --ssl2 --host2 imap.host2 --user2 usuario2 --password2 \"clave2\"

x=`pwd`/imapsync
if [[ ! -d $x ]]; then
    mkdir -p $x
fi

sudo apt-get install libssl-dev

# http://search.cpan.org

urls=(

http://cpan.org/authors/id/G/GA/GAAS/Digest-HMAC-1.03.tar.gz


http://cpan.org/authors/id/G/GA/GAAS/Digest-MD5-2.51.tar.gz


http://cpan.org/authors/id/N/NB/NBEBOUT/NTLM-1.09.tar.gz


http://cpan.org/authors/id/G/GB/GBARR/Authen-SASL-2.15.tar.gz


http://cpan.org/authors/id/P/PL/PLOBBES/Mail-IMAPClient-3.29.tar.gz


http://cpan.org/authors/id/S/ST/STSI/TermReadKey-2.30.02.tar.gz


http://cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-1.44.tar.gz


http://cpan.org/authors/id/D/DC/DCONWAY/Parse-RecDescent-1.965001.tar.gz


http://cpan.org/authors/id/M/MI/MIKEM/Net-SSLeay-1.42.tar.gz

)

regex='(https?|ftp)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9]\.tar.gz$'

for url in ${urls[@]}
do
	cd $x
	echo ""
	if [[ $url =~ $regex ]]; then
		fln=${url%.*tar.gz}
		fln=${fln##*/}
		echo "Descargando e instalando modulo $fln"
		sh -c "wget -q $url -O- | tar xzf -"
		cd $fln
		perl Makefile.PL
		make
		sudo make install
		cd $x
		rm -rf $fln
		echo "--OK--"
	else
		echo "Direccion o nombre de archivo no valido"
	fi
done

cd $x

# esta todo en su sitio?
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -mAuthen::NTLM -e '' > deberia-estar-vacio.log

# https://fedorahosted.org/imapsync/
# https://fedorahosted.org/released/imapsync/

url=https://fedorahosted.org/released/imapsync/imapsync-1.456.tgz

wget -q $url -O- | tar xzf - --strip-components=1 --no-anchored imapsync

#EOF

Muy muy recomendable (¡!) el echar un vistazo al FAQ. Es muy completo e incluye ejemplos que van desde el uso general, hasta las peculiaridades de migración entre plataformas.

Anónimo y descentralizado. Parte I. Exposición

“Aquí se protege al pirata, al proxeneta de las canciones robadas (trata de blancas, de negras, fusas y semifusas), aquí y anteayer se votó para proteger el derecho del pirata a mantener su burdel musical abierto…” Alejandro Sánchez

“¿Qué internautas? ¿Cuatro frikis que están tergiversando la opinión de la gente?”, “Los frikis no son capaces ni de reunir 30.000 firmas” Pau Donés

“Se acabó la barra libre en Internet”, “Claro que se le pueden poner puertas al campo, y se las vamos a poner” Luis Cobos

“Con Google no pasará nada. Es una empresa estimable y no tendrá ninguna dificultad en atendernos. Respetará las normas”, “Y las atenderán, no les interesa tener problemas” Santos Castro

“La piratería será un recuerdo del pasado” González-Sinde

A estas alturas, tras un poco más de dos meses desde el amargo desplante que supuso la aprobación en el Congreso de la llamada “Ley Sinde”, y a la espera de ver como empieza a funcionar la “Comisión de la Propiedad Intelectual”, esa que pagaremos entre casi todos los españoles, ya podemos comenzar a sacar algunas conclusiones generales:

  • Que la aprobación de la “Ley Sinde”, o lo que es lo mismo, la reforma de la LSSI, de la LPI y la Ley Reguladora de la Jurisdicción Contencioso-Administrativa, dentro de la “Disposición Final Segunda” de la Ley de Economía Sostenible, debería ser la gota que colma el vaso. Esto es, debería pasar factura política a los partidos que dicen representarnos y enviar un claro mensaje: #nolosvotes
  • Que nos la han impuesto y vendido como una iniciativa que no perseguirá a los internautas — por ahora — como comentaba la “Ministra de Cultura” durante una entrevista

    “En Francia o el Reino Unido persiguen a los usuarios que hacen descargar ilegales. A los tres avisos les sancionan. Sin embargo en España pensamos que había que ir a por los que hacen la trampa, no a por quienes se benefician.” González-Sinde

    Aun así, eso no garantiza que no se cambie de opinión en un futuro muy cercano para satisfacer la agenda de “la industria del entretenimiento”, que claramente se ha posicionado en contra de unas medidas tan “blandas”

    “[la ley contribuiría de forma significativa] … a pesar de ser insuficiente por no incluir la vulneración de los derechos de autor en las redes P2P” Aldo Olcese

  • Que es una reforma, que muy probablemente terminará — siguendo los pasos del Canon Digital — en el Tribunal Constitucional o en el Tribunal de Justicia de la Unión Europea.
  • Que mientras tanto, España pasará a pertenecer a la lista de países que claudicaron ante el lobby de la “industria del entretenimiento” Estadounidense. Países como la misma Estados Unidos, Argentina, Australia, Colombia, Francia, Holanda, México, Nueva Zelanda o Reino Unido

¿Qué podemos hacer?

Demostrar a políticos y a la “industria del entretenimiento” por igual, lo inútil, la pérdida de tiempo, esfuerzo y dinero que puede suponer censurar y criminalizar a los internautas e intentar “poner puertas al campo”.

“¿No quieres caldo?… toma 2 tazas”

Si a estas alturas aun no se han dado cuenta que la normalización de su mercado pasa por la mejora de la infraestructura y calidad de internet en España y la reducción del coste de acceso; Mejorar la oferta y precio de los contenidos digitales en la red; Y la profunda reconversión de la figura de las sociedades de gestión de derechos de autor, para compensar a los creadores de una forma transparente y equitativa … ¿Cuando lo harán?.

Porque recordemos … “la cultura del todo gratis” es una leyenda urbana creada y perpetuada por “la industria del entretenimiento”, las sociedades de gestión de derechos de autor y sus acólitos.

Es una forma de ocultar las graves deficiencias de un modelo de negocio viciado usando al consumidor como chivo expiatorio. Ese mismo consumidor que al final del día paga unas tarifas desproporcionadas por acceder a la red, al que se le ha robado impunemente con el Canon Digital y al que aun se le quiere continuar obligando a comprar CDs de doce canciones, cuando quizás sólo le gustan una o dos. — ¿Toc-toc?. ¿Hay alguien ahí dentro?.

Compás de espera

– ¿Y ahora qué pasará? –
Pues si miro fijamente el laser rojo del ratón durante un rato, a modo de bola de cristal, tampoco veo nada de lo que nos deparará el futuro. ;)

Creo que no hace falta aclarar que en gran medida “la hoja de ruta de la Ley Sinde” se decidirá el próximo 22 de Mayo … ¿He comentado ya eso de que #nolosvotes?.

A partir de ahí, dependiendo de los resultados, también influiría un eventual adelanto o no de las Elecciones Generales, de las repercusiones que tendría la aprobación en Europa del ACTA, o si de verdad comenzaría la “Comisión” a trabajar a finales del verano como anunciado, etc … ¿Quíen sabe?.

En el peor de los casos

– ¿Qué podría hacer para conservar mi privacidad en la red y compartir cosas con mis “amigos”? –
Pues podríamos hablar de conceptos como “Darknets”, P2P y F2F y programas como Freenet y GNUnet en la próxima entrada.

 Parte II

Descargar, convertir, cortar y subir: ¡Copiad, malditos!

Ayer, después de ver ¡Copiad malditos! en el documental de la 2, me sorprendí un poco al leer en la web que el programa sólo estaría disponible para su descarga a principios de Mayo, y que sólo estaría online (al menos en el sitio de RTVE) durante 2 semanas a partir de ese momento.

¿Por qué desaprovechar así el “momento de inercia” y no convertirlo en un video viral?.

Sinceramente pienso que el momento de distribuirlo de manera masiva es ahora. O ¿es que alguien de verdad piensa que tendrá la misma repercusión dentro de 3 semanas?.

Ergo, siendo Creative Commons

Identificamos la URL del archivo de streamming

Identificamos la URL del archivo de streamming y descargamos con wget el vídeo completo.

$ wget -c  http://www.rtve.es/resources/TE_NGVA/flv/0/2/1302903059020.flv -O copiad-malditos.flv

Ahora que tenemos el vídeo podríamos subirlo a Youtube, pero debido a las presentes limitaciones, sólo se pueden en partes de máximo 15 minutos de duración.
Como los archivos FLV no se dejan cortar muy bien, primero lo convertimos en un AVI.

$ mencoder copiad-malditos.flv -ovc lavc -oac mp3lame -o copiad-malditos.avi

Y sólo faltaría cortar para subir …

$ mencoder -ovc copy -oac copy -ss 00:00:00 -endpos 00:14:30 copiad-malditos.avi -o parte1.avi
...
$ mencoder -ovc copy -oac copy -ss 00:14:27 -endpos 00:14:30 copiad-malditos.avi -o parte2.avi
...

Y aquí está el resultado …

Compilando e instalando ZoneMinder desde SVN

ZoneMinder es una solución de “Software Libre” para video vigilancia que se liberó por primera vez en el 2005.

Desde entonces ya ha pasado mucho tiempo y el proyecto, con sus altibajos, ofrece un conjunto de prestaciones que muchos programas “pofesionales” desearían:

+ Compatible con vídeo cámaras, webcams, y cámaras IP, estáticas o con movimiento y zoom
+ Soporta configuraciones de varias cámaras de distinto tipos
+ Creado usando herramientas standard como C++, Perl, PHP, MySQL
+ Captura y análisis de video
+ Configuración de diferentes “zonas” por cámara, con distintos grados de sensibilidad, que pueden generar “situaciones de alarma” que, por ejemplo, graben a disco el suceso y envíen correos o SMS a uno o más contactos, o suban a un FTP remoto las imágenes que lo han producido
+ Integración del protocolo de domótica X10
+ Un diseño modular para interactuar con otras aplicaciones y hardware, incluyendo teléfonos móviles … y lo que a casi todo el mundo le gusta ;)
+ Cero Euros por el programa o el número de licencias
 

 
¿Con qué lo he probado yo?

Con un antiguo Pentium 4 con 512M RAM, un disco duro de 80G IDE, una webcam USB, y red local. Sólo durante la instalación del SO se necesita un monitor, teclado, una lectora de CD/DVD y conexión a internet.

¿Con qué software?

Yo aproveché hace unos días para bajar y quemar una ISO de la nueva Debian Squeeze.

$ lsb_release -sd && uname -r
Debian GNU/Linux 6.0.1 (squeeze)
2.6.32-5-686

Usé la versión “netinst”, que pesa alrededor de 135-175M y facilita básicamente la instalación “base” del SO mediante un sencillo paso a paso, para además usar la conexión de internet para descargar los paquetes adicionales de software que necesites y las actualizaciones necesarias.

En el caso de ZoneMinder y, por muchas razones y ninguna, he preferido compilar desde fuentes usando su repositorio de subversion en http://svn.zoneminder.com/, a día de hoy la versión 1.24.3
Advertencia!, este repositorio no contiene una rama “estable”, por lo que si bien va solventando problemas ya conocidos e incorporando nuevas características, no garantiza que esté libre de errores.

¿Cual es el proceso?

Resulta bastante sencillo, especialmente después de la primera vez que lo consigues sin problemas ;)
En pocas palabras se trata de instalar Debian, configurarlo, conectarse desde otra máquina, ejecutar el script de instalación desatendida, reiniciar la máquina y conectarse a ZoneMinder. Así de fácil.

Ahora los pasos con una explicación más elaborada serían:

+ Comienza con la instalación de Debian. Apúntate de antemano la ip estática, máscara de red y DNS que vas a asignar a la máquina
+ Importante!. Recuerda la contraseña de root porque necesitas incluir en el script de instalación de Zoneminder esa información
+ Crea una cuenta de usuario que prefieras. Teóricamente no la vas a utilizar para nada, pero nunca se sabe.
+ Si vas a utilizar esta máquina de forma dedicada para ZoneMinder sólo necesitas llevar a cabo la instalación base y seleccionar el servidor SSH, no la cargues con servicios innecesarios

+ Termina con la instalación de Debian y reinicia
+ Si como en el ejemplo del video, la ip de la máquina es 192.168.1.100, no deberías tener ningún problema de poder acceder a ella desde cualquier otra máquina en red

$ ssh root@192.168.1.100
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
RSA key fingerprint is cf:20:e9:dd:07:a4:55:fc:42:d4:8f:2d:93:64:cf:d5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.100' (RSA) to the list of known hosts.
root@192.168.1.100's password: 
Linux zoneminder 2.6.32-5-686 #1 SMP Tue Mar 8 21:36:00 UTC 2011 i686
root@zoneminder:~# 

+ También puedes utilizar, por ejemplo, las utilidades PuTTY para acceder desde una máquina con Windows

#!/bin/bash

# importante! ZX debe ser la contraseña de root
#   necesaria para poder completar la instalacion
#   desatendida de MySQL 
ZX=zmpass

# ZM es la sub-carpeta de $HOME donde se
#   compilaran las fuentes
ZM=zoneminder

## --- DEBIAN POST-INSTALACION

release=$(lsb_release -cs)

cat <<ZZZ >> /etc/apt/sources.list
# debian $release multimedia
deb http://www.debian-multimedia.org/ $release main
ZZZ
apt-get update

apt-get -y --allow-unauthenticated install \
    debian-multimedia-keyring
apt-get update

apt-get -y install build-essential \
    linux-headers-`uname -r` subversion git-core \
    checkinstall yasm texi2html perl libwww-perl \
    nasm autoconf

apt-get -y install libfaac-dev libjack-jackd2-dev \
    libmp3lame-dev libopencore-amrnb-dev \
    libopencore-amrwb-dev libsdl1.2-dev libtheora-dev \
    libvorbis-dev libvpx-dev libx11-dev libxfixes-dev \
    libxvidcore-dev zlib1g-dev

cd ~
mkdir $ZM

## --- INSTALACION x264
# http://www.videolan.org/developers/x264.html

cd ~/$ZM
git clone git://git.videolan.org/x264
cd x264
./configure
make
checkinstall -D --pkgname=x264 --fstrans=no \
    --pakdir "$HOME/$ZM" --maintainer "$USER" \
    --pkgversion "1:0.svn`date +%Y%m%d`-debian" \
    --backup=no --deldoc=yes --deldesc=yes \
    --delspec=yes --default
make distclean

## --- INSTALACION LAME
# http://lame.sourceforge.net/

cd ~/$ZM
wget http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz
tar xzvf lame-3.98.4.tar.gz
cd lame-3.98.4
./configure --enable-nasm --disable-shared
make
checkinstall -D --pkgname=lame-ffmpeg \
    --pkgversion="3.98.4" --pakdir "$HOME/$ZM" \
    --backup=no --deldoc=yes --deldesc=yes \
    --delspec=yes --default
make distclean

## --- INSTALACION LIBVPX
# http://www.webmproject.org/code/

cd ~/$ZM
git clone git://review.webmproject.org/libvpx
cd libvpx
./configure
make
checkinstall -D --pkgname=libvpx \
    --pkgversion="$(date +%Y%m%d%H%M)-git" \
    --pakdir "$HOME/$ZM" --backup=no --deldoc=yes \
    --deldesc=yes --delspec=yes --default

## --- INSTALACION FFMPEG
# http://www.ffmpeg.org/

cd ~/$ZM
git clone git://git.videolan.org/ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-version3 \
    --enable-nonfree --enable-postproc --enable-libfaac \
    --enable-libopencore-amrnb \
    --enable-libopencore-amrwb \
    --enable-libtheora --enable-libvorbis \
    --enable-libx264 --enable-libxvid \
    --enable-libmp3lame --enable-libvpx
make
checkinstall -D --pkgname=ffmpeg \
    --pkgversion="5:$(./version.sh)"    
    --pakdir "$HOME/$ZM" --backup=no --deldoc=yes   
    --deldesc=yes --delspec=yes --default
make distclean

cd ~
hash x264 ffmpeg

## --- INSTALACION PERL CPAN
# http://www.cpan.org/

export PERL_EXTUTILS_AUTOINSTALL="--defaultdeps"

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install CPAN'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install +YAML'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install PHP::Serialization'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install Date::Manip'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install Sys::Mmap'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install Device::SerialPort'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install +Archive::Zip'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install MIME::Lite'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install MIME::Entity'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install X10::ActiveHome'
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install LWP::UserAgent'

## --- APLICACIONES NECESARIAS PARA ZONEMINDER

export DEBIAN_FRONTEND=noninteractive
apt-get install -y mysql-server
sleep 10
mysql -u root -e <<ZZZ "update mysql.user \
set password=PASSWORD('$ZX') where user='root'; \
flush privileges;"
ZZZ
export DEBIAN_FRONTEND=

apt-get -y install apache2 mysql-client php5 \
    libapache2-mod-php5 php5-cli php5-mysql
apt-get -y install libmysqlclient-dev libjpeg8-dev \
    libssl-dev libpcre3-dev libavcodec-dev \
    libavformat-dev libavdevice-dev libbz2-dev

adduser webcam video
adduser www-data video

## --- INSTALACION ZONEMINDER
# http://www.zoneminder.com/

cd ~/$ZM
svn co http://svn.zoneminder.com/svn/zm/trunk $ZM
cd $ZM
./configure --with-webdir=/var/www/zm \
    --with-cgidir=/usr/lib/cgi-bin \
    --with-webgroup=www-data \
    --with-webuser=www-data	ZM_DB_HOST=localhost \
    ZM_DB_NAME=zm ZM_DB_USER=zmuser ZM_DB_PASS=zmpass \
	--enable-debug=yes \
    --enable-mmap CPPFLAGS="-D__STDC_CONSTANT_MACROS" \
    ZM_SSL_LIB=openssl
autoconf
automake
make
mysql -u root --password=$ZX < db/zm_create.sql
mysql -u root --password=$ZX -e <<ZZZ "grant \
select,insert,update,delete \
on zm.* to 'zmuser'@localhost identified by 'zmpass';"
ZZZ
make install

## --- INSTALACION CAMBOZOLA
# http://www.charliemouse.com/code/cambozola/

cd ~/$ZM
wget http://www.charliemouse.com:8080/code/cambozola/cambozola-latest.tar.gz
cambozola=`tar -ztf cambozola-latest.tar.gz | grep cambozola.jar`
tar -zxf cambozola-latest.tar.gz $cambozola
cp $cambozola /var/www/zm/${cambozola##*/}

#EOF

+ Copia el script de arriba y guárdalo en un archivo, eg.: zm-install.sh. No olvides cambiar la contraseña de la línea 6
+ Copia el script al servidor desde tu equipo, puedes hacerlo con SCP

$ scp zm-install.sh root@192.168.1.100:/root
root@192.168.1.100's password: 
zm-install.sh                                  100%   44     0.0KB/s   00:00
$

+ Sólo te resta conectarte al servidor, darle al script privilegios de ejecución, y lanzarlo para que comience la descarga desde internet de las fuentes, compile e instale todo.

$ ssh root@192.168.1.100
root@192.168.1.100's password: 
Linux zoneminder 2.6.32-5-686 #1 SMP Tue Mar 8 21:36:00 UTC 2011 i686
root@zoneminder:~# pwd
/root
root@zoneminder:~# ls -la
total 28
drwx------  3 root root 4096 abr 15 08:26 .
drwxr-xr-x 21 root root 4096 abr 15 04:10 ..
drwx------  2 root root 4096 abr 15 04:15 .aptitude
-rw-------  1 root root   39 abr 15 04:22 .bash_history
-rw-r--r--  1 root root  570 ene 31  2010 .bashrc
-rw-r--r--  1 root root  140 nov 19  2007 .profile
-rwxr-xr-x  1 root root   44 abr 15 08:18 zm-install.sh
root@zoneminder:~# chmod +x zm-install.sh 
root@zoneminder:~# ./zm-install.sh 

+ Si todo va bien, reinicia el servidor desde la session SSH tecleando reboot
+ Al arrancar deberías poder acceder al servidor desde el navegador en la dirección http://192.168.1.100/zm

Sobre el funcionamiento y configuración de ZoneMinder como tal, existen tutoriales más específicos y detallados, además de la página oficial y la Wiki

Nuevo Firefox 4.0

Liberado hoy y todavía calentito para su descarga desde Mozilla Europa.

También para la instalación desde repositorios en Ubuntu:

sudo add-apt-repository ppa:mozillateam/firefox-stable
sudo apt-get update
sudo apt-get upgrade

Los distintos idiomas los puedes encontrar aquí. Para instalar en Castellano, aquí.

Adios Oracle, bienvenidos sean los “forks”

Desde la compra de Sun Microsystems por parte de Oracle la comunidad “Open Source” no auguraba nada bueno y como más tarde se ha podido comprobar, no se equivocaba mucho.

Esta es una lista de los proyectos que han comenzado una nueva andadura más allá de la larga sombra de Oracle y de su patética filosofía empresarial:


OpenIndiana

OpenIndiana

http://openindiana.org

Tiene como base Illumos , una bifurcación de OpenSolaris que agrupa el kernel, drivers, librerías y herramientas básicas del SO.

OpenIndiana , pasa a ser un heredero natural y controlado por la antigua comunidad “Open Source” de OpenSolaris.

A día de hoy se esta trabajando para liberar la primera versión estable para entornos de producción , lo que no quiere decir que no se pueda ir probando, y echar una mano informando de algún problema.

Existe una versión “live” que podéis bajaros:
OpenIndiana Build 148 x86 Live DVD (875M)

También cabe destacar otras distribuciones, antes basadas en OpenSolaris y ahora en Illumos, como SchilliX o Nexenta .


LibreOffice

LibreOffice

http://es.libreoffice.org

Tampoco la comunidad OpenOffice se ha quedado atrás. A finales de Septiembre del 2010 un grupo de miembros del proyecto fundan The Document Foundation, una iniciativa para promover y desarrollar un paquete de ofimática basado en el standard OpenDocument (ODF) , completamente independiente de cualquier empresa y que cuenta con el apoyo de Novell, RedHat, Canonical y Google, entre otros.

Instalación en Ubuntu

# sudo apt-get purge openoffice*
sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice libreoffice-report-builder libreoffice-gnome libreoffice-l10n-es language-support-writing-es myspell-es libreoffice-help-es


MariaDB

MariaDB

http://mariadb.org

Para la comunidad “Open Source” una de las cosas más bellas debe de ser el poder “rescatar” un proyecto como MySQL de las manos de Oracle, sobretodo si eres el fundador de la compañía que en su día se lo vendió a Sun Microsystems para trabajar para ella como una subsidiaria más.
Así que no es de extrañar que Michael “Monty” Widenius, después de que Oracle anunciase la compra de Sun el 27 de Enero del 2010, tardase exactamente 1 semana en renunciar a su puesto y anunciar la creación de Monty Program Ab para dedicarse de lleno a MariaDB. ;)

Una de las ventajas estratégicas de MariaDB es que, aun siendo una bifurcación, se ha desarrollado como un “drop-in replacement” de MySQL; Esto es, la sustitución es compatible desde el primer momento, e incluye notables mejoras de estabilidad y velocidad.

El estado de MariaDB según Monty

Cygwin: Tus herramientas *NIX bajo Windows

Cygwin de Red Hat, es una colección de herramientas GPL originalmente orientadas para desarrolladores portando aplicaciones *NIX/Linux al entorno de Microsoft Windows.

Cygwin es un entorno de 32 bit que funciona en instalaciones de 32 y 64 bit de Windows 2000, XP, 2003 Server, Vista, 2008 Server, 7, and 2008 Server R2.

Sin duda es un complemento indispensable para máquinas Windows donde poder emplear “shells” como bash, ksh, zsh y herramientas como ssh, scp, rsync, unison, perl, o python

También existe un proyecto Cygwin/X, una implementación de X que nunca he probado personalmente, porque llegados a la necesidad de tener que trabajar con una interfaz gráfica, siempre he optado por utilizar un programa de virtualización como KVM, Virtualbox o Vmware.

Este es un paso a paso muy básico de una instalación de Cygwin en un Windows XP para poder trabajar con OpenSSH, Rsync y Unison en red para realizar copias de seguridad, un tema que trataremos en otra entrada un poco más adelante.

Instalación de Cygwin 1.7.7

Reparando y convirtiendo AVIs. 3 ejemplos usando DivFix++, FFmpeg y Mencoder.

DivFix++
La última versión es la 0.34 del 2009-10-16. La herramienta merecería una actualización para subsanar algunos defectillos y terminar de portar y añadir algunas opciones al CLI.
Aun así es una opción rápida y muy sencilla para los que no quieren complicarse la vida.

GUI

En la línea de comandos la reparación es casi aún más fácil:

DivFix++ -i "pelicula dañada.avi" -o "pelicula reparada.avi"

www.divfix.org
sourceforge.net/projects/divfixpp/files/

FFmpeg
Este ejemplo lo utilizo para convertir películas a formato Xvid Stereo y reproducirlas en la TV desde el disco duro USB. El firmware de reproducción de la TV es muy “sencillo”, así que sólo reproduce mpeg y stereo.

ffmpeg -i "pelicula 5.1.avi" -map 0:0 -map 0:1 -vcodec copy -vtag xvid -acodec libmp3lame -ab 128k -ac 2 -ar 44100 -vol 350 -f avi "pelicula stereo.avi"

El comando asume que sólo es necesario un cambio en el audio; Descartando un segundo canal dual si existiera, reduciendo la calidad a 128k y subiendo el volumen.

ffmpeg.org

Mencoder
El tandem Mencoder/Mplayer ha cumplido hace un par de meses su décimo cumpleaños.

mencoder -idx "pelicula dañada.avi" -ovc copy -oac copy -o "pelicula reparada.avi"

www.mplayerhq.hu

¿Cómo que no tienes copia de seguridad?. Cdrtools.

Esta es la pequeña “receta” que utilizo para automatizar las copias de seguridad en DVD/Blu-ray de una manera simple usando las herramientas de Crtools de Jörg Schilling, portadas a win32 (cygwin 1.5.13, gcc 3.3.1-3) por el proyecto Cdrtfe.

Muchos se sorprenderán que una “pequeña” distribución de menos de 2MB sea el motor de muchos programas de grabación de las más populares distribuciones *NIX/Linux como X-CD-Roast, K3b o Brasero. Crtools es compatible con Blu-ray desde el 2008.

Descarga la versión cdrtools-3.00-bin-win32, y echa un vistazo al contenido del archivo RAR. El listado de los archivos es el siguiente:

 El volumen de la unidad C es DISCO-00
 El número de serie del volumen es: CCED-1EF4

 Directorio de C:\Backup

20/01/2011  16:01              .
20/01/2011  16:01              ..
20/01/2011  16:01              doc
20/01/2011  16:01              siconv
02/06/2010  10:20           259.072 cdda2wav.exe
02/06/2010  10:20           397.312 cdrecord.exe
02/06/2010  10:20            90.624 devdump.exe
07/03/2008  20:11               578 info.txt
02/06/2010  10:20            89.088 isodebug.exe
02/06/2010  10:20            94.208 isodump.exe
02/06/2010  10:20           105.472 isoinfo.exe
02/06/2010  10:20            95.232 isovfy.exe
02/06/2010  10:20           353.792 mkisofs.exe
02/06/2010  10:20           236.032 readcd.exe
02/06/2010  10:20            76.800 rscsi.exe
02/06/2010  10:20           128.512 scgcheck.exe
              12 archivos      1.926.722 bytes
               4 dirs   1.525.608.448 bytes libres

Del listado superior y para nuestro propósito solo necesitas los programas “cdrecord.exe” y “mkisofs.exe”. Adicionalmente necesitas las librerías cygwin1.dll_1.5.25, cygiconv-2-1.11-1, cygintl-3-0.14.5.

Todos los archivos necesarios están disponibles aquí.

 El volumen de la unidad C es DISCO-00
 El número de serie del volumen es: CCED-1EF4

 Directorio de C:\Backup

20/01/2011  15:49              .
20/01/2011  15:49              ..
02/06/2010  10:20           397.312 cdrecord.exe
23/10/2006  00:44           999.424 cygiconv-2.dll
20/11/2005  04:13            31.744 cygintl-3.dll
31/08/2010  09:00         2.648.181 cygwin1.dll
02/06/2010  10:20           353.792 mkisofs.exe
               5 archivos      4.430.453 bytes
               2 dirs   1.530.335.232 bytes libres

Antes de escribir el script para crear y “tostar” la ISO, vamos a identificar la regrabadora que deseamos utilizar del equipo:

C:\Backup>cdrecord -scanbus
Cdrecord-ProDVD-ProBD-Clone 3.00 (i686-pc-cygwin) Copyright (C) 1995-2010 Jorg Schilling
Using libscg version 'schily-0.9'.
scsibus0:
        0,0,0     0) 'VBOX HAR' 'DDISK           ' '1.0 ' Disk
        0,1,0     1) *
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) HOST ADAPTOR
scsibus1:
        1,0,0   100) 'VBOX    ' 'CD-ROM          ' '1.0 ' Removable CD-ROM
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) HOST ADAPTOR

Ahora solo necesitamos crear un pequeño script que (1) genere una imagen ISO del directorio o directorios de los cuales queremos realizar una copia de seguridad, y (2) nos escriba esa ISO en el DVD/Blu-ray que hemos preparado antes de iniciar el proceso.

@echo off

rem backup.cmd : crear y tostar una ISO

set marca="BAK_%date:~-4,4%%date:~-7,2%%date:~-10,2%"

rem 'marca' es una etiqueta para el DVD, ie.: 'BAK_20110120'

mkisofs -r -J -V %marca% -v ^
-o /cygdrive/z/imagen.iso ^
-graft-points ^
Backup/"Mis Documentos"="/cygdrive/c/Documents and Settings/Usuario/Mis documentos" ^
Herramientas=/cygdrive/c/test

cdrecord -v -eject dev=1,0,0 /cygdrive/z/imagen.iso

Del script cabría aclarar una par de cosillas:

  1. La “/” se utiliza en vez de la “\”
  2. Para designar los discos en vez de “c” o “z” se utiliza “/cygdrive/z” o “/cygdrive/c”
  3. Se hace uso de las comillas en rutas de disco con espacios, ie.: “/Mis documentos”
  4. Los “graft-points” son la distribución de los contenidos de las carpetas del disco duro, en carpetas que no deben ser necesariamente las mismas de la imagen ISO a crear, esto es:
    Herramientas=/cygdrive/c/test, significaría
    Copia los contenidos de la carpeta “c:\test” a la carpeta de la raiz del DVD “\Herramientas”

De esta manera, un usuario lo único que debe hacer para realizar una copia periódica de sus datos, es insertar un DVD y lanzar el script. Este generará una ISO que automáticamente será “tostada”. Más fácil imposible. ;)