October 14, 2022

hackergotchi for Santiago García Mantiñán

Santiago García Mantiñán

Windows 11 en una máquina vieja vía libvirt en Linux

Entre los requirimientos de Windows 11 están una CPU moderna, arranque EFI seguro y un dispositivo de seguridad TPM versión 2.0. A continuación os comentaré como lo instalé sin trucos en una máquina virtual dentro de una máquina que no tiene ni TPM ni arranque seguro EFI, así que el único requerimiento que cumplía era el tener una CPU algo moderna, con virtualización hardware, claro.

Para poder probar cosas con el Windows 11 en el trabajo he querido instalar Windows 11 como siempre hago con los Windows, es decir, en una máquina virtual dentro del sobremesa, hasta ahora siempre lo he hecho con VirtualBox, es cómodo y cumplía con lo que yo necesito.

Sin embargo en este caso, si queremos instalar Windows 11 sin trucos, necesitaremos un dispositivo de seguridad TPM, que no existe en VirtualBox, así que... he explorado un poco el mundo de libvirt usando por debajo KVM, que sí que nos permite usar un TPM software y el resto de cosas que necesita Windows 11 para funcionar.

He utilizado los paquetes de Bookworm (ahora en testing mientras no se convierte en la nueva estable) para contar con las últimas versiones y no tener que andar haciendo las cosas "a mano" editando los XML y tal, con las versiones de Bookworm se puede hacer todo en plan gráfico sin problema, con versiones anteriores igual también se puede, pero en algunas hay que tocar los XML a mano.

La cosa para mi ha sido instalar por un lado la parte de libvirt, instalé estos paquetes: virt-manager virt-viewer libvirt-daemon-driver-qemu libvirt-daemon-system libvirt-daemon-system-systemd libvirt-daemon-config-nwfilter libvirt-daemon-config-network libvirt-clients gir1.2-spiceclientgtk-3.0

Por otro lado para cumplir con los requerimientos del Windows 11 (TPM y arranque EFI) instalé: swtpm-tools ovmf

En algunas pruebas en alguna máquina muy "barebones" no tenía un polkit adecuado así que le instalé: lxpolkit Esto no será necesario en sistemas normales con interfaz gráfica ya que ya tendrán instalado un polkit, sino... el propio virt-manager os lo indicará con un error, sino... arrancarlo con "--debug"

Entre los requerimientos de Windows 11 están la CPU, que tiene que ser moderna y que el arranque sea EFI, por ello definiremos una nueva máquina en el virt-manager poniendo de arranque la ISO del Windows descargada de MS, dejaremos que detecte el operativo (detecta Windows 10, por ahora no tienen 11, pero nos sirve) y justo al final, antes de darle a finish, activaremos "Customize configuration before install" y ahí le ponemos en "overview" tendremos que cambiar el apartado "firmware" de BIOS a UEFI con arranque seguro (secboot), además iremos a la ventana "CPUs" y eligiremos en "Configuration" la opción "host-passthrough".

Si le dimos a "apply" en las opciones podemos volver a "overview" y comprobar en el xml que nos queda algo como esto:

machine=pc-q35-7.1 cpu mode='host-passthrough' ... firmware UEFI x86_64: /usr/share/OVMF/OVMF_CODE_4M.secboot.fd

El otro requerimiento que tiene Windows 11 y que no suelen cumplir las máquinas menos modernas es el TPM, pero al ser una máquina virtual usamos el TPM software que hemos instalado y listo. Para esto añadimos a la máquina un dispositivo nuevo de tipo TPM y modelo TIS, y listo, ya podemos darle a "Begin installation".

Esta configuración de máquina es con la tarjeta gráfica qxl, cuando terminemos la instalación de Windows será conveniente instalar en el Windows 11 las spice guest tools que podemos descargar de spice-space.org para tener un buen soporte del esta y el resto del hardware.

Una vez instalemos eso apagamos la máquina y en el virtual-manager en la ventana de la máquina virtual Windows 11, seleccionamos "view", "scale display" y marcamos "autoresize vm with window"

Listo, con esto Windows debería reconocer todo el hardware y hacer escalado de la pantalla al tamaño de nuestra ventana.

14 October, 2022 09:03PM by Santiago García Mantiñán (noreply@blogger.com)

May 20, 2020

Trabajando en remoto sobre Debian

La situación actual nos ha llevado a muchos a trabajar en remoto, algo para lo que hay muchas opciones, hablemos de alguna de ellas.

SSH

Es el sistema de acceso remoto por excelencia, lo usamos todos desde siempre, o al menos desde que la seguridad en la red importa, aunque no siempre fuera así, los ancianos del lugar usábamos el telnet, pero mejor no hablar de temeridades, no? ;-)

El secure shell como su propio nombre indica está diseñado para acceder a un shell, es decir, para acceso remoto a un entorno modo texto, pero como ya sabréis permite hacer túneles de todo tipo, desde puertos hasta forwarding de clientes X.

Si bien el SSH nos permite acceder a nuestros clientes X y traerlos hasta el servidor local de nuestro ordenador en casa, resulta que las X no están diseñadas para que el cliente y el servidor estén separados por las latencias de una wan por medio, por lo que aunque tengamos 1 giga de ancho de banda, nuestras aplicaciones X en remoto irán muy lentas, por eso... veamos que podemos utilizar para la parte gráfica...

x2go

Seguro que es el sistema más currado y más complejo para acceso remoto, soporta no sólo Linux, pero... si lo probáis veréis que hace muchas cosas por su cuenta sin contárnoslas, así que uno no deja de preguntarse... ¿para qué es todo esto? Lo tenemos soportado en Debian con paquetes tanto para hacer de servidor como para cliente, aunque ya os digo que a mi me pareció demasiado complejo y poco transparente.

Sin embargo si miramos debajo del capó vemos que utiliza la tecnología de NX que me parece más sencilla y entendible.

NX

Se trata de una tecnología que nos permitirá la utilización de aplicaciones nativas X tal cual, se basa en la proxificación de los clientes X de modo que los eventos no tengan tanta latencia y por lo tanto todo vaya mucho más fluido. Además añadiremos un servidor X en el lado remoto que nos permitirá tener una mejor respuesta y sesiones permanentes.

Su uso es sencillo, veamos un ejemplo, la idea es que accedemos al sistema remoto via ssh -L 4008:localhost:4008 host.remoto (forwardeamos el puerto 4008 que usaremos para el proxy de NX que correremos con :8 o sea usando el puerto 4008) y allí ejecutamos un proxy al que nos conectamos desde localhost a través de este puerto que hemos forwardeado. Esa es la parte de proxificado, pero vamos a añadir el agente que lo que hace es añadir un servidor X local sobre que lanzaremos las aplicaciones X y que nos dará también una sesión permanente que nos permite desconectarnos y conectarnos cuando queramos, veamos esto:

Remoto: nxproxy -C :8 & Local: nxproxy -S localhost:8 & Remoto: nxagent -display nx/:8 -geometry 1276x976 :9 & DISPLAY=:9 startlxqt

En el ejemplo arrancamos el lxqt, pero se puede arrancar lo que sea. Esta sesión sera permanente, ya que como dijimos estamos arrancando un servidor X en el equipo remoto, en este caso el DISPLAY será :9, contra el que irán las aplicaciones X. Aunque apaguemos el equipo local, se corten las comunicaciones o lo que sea, podremos reconectar. Para esto sólo hay que rearrancar las partes del proxy remoto y local y luego avisar al nxagent de que queremos que nos vuelva a mandar el display utilizando por ejemplo:

killall nxagent -HUP

VNC

Que decir de VNC, ha estado ahí desde hace muchos años.

Tenemos el servidor al estilo windows, en el paquete x11vnc que podemos arrancar así: x11vnc -rfbport 5900 -bg -o %HOME/.vnc/x11vnc.log.%VNCDISPLAY -rfbauth ~/.vnc/passwd -display :0 o el tigervnc-scraping-server que al igual que el anterior nos permitirá acceder vía cliente VNC a unas X que estén corriendo, aunque ahora tenemos también la extensión de X tigervnc-xorg-extension que nos dará la misma funcionalidad pero de una manera mucho más eficiente. Estos están bien para ver lo que hay en ejecución en la pantalla de un equipo y por ejemplo ofrecer ayuda remota.

Además tenemos el tigervnc-standalone-server y el tightvncserver que lo que nos permiten es tener todas las sesiones X que queramos (ya que no van atadas a nuestra gráfica ni nada) y accederlas en remoto vía VNC, y por supuesto varios clientes específicos de vnc como tigervnc-viewer y xtightvncviewer además de otros que soportan VNC y otros protocolos.

El handicap de siempre del VNC es que todo va en claro, nada va cifrado, así que necesita sí o sí de SSH o similar para cifrar los datos.

RDP

Este protocolo diseñado por Microsoft tiene ahora tanto servidores como clientes para Linux, requiere mucho menos ancho de banda que VNC y soporta diversos tipos de cifrado, tanto cifrado propio como incluso una capa de TLS.

Al igual que en el caso de VNC tenemos también servidores para acceso a un servidor X ya existente, como el freerdp-shadow-cli en el paquete freerdp2-shadow-x11. Lo podemos lanzar con esta orden para acceder a las X corriendo en :0:

DISPLAY=:0 freerdp-shadow-cli /port:12345

Ya sabéis, como en el caso del VNC, es muy útil para ayuda remota. Si bien es conveniente tener en cuenta este bug ya que hace que nofuncione la autenticación mientras que no lo arreglemos, así que o bien recompilamos o bien añadimos el parámetro -auth, pero entonces cualquiera que tenga acceso al puerto podrá tomar control de la sesión X.

También tenemos clientes como el clásico rdesktop o el xfreerdp del paquete freerdp2-x11 y otros clientes que soportan VNC, RDP y más, como vinagre, de GNOME o remmina.

Pero si lo que queremos es un acceso remoto a un entorno de trabajo Linux persistente tendremos que fijarnos en xrdp, todo un servidor rdp para dar acceso a tantas sesiones de escritorios Linux como queramos, estas sesiones serán permanentes y podremos conectarnos y desconectarnos de las mismas cuando queramos, además soporta sonido, aunque eso requerirá que compilemos los módulos siguiendo estas instrucciones, la reproducción de sonido es estándar, por lo que funcionará en cualquier cliente, pero si queremos mandar nuestro micro al server deberemos utilizar por ejemplo el paquete de rdesktop de buster (lo he probado y funciona) o algún otro compatible, ya que han hecho una implementación no estándar :-(

No voy a hablar de más protocolos (que los hay) pero si quería hablar de algo que me parece muy interesante, un potente cliente web de todos estos protocolos y más...

Guacamole

Esto si que no lo tenemos en Debian, aunque hubo algún intento de paquetización antiguo y probablemente os podáis encontrar todavía por ahí los paquetes viejos, no os los aconsejo porque tienen varios bugs de seguridad. Este cliente es bastante complejo, con diversas partes, basado en java, requiere al menos un tomcat para mover el servidor, ... pero a cambio tendremos acceso a servidores RDP, VNC, ssh, ... con seguridad de dos factores en varios estilos y colores y el cliente no necesitará nada más que un navegador web, algo que nos puede aligerar los requisitos para los trabajadores que tengan que acceder en remoto.

Bueno, eso es todo lo que se ocurre ahora mismo, podéis sugerir otras ideas en los comentarios.

Saludos.

20 May, 2020 09:59PM by Santiago García Mantiñán (noreply@blogger.com)

Alberto Gonzalez Iniesta

Instalar un servidor de videoconferencia libre, Jitsi Meet (V, Configurando Videobridges)

Una vez configurados Prosody y Jicofo, el siguiente elemento (y último necesario para usar Jitsi Meet) será el Videobridge. El Videobridge es un Selective Forwarding Unit (SFU), esto significa que no hace ningún tipo de procesamiento de los flujos de vídeo, simplemente recoje el vídeo de cada participante y lo hace llegar al resto. Esto se traduce en:

  • Gran uso de ancho de banda, cada señal de vídeo que llega debe ser multiplicada por el número de participantes (menos uno, su origen). Si tenemos 5 participantes con cámaras activas, pongamos a 500kbps cada flujo. Tendremos 2.5Mbps de entrada en el videobrige y casi 10Mbps de salida de éste a los clientes. Podemos limitar este tráfico a los clientes con el parámetro channelLastN en la configuración de Jitsi Meet que comentaré más adelante, aliviando la carga en los navegadores.
  • Uso comedido de RAM y CPU. Al no tener que procesar los vídeos, el uso de estos recursos no es alto. Para conferencias con menos de 30-40 participantes, y un número razonable de cámaras abiertas, 1-2 cores y 2-3GB de RAM serán suficientes. Atención: por defecto el Videobridge podría reclamar hasta 3GB de RAM. Podemos limitar esa cantidad (si tenemos menos de 4GB de RAM) usando el parámetro VIDEOBRIDGE_MAX_MEMORY=XXXXm con los megas que queramos, por defecto 3072m, en el fichero /etc/jitsi/videobridge/config.

Dicho esto, podemos correr tantos Videobridge como deseemos, lo que permite escalar en horizontal. Podemos partir de un Videobridge en la misma máquina que Prosody y Jicofo, o dejar éstos en un servidor (con muy pocos requisitos de memoria y CPU) y luego ir añadiendo máquinas con Videobridge.

Configuración de un Videobridge

Al igual que pasaba con Jicofo, tenemos dos ficheros principales de configuración para un Videobridge. De hecho, hay información redundante en ellos. El motivo es que existen varios mecanismos de comunicación (APIs) de los Videobridge con el mundo exterior. Hasta no hace mucho la conexión entre Videobridge y Prosody se hacía registrando el Videobridge como un componente (servicio) en Prosody. Hoy la preferencia es el uso de MUCs (canales). Y de ahí los rastros que van quedando por su configuración.

Empecemos por /etc/jitsi/videobridge/config, donde encontramos parámetros de arranque del proceso y configuración de XMPP como componente:

# Configuración componente XMPP
JVB_HOSTNAME=EXAMPLE.NET
JVB_HOST=MI_SERVIDOR_PROSODY
JVB_PORT=5347
JVB_SECRET=CLAVE_DE_COMPONENTE
# Opciones arranque
JVB_OPTS="--apis=,"
JAVA_SYS_PROPS=".......

El primer grupo de opciones no serían necesarias si no registramos Videobridge como componente. No hay mucho que explicar de ellas y la tendencia del proyecto es usar MUCs.

Si es digna de mención la opción JVB_OPTS. En versiones actuales lleva el valor "--apis=,", que levantará el cliente XMPP (como usuario normal, no componente) por defecto. Antiguamente era necesario especificarlo (con el valor xmpp). También podemos activar un API REST u otro llamado Colibri del que se pueden sacar estadísticas del Videobridge. Por eso es frecuente ver en documentación no muy actual el valor "--apis=rest,xmpp". Salvo que queramos el API REST activo, no es necesario modificar esta variable. Por el MUC, que ahora configuraremos, también se obtienen estadísticas del Videobridge e incluso hay un exportador para prometheus que usa este mecanismo.

El fichero en el que realmente hay que configurar Videobridge en sus versiones más modernas (videobridge2) es /etc/jitsi/videobridge/sip-communicator.properties:

org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443
org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=muc
org.jitsi.videobridge.STATISTICS_INTERVAL=5000
org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=MI_SERVIDOR_PROSODY
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.EXAMPLE.NET
org.jitsi.videobridge.xmpp.user.shard.USERNAME=USUARIO_XMPP
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=CLAVE_XMPP
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=NOMBRE_DEL_JVB
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=lospuentes@internal.auth.EXAMPLE.NET
org.jitsi.videobridge.AUTHORIZED_SOURCE_REGEXP=lospuentes@internal.auth.EXAMPLE.NET/focus.*$
org.jitsi.videobridge.xmpp.user.shard.DISABLE_CERTIFICATE_VERIFICATION=true

Las dos primeras opciones (DISABLE_AWS_HARVESTER y STUN_MAPPING_HARVESTER_ADDRESSES) están relacionada con el protocolo ICE desarrollado por Jitsi y que sirve para gestionar las conexiones que atraviesan NAT. La primera no es relevante salvo que tengamos el servidor en AWS y la segunda deberemos especificarla si nuestro videobridge está detrás de algún NAT (es decir, no tiene una IP pública pero se usará con clientes de fuera de su red local). El servidor especificado en este ejemplo (meet-jit-si-turnrelay.jitsi.net:443) es el que pone la configuración del paquete, pero podríamos usar uno bajo nuestro control para no depender de este servicio externo.

A continuación vienen tres opciones (ENABLE_STATISTICS, STATISTICS_TRANSPORT y STATISTICS_INTERVAL) que indican que queremos las estadísticas, y con que frecuencia (en milisegundos) por el MUC de comunicación con Jicofo. Estas, además de poder exportarse a Prometheus u otra herramienta, permiten que Jicofo tenga conocimiento de la carga en cada uno de los Videobridges permitiendo que balancee correctamente las nuevas conferencias entre ellos.

Luego tenemos toda la configuración del Videobridge como cliente XMPP. La opción HOSTNAME apuntará al servidor XMPP y podrá ser localhost si corre en la misma máquina o tener la IP o nombre de la máquina donde se encuentre Prosody. DOMAIN indica el Virtualhost de Prosody donde se autentican los elementos que conforman Jitsi Meet, normalmente auth.DOMINIO_PRINCIPAL. USERNAME y PASSWORD son las credenciales para registrarse en Prosody, recordar que hay que crear el usuario como vimos anteriormente. Varios, o todos, los videobridge pueden usar el mismo USERNAME y PASSWORD, y la opción MUC_NICKNAME permitirá diferenciarlos posteriormente. Así que podemos crear un usuario por videobridge y usar el mismo nombre como nick, o crear un sólo usuario y que cada videobridge use un nick diferente. Esto último facilitaría la configuración de nuevos videobridge (no sería necesario crear un usuario en Prosody por cada uno). MUC_JIDS indica el nombre del canal (lospuentes) y el componente de MUC (internal.auth.EXAMPLE.NET) donde se comunicaran los videobridges con Jicofo, así que atención a que sea el mismo en Jicofo y todos los videobridge. La última opción importante en esta sección es AUTHORIZED_SOURCE_REGEXP, que indica de donde puede recibir órdenes en videobridge. Cuidado con esta opción, porque una expresión regular errónea no permitiría la creación de conferencias en el videobridge. Casi toda la documentación hasta ahora ponía como ejemplo algo tipo: focus@auth.EXAMPLE.NET./.* Esta sintáxis sólo es válida si se usan componentes XMPP. Ya no es correcta con el uso de MUCs, pese a no estar muy documentado (esto es todo lo que encontré al respecto), y deberemos usar la sintaxis: lospuentes@internal.auth.EXAMPLE.NET/focus.*$, donde lospuentes es el ya sabido nombre del canal, internal.auth.EXAMPLE.NET es el nombre del componente MUC y focus es el nick de Jicofo en XMPP.

Para terminar con la configuración del cliente XMPP del videobride, la opción DISABLE_CERTIFICATE_VALIDATION, como su nombre indica, permite desactivar la validación del certificado SSL que presenta Prosody. Como ya comenté, la instalación del paquete jitsi-meet-prosody, crear unos certificados autofirmados para el dominio auth.DOMINIO_PRINCIPAL. Si no queremos copiar dichos certificados en los videbridge, y su conexión al Prosody es local, podemos usar esta opción para ahorrarnos la tarea.

Con esto terminamos la configuración del videobridge. Para probarlo por completo recomiento una conferencia con al menos tres participantes. El motivo es que con 2 participantes el videobridge «no es realmente necesario», el vídeo irá entre los participantes directamente. Sólo la entrada de un tercer usuario hará que el videbridge se ponga a trabajar de verdad. Y es en ese momento, la entrada del tercero, cuando veremos si está todo OK. Si al entrar el tercer participante las imágenes de todos quedan en negro, hay algo mal configurado. Revisad el log del Videobridge (/var/log/jitsi/jvb.log) y de Jicofo (/var/log/jitsi/jicofo.log) en busca de problemas de comunicación entre ellos. En el del videobrige deberíamos ver algo como:

2020-05-20 12:33:34.980 INFO: [20] [hostname=localhost id=shard] MucClient$MucWrapper.join#751: Joined MUC: lospuentes@internal.auth.EXAMPLE.NET
# Seguido (si habilitamos las estadísticas) de estos:
2020-05-20 12:35:54.636 INFO: [19] AbstractHealthCheckService.run#171: Performed a successful health check

En el de Jicofo, a la entrada del Videobridge, veremos:

org.jitsi.jicofo.bridge.BridgeSelector.log() Added new videobridge: Bridge[jid=lospuentes@internal.auth.EXAMPLE.NET/JVB_NICK, relayId=null, region=null, stress=0.00]

En caso de no verse esta línea «Added new videobridge«, revisa que el nombre del canal sea igual en ambos (Jicofo y videobridge) y que el videobridge se está registrando («Joined MUC«) correctamente. Si todo va correctamente, ya tienes la base. En próximas entradas hablaré del front-end web (Jitsi Meet), Jibri y los famosos tokens.

$ exit

20 May, 2020 10:52AM by Alberto Gonzalez Iniesta

May 10, 2020

Instalar un servidor de videoconferencia libre, Jitsi Meet (IV, Configurando Jicofo)

Una vez tenemos configurado el servidor XMPP, con o sin autenticación, veamos el siguiente componente a configurar: Jicofo. Encargado de repartir las conferencias entre los videobridges disponibles, podemos decir que, junto con Prosody, Jicofo es la pieza central de la arquitectura Jitsi Meet. Además ambas son bastante ligeras y pueden correr juntas, junto con nginx y Jitsi Meet (el cliente web), en una máquina con una CPU y poco más de 1GB de RAM.

Configuración de Jitsi Conference Focus(Jicofo)

Jicofo tiene dos ficheros principales de configuración. El primero, /etc/jitsi/jicofo/config, lleva las opciones que se pasan al demonio en su ejecución (JAVA_SYS_PROP y JICOFO_OPTS) y las de autenticación de Jicofo en Prosody. Son estas últimas las que normalmente tocaremos (o tocará el paquete Debian en su instalación). Se trata de:

JICOFO_HOST=localhost
JICOFO_HOSTNAME=EXAMPLE.NET
JICOFO_SECRET=SECRETO
JICOFO_PORT=5347
JICOFO_AUTH_DOMAIN=auth.EXAMPLE.NET
JICOFO_AUTH_USER=focus
JICOFO_AUTH_PASSWORD=CLAVE

JICOFO_HOST, yo hubiera usado otro nombre para esta variable, es el servidor XMPP al que se conectará Jicofo. «localhost» será el valor de esta variable si ejecutamos Prosody en la misma máquina que Jicofo. En otro caso será el nombre o IP del servidor Prosody y, salvo que uses en Prosody un certificado SSL válido universalmente, tendrás que copiar los certificados de Prosody para tu dominio (normalmente en /var/lib/prosody/EXAMPLE.NET.crt y auth.EXAMPLE.NET.crt) al directorio /usr/local/share/ca-certificates/ del servidor con Jicofo y ejecutar update-ca-certificates en él para que sea reconocido por Jicofo.

Jicofo se registra, a día de hoy, de dos maneras en el servidor XMPP:

1.- Como un usuario normal. Cuyos datos son JICOFO_AUTH_DOMAIN, el dominio donde se registran todos los componentes (auth.EXAMPLE.NET), JICOFO_AUTH_USER y JICOFO_AUTH_PASSWORD. Estos datos, así como la creación del usuario en Prosody, suelen cumplimentarse por la instalación del paquete Debian. Si lo haces manualmente, puedes comprobar que son correctos, o crearlos como se indica, en el directorio de usuarios de Prosody. Si decidieras cambiar el nombre de usuario, «focus» por defecto, ten en cuenta que es el administrador de algunos componentes en Prosody y tendrás que corregir esa configuración.

2.- Como un «componente», un servicio dentro del propio servidor XMPP. El nombre del servicio será focus.EXAMPLE.NET (no confundir con el usuario: focus.auth.EXAMPLE.NET). Los datos de este registro son JICOFO_HOSTNAME (al que añadirá focus. para el nombre del servicio) y JICOFO_SECRET. Que deberán de coincidir con la configuración en Prosody:

Component "focus.EXAMPLE.NET"
  component_secret = "SECRETO"

El segundo de los ficheros de configuración, /etc/jitsi/jicofo/sip-communicator.properties, indica el nombre «del canal» o sala donde se reunirán los diferentes componentes (videobridges y Jibris):

org.jitsi.jicofo.BRIDGE_MUC=lospuentes@internal.auth.EXAMPLE.NET
# OPCIONALES, sólo si se usan Jibris:
org.jitsi.jicofo.jibri.BREWERY=losgrabadores@internal.auth.EXAMPLE.NET
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

internal.auth.EXAMPLE.NET es un componente MUC (Multi-User Chat) de Prosody que ya vimos. Cuando configuremos los videobridges y Jibris, deberemos indicar estos nombres de canales en su configuración, sólo así sabrá Jicofo de su existencia.

Una nota importante. Como podréis deducir de quién se registra dónde, es importante el orden en el que se arrancan (o reinician en caso de cambios de configuración) los servicios. El primero en arrancar debe ser Prosody, seguido de Jicofo y por último el resto de componentes. De no hacerlo así se pueden sufrir comportamientos extraños.

$ exit

10 May, 2020 06:29PM by Alberto Gonzalez Iniesta

May 02, 2020

Instalar un servidor de videoconferencia libre, Jitsi Meet (III, Autenticación de asistentes con LDAP)

Posiblemente uno de los motivos de mayor peso para instalar una instancia propia de Jitsi Meet es poder controlar/limitar quien accede a ella. Veremos en este artículo como requerir autenticación a los usuarios que se conectan usando LDAP para ello.

Autenticación de usuarios con LDAP (PAM, SQL, …)

Existen varias alternativas para la autenticación de usuarios con LDAP: mod_auth_ldap, mod_auth_ldap2 y el elegido por Jitsi en su paquetería: cyrus. Cyrus es una implementación del estándar SASL que abstrae el servicio de autenticación (LDAP en este caso) del consumidor del mismo (Prosody), por lo que en realidad usando SASL podríamos usar cualquier tipo de «backend» para validar usuarios (PAM, SQL,…). Los cambios necesarios en la configuración de nuestro VirtualHost principal (EXAMPLE.NET) serían:

Donde dice:
  authentication = "anonymous"

Dirá:
  authentication = "cyrus"
  cyrus_application_name = "xmpp"
  allow_unencrypted_plain_auth = true

Además añadiremos está línea en el bloque "modules_enabled":
  "auth_cyrus";

La opción cyrus_application_name indicará la configuración a usar por saslauthd para autenticar los usuarios. Mientras que la opción allow_unencrypted_plain_auth = true permite un mecanismo de autenticación inseguro (claves en claro) que sospecho es necesaria para dar soporte al cliente (javascript) de Jitsi Meet que no soporta otros mecanismos SASL como CRAM-MD5 o GSSAPI. Si configurasteis c2s_require_encryption = true, no debería ser un problema. En otro caso podrían viajar contraseñas en claro entre el servidor web y Prosody.

Lo siguiente será configurar saslauthd para prestar servicio a Prosody. Para ello instalaremos los siguientes paquetes (o sus correspondientes en distribuciones no Debian):

apt install sasl2-bin libsasl2-modules-ldap lua-cyrussasl

En el fichero de configuración de arranque de saslauthd (/etc/default/saslauthd) activaremos el arranque y configuraremos LDAP como «backend» para la autenticación:

START=yes
MECHANISMS="ldap"

Luego editaremos la configuración LDAP del saslauthd (/etc/saslauthd.conf). Por ejemplo para usar Autenticación Simple (conectar con el servidor LDAP usando las credenciales proporcionadas por el cliente):

ldap_servers: ldaps://IP_O_NOMBRE_SERVIDOR_LDAP/
ldap_search_base: ou=people,dc=EXAMPLE,dc=NET
ldap_filter: (uid=%u)
ldap_version: 3
ldap_auth_method: bind

Por último crearemos el fichero de configuración SASL para el servicio xmpp, el nombre de este fichero debe coincidir con el especificado en Prosody como cyrus_application_name. En este caso será /etc/sasl/xmpp.conf y su contenido será:

pwcheck_method: saslauthd
mech_list: PLAIN

Además debemos añadir al usuario prosody en el grupo sasl para que tenga acceso al socket de comunicación con el demonio saslauthd (en /run/saslauthd/):

# adduser prosody sasl

Después de editar todos estos ficheros será necesario reiniciar tanto Prosody como saslauthd:

# systemctl restart saslauthd
# systemctl restart prosody

Antes de seguir, os recomiendo que probéis al menos el funcionamiento de saslauthd para que en caso de problemas de autenticación podamos descartar esa parte. Un simple comando valdrá:

# testsaslauthd -u USUARIO -p CLAVE -f /var/run/saslauthd/mux

Sí, lo sé… contraseñas en línea de comando. No hay nada perfecto. Si pasamos la prueba, podemos seguir con la configuración.

Desde este momento, todos los usuarios tendrán que autenticarse para unirse a una conferencia. Pero es posible que también deseemos que usuarios anónimos se unan (a una sala creada), dejando la autenticación como requisito para crear una sala nueva y dar privilegios de moderador.

Dejar unirse, como invitados, a usuarios no autenticados (Secure Domain)

Tendremos hacer unos cambios en Jitsi Meet, Prosody y Jicofo para que los usuarios anónimos entren bajo un Virtualhost diferente en Prosody. Empezando por Prosody, añadiremos lo siguiente a nuestro fichero de configuración:

VirtualHost "invitados.EXAMPLE.NET"
  authentication = "anonymous"
  c2s_require_encryption = false

Como vemos, en este Virtualhost no hay autenticación. Luego habrá que informar a Jitsi Meet de este dominio para los usuarios que no se autentican. En su fichero de configuración (/etc/jitsi/meet/EXAMPLE.NET-config.js):

# Descomentar la siguiente línea:
anonymousdomain: 'invitados.EXAMPLE.NET',

Por último habrá que decirte a Jicofo (encargado de la creación de salas) que sólo los usuarios de nuestro dominio con autenticación pueden crear salas/ser moderadores. En /etc/jitsi/jicofo/sip-communicator.properties:

# Añadir la línea
org.jitsi.jicofo.auth.URL=XMPP:EXAMPLE.NET

No olvidéis reiniciar Prosody y Jicofo después de todos estos cambios. En próximas entregas hablaré de la configuración del resto de componentes y de la autenticación con tokens, que permite una integración con aplicaciones de terceros como Moodle.
$ exit

02 May, 2020 08:26AM by Alberto Gonzalez Iniesta

April 28, 2020

Instalar un servidor de videoconferencia libre, Jitsi Meet (II, Configuración de Prosody)

Una vez conocidos los componentes, veremos ahora la configuración de los mismos. Mi objetivo no es tanto dar unas instrucciones paso a paso, sino explicar que partes de la configuración sirven para qué propósito y qué opciones tenemos en función de las características que deseemos en nuestra instalación.

Prosody (autenticación de usuarios y componentes Jitsi)

Los paquetes Debian que proporciona el proyecto Jitsi crean un fichero de configuración con todo lo relacionado con Jitsi. Esto permite evitar cambios en el fichero principal y aislar la configuración propia de Jitsi de otra configuración que ya pudiéramos tener en Prosody. Entiendo, por tanto, que tendremos un fichero /etc/prosody/conf.avail/EXAMPLE.NET.cfg.lua y que habrá un enlace simbólico a este fichero desde /etc/prosody/conf.d/EXAMPLE.NET.cfg.lua. Donde EXAMPLE.NET será el dominio de nuestra instalación (p.e. meet.inittab.org).

La (falta de) autenticación de usuarios

Como ya hemos comentado, Prosody es el encargado de la autenticación de usuarios. Ésta se configura en un VirtualHost que llevará por nombre el mismo que nuestro dominio. El siguiente ejemplo permite la entrada de cualquier usuario en nuestro Jitsi Meet, es decir no realiza autenticación de usuarios:

VirtualHost "EXAMPLE.NET"
  authentication = "anonymous"
  ssl = {
    key = "/etc/prosody/certs/EXAMPLE.NET.key";
    certificate = "/etc/prosody/certs/EXAMPLE.NET.crt";
  }
  speakerstats_component = "speakerstats.EXAMPLE.NET"
  conference_duration_component = "conferenceduration.EXAMPLE.NET"
  modules_enabled = {
    "bosh";
    "pubsub";
    "ping";
    "speakerstats";
    "turncredentials";
    "conference_duration";
  }
  c2s_require_encryption = false

Antes de ver las opciones de autenticación, quería hacer dos puntualizaciones sobre la configuración creada por el paquete «jitsi-meet-prosody«. Éste genera una clave y certificado autofirmado (los que están en /etc/prosody/certs) y deshabilita la obligación de usar TLS en las conexiones de clientes (c2s_require_encryption = false). Aunque pueda parecer inseguro, la realidad es que nuestras credenciales ya viajan seguras por la conexión HTTPS con el servidor web. Si quisiéramos cubrir el tramo entre nuestro servidor web y Prosody, podríamos configurar un certificado válido, por ejemplo de Let’s Encrypt y activar (true) la opción c2s_require_encryption:

  ssl = {
    key = "/etc/letsencrypt/live/EXAMPLE.NET/fullchain.pem";
    certificate = "/etc/letsencrypt/live/EXAMPLE.NET/privkey.pem";
  }
  c2s_require_encryption = true

En posteriores artículos veremos como limitar el acceso a nuestra instancia de Jitsi Meet autenticando usuarios.

El siguiente bloque define un componente en Prosody para la creación de las salas/conferencias (muc: Multi User Conference) que usará Jitsi Meet:

Component "conference.EXAMPLE.NET" "muc"
  storage = "memory"
  modules_enabled = {
    "muc_meeting_id";
    "muc_domain_mapper";
  }
  admins = { "focus@auth.EXAMPLE.NET" }
  muc_room_locking = false
  muc_room_default_public_jids = true

En él vemos que focus@auth.EXAMPLE.NET, el usuario que usa Jicofo, será el administrador de las salas. Este bloque será modificado cuando usemos autenticación con «tokens» para gestionar los moderadores y participantes en las salas.

Otro bloque similar es el que usan los diferentes componentes de Jitsi Meet para comunicarse entre ellos (informar de que videobridges y jibris están disponibles y cual es su carga para que Jicofo decida en qué videobridge crear nuevas salas o qué Jibri se encargará de una petición nueva de grabación):

Component "internal.auth.EXAMPLE.NET" "muc"
  storage = "memory"
  modules_enabled = {
    "ping";
  }
  admins = { "focus@auth.EXAMPLE.NET" }
  muc_room_locking = false
  muc_room_default_public_jids = true

También vemos que el usuario de Jicofo es el administrador de este muc.
Los usuarios de los componentes de Jitsi Meet no se autentican en el dominio principal (EXAMPLE.NET) sino en uno propio (auth.EXAMPLE.NET). Esto permite que podamos cambiar la configuración de autenticación para los asistentes, en el dominio principal, sin afectar a la autenticación de los componentes, que se hace en el dominio auth.EXAMPLE.NET:

VirtualHost "auth.EXAMPLE.NET"
  ssl = {
    key = "/etc/prosody/certs/auth.EXAMPLE.NET.key";
    certificate = "/etc/prosody/certs/auth.EXAMPLE.NET.crt";
  }
  authentication = "internal_plain"

Una vez más vemos que los certificados usados para este VirtualHost son autofirmados y creados por la instalación del paquete «jitsi-meet-prosody«.
Si bien este dominio no tiene por qué existir en el DNS, y por tanto no disponer de un certificado válido, si será necesaria la propagación del certificado (en los directorios /usr/local/share/ca-certificates) a los servidores adicionales a éste que ejecuten videobridges, jibris o jigasi si queremos que verifiquen la identidad del servidor Prosody cuando se autentiquen en él. De otra manera tendremos que usar una opción en ellos para deshabilitar la comprobación de este certificado (TODO: aquí vendrá el enlace a esa opción cuando esté su artículo).

La autenticación en este VirtualHost, authentication = "internal_plain", se realiza de forma local por Prosody. Por este motivo los usuarios de los componentes deben ser dados de alta con la herramienta prosodyctl. Para los componentes instalados en el mismo servidor que Prosody, esto se hace automáticamente por la paquetería de Debian.
Pero si instalamos componentes en otros servidores deberemos hacerlo nosotros manualmente. Veamos como.

Prosody mantiene un directorio por cada VirtualHost que tiene autenticación "internal_plain", en nuestro caso (auth.EXAMPLE.NET) podemos verlo así:

# ls -s /var/lib/prosody/auth%2eEXAMPLE%2eNET/accounts/ -l
total 16
-rw-r----- 1 prosody prosody 40 Apr 27 18:37 focus.dat
-rw-r----- 1 prosody prosody 34 Apr 27 18:37 jvb.dat
-rw-r----- 1 prosody prosody 40 Apr 27 18:38 prometheus.dat

En el nombre del directorio (y en los ficheros que contenga) se codifican, en código porciento, los caracteres especiales como puntos o guiones. Por eso el nombre «feo» del directorio. Dentro de él vemos un fichero con cada usuario registrado en este VirtualHost. Para dar de alta un usuario, para un componente nuevo, usaremos el siguiente comando:

# prosodyctl register USUARIO auth.EXAMPLE.NET CLAVE

Queda alguna configuración más que comentar, para usuarios invitados cuando usemos autenticación de participantes, o para la autenticación especial de Jibris, pero la veremos más adelante.

Con este artículo espero que se entienda, más o menos, el papel de Prosody uniendo el resto de piezas y las posibilidades de «fortificarlo» más de querer ser extrictos con la seguridad. En el próximos artículos veremos la autenticación de usuarios mediante LDAP.

Aprovecho para recordaros que en el Playbook de Ansible de la UDIMA para Jitsi Meet todas las tareas de instalación y configuración están automatizadas y casi podríais ahorraros leer estos peñazos que escribo 🙂
$ exit

28 April, 2020 08:15AM by Alberto Gonzalez Iniesta

April 24, 2020

Instalar un servidor de videoconferencia libre, Jitsi Meet (I, la teoría)

Últimamente parece que las videoconferencias se han puesto de moda, como el papel higiénico. Y si bien hay muchas alternativas, la inmensa mayoría podrían no respetar tu privacidad y algunas tienen un historial de problemas de seguridad que asusta.

Por suerte hay una alternativa plenamente funcional y libre: Jitsi Meet.

No necesitas nada para usar Jitsi Meet*

* Salvo un navegador actual o su aplicación móvil/de escritorio

Si no tienes medios (servidor, ancho de banda, ganas de complicarte la vida), puedes usar su servicio público que funciona estupendamente. Es muy sencillo, simplemente dale un nombre a tu conferencia y pasa la URL resultante (por ejemplo: https://meet.jit.si/UnPingüino) a todos los participantes que quieras invitar.

Evita, eso sí, nombres fáciles o comunes («pepe», «prueba», «test») para la conferencia o puede que entre más gente de la que esperas, ya que las conferencias en el servidor público no limitan quien entra en ellas.

Pero si lo que quieres es no depender de terceros, controlar quien puede entrar en tus conferencias, o proteger tu privacidad, puedes instalar Jitsi Meet en un servidor propio. Y a eso es a lo que hemos venido.

Las piezas del puzzle

Nada es perfecto, y si en algo peca(ba) Jitsi Meet es en su documentación. Tal era la situación que salió un proyecto paralelo sólo para documentarlo: EasyJitsi
Os recomiendo echarle un ojo para tener más información.

Lo primero que debemos hacer antes de montar Jitsi Meet es entender que piezas lo componen y para que sirven cada una de ellas.

Prosody

Aunque no es parte del proyecto Jitsi, Prosody es una de las piezas más importantes de esta arquitectura. Se trata de un servidor XMPP. O en términos más claros; un servidor de mensajería instantánea.
XMPP es un grupo de protocolos que definen y permiten todas las características esperables en un servicio de mensajería: autenticación de usuarios, conversaciones con varios participantes (rooms/canales), envío de ficheros, … Es el protocolo sobre el que se construye Google Talk / Hangouts / Chat, aunque Google decidiera no usar el estándar para interoperar con otras implementaciones XMPP. Pero tranquilos, con más de 1.500 millones de usuarios de Gmail pronto tampoco tendrá que intercambiar correo con nadie que no sean ellos y podrá inventarse las extensiones que lo mejoren y liberen de viejos estándares. ¡Hala!, ya me despaché. Sigamos…

Prosody será el encargado de autenticar al resto de componentes de Jitsi Meet y, en caso de quererlo, a los usuarios que se conecten a nuestro servicio de Meet. Además gestiona la comunicación entre componentes y usuarios. Por ejemplo permitiendo que Jicofo sepa de la existencia de videobridges y Jibris en servicio.

Jicofo (Jitsi Conferenre Focus)

Es el encargado de dirigir la orquesta. Lleva el control de los recursos, decide en que videobridge se hospeda una conferencia (en función de la carga de los disponibles) o que Jibri será el que transmitirá (a Youtube, por ejemplo) o grabará la sala que lo así solicite.

Videobride

Es el encargado de recibir y hacer llegar los flujos de audio y vídeo a los participantes de una conferencia. Aunque en una conferencia de dos personas es posible que los vídeos vayan de un a otro participante directamente, sin mediar el videobridge, en cuanto los participantes son tres o más, todos envían su señal de vídeo al videobridge, que la repite al resto de participantes.

Este funcionamiento es además característica fundamental de Jitsi Meet. Los videobridge no mezclan vídeo, según llega de un cliente sale al resto. Eso se traduce en menos latencia, al no perder tiempo procesando vídeo, a costa de un uso alto (con muchos participantes) de ancho de banda. Por ejemplo, y dependiendo de la calidad que usemos, si tenemos 10 participantes, con la cámara abierta, enviando vídeo a 3Mbps, además de estar recibiendo 30Mbps estaría sacando unos 300Mbps de tráfico.

Jibri (Jitsi BRoadcasting Infrastructure)

Permite grabar, en disco o nube, o retransmitir a Youtube (por ahora) una sesión. Está compuesto por varios componentes: el propio Jibri que se conecta con prosody para recibir las órdenes de grabación de Jicofo, un navegador Chrome que se conecta como un usuario más a la sesión que grabará, y ffmpeg que se encarga de codificar el vídeo final.

Una característica a tener en cuenta de Jibri es que una sola instancia es capaz de grabar una sola sesión. Así que si quieres grabar más de una simultáneamente necesitarás tener más de un servidor/docker con Jibri.

Un servidor web y Jitsi Meet

Jitsi Meet, propiamente dicho, sería la parte frontal de todo el invento. Es una aplicación en Javascript que estará alojada en un servidor web. En el momento que escribo esto, nginx el servidor mejor soportado por Jitsi Meet para hacer este trabajo.

Otros componentes

Opcionalmente, en las últimas versiones, se puede instalar/configurar un servidor TURN/STUN para facilitar las comunicaciones de clientes detrás de NAT. De no hacerlo se pueden usar servidores públicos, en principio sin grandes compromisos (a mi entender) salvo la dependencia en la disponibilidad del servicio.

Jigasi es la última pieza del puzzle. Este componente permite integrar Jitsi Meet con una centralita de Voz IP. Ya sea para realizar llamadas desde una conferencia en curso (Meet ordena a Jigasi llamar) o para que participantes puedan unirse a una conferencia a través de una llamada telefónica (la centralita de Voz IP dirige las llamadas a Jigasi que las hace llegar a Jitsi Meet).

En la próxima entrega entraré en más detalle sobre la configuración de cada uno de ellos. Si os corre prisa echarlo a andar podéis usar su instalación docker, pegaros con sus paquetes, o probar el «playbook» de Ansible que la Universidad a Distancia de Madrid (UDIMA) ha publicado en su Github. Y sí, puede que yo tenga algo que ver con esto último 😛

24 April, 2020 05:05PM by Alberto Gonzalez Iniesta

June 24, 2019

Laura Arjona

Instalación de DNI electrónico (DNIe) en Debian 10 Buster

Realicé una instalación desde cero de Debian 10 Buster en una de mis máquinas y aún no había instalado el DNI (Documento nacional de Identidad) electrónico para hacer gestiones con las administraciones públicas españolas, así que me he puesto hoy a ello.
Ha sido relativamente sencillo.

1.- Paquetes necesarios para el lector y gestión de la entrada del PIN (tengo instalado KDE Plasma, y ya tenía pinentry-qt instalado)

sudo apt-get install pcscd pcsc-tools opensc

2.- Comprobar que el lector funciona: pinchar el lector USB con el DNI metido, y escribir

pcsc_scan

Esta es la salida que me proporciona:

$ pcsc_scan

Using reader plug'n play mechanism
Scanning present readers...
0: C3PO LTC31 v2 00 00
 
Mon Jun 24 12:35:44 2019
 Reader 0: C3PO LTC31 v2 00 00
  Event number: 0
  Card state: Card inserted, Shared Mode, 
  ATR: 3B 7F 96 00 00 00 6A 44 4E 49 65 10 01 01 55 04 21 03 90 00

ATR: 3B 7F 96 00 00 00 6A 44 4E 49 65 10 01 01 55 04 21 03 90 00
+ TS = 3B --> Direct Convention
+ T0 = 7F, Y(1): 0111, K: 15 (historical bytes)
  TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU
    250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 00 6A 44 4E 49 65 10 01 01 55 04 21 03 90 00
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: A (pre-issuing data)
      Data: 44 4E 49 65 10 01 01 55 04 21
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 03 (Initialisation state)
      SW: 9000 (Normal processing.)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 7F 96 00 00 00 6A 44 4E 49 65 10 01 01 55 04 21 03 90 00
3B 7F 96 00 00 00 6A 44 4E 49 65 10 01 01 55 04 .. 03 90 00
        DNIE Spain (eID)
        http://www.dnielectronico.es/PortalDNIe/

Salgo con Ctrl+C y desconecto el lector de DNI.

3.- Instalar el paquete de DNI electrónico, para Debian: vamos a usar los de Debian Stretch, porque aún no hay paquetes para Buster disponibles.

$ wget https://www.dnielectronico.es/descargas/distribuciones_linux/libpkcs11-dnie_1.5.0_amd64.deb

Compruebo que la suma de comprobación es correcta:

$ md5sum libpkcs11-dnie_1.5.0_amd64.deb 
526cb7761f312f2beb97344cc74f3dcc  libpkcs11-dnie_1.5.0_amd64.deb

Instalo

$ sudo dpkg -i libpkcs11-dnie_1.5.0_amd64.deb

Aquí se instala el paquete pero luego da un error porque intenta abrir Firefox como root, cosa que el sistema no deja.

He mirado los contenidos del paquete y realmente lo que se hace es llamar a un script en Perl que es el que lanza Firefox, así que lo llamo como usuario normal:

$ /usr/share/libpkcs11-dnietif/launch.pl

Se abre Firefox y hay que seguir las instrucciones de la página web que aparece (file:///usr/share/libpkcs11-dnietif/launch.html) para cargar el módulo de seguridad de DNIe, y la autoridad de certificación FNMT (yo he cargado solamente el módulo de seguridad, porque creo que la FNMT ya la incorpora Firefox). Si veo que algo falla volveré aquí, terminaré las instrucciones, y actualizaré este artículo.

Una vez hecho esto, cierro Firefox, lo vuelvo a abrir, entro en una web que me pida el DNIelectrónico, y compruebo que funciona.

24 June, 2019 10:45AM by larjona

May 11, 2017

Instalación de DNI electrónico (DNIe) en Debian 9 Stretch

Realicé una instalación desde cero de Debian 9 Stretch en uno de mis portátiles y aún no había instalado el DNI (Documento nacional de Identidad) electrónico para hacer gestiones con las administraciones públicas españolas, así que me he puesto hoy a ello.
Ha sido relativamente sencillo.

1.- Paquetes necesarios para el lector y gestión de la entrada del PIN

sudo apt-get install pcscd pcsc-tools pinentry-qt pinentry-qt4 opensc opensc-pkcs11

Nota: hay varios paquetes pinentry disponibles para los distintos escritorios/gestores de ventana, yo como uso Plasma de KDE, pues uso los basados en Qt.

2.- Comprobar que el lector funciona: pinchar el lector USB con el DNI metido, y escribir

pcsc_scan

Esta es la salida que me proporciona:

$ pcsc_scan
PC/SC device scanner
V 1.4.27 (c) 2001-2011, Ludovic Rousseau 
Compiled with PC/SC lite version: 1.8.17
Using reader plug'n play mechanism                                                           
Scanning present readers...                                                                  
0: C3PO LTC31 v2 00 00                                                                       
                                                                                             
Thu May 11 19:04:04 2017                                                                     
Reader 0: C3PO LTC31 v2 00 00                                                                
  Card state: Card inserted,                                                                 
  ATR: 3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00                           
                                                                                             
ATR: 3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00                             
+ TS = 3B --> Direct Convention                                                              
+ T0 = 7F, Y(1): 0111, K: 15 (historical bytes)                                              
  TA(1) = 38 --> Fi=744, Di=12, 62 cycles/ETU                                                
    64516 bits/s at 4 MHz, fMax for Fi = 8 MHz => 129032 bits/s                              
  TB(1) = 00 --> VPP is not electrically connected                                           
  TC(1) = 00 --> Extra guard time: 0                                                         
+ Historical bytes: 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00                             
  Category indicator byte: 00 (compact TLV data object)                                      
    Tag: 6, len: A (pre-issuing data)
      Data: 44 4E 49 65 20 02 4C 34 01 13
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 03 (Initialisation state)
      SW: 9000 (Normal processing.)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00
3B 7F 38 00 00 00 6A 44 4E 49 65 [1,2]0 02 4C 34 01 13 03 90 00
        DNI electronico (Spanish electronic ID card)
        http://www.dnielectronico.es

Salgo con Ctrl+C y desconecto el lector de DNI.

3.- Instalar los paquetes de DNI electrónico, para Debian: vamos a usar los de Debian Jessie, porque aún no hay paquetes para Stretch disponibles.

wget https://www.dnielectronico.es/descargas/distribuciones_linux/Debian-64bits/Debian_%208%20Jessie_libpkcs11-dnie_1.4.0_amd64.deb

$ sudo dpkg -i ./Debian_\ 8\ Jessie_libpkcs11-dnie_1.4.0_amd64.deb 

Se abre Firefox y hay que seguir las instrucciones de la página web que aparece, para cargar el módulo de seguridad de DNIe, y la autoridad de certificación FNMT.

Una vez hecho esto, cierro firefox. En el terminal indica que la instalación del paquete terminó con errores pero no tiene importancia. Vuelvo a conectar el lector del DNI con el DNI metido. Abro Firefox y compruebo que funciona.

11 May, 2017 05:41PM by larjona

July 12, 2015

Un paseo por XMPP

Si tienes trato conmigo, me habrás oído hablar algo de Jabber/XMPP.

¿Te vienes a dar un paseo por la mensajería instantánea libre?

Jabber/XMPP

Es un protocolo de comunicación, como el correo electrónico o el FTP.
Antes se llamaba Jabber, ahora se llama XMPP 🙂
Permite la mensajería instantánea entre dispositivos usando internet (ordenadores, móviles, otros aparatos).
Permite charlar persona a persona y también en grupo.

El estándar es abierto y funciona con un servidor donde se crean las cuentas, y programas clientes (para ordenador o móvil) que sirven para enviar/recibir los mensajes. Te puedes comunicar con personas que tengan cuenta en un servidor XMPP distinto al tuyo (como en el caso del correo, tu servidor le pasará el mensaje al servidor del destinatario, que lo entregará).

Se puede usar con software libre (y gratuito) tanto en el lado del servidor como en los programas clientes, y permite el uso de cifrado punto a punto, para que ni los servidores ni los “mirones” vean el contenido de los mensajes.

Buena pinta ¿eh?

Registrarse

Mi cuenta es larjona@jabber.org

Me hice la cuenta hace algún tiempo y ese servidor está algo saturado, así que a la familia y amigos ahora les recomiendo otros, por ejemplo mijabber.es. Si quieres buscar otro diferente, tienes una lista con muchos servidores aquí: https://xmpp.net/directory.php

Para registrarse, puedes ir con un navegador web a la página del servidor y crear la cuenta, o puedes usar algún programa cliente que permita el registro automático (esto último no lo he probado).

Elige tu servidor, y elige un apodo que esté libre. Y ya está (bueno, algún servidor puede que te pida un correo electrónico para poder recuperar tu contraseña si se te olvida, o algún otro dato personal. Tú decides).

Programas clientes

Hay clientes para muchos sistemas operativos distintos.

También, muchos servidores, ofrecen un cliente web, para no tener que instalar nada. Por ejemplo: https://mijabber.es/jappix/

En GNU/Linux, Android, e iOS, usa el repositorio oficial para instalar el que quieras (puedes tener varios, si quieres). En Windows/OS X, visita las páginas web de los proyectos para descargar los ejecutables.

Yo uso Xabber en mi móvil (Android 2.x), y Conversations esporádicamente en mi tableta (Android 4.x). También he probado Tigase y Yaxim. Todos disponibles en F-Droid.

En el ordenador (con Debian), he probado varios: Psi, Psi+, Jitsi. Tengo pendiente probar Gajim.

En Windows sólo he probado Jitsi, pero conozco gente que usa Gajim o Pidgin.

Algunos clientes tienen estructura modular, y hay que instalar complementos para poder usar el cifrado, o la videollamada, u otras funciones avanzadas.

Chatear, y grupos

Una vez hemos instalado el cliente, iniciamos sesión con nuestra cuenta identificativa o JID, por ejemplo pepita.pulgarcita@mijabber.es y la contraseña.
Podemos añadir contactos (indicando sus JID), y se enviará una solicitud de autorización al contacto. También podemos entrar en grupos, (según el cliente que uses, verás que los llaman “grupos”, “salas”, “conferencias”, o MUC (“multi user chat”)). Por ejemplo en la sala redeslibres@salas.mijabber.es (haz clic y echarás un ojo ahora mismo desde el navegador) o crear tú uno en un servidor que permita la creación de grupos (salas.mijabber.es es uno de ellos, simplemente creas un nuevo nombre como “familiadepepitapulgarcita@salas.mijabber.es” y ya).

Cuando nos unimos a una sala de charla, podemos usar un apodo diferente, invitar a gente, proteger la sala con contraseña, y otras cosas.

En la conversación uno a uno, podemos activar el cifrado OTR, llamada de voz, o videollamada, si nuestro cliente y el de nuestro interlocutor lo soportan.

Envío de archivos

El estándar XMPP permite enviar/recibir archivos de dos maneras diferentes, y cada servidor y programa cliente decide de cuál manera lo hacen. Esto es un poco problemático, porque tú con tu cliente y tu cuenta en tu servidor podrás enviar archivos y quizá el servidor del receptor o el cliente no admite ese método… es cuestión de ponerse de acuerdo.

En general, los clientes de escritorio permiten el envío de archivos, y algunos clientes móviles (Conversations) también.

El método que funciona en todo caso es subir el archivo a algún sitio y proporcionar a tu interlocutor o interlocutores la URL 😉 Pero no te des por vencido/a, haz pruebas y actualiza frecuentemente tus clientes porque esta situación está evolucionando para bien.

Derivados

Existen aplicaciones que utilizan XMPP pero no son del todo compatibles, porque han adaptado el sistema a sus necesidades.

Kontalk

Un ejemplo de derivado libre es Kontalk (a partir de la versión 3, versiones anteriores no usaban XMPP).

El servidor es XMPP, pero el programa crea la cuenta de usuario aplicando una función “hash” al número de teléfono del usuario, con lo que se obtiene un JID algo complicado, tipo aedc28ed561209dfa98dee@beta.kontalk.net, y ése es el JID que tienes que decir a tus contactos que usan XMPP estándar para que te agreguen… Porque además el cliente de Kontalk no permite agregar contactos manualmente (aún), sólo usando la lista de números de teléfono. Además, no es posible hoy por hoy iniciar sesión con tu JID de Kontalk usando otro cliente XMPP, porque Kontalk usa cifrado GPG con un par de claves, en lugar de contraseña. Así que los usuarios de Kontalk, en la práctica, sólo pueden usar la aplicación de Kontalk para comunicar.

Kontalk, por ahora, no permite grupos, aunque se está trabajando en ello (así como en mejorar el sistema para que se puedan usar otros clientes XMPP para comunicarse).

El código del servidor y del cliente es libre, por lo que es posible, por un lado, instalar más servidores para crear una red federada como la XMPP estándar, y por otro, como sabemos, se puede adaptar y mejorar todo el sistema (de hecho, el desarrollo es comunitario, con 2 personas dirigiendo el proyecto y una comunidad bastante activa).

Whatsapp

Un ejemplo de derivado no libre es Whatsapp.

Han adaptado el servidor, cliente y protocolo para que se registren las cuentas automáticamente mediante el número de teléfono (de forma similar a como hemos explicado con Kontalk), y al no estar el código fuente disponible, es difícil saber cómo lo han hecho, y si han hecho más cosas. Han eliminado prácticamente cualquier posibilidad de control por parte del usuario: el usuario no puede saber su JID, tampoco puede especificar otro servidor para usar, y aunque se averiguara el JID, por acuerdo de términos de servicio, no puede usar otra aplicación distinta a la “oficial” para conectarse. Así, la empresa proveedora se ha reservado para sí todo el control. Todas las cuentas están en el mismo servidor, y usan el mismo cliente, y el usuario no puede cambiar nada; se asegura entonces el funcionamiento del envío de archivos (aunque éste se limita a sólo archivos de determinados tipos) y se asegura que todas las comunicaciones pasan por el servidor de Whatsapp, lo que permite controlar la comunicación, pero también perjudica a todos los usuarios si hay un problema en ese servidor.

En conclusión, la empresa usa XMPP para aprovechar sus ventajas en exclusiva, sin conceder al usuario esas ventajas que XMPP podría ofrecerle.

GTalk

GTalk era el cliente de mensajería instantánea de Google. Funcionaba usando el estándar XMPP, pero Google no implementó ciertos estándares de seguridad que exigen la mayoría de los servidores XMPP actuales. Como GTalk no era software libre, tampoco era posible arreglar esta situación por parte de la comunidad.

Cuando Google lanzó su nuevo sistema de mensajería y videollamadas, Hangouts (abandonando definitivamente GTalk), seguía sin ser libre, y además resultó incompatible con XMPP. Así, todas las personas que usaban XMPP estándar, dejaron de ver conectados a sus amigos que usaban GTalk/Hangouts, y viceversa. Google no informó a los usuarios de GTalk de que perderían la conectividad con sus contactos XMPP en otros servidores, al actualizar a Hangouts. Desde mi punto de vista, sólo eso es razón para dejar de usarlo y volver al XMPP estándar creando una cuenta en cualquier (otro) servidor…

Los usuarios de Hangouts tienen además el problema de la centralización del servidor, como hemos comentado anteriormente con Whatsapp. Si su servidor tiene problemas, no podrán usar ese sistema (no hay otro servidor de Hangouts donde crearse cuenta).

Conclusiones

Cuando nos dicen que determinada empresa/aplicación de mensajería ofrece mejor experiencia de usuario, es interesante pensar cómo lo consigue, o a costa de qué. Desde mi punto de vista, centralizar la comunicación haciendo que todos pasemos por un mismo servidor es hacer “trampa” (y además, tiene implicaciones muy importantes acerca de la privacidad de las comunicaciones, por ejemplo).

Llevo un tiempo usando XMPP, y veo que las aplicaciones de cliente y servidor están en continua evolución, resolviendo  retos nada triviales (envío de archivos, videollamada, compatibilidad móvil/PC, comunicación síncrona y asíncrona…), sin renunciar a la interoperatividad y la federación (elementos claves de la supervivencia de una red que quiera ser una verdadera red) y a poner el control en manos de los usuarios y sus comunidades (elementos claves para que podamos comunicarnos con libertad).

Si piensas que el ecosistema XMPP se mueve despacio, y necesitaría un buen empujón para alcanzar la usabilidad y el nº de usuarios de los otros, ¿a qué esperas para colaborar? Úsalo, estúdialo, mejóralo, difúndelo. Es software libre, ¡tienes todo el derecho a ello!

Comentarios

Puedes comentar sobre este artículo en este hilo de pump.io.

Y también, usando XMPP, en la sala redeslibres@salas.mijabber.es 🙂

12 July, 2015 05:43PM by larjona

January 11, 2015

José Luis Rivas

Recordando a Aaron Swartz

Un libro que me encantó es «Homeland» de Cory Doctorow, trata sobre un grupo de hackers que se ven envueltos en situaciones que los deja expuestos a uno de los gobiernos y empresas más poderosas que existen y deben hacer algo aún así los haga correr peligros. Una historia de ficción sobre gente como Aaron Swartz.

Pero lo mejor del libro, es que precisamente cierra con dos cartas, una por Jacob Appelbaum, uno de los primeros mimbros de Wikileaks y desarrollador del proyecto Tor; y otra por Aaron Swartz. La carta de Aaron la traduje y publico a continuación, espero les sirva de inspiración para que sigan en sus luchas aún cuando a veces parezca que quién da la batalla del otro lado es muy grande e invencible:

Hola, soy Aaron. Se me ha dado este pequeño espacio aquí al final del libro porque soy un humano de carne y hueso, y cómo tal, puedo decirte algo que no creerías si viniese de la boca de cualquiera de esos carácteres ficticios:

Esto es real.

Claro, no hay alguien llamado Marcus o Ange realmente, al menos no que yo conozca, pero sí sé de gente real justo como ellos. Si quieres, puedes ir a San Francisco y conocerlos. Y mientras estás allí, puedes jugar D&D con John Gilmore o construir un cohete en Noisebridge o trabajar con algunos hippies en un proyecto de arte para Burning Man.

Y si algo de las cosas más relacionadas con conspiraciones en el libro te parecen demasiado alocadas para ser verdad, bueno, simplemente googlea Blackwater, Xe o BlueCoat. (Yo mismo tengo una solicitud FOIA pendiente para saber más de "software para manejo de persona", pero los federales dicen que les va a tomar tres años más redactar todos los documentos relevantes.)

Ahora, yo espero que te hayas divertido quedándote despierto toda la noche leyendo acerca de estas cosas, pero la parte que viene es importante así que presta atención: lo que está pasando ahora no es algún reality show de televisión donde simplemente puedes sentarte en casa y ver.

Esta es tu vida, este es tú país -- y se quieres mantenerlo seguro, debes involucrarte.

Sé que es fácil sentirse sin poder, como si no hubiese algo que puedas hacer para que baje la marcha o detener "el sistema." Como si todos los hilos son movidos por fuerzas oscuras y poderosas lejanas a tu control. Yo me siento de esa forma también, a veces. Pero simplemente no es verdad.

Hace menos de un año, un amigo me llamó para decirme sobre un proyecto de ley oscuro del cuál había escuchado llamado Acta para Combatir la Vulneración En Línea y La Falsificación o COICA (En Inglés es: Combatting Online Infringement and Counterfeitting Act, de allí la abreviación COICA). Mientras leía el proyecto empecé a preocuparme más y más: bajo estas provisiones, el gobierno podría censurar sitios web que no le gusten sin algo como un juicio. Sería la primera vez que el gobierno de los EEUU se le darían poderes para censurar el acceso a la red.

El proyecto había sido introducido hace un día o dos, pero ya tenía un par de docenas de senadores apoyándola. Y, a pesar de nunca haber un debate ya estaba siendo programada para ser votada en sólo un par de días. Nadie había reportado al respecto y ése era justamente el punto: ellos querían apurar esta cosa para que pasara antes que alguien se diese cuenta.

Afortunadamente, mi amigo se dió cuenta. Nos quedamos despiertos todo el fin de semana y lanzamos un sitio web explicando qué decía el proyecto de ley, con una petición que podías firmar en rechazo al proyecto que te daría números de teléfonos para llamar a tus representantes en el senado. Le dijimos al respecto a algunos amigos y ellos le dijeron a algunos de sus amigos y en cuestión de un par de días teníamos más de 200 mil personas en nuestra petición. Fue increíble.

Bueno, la gente promoviendo esta ley no paró. Ellos gastaron literalmente decenas de millones de dólares haciendo lobby para éste proyecto de ley. La cabeza de cada compañía de medios grandes voló a Washington, D.C. y allí se reunieron con el jefe de personal del presidente y amablemente le recordaron de los millones de dólares que le habían donado a la campaña del presidente y le explicaron cómo lo que ellos querían -- la única cosa que querían -- era que esta ley se aprobara.

Pero la presión pública siguió creciendo. Para intentar sacar a la gente del camino ellos intentaron cambiando el nombre de la ley -- llamándola PIPA y SOPA, incluso llamándola E-PARASITES Act -- pero no importó cómo la llamaron, más y más personas se siguieron diciéndole a sus amigos sobre la ley y consiguiendo más y más personas que se opusieran. Pronto, las firmas en nuestra petición iba en millones.

Logramos detenerlos por más de un año con diferentes tácticas, pero se dieron cuenta que si esperaban más quizás nunca lograrían tener un chance de pasar esta ley. Así que programaron un voto apenas volviesen de la pausa de invierno.

Pero mientras los miembros del congreso estaban fuera en la pausa de invierno, manteniendo reuniones públicas y en las salas de sus pueblos en casa, la gente empezó a visitarlos. En todo el país, miembros del congreso empezaron a ser cuestionados por sus electores acerca de su apoyo a esa sucia ley de censura del internet. Y los miembros del congreso empezaron a asustarse -- algunos llegando tan lejos como responderles atacandome.

Pero esto ya no se trataba de mi -- nunca se trató de mi. Desde el principio fue sobre ciudadanos tomando las cosas en sus propias manos: haciendo vídeos en YouTube y escribiendo canciones oponiéndose a la ley, haciendo gráficos mostrando cuánto dinero los promotores de la ley habían recibido de las industrias promoviéndola, y organizando boycotts poniéndo presión en las compañías que habían promovido la ley.

Y funcionó -- tomó la ley desde un punto político sin problema alguno que se suponía debía pasar unánimamente a una posición más parecida a tener un balón tóxico que nadie quería tocar. ¡Incluso los promotores de la ley empezaron a sacar declaraciones oponiéndose a la ley! Oh sí, esos dueños de medios estaban molestos...

Así no es como se supone que el sistema deba funcionar. ¡Un montón de chicos no detienen unas de las fuerzas más poderosas en Washington simplemente escribiendo en sus portátiles!

Pero pasó. Y tú puedes hacer que pase de nuevo.

El sistema está cambiando. Gracias a la Internet, todos los días personas pueden saber acerca de cosas y organizarse incluso si el sistema está determinado a ignorarlo. Ahora, quizás no ganes todo el tiempo -- esto es la vida real, después de todo -- pero finalmente tenemos una oportunidad.

Pero sólo funciona si tú tomas parte en ello. Y ahora que has leído este libro y aprendido cómo hacerlo, estas perfectamente informado sobre cómo hacerlo de nuevo. Es correcto: ahora depende de ti cambiar el sistema.

Aaron Swartz.

11 January, 2015 05:53PM

September 01, 2014

Alejandro Ríos P.

Competencias de un Ingeniero para afrontar el mercado laboral

Me pregunta un viejo amigo que está trabajando como coordinador de un programa de Ingeniería en una Universidad del suroccidente, con el fin  estructurar mejor el contenido del programa y graduar mejores ingenieros:

¿Cuál consideras que serían las competencias que debería tener todo ingeniero en electrónica y telecomunicaciones para que pueda afrontar el mercado laboral? 

Quiero compartir mi respuesta, que fue la siguiente:

Hola,

Muchas gracias por tenerme en cuenta para esto, para mí el cierre de la brecha entre empresa y academia siempre ha sido una preocupación desde que estaba en la universidad.

Hay varias cosas que en mi experiencia los ingenieros de hoy en día deben aprender y que las agrupo en 3 categorías:

1. Habilidades técnicas:

Lo de siempre, los ingenieros deben saber cómo resolver un problema, analizándo todos los requisitos a cumplir de manera sistémica. Hoy en día es más importante saber cómo buscar la información necesaria para resolver los problemas que aprenderla de memoria, ser capaces de llegar al fondo de cómo funcionan las cosas, un ingeniero debe tener tanto una visión global de todas las tecnologías, como un conocimiento profundo de alguna de ellas en particular. Y sobretodo, leer la Carta a García.

Una habilidad que es importante inculcar, es la de publicar, compartir, crear un portafolio de proyectos que son la carta de presentación, participar en comunidades, tener un repositorio de código, contribuir a un proyecto open source, publicar en blogs, etc.  Ojalá todo en INGLES

Pero lo más importante sería enseñarles todas las variables que hacen que un producto sea de gran calidad: desde el diseño, pasando por la creación, pero no quedarse ahi, sino pensar también cómo eso se inserta en un entorno de producción escalable, cómo se debe probar, documentar y mantener en la vida real.

2. Habilidades de negocios


En un mundo globalizado no solo se requiere generar soluciones, sino saber cómo éstas se llevan al mercado. Los ingenieros de hoy deben entender cómo se gestiona un proyecto con herramientas como el PMBOK, pero también con AGILE, Scrum, etc.  Hay que enseñarles a que sepan plantear un proyecto como un caso de negocio, que piensen como emprendedores, que no se queden solo en una idea, sino que sepan cómo llevar esa idea a satisfacer un mercado (Lean Startup), cómo vender, cómo manejar un presupuesto.

3. Habilidades humanas

Finalmente, los ingenieros tienden a ser muy cuadrículados y encerrados en su mundo. Hay que cultivar habilidades de comunicación, oral y escrita, habilidades gráficas, cómo hacer una presentación agradable a la vista, que comunique las ideas, cómo diseñar interfaces de usuario agradables, usables, deseables.  Cómo interactuar con un equipo multidisciplinario, cómo mantener un ritmo de vida productivo y saludable.

Lo más importante es que sepan cuál es su pasión. Un ejercicio interesante que se me ocurre, sería ponerlos a investigar ofertas laborales en bolsas de empleo, o perfiles de gente muy dura en LinkedIN, que ellos vean un perfil o Biografía de alguien que sea su modelo a seguir. Y luego que afronten su aprendizaje con ese perfil en mente. Que cuando salgan, estén ya perfilados hacia una meta de carrera real.

Son muchos los retos de un ingeniero en la vida real, espero que esta información te sea de utilidad,

Un abrazo,

Alejandro Rios.

01 September, 2014 05:30PM by Alejandro Rios Peña (noreply@blogger.com)

May 14, 2014

José Luis Rivas

transloadit-api v1.0.0-rc1

El release candidate de v1.0.0 para transloadit-api ya está disponible.

Puedes instalarlo vía npm y probarlo:

npm install transloadit-api@1.0.0-rc1

Ahora soporta la API completa de transloadit: firmas, assemblies, notifications y manejo de plantillas.

El código está en github, la documentación en este website así como en los comentarios del código (que son la fuente para el website) y por supuesto: cualquier problema repórtalo en el tracker de github. Tiene un montón de pruebas pero aún le faltan algunas, especialmente para operaciones que requieren internet.

Quizás tenga tiempo para escribirlas esta semana y entonces lanzar una v1.0.0 como es.

14 May, 2014 05:09AM

May 13, 2014

Primera versión de angular-geocomplete

Esta es la historia de un día que necesitaba con una dirección o el nombre de una ciudad conseguir un array JSON que me diese los posibles lugares donde eso fuese cierto.

Y entonces nació angular-geocomplete.

Lo fino es que se puede combinar con algún typeahead y se obtiene un autocompletado demasiado genial como el de Google Maps.

Y sí, usa el API de Google Maps.

¿Cuál es la gran ventaja? Que obtienes no sólo el nombre del lugar sino sus coordenadas.

Instalable vía bower también con bower install angular-geocomplete.

Problemas a los issues de GitHub.

13 May, 2014 12:02PM

March 12, 2014

Laura Arjona

Feliz de ser parte de la Fuerza Goblin

GNU Mediagoblin ha lanzado una campaña de financiación colectiva, para sufragar el trabajo de uno o más desarrolladores que se puedan dedicar a tiempo completo para hacer avanzar el proyecto.

Página web de la campaña de financiación de MediaGoblin. ¡Con un vídeo genial!

Página web de la campaña de financiación de MediaGoblin. ¡Con un vídeo genial!

MediaGoblin es un sistema de publicación en la web que puede alojar contenidos de todo tipo (como un YouTube + Flickr + SoundCloud + otros). Es software libre, así que está disponible para personas, comunidades, organizaciones y empresas que quieran utilizarlo, desplegarlo en su propia infraestructura, o adaptarlo.

Mediagoblin es uno de los proyectos en los que participo, traduciendo la interfaz al español, y junto con Debian, ocupa una parte especial de mi corazón (y mi tiempo libre). Me gusta el estilo de su comunidad, muy inclusiva, y Chris Webber, el desarrollador principal del proyecto, anima mucho esa inclusividad y buen rollo que se respira. Sólo estando un rato en el canal IRC de FreeNode (#mediagoblin) uno se da cuenta de la capacidad resolutiva de muchos de sus miembros, a la par que siempre intentan trabajar a gusto para ser feliz y viceversa.

El software en sí es muy prometedor. Sólo el hecho de tener una interfaz limpia, traducida a varios idiomas, y la capacidad para alojar y visualizar muchos tipos de archivo usando siempre estándares abiertos y hace que me guste.

El que me conoce, sabe que amo la simplicidad de por ejemplo el archivo multimedia de Debian o el de la conferencia FOSDEM: un árbol de carpetas y archivos. Navegas hasta donde está lo que te interesa, te lo descargas, y ya está, lo ves en tu equipo. Pero cuando vi el archivo multimedia de LibrePlanet 2013 (que usa MediaGoblin), con miniaturas de todas las charlas allí mismo, la interfaz en español (por la detección de idioma de mi navegador), la etiqueta de licencia en cada charla, poderla descargar en varios formatos o verla dentro del navegador, entendí que mucha gente prefiere algo así, visualmente más atractivo, y eso no tiene por qué suponer una gran carga adicional en el lado del que despliega la infraestructura (MediaGoblin es más ligero respecto a recursos y administración que un gestor de contenidos estándar, por ejemplo, y está pensado para escalar bien tanto hacia arriba como hacia abajo).

LibrePlanet multimedia archive

Archivo multimedia de la conferencia LibrePlanet

 

Sé que tanto Debian como FOSDEM funcionan con el trabajo voluntario de personas (a veces poquitas) en su tiempo libre, y con un presupuesto muy ajustado, soy feliz con sus elecciones respecto a repositorios de vídeo. Pero si algún día deciden animarse o encuentran los recursos necesarios para desplegar y mantener un MediaGoblin, ¡serán aún más geniales!

Mis cosas están en una cuenta gobblin.se, de Joar Wandborg, otro desarrollador de MediaGoblin, que amablemente ofrece cuentas gratuitas en el servidor que mantiene. Ahí sólo tengo cositas públicas. En mi familia hemos comentado varias veces el tema de alojar y compartir fotos y vídeos nuestros: yo vivo en una ciudad distinta, y por ahora, cada uno mantiene su archivo multimedia en su ordenador, enviando por correo, de vez en cuando, una selección de las fotos y vídeos más interesantes, o pasándonoslo en un pincho USB cuando nos vemos. De cuando en cuando hablamos por videoconferencia, pero por ejemplo, yo no las grabo, porque serían archivos grandes difíciles de compartir por correo.

Así que a menudo me planteo la posibilidad de montarme un servidor MediaGoblin con control de acceso, para que todos podamos subir y ver la historia digital de la familia, y espero hacerlo a lo largo del año, cuando compre un equipo fijo que pueda tener encendido permanentemente.

Entretanto, acabo de donar por segunda vez (lo hice también en la primera campaña en 2012). Me parece muy importante que los proyectos comunitarios también salgan adelante y mantengan su independencia, con una planificación guiada por las prioridades de la propia comunidad. La financiación colectiva puede hacer esto posible, y MediaGoblin ya ha demostrado que sabe materializar las expectativas de los que le apoyan, y con creces (y si no, echa un vistazo al vídeo, donde muestran todo lo hecho el pasado año. Puedes poner subtítulos en español pulsando en el iconito “CC” que hay junto al volumen). ¿Te animas a unirte a la Fuerza Goblin? No te arrepentirás.

(Si tienes dificultad para donar porque la página de la campaña y la de la donación están en inglés, puedes echar un vistazo a este artículo de GNU/Linux Vagos  donde explican (en español) casi todo lo que pone en la página de la campaña, y también, contactar conmigo, y te aclararé todas las dudas que pueda).

12 March, 2014 08:44PM by larjona

November 03, 2013

Cómo veo pump.io ahora

(Read this post in English)

Resumiendo

  • Usable, gran potencial, necesita usuarios y amor
  • ¡Esto es sólo mi opinión!

Versión larga (demasiado larga…)

He estado usando Pump.io desde marzo de 2013 para pruebas, y más intensamente desde la migración de Identi.ca en julio de 2013.
He escrito varios artículos sobre Identi.ca, mi red social favorita, y también sobre la migración.

Después de varios meses y desarrollo activo no sólo en el software núcleo, sino en muchos servicios de terceros, y después de muchas discusiones, informes de error, conocimiento compartido y ‘vida en el pumpiverso’, ¿cómo veo la red pump.io ahora?

Nota: esto es sólo mi opinión como, digamos, usuaria implicada de pump.io. Digo “implicada” porque lo uso mucho, he probado varios clientes, he abierto varios informes de error y ayudado a resolver otros, hago clasificación de fallos en el sistema de seguimiento de errores e intento ayudar a los usuarios principiantes. Pero no soy parte del equipo de desarrollo de pump.io y no estoy más en contacto con el líder del proyecto, Evan Prodromou, que lo que pueda estar cualquier otro usuario o fan. Así que advertencia: esta es mi humilde opinión particular, y no refleja la visión oficial del proyecto pump.io.

Usable

La red Pump

El software es usable. Está instalado no sólo en los servidores de E14N, otras personas lo han desplegado en sus máquinas y lo están usando. Algunas personas lo han instalado en una Raspberri Pi, otras en un servidor privado virtual (VPS), otras en su PC personal. Algunas personas alojan sólo a un usuario (ellos mismos), otras tienen más usuarios (registro abierto, o bajo invitación).

E14N, la empresa que ofrece el software pump.io, ofrece identi.ca para los usuarios que ya tenía, y algunas instancias públicas donde puedes registrar una cuenta de manera gratuita: fmrl.me , pumprock.net , urmf.net , pumpbuddy.us , hotpump.net , pumpdog.me , pumpit.info , 1realtime.net , microca.st , pumpity.net.

El servidor e14n.com también es un servidor pump.io, pero no permite registro de cuentas.

El número de instancias/usuarios conocidos por OFirehose (la manguera, un nodo donde puedes registrar tu servidor pump.io, para ofrecer una línea temporal pública que abarque toda la red) es en pumplive.com. Probablemente hay más instancias en redes privadas o no registrados allí.

Jeremy Pope mantiene el sitio pumpstatus.jpope.org donde puedes ver el tiempo de actividad sin cortes (uptime) y comprobaciones para muchos servidores.

Por lo que he visto en este tiempo, los cortes o caídas, cuando los hay, se deben en la mayor parte de los casos a fallos de hardware, problemas relacionados con la configuración o administración del sistema. En muchos casos, el tiempo de actividad sin cortes (uptime) es corto debido a reinicios del servidor para actualizar el código, y así obtener alguna característica nueva o arreglar problemas. El que no haya informes de error relacionados con rendimiento o errores de operación abiertos durante largo tiempo muestra que se arreglan rápido, por lo que puedo contar.

Desde la perspectiva de administración de sistemas: desplegar/mantener un servidor pump.io

Sobre la instalación, no puedo decir que sea difícil o fácil. Considero que soy una usuaria avanzada, aprendiz de administradora de sistemas (conocimientos suficientes para instalar una distro GNU/Linux, o una pila LAMP, o descargar y compilar código fuente si ese software no está empaquetado para mi distribución y las dependencias están listadas en algún sitio).

He intentado instalar pump.io en mi portátil (solo por saber si soy capaz de hacerlo, y probar algunos cambios en el código, no para uso diario). En ese momento, node.js no estaba empaquetado para Debian, pero conseguí descargarlo, compilarlo, instalarlo, y repetir el proceso para el servidor pump.io. Sin embargo, no instalé/configuré una base de datos etc, porque como digo sólo quería probar la interfaz de usuario. Ahora que node.js está empaquetado para Debian, supongo que la instalación es más fácil.

Hay documentación sobre la instalación de pump.io en varias plataformas en la wiki.

El “ecosistema” Pump

Además de pump.io, E14N desarrolla algunas otras piezas de software para determinadas características o tareas en la red Pump. Entre ellas, tenemos:

  • OpenFarmGame (el juego de la granja abierta) es un juego de red social para mostrar las posibilidades de la red Pump
  • Spamicity.info es un servidor que filtra spam (mensajes comerciales no solicitados) en la red Pump
  • OFireHose (la manguera) proporciona una línea temporal pública de la red Pump en formato ActivityStreams (JSON)
  • pump2rss proporciona una línea temporal pública de un determinado usuario en formato RSS
  • pump2status.net (en desarrollo) permitirá conectar una cuenta de pump.io con una de StatusNet, actuando como un puente
  • ragtag.io (en desarrollo) permitirá ver todos los objetos públicos de la red Pump que están etiquetados con un determinado ‘hashtag’ (#).

Otras personas han desarrollado librerías, clientes y herramientas para usarlos en la red pump. La mayoría de ellos están enlazados en la pump.io wiki. Los que subrayo yo:

  • PyPump es una librería Python para interactuar con un servidor pump.io
  • Bashscriptville es un conjunto de guiones o scripts bash que permiten publicaro iformación de determinadas fuentes en la red pump, como “The Word of the Day” (la palabra del día, en inglés), los cómics XKCD, insultos Shakespeareanos, la imagen astronómica del día, y otros.
  • El bot conversacional XR115 se ha unido a pump.io y ahí está aprendiendo.

Necesita usuarios

Principalmente por el efecto red. El éxito de una red social es altamente dependiente del número de personas usándola (también depende de que sea flexible, poderosa, brillante y todo eso, pero podríamos discutir qué va primero).

Otra razón es que ahora, la mayoría de los usuarios de pump.io tienen una visión del lado de StatusNet. Me gusta StatusNet, es un gran software, pero quizá estamos atascados intentando hacer que pump.io sea como StatusNet y nueva gente pueda traer nuevas, mejores ideas.

Pero de dónde pueden venir usuarios a pump.io? Veo tres tipos de usuarios:

  • Gente que no usa ninguna red social: si eres nueva en las redes sociales, por favor, usa una basada en software libre. Puede ser Pump.io, Friendica, Diaspora*… la que sea. Yo conozco Pump.io, y por eso la recomiendo. Llegué a pump.io por accidente, ya que usaba Identi.ca para microblogueo, y sabiendo que iba a haber una migración de StatusNet a pump.io, empecé a curiosear en la plataforma. Es nueva, así que muchas cosas aún están en desarrollo, pero es nueva, flexible y moderna, ha aprendido de los fallos de otras plataformas. ¿Por qué no? Y lo más importante: ¡hay gente guay en pump.io! No hay una actividad abrumadora, sin publi, sin spam (pero si lo quieres, puedes ir a la manguera 🙂
  • Gente que usa otras redes sociales: Pump.io puede ser una más, o un sustituto de Facebook, o Google+, por ejemplo. Si eres una empresa o todos tus amigos están en otras redes sociales, y “no puedes no estar allí”, quizá quieras esperar hasta que tengamos puentes para publicar simultáneamente en todos los sitios (en cualquier caso, mira los que ya tenemos, quizá son suficientes para tus necesidades, o puedes usar Friendica para publicar simultáneamente en todos los sitios con un esfuerzo mínimo). Si tienes un cierto interés en el mundo del software libre (quizá contribuyes a un proyecto, o eres una empresa basada en software libre, o simplemente te gusta cacharrear), estaría bien que tuvieras presencia en una red social de software libre como ésta.
  • Gente buscando redes sociales para uso privado: en mi opinión, pump.io parece perfecta para montar una red privada familiar o una red social institucional dentro de una intranet. Recuerda, está pensada para ser escalable hacia arriba y hacia abajo, y federada desde el principio. Puedes configurar una interfaz web común pero también dar libertad a los usuarios para usar el cliente que les guste. Estamos trabajando en la internacionalización y localización, pero si no puedes esperar, simplemente traduce las cadenas que hay en el código y las plantillas utml y a correr. Es software libre, ¡puedes hacerlo! E14N está trabajando para proporcionar cajas con pump.io listas para enchufar. Posee tus datos, disfruta tu comunicación.

Necesita amor

Sólo soy una usuaria de pump.io, curioseo en el canal IRC, en el gestor de informes de fallos (bueno, hago algo de clasificación y 1ª línea), y sigo a Evan y a los hackers de pump.io. Para nada soy voz oficial de las necesidades o planificación de pump.io, pero aquí están mis ideas personales sobre cómo pump.io podría mejorarse y cómo podemos ayudar.

Planificación

Estoy segura de que Evan tiene una planificación clara para nuevas características de pump.io y corrección de fallos. Podemos oler parte de ella en el gestor de informes de fallos, ya que algunos casos están etiquetados con un hito de versión, y otros han sido cerrados con el mensaje de que terceras partes deberían encargarse de mejorar esos aspectos. Pero una planificación clara podría ayudar a los usuarios a saber qué esperar, y a los contribuidores a ayudar de manera más efectiva.

Quizá es simplemente cuestión de clasificar los casos abiertos por hito temporal, y escribir una página wiki. Mmm preguntaré a Evan sobre ello.

En el lado del usuario, creo que es útil revisar la wiki de cuando en cuando para ver las características más importantes que ya están implementadas (en pump.io en sí o por terceras partes), y buscar en el gestor de informes de fallos antes de enviar un problema supuestamente nuevo. O quizá preguntar en el canal IRC.

Página de ‘estado’ de E14N, página de contacto, y ayudantes sysadmin

No voy a decir cómo Evan tiene que dirigir sus máquinas o su negocio. Así que por favor toma este párrafo sólo como una humilde opinión que se puede tirar a la papelera si no es útil.

Los servidores de E14N (especialmente identi.ca, pero no sólo) son la imagen pública del software pump.io y su red. Y muchas personas puede que no sepan distinguir entre un problema en el software y un problema puntual en la red o el sistema. Muchas personas no saben dónde informar de problemas o solicitudes que no están ligadas al desarrollo de software, o saben que es por correo electrónico a admin [at] e14n.com pero no saben si ya alguien informó del problema.

Por ahora, pumpstatus.jpope.org está siendo de gran ayuda y algunas personas comentan en el canal IRC cuando tienen problemas, antes de enviar un correo. Pero tener una página web de “estado” donde mirar si estamos experimentando problemas podría ayudar. Y quizá dar permisos de escritura en esa página a algunas personas en el rol de “ayudantes sysadmin” ayudaría también.

Funcionalidad que da el control al usuario

Pump.io es software libre, esto significa que el usuario puede controlar lo que el programa hace. Pero no todo el mundo sabe cómo cacharrear en node.js para modificar el programa y que haga lo que ellos quieren, y no están en condiciones de instalar su propia instancia. Algunas funcionalidades que, en mi opinión, atraerían usuarios y mantendrían a los usuarios existentes felices e implicados serían:

  • Activar la recuperación por correo electrónico y notificaciones en el resto de los servidores de E14N que no son identi.ca
  • Posibilidad de hacer copia de seguridad de una cuenta, borrarla, cambiar la dirección de correo electrónico, configurar las notificaciones por correo electrónico.
  • Buscar publicaciones y usuarios.
  • Internacionalización / localización de la interfaz web a distintos idiomas.
  • Mostrar contextos en la interfaz web.
  • Una línea temporal pública (como la manguera), accesible con un navegador web, sin spam (o quizá una vista de “temas candentes”, con las publicaciones públicas que se comparten o se marcan como “me gusta” en cada momento). Una ventana donde el posible nuevo usuario pueda mirar.

¡Contribuidores!

Enrico Zini dijo una vez: “No te preguntes qué puedes hacer por Debian. Pregúntate qué puede hacer Debian por tí. Y machácalo hasta que lo haga”. Creo que este pensamiento va bien también con Pump.io. Hay muchas piezas del código que ya están escritas y que puedes copiar y toquetear, y hay otros muchos proyectos (no sólo el núcleo, recuerda los clientes, las librerías, proyectos hermanos…) donde tu ayuda es de gran valor.

Hey, y no digas que “no sé JavaScript ni node.js”. Yo tampoco… pero el código es código, puedes abstraer la sintaxis y aprender y entender (o más o menos) cómo funciona. Otras piezas del ecosistema pump.io están escritas en otros lenguajes. O puedes ayudar en el gestor de informes de fallo intentando reproducir errores o encontrar duplicados, o leer/escribir documentación o preguntas frecuentes, sugerir ideas, probar características/clientes/plataformas…

Y si eres programador(a), por favor échale un vistazo al gestor de informes de fallos y las solicitudes “pull” de cuando en cuando. Probablemente habrá algunas propuestas para arreglar fallos que puedes mejorar o apoyar para que se incorporen más rápido, o rechazarlas para que el remitente pueda repensar su propuesta o simplemente ir a ayudar a otra parte del código o del sistema.

Promoción

Finalmente, creo que estaría bien tener una presentación en vídeo sobre pump.io (digamos 5 minutos, quizá menos) que pueda ser traducida a diferentes idiomas y compartida en todos los sitios para correr la voz sobre esta red social. Quizá ya está hecha (si sí, ¡por favor enviadme un enlace!). Quizá algunos usuarios pueden intentar hacerla. Pero creo que yo no soy la persona adecuada para esta tarea. Mira este artículo, ¡es demasiado largo! Escribir algo para sólo 5 minutos es una tortura para mí 🙂

03 November, 2013 10:21PM by larjona

June 13, 2013

Alejandro Ríos P.

Cuando es el momento adecuado para emprender?

El propósito de este artículo es realizar un análisis de las principales variables del entorno y capacidades del emprendedor que se deben tener en cuenta antes de decidir si es un buen momento para iniciar un emprendimiento. Se realiza una comparación de estos factores entre dos casos de emprendimiento Latinoamericanos de características diferentes: la empresa Laboratorios Skudmart, de Colombia, y la empresa Kauel, de Chile.



13 June, 2013 10:30PM by Alejandro Rios Peña (noreply@blogger.com)

June 12, 2013

G-Shock 3D Branding Exercise

An exercise on exploring and deconstructing a well-known brand to derive the vision, personality and language, to then identify a new concept (product or experience) that that brand could take to market.

 

12 June, 2013 05:55PM by Alejandro Rios Peña (noreply@blogger.com)

June 11, 2013

Design Research

Una presentación en prezi para resumir mis lecturas sobre este tema en la materia de Investigación en Diseño que estoy viendo ahora.

11 June, 2013 02:10PM by Alejandro Rios Peña (noreply@blogger.com)

June 10, 2013

La Bañera


La Bañera
Originally uploaded by alerios.

La Bañera. Óleo sobre lienzo (50x70cm). Va a estar 20 dias expuesta en la biblioteca de la universidad CEIPA, en Sabaneta, como parte de las obras del semestre del taller de extensión de la escuela Débora Arango.

Mi primera exposición, que emoción :p

10 June, 2013 10:35PM by Alejandro Rios Peña (noreply@blogger.com)

May 10, 2013

José Luis Rivas

Desde el CENIT anuncian plan de Retroceso Tecnológico para las universidades

Actualización [2013-05-11 14:31:11 UTC-0430]: Justamente 1 día antes de producirse esta noticia en Venezuela, en Chile anuncia el REUNA (el Reacciun chileno) que cuadruplicaron su capacidad hasta 1.35Gbps hacia el extranjero para que los investigadores y científicos tengan más con que trabajar, así como anunciaron que han unido más universidades con IXPs locales.

Actualización [2013-05-10 22:22:16 UTC-0430]: Para entender un poco más de cómo funciona el internet pueden ver este vídeo precisamente sobre IXP y de donde sale el internet junto a sus interconexiones.

Hoy ha salido a relucir, gracias a @uraisa, que el CENIT reducirá el ancho de banda a las universidades venezolanas, mediante orden de la OPSU.

Un poco de background sobre la red universitaria

El CENIT ofrece -- entre varios otros servicios -- un enlace dedicado a la Red Académica venezolana llamada Reacciun. Esta red es lo que se llama un NREN, un ISP dedicado a apoyar las necesidades de las comunidades de investigación y educación en un país.

No entiendo cómo degradar un servicio apoya las necesidades de comunidad alguna, mucho menos de investigación y educación donde más bien se necesita estar adelantados al resto de los servicios para permitir la innovación.

La excusa

Según un monitoreo que hicieron desde la OPSU, aún sin publicar, se subutiliza el ancho de banda y debido a eso decidieron «sincerar» su uso, porque muchas universidades no lo «aprovechan adecuadamente».

¿Pero qué es el ancho de banda digital?

El ancho de banda es la capacidad máxima de transferencia entre un punto y otro. Esta capacidad depende de la infraestructura instalada, por lo cuál el ancho de banda en una red hogareña cableada suele estar entre los 10Mbps y los 100Mbps, pero cuando hacemos uso del internet nuestro ISP limita el ancho de banda basado en cuanto hemos contratado y esos planes están limitados por su propia capacidad instalada. Es decir, para que CANTV mejore sus planes tiene que crear una mejor infraestructura y comprar más tráfico a algún Internet Transit Provider o crear un enlace a algún Internet Exchange Point (o IXP, el cuál suele salir mucho más barato que un Internet Transit Provider, pues consiste en hacer peering en una infraestructura común y evitar pasar por un Transit Provider).

Ahora, si Reacciun es una red propia, con una capacidad de ancho de banda instalada ya, suficiente para proveer el actual ancho de banda, y el Internet Transit Provider o IXP limita es la cantidad de datos consumidos y no el ancho de banda, que está limitada sí por la capacidad instalada en el enlace Reacciun/ISP ➜ ITP/IXP (es decir, cuánta data por segundo aguanta el cable que conecta Reacciun a su proveedor de tráfico), ¿entonces cuál es la verdadera razón para bajar el ancho de banda?

¿Por qué no más bien se conectan a otro IXP o cobran bajo consumo?

Es difícil ver un aumento en el costo de mantener una infraestructura ya montada, siendo el costo mayor siempre la creación y no el mantenimiento.

Si se está cobrando por un servicio donde sobra capacidad significa que se está cobrando demás, deberían más bien bajar los precios ¿no? O invertir ese extra en conectarse a otro IXP y aumentar el tráfico por peering y abaratar aún más los costos mientras se mejora el servicio.

O incluso, para sincerar, cobren simplemente por consumo y no por ancho de banda, dejen que las universidades puedan conectarse tan rápido como les permita su hardware.

¿Por qué no mejor implementan IPv6?

Son un NREN, deberían estar adelantados. Más cuando sus clientes son tan pocos a nivel tal que pueden reunirse con todos ellos en una sala.

¿Por qué propongo mejorar el ancho de banda?

Porque es falso que las universidades no la usen, más bien ha sido una limitante constante. Raisa muy bien lo dice en su artículo y cuando fui estudiante en la UNET también era un punto que surgía una y otra vez al proponer servicios con salida al internet.

Les explico: proponer un repositorio Debian al que se tenga acceso desde la internet en una universidad venezolana es casi prohibitivo, sólo la ULA tiene uno. Mientras que en otros países es precisamente la academia la que ha prestado apoyo a la comunidad open source para replicarse y tener infraestructura donde desarrollarse.

De igual forma, la limitación de ancho de banda ha hecho que en muchas universidades se apliquen reglas de calidad del servicio para evitar el abotellamiento de paquetes en la red.

¿Y nos van a decir que no se usa? ¡Si más bien la poca que hay es una enorme limitante para más y mejores desarrollos!

Degradar un servicio es retrógrado

Es retrógrado degradar un servicio, es retrógrado ofrecer peor conexión, es retrógrado cuando hay más y más data cada vez rondando en la internet. Es retrógrado cuando entramos en la era de la BigData y no se puede hacer uso de ella porque nos están limitando más en vez de ampliar capacidad. Es retrógrado porque la capacidad instalada para soportar esto ya está instalada.

Es retrógrado, es absurdo y habla mucho de las intenciones del gobierno para con las universidades: atraso.

10 May, 2013 05:00AM

May 07, 2013

Ley de Infogobierno: ley a medida del gobierno

Actualización 2013-05-08 13:19:26 UTC-0430: Erróneamente dije que desde el 2013 la Ley del Registro Civil contempla la digitalización del registro civil, es desde finales de 2009, fecha en la cuál fue aprobada la ley.

Mi intención desde el principio era asistir a las discusiones públicas del proyecto de Ley de Infogobierno, pero dado que la fecha se aproxima y mi agenda no se desocupa, no podré estar.

A pesar de eso, estoy condensando mis observaciones en este post para que, idealmente, lo lean en las discusiones públicas que se den.

¿Basado en software libre?

Lo primero que me preocupa es el uso de la frase «basado en software libre» en vez de «ser software libre». El software usado en la administración pública venezolana tiene que ser software libre, no basado. ¿Por qué no dejar el «basado en»? Porque hay licencias de software libre como la MIT y la BSD que permiten el relicenciamiento de código derivado a cualquier otra licencia, entre las cuáles se incluyen licencias cerradas.

Igualmente, el artículo 12 debería obligar a la autoridad competente a publicar ese registro de programas informáticos que poseen los poderes públicos venezolanos, en conjunto con su licenciamiento y proveedores. Esto es vital sobretodo en las excepciones que permite el artículo 51. Necesitamos transparencia, necesitamos saber qué software se está usando que no es software libre y qué razones se dieron. Igualmente se necesita un mecanismo para apelar estas excepciones previamente y posterior a su otorgamiento.

(Artículo 35)

Sobre la "transferencia del conocimiento asociado para su comprensión"

Hay una apreciación errónea sobre las libertades en los programas libres, en la ley aparece repetidamente la frase «y la transferencia del conocimiento asociado para su comprensión» en conjunto con la definición de software libre. Esto no es cierto y de hecho se contradice con lo escrito en muchas licencias de software libre, que el software es entregado «AS IS», sin garantías de que funcione y con cláusula de desprendimiento de responsabilidad en caso de que algo funcione mal y cree un gran problema (o incluso un pequeño problema). Además transferir el conocimiento asociado para su comprension requeriría que el programa el enseñara a las personas a programar, pues si alguien no programa no lo comprenderá, o hacer una documentación extensiva de la aplicación lo cuál no es cierto. Entiendo que esto esta incluído en la multitud de contratos que ha tenido el gobierno con proveedores, pero ahí es donde pertenece, en los contratos, no en la ley de infogobierno, mucho menos en las deficiones sobre software libre.

El artículo 36 incluso lo dice explícitamente como parte de las «Licencias», cuestión que en ninguna licencia de software libre actual podrán encontrar.

(Artículo 36)

Queremos más transparencia

Lo poco que llegamos a ver sobre transparencia no obliga en ninguna forma a nadie a publicar. No sólo no obliga sino que en las partes donde no se limita a citar una ley que regula el acceso a la información pública, lo que hace es pedir a burócratas quienes históricamente no han sido transparentes en sus actuaciones a que promuevan la transparencia (41.5); por lo que tendremos que unirnos a las propuestas de Espacio Público y Transparencia Venezuela para lograr más en ese campo, quienes ya entregaron un proyecto de Ley Orgánica de Transparencia y Acceso a la Información Pública.

¿Cómo es la cooperación?

El artículo 30 habla del principio de cooperación entre el Poder Público y el Poder Popular, sin embargo, nada dice de cómo debe ejercerse esto. Dejar este tema para el reglamento de la ley es excluir al poder popular de voz al momento de establecer los mecanismos para esta cooperación. Ha sido histórico el conflicto Poder Popular vs. Poder Público en este tema, incluso entre grupos del mismo factor político, por lo que establecer de inmediato en la ley, que es consultada al pueblo, los mecanismos daría certeza y una gran muestra de verdadero deseo cooperativo.

Es excluyente

Y este no es un problema de esta ley nada más, es un problema de interpretación de quién es el Poder Popular. Según la interpretación del gobierno nacional y la mayoría de los gobiernos regionales el Poder Popular sólo está representado mediante los consejos comunales y las comunas. Aquí quedan por fuera las comunidades organizadas en esquemas diferentes a consejo comunal/comuna, mucho menos las ONGs. Esto hace que la colaboración y cooperación entre pueblo y gobierno se vea limitado a solo los que componen y coinciden en ese «Poder Popular». Se está excluyendo a los que no participan y se deja de apreciar las cooperaciones por su valor para pasar a apreciarse por su origen.

Del comité de tecnología sin tecnólogos

El anteproyecto contempla la creación de un Comité Nacional para el Uso de Tecnologías de Información, cuyo fin sería promover y consolidar el uso y aprovechamiento de las TI en la APN. ¿Quienes espera uno que conformen ese comité? Personas expertas en promover el uso y expertas en uso de TI, sin embargo, está conformado por burócratas que si acaso serán usuarios casuales de TI, y que de todos sólo uno es de la materia de TI (el Ministro con competencia en tecnología de información).

¿Qué puede lograr un comité que no tiene ni idea de lo que le corresponde promover? Y no es sólo promover, ¡inclusive le corresponde «establecer lineamientos y estrategias pra el desarrollo de las tecnologías de información»! (41.2)

Sí, hay «unidades de apoyo», pero ¿por qué no son esas unidades de apoyo los miembros permanentes de ese comité y los que toman las decisiones? ¿Por qué hay que seguir dependiendo de la cima de la pirámide jerárquica para tomar decisiones si la idea es ir aplanando esa pirámide y volver las decisiones tan horizontales como sean posibles? ¿Por qué darle más funciones a burócratas que ya no son capaces de cumplir a cabalidad con las funciones que tienen asignadas? ¿Qué eficiencia se puede esperar entonces?

Y si la excusa es que se necesitan tomar decisiones políticas entonces les recuerdo que las cabezas de los ministerios no se llenan con personas capaces en la materia sino ya están son personas que tomen decisiones políticas y no técnicas, los técnicos son los asesores.

(Artículo 39 en adelante).

Los conflictos de competencia

El capítulo I del título III tiene conflicto absoluto con el capítulo II del mismo título (inclusive con el capítulo III donde habla del CNTI). Este segundo capítulo empodera con capacidad de decisión al ministerio con competencia en tecnologías de información, sin embargo, tiene mucha de las mismas competencias que el comité de tecnología sin tecnólogos.

Sin competencias claras no es que se hacen las cosas 2 y 3 veces sino que ¡no se hacen y se tienen 2 y 3 excusas!

Queremos privacidad

En la ley se menciona que todas las actuaciones se harán bajo el respeto a la vida privada y confidencialidad de los ciudadanos, sin embargo, esto sólo es demostrable si las actuaciones del poder público son auditables. Más cuando el artículo 53 en su numeral 9 permite a la SUSCERT «Extraer, revisar y analizar las trazas y bitácoras de equipos y herramientas de redes.», siendo evidente que estas incluyen las de CANTV y probablemente cualquier otro ISP. Tiene que ser pública la razón de esa extracción de datos así como la información a menos que amerite ser privado. La única forma de que se extraiga información privada sobre un ciudadano debería ser por solicitud judicial y para atender una causa ya en proceso.

Sobre la homologación de equipos y aplicaciones con soporte criptográfico

Aquí hace falta ser más explícito. Dice que la certificación tendrá una duración de tres años pero ¿esto soporta cambio de versiones? ¿Qué cambios se cubren y qué cambios no? ¿Qué hace que una aplicación o equipo califique para que se haga de nuevo la revisión para la homologación?

Correcciones menores

  • Artículo 5.2: Documento electrónico no es un documento digitalizado, es un documento digital.
  • Artículo 27: la certificación solicitada para documentos que deberían ser impresos por ley debe aplicar a todos los documentos electrónicos, incluso aquellos que no estén destinados por ley a ser impresos. Otorgar una certificación y un repositorio digital desde donde se pueda bajar una copia para la comprobación de su autenticidad es básica para dejar atrás el ciclo del papel.

Finalmente

Queremos realidades, no leyes bonitas. Desde el 2009 la Ley del Registro Civil contempla la digitalización del registro civil venezolano, la otorgación de un número único de identidad desde el nacimiento a los venezolanos y la vacatio legis era de 12 meses apenas.

Ya es mitad del año 2013 y nada de esto está si quiera en los planes de los burócratas.

No queremos una ley que esté hecha a medida del gobierno, un gobierno que le encanta la propaganda, firmar papelitos y mostrarlos como hechos. Queremos hechos que se hagan conocidos porque son realidad no porque los repiten y los repiten en los micros del gobierno pero que al ir a una institución pública no tienen ni idea de qué se les está hablando. (Que es lo que pasa con los registros y la ley del Registro Civil).

Comentarios a @joseluisrivas o @ghostbar.

07 May, 2013 11:23PM

March 25, 2013

hackergotchi for Lisandro Damián Nicanor Pérez Meyer

Lisandro Damián Nicanor Pérez Meyer

Entrevista en La Nueva Provincia

Hace unos dias Guillermo Burastero me llamó para comentarme que le habían pedido una nota en el diario local de Bahía Blanca, La Nueva Provincia, para que habláramos de software libre. La entrevista se concretó y he aquí el resultado (y acá en PDF).

Hice algunas menciones a Debian, pero bueno, no todo es posible a veces :-)

Tip: los nombres no coinciden con las fotografías. Les dejo adivinar el orden correcto ;-)

25 March, 2013 12:42PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)

March 18, 2013

Día de la libertad del hardware

El sábado 20 de Abril se va a llevar a cabo el Hardware Freedom Day en todo el mundo, y Argentina no es excepción. Este año tenemos la suerte que se realice en dos lugares: La Plata (que cuenta con Alejo como uno de los coordinadores) y Buenos Aires.

A mi me van a quedar un poco lejos, pero invito al que pueda a acercarse al evento.

No se lo pierdan :-)

18 March, 2013 03:13PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)

November 23, 2012

Aprendiendo sobre LDAP

En mi trabajo ha surgido la necesidad de crear una infraestructura de LDAP+kerberos, que voy a montar sobre (adivinaron) Debian. Si bien en la web hay varios artículos al respecto, ésto es lo que les recomiendo dentro de lo que vengo leyendo:
Un problema general que me he encontrado en convertir los ejemplos de configuraciones de slpad.conf al formato manejado dentro del mismo árbol de LDAP. Pero si hubiese leído las cosas en el orden que puse arriba, me hubiese sido mas fácil de entrada :-)

Un amigo me recomendó mirar la wiki de DebianLan para lograr un setup mucho más rápido. Todavía no he llegado a ésa parte.

23 November, 2012 07:40PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)

November 02, 2012

¿Tu sesión de KDE está leeeeenta? Chequeá tu interface de loopback


Mientras reviso los bugs del equipo Qt-KDE de Debian, no es raro encontrar gente que reporta que se sesión de KDE está muy lenta. La gran mayoría de las veces el problema es que la interfaz de loopback (aka lo) no está habilitada. A veces el usuario hizo algo mal, a veces algún manejador de redes metió la pata, pero el resultado final es el mismo: KDE está lento.

Un usuario llenó un bug en KDE upstream pidiendo por un diálogo que avise al usuario en caso de que ésto ocurra. esperemos que sea implementado :-)

Bueno, pero... ¿como chequeo de que la interfaz esté activa?

Simplemente corriendo:

$ /sbin/ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:1f:c6:ba:70:f3  
          ...

lo       Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1807 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1807 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:494525 (482.9 KiB)  TX bytes:494525 (482.9 KiB)

La última entrada "lo" nos dice que la interface está activa.

En Debian, el archivo /etc/network/interfaces debería contener algo como:

# The loopback network interface
auto lo
iface lo inet loopback

La próxima vez que tu sesión de KDE esté lenta, ya sabés por donde empezara mirar ;-)

02 November, 2012 12:23AM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)

August 26, 2012

hackergotchi for Norman García

Norman García

Libre Bus Cono Sur

Y bueno, hace unos quince meses ya (en mayo del año pasado) tuve el placer de recorrer Centroamérica en bus acompañado de un bello grupo, fue un proyecto muy bonito del que pude ser parte. Libre Bus, un bus que recorrió desde Costa Rica hasta Guatemala durante quince días.

Este año el proyecto vuelve de nuevo, pero esta vez será en el cono sur, lamentablemente no seré parte de la travesía, pero estoy seguro de que será una experiencia parecida o mejor. Durante el viaje se hablará sobre Cultura Libre, Software Libre, Libertad de Expresión, Libertad para compartir y Educación Abierta, manejando dos ejes transversales: Biodiversidad y medio ambiente y Género.

Esto arrancará el 28 de agosto en la ciudad de Valdivia en Chile y tiene programado terminar en La Plata, Argentina, serán 30 días increíbles y 8,000 kilómetros en un bus recorriendo Chile, Argentina, Uruguay y Paraguay, donde se compartirá mucho conocimiento y experiencia, así que si estás en alguno de los cuatros países que mencioné antes, revisá la agenda para que podás llegar y participar en los eventos (de paso me saludan a Teresa, Renata y Jaime con quienes estuve el año pasado 🙂

Una vez que inicie, vas a poder ir viendo fotos en flickr que el grupo de librenautas irá subiendo.

26 August, 2012 01:01AM by n0rman

August 16, 2012

hackergotchi for Lisandro Damián Nicanor Pérez Meyer

Lisandro Damián Nicanor Pérez Meyer

¡Feliz cumpleaños Debian! 19 y vamos por mas :-)


¡Feliz cumpleaños Debian! Por supuesto, vamos por mas :-)

16 August, 2012 02:56PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)

July 15, 2012

hackergotchi for Luis Uribe

Luis Uribe

Debconf 12 – Volviendo a casa

Tengo que decir que de las 4 semanas pasadas, los últimos días en Nicaragua han sido de lo mejor. Un gran equipo local, demasiados Debianitas de todo el mundo y una buena cantidad de cerve^W comida local han hecho de esta, la Debconf12 una experiencia excelente.

Pude conocer a Thomas (mi sponsor y compañero en el phpunit-team) y empaquetar una nueva versión de phpunit-selenium, colaboré un poco en el Front Desk y estuve en el videoteam trabajando con h01ger.

Ya hay muchos posts hablando de la conferencia, así que sólo dire: Mil gracias localteam (de todos los que pude despedirme y de los que no) y nos vemos en la Debconf13 en Suiza

15 July, 2012 04:40PM by luisuribe

July 11, 2012

hackergotchi for William Vera

William Vera

By: xbytemx

No se si sea post post install pero yo agrego el clasico:
apt-get build-dep $(paquetes aqui)

Saludos,

11 July, 2012 09:04PM by xbytemx

June 25, 2012

hackergotchi for Norman García

Norman García

We are waiting for you!

So, six days until DebCamp and we are here working in order to have a great Debian Conference for the first time in Central America! 🙂

We are waiting for you!

 

 

25 June, 2012 07:57PM by n0rman

May 21, 2012

hackergotchi for Luis Uribe

Luis Uribe

PHPUnit 3.6 en Debian Sid (Llamado a voluntarios para pruebas)

Después de un par de meses de trabajo entre varios colaboradores y gracias al empuje final de Thomas Goirand (quién corrigió un par de mis paquetes y se encargó del paquete final de PHPUnit) desde ayer tenemos disponible  PHPUnit 3.6.10.en Debian Sid

PHPUnit es una suite de tests para PHP, y el respectivo paquete en Debian estaba roto desde la versión 3.5, ahora aquellos que tengan aplicaciones sobre PHP 5.4 van a poder realizar los tests con la última versión de PHPUnit sin necesidad de usar los repositorios de PEAR. Esto garantiza un entorno de desarrollo homogéneo y estable para desarrolladores web.

Si tu eres uno de esos te invitamos a descargar el paquete (Debian Sid por ahora, en unos 10 días en testing) sus dependencias y correr los test en tus aplicaciones para detectar bugs, así garantizamos que todo este en orden para el lanzamiento de la nueva versión estable de Debian

21 May, 2012 03:49AM by luisuribe

March 05, 2012

¡Asistiré a la DebConf 12 en Nicaragua!

Debconf 12

Debconf 12

Pues eso, ya tengo los tiquetes comprados y la gestión en la empresa para asistir a la Debconf 12 en Nicaragua, del 8 al 14 de Julio de 2012 (Aunque planeo llegar el 5 de Julio). Espero además colaborar de alguna manera con el equipo local.

Aún hay muchas formas de ayudar a la realización de este evento, así no asistas: http://debconf12.debconf.org/helpus.xhtml

05 March, 2012 04:14AM by luisuribe

January 15, 2012

hackergotchi for Luciano Bello

Luciano Bello

Corriendo Debian en un server fanless

Debido a una reciente mudanza, he bajado unos servers que tenía corriendo en casa de mis padres. Sin embargo, en mi nuevo hogar estoy en proceso de generar una nueva DMZ, esta vez, sin ventiladores.

El primer paso de este proceso ocurrió en forma de weekend project y consiste en hacerme de un "servidor". Las comillas hacen referencia a que no se trata de un gran server sino un procesador ARM de 200Mhz y 32MB de RAM, lo que es suficiente para que corra Debian y algunos otros servicios que pueden ser interesantes.

Los ingredientes

  • Un all-in-one LAN server que es la forma en que DealExtreme llama a unos dispositivos con chips de la familia str8132. Dado que vamos a instalar snake-os en ellos (en este caso se trata de la versión 1.3.2-20111019), es importante chequear la lista de compatibilidad. En particular me hice de un NS-K330 por 40 dólares.
  • Storage USB, puede ser en la forma de stick o como disco portable.
  • Un RS232 to TTL level converter, también conocido como cable para Nokia N1200/1208/1650/2630/2670. Es para conectarse por serie a la consola. No lo necesitamos ahora mismo, pero está bueno tenerlo a mano en caso de brickearlo, aunque es un procedimiento que no explicaré esta vez.

Instalación de Snake-OS

Es realmente sencillo. Lo primero es bajar snake-os, desde la sección de downloads de la web. Es importante que el archivo sea de la forma snakeos-<versión>-from-original.zip Instalar el que dice from-snake lleva definitivamente al brickearlo y recuperarlo puede ser complejo.
Desde la página de administración del dispositivo hay que subir el archivo snakeos-<versión>-from-original.bin contenido en el zip bajado. Confirmar el md5sum no está de más.

Acceso inicial

Los datos para acceder a la nueva interfaz con el browser:

http://192.168.0.240 (si es que no hay un DHCP en la red)
usuario: admin
contraseña: snake

Por SSH la contraseña de root la misma y, al cambiarla por la página de administración, se cambia en todos los accesos.

Post instalación

Incluso cuando Max opine que el uso de memoria virtual está rumbo a la extinción (lo cierto es que tal vez no es la mejor idea cuando el storage es de estado sólido como en los pendrives), activé el uso de SWAP desde el menú Service-Swapfile.

Si se quieren las mismas prestaciones que se tenían con el firmware original, hay que instalar unos paquetes adicionales. El sistema de paquetes que utiliza snake-os es opkg y tiene que ser primero activado desde Service-Opkg. Los paquetes pueden bajarse desde la página de download de snake-os y se instalan desde System-Packages. En particular, pueden ser interesantes (siempre pensando en los features originales):
Transmission: Es un cliente de BitTorrent, para dejar tus descargas corriendo. Es bastante mejor que el original.
miniDLNA: Es el server de streaming compatible con DLNA/UPnP-AV. Está un poco verde, pero se está trabajando en su mejora.

Corriendo Debian dentro

Las instrucciones están acá. Aunque esto es lo más obvio y necesario:

wget http://snake-os.googlecode.com/files/debian_chroot.tgz
tar -xvf debian_chroot.tgz
mount -o bind /proc /usb/sda1/debian/proc
mount -o bind /dev /usb/sda1/debian/dev
chroot /usb/sda1/debian/

Esta instalación base requiere unos 200MB. Tiene todo el potencial de un Debian (¡porque lo es!).
Claro que falta ajustar varios detalles, pero será la piedra inicial para el resto.

15 January, 2012 11:04PM by luciano

December 29, 2011

hackergotchi for Norman García

Norman García

Claro Nicaragua y su censura a sus clientes

Ya había tardado en escribir sobre esto, con tantas cosas por hacer, el blog no ha logrado convertirse en una prioridad y por eso olvido escribir :/

A veces cuesta pensar que en un país como Nicaragua podría existir censura a través de la Internet, siempre vemos esto como algo muy Oriente Medio y se nos olvida que también puede pasar acá, en la región centroamericana, y ya lo vivimos con el pueblo hondureño y el golpe de Estado al presidente Zelaya, la represión a través de la Internet fue vivida por muchas personas.

El 29 de noviembre pasado, un colectivo llamado “Claro que NO” decide publicar un blog como un medio donde los clientes insatisfechos con el servicio de Claro Nicaragua (empresa del grupo América Móvil, del millonario mexicano Carlitos Slim) puedan expresarse. Parece que a algunos trabajadores de CLARO Nicaragua esto no les gustó y procedieron a realizar la (para muchas personas) acción más descarada, irrespestuosa y atropelladora en contra de nosotros, los clientes de ellos, quienes mes a mes les pagamos.

A los pocos días de haber nacido este blog, la empresa en mención mandó a bloquear la dirección IP del servidor donde se aloja el blog y con esto lograron que las personas quienes tienen una conexión de Internet con CLARO no puedan visitar el sitio web.

No ha sido una vez la que yo personalmente me he quejado en twitter sobre este bloqueo y la única respuesta que he recibido por parte de ellos es “NO HEMOS BLOQUEADO NADA”.

El día 23 de diciembre el periodista Oliver Gómez se reune con Federico Michell, miembro del colectivo claro que no para reallizarle una entrevista, este mismo día, también se realiza una entrevista con la empresa CLARO Nicaragua y hasta esta fecha, los directivos de la empresa siguen sin reconocer el bloqueo hasta que un técnico hace una prueba en vivo al periodista y ya con la prueba frente a ellos, no tienen de otra que decir que si es cierto y por supuesto, aceptaron mel bloqueo hasta que se comunicaron con el Gerente General de Claro Nicaragua. Tristemente, todavía reconocen que hicieron el bloqueo ya que hay difamación en contra de ellos y calumnias.

Desde cuando un proveedor de Internet tiene potestad para cerrar descaradamente un sitio web? La Internet no supone ser libre? CLARO Nicaragua puede bloquear un sitio web donde sus clientes manifiestan sus descontentos? Los clientes de una empresa tienen todo el derecho de quejarse por un mal servicio prestado y la empresa proveedora de Internet no tienen ningún derecho de, a criterio propio, bloquear sitios web.

Pero cosas como estás no se leen en los medios de comunicación escrita como La Prensa, El Nuevo Diario, Confidencial, La Brújula, pues no se han atrevido a escribir un reportaje sobre esto. Sí, Confidencial y La Brújula publicaron algo, pero lo hicieron en secciones de reporte ciudadano y “libre expresión”, donde se quitan un peso de encima con la empresa CLARO al ser secciones del periódico escrita por sus lectores, pues no se atreven a hacer un reportaje periodístico de verdad. Igual los canales de televisión o radios, nadie se ha atrevido a hablar al respecto, por temor a perder el dineral que les da CLARO por publicidad.

Todos los medios de comunicación son expertos en poner en primera plana reportajes en contra del gobierno, pero ninguno se atreve a hablar de la censura impuesta por una mega empresa como CLARO, es triste ver como medios de comunicación que están “al servicio y la verdad de la justicia” se hacen los sordos cuando se les pregunta si piensan defender a la población y denunciar una censura. Igual los grupos juveniles que defienden la libertad de expresión que tenemos como ciudadanos, solo saben defender la libertad si es algo del gobierno, pero cuando es una empresa privada, lo olvidan.

Fue hasta el día miércoles 28 de diciembre, que el periodista Oliver Gómez publica un artículo sobre este caso en El Nuevo Diario, una labor increible e inesperada, no nos imaginabamos que esto iba a llegar a pasar. En dicho artículo, Azalia Salmerón, Gerente de Comunicación Corporativa de Claro, explicó que el bloqueo lo realizaron aduciendo que no toleran el libertinaje, WTF? somos sus clientes y si nos quejamos no es por difamar, es que no nos brindan un buen servicio. No es posible que nuestro proveedor tilde de difamaciones y calumnias las quejas nuestras.

Que dicen ustedes? felicitamos a Claro Nicaragua por darnos el «lujo» de expresarnos?

29 December, 2011 05:43AM by n0rman

December 12, 2011

hackergotchi for Norman Garc&iacute;a

Norman García

Hello Debian Planet

I must confess, I thought only DD’s can be on the Debian Planet and a few days ago I read someone telling me that I must add my blog to the planet, so I went to the Planet wikipage and I saw that Planet Debian is for any active and directly involved participant in the Debian development community.

This is my first post on the Debian Planet. I’m member of the DC12 Local Team and I’ll try to post here updated information about DebConf12 organization, my experience in the Debian Community (I’m starting to collaborate with Spanish translations for the Debian Plubicity Team), and other Debian-related things as well.

Our next DebConf meeting is TBD on doodle, if you are interested to participate in the meeting, please go to doodle and select the dates you are available so we can decide when is going to be the next meeting.

Hope to see you next year in Managua!


12 December, 2011 05:57PM by n0rman

July 28, 2011

Mario Izquierdo

Drivers de TDT (DVB) AverTV TwinStar 07ca:0825 en formato DKMS

Como veo que los artículos en los que he publicado los parches para el driver de este dispositivo TDT están teniendo seguimiento en este blog y harto de compilar a mano un montón de cosas en cada actualización del kernel ayer dediqué un ratillo a preparar un paquete más automático usando DKMS. DKMS  es un sistema que compila módulos del kernel en varios eventos (actualización del kernel, nuevo kernel, actualización de drivers, etc...) sin intervención del usuario. Muchos paquetes de Debian y Ubuntu lo usan (drivers de NVIDIA/ATI, VirtualBox, etc...) ¿Porqué no tenerlo para el driver AF9035? He dado de alta un  PPA en Launchpad ,  que contiene  el paquete fuente y el .deb generado  listo para instalar en cualquier distribución . El paquete sólo depende de dkms por lo que debería funcionar en i386/amd64 y desde versiones cuyo kernel sea 2.6.26 o superior (en el 3.0.0 de Debian Unstable funciona sin problemas) El paquete compila 6 módulos: af9033, dvb-core, dvb-usb-af9035, dvb-usb, mxl5007t, tua9001 que se instalan en /lib/modules/`uname -r`/updates/dkms por lo que tienen preferencia sobre los módulos instalados. Puede que rompa otros drivers de TDT pero normalmente no se suelen tener varios modelos funcionando a la vez. El paquete se ha generado partiendo del código fuente de dvb-usb-af9035, cabeceras y fuentes de la rama v4l e incluye el firmware  /lib/firmware/dvb-usb-af9035-01.fw  necesario.

28 July, 2011 12:28PM by mario

June 13, 2011

hackergotchi for Ren&eacute; Mayorga

René Mayorga

I think I can said that I’ll go to DebConf11

Well, I booked my plane tickets on March, but there was some $JOB related problems, since the company where I work is facing a merge(and I was pretty sure that I will finish being unemployed), so I was really sad that I’ll have to drop my plans and loose some money, but so far everything looks ok, I’m lucky  and the government  did not approve the merge and asked for more bureaucratic  documents, this give us one year more, so I can finally say that I’ll go to DebConf11 :)

This year I’m planning to came a bit early and stay at least two days on DebCamp, my work plan is to work on pkg-boinc’s long TODO list, I’m really happy since I missed DebConf10, long time without see some Debian friends faces :)

13 June, 2011 03:03PM by churro

May 27, 2011

hackergotchi for William Vera

William Vera

By: zodman

te falto vim-full vim-addon-manager :)

27 May, 2011 02:30PM by zodman

April 22, 2011

Nacho Barrientos Arias

Finding equilibrium

Carlos shared a pretty cool link with me this morning. Codility is a platform to help recruiters and contractors to test developers before hiring them. Both the idea and the execution are beautiful. They’ve done a stunning job.

As part of my visit to the page I gave a try to the demo test. As it was funny to solve it, I’m sharing my solution here. The problem was quite easy. It reads like this:

Equilibrium index of a sequence is an index such that the sum of elements at lower indexes is equal to the sum of elements at higher indexes. For example, in a sequence A:

A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0

3 is an equilibrium index, because:

A[0]+A[1]+A[2]=A[4]+A[5]+A[6]

6 is also an equilibrium index, because:

A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0

(sum of zero elements is zero) 7 is not an equilibrium index, because it is not a valid index of sequence A.

Assume the sum of zero elements is equal zero. Write a function int equi(int[] A); that given a sequence, returns its equilibrium index (any) or -1 if no equilibrium indexes exist. Assume that the sequence may be very long.

They gave me 30 minutes to design, code and test my solution. Here it is (tests omitted):

import operator
 
def equi(A):
  if A is None or len(A) == 0:
    return -1
  lsum = index = 0
  rsum = reduce(operator.add, A[1:], 0)
  while True:
    if lsum == rsum:
      return index
    index += 1
    if index == len(A):
      return -1
    else:
      lsum += A[index-1]
      rsum -= A[index]

It scores 100/100 and runs in linear time (that’s tricky because O(n2) algorithms will cause performance tests to fail) :)

22 April, 2011 12:41PM by Nacho Barrientos

March 29, 2011

Local public transportation in my pocket

I’ve lately spent some time developing a webapp for mobile devices to interact with some of the data published by the Gijón City Council. More specifically, data about local public land transportation schedule and live arrivals. The way they are presenting that information for mobile devices at the moment is very very heavy and slow, so I thought it may be useful to do something simpler for personal usage.

Basically, it is a simple web service that intensively caches data (to avoid stressing the data origin with many requests) and a fancy AJAX-powered frontend with some CSS with mobile browsers in mind (works flawlessly on Android’s browser and Mobile Safari). Additionally, if you add it as a bookmark to your iPhone’s home screen it behaves like a native application (you know, splash screen, custom icon, taskbar and so on).

I’m now working on client-side caching using HTML5 caching for offline usage. This way the application will boot way faster. It’s almost done, but it still needs some debugging.

I don’t intend to make it public for now. However, if you find it useful feel free to drop me a line. Beta testers are always welcome (but unfortunately won’t be rewarded).

This is how it looks like at the moment. The source will be released soon.

Update (23:26): Android screenshots provided by Javier Pozueco. Thanks buddy!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

29 March, 2011 12:08PM by Nacho Barrientos

March 24, 2011

Mario Izquierdo

Nuevo modelo Multiseat 8840

Hace unas semanas hemos comprado directamente el fabricante (Asia) un nuevo modelo de ZeroClient o también conocido como MultiPoint/MultiSeat: MWS8840 Afortunadamente el chipset es el mismo que el anterior MWS300 y funciona correctamente. Es más, con gran sorpresa veo que los vídeos de Youtube funcionan a pantalla completa . El dispositivo tiene una entrada USB (que se conecta al servidor de terminales)  una entrada de alimentación (5V - 3A), entrada de micro, salida de audio y 4 puertos frontales USB 2.0 (en dos de ellos se conecta el teclado y el ratón). Además este modelo trae una peana para colgarlo en la parte trasera de un monitor TFT o ponerlo en vertical. Aquí podeis ver unas cuantas fotos. El tamaño de la caja es de aproximadamente 10cm x 10cm          En breve lanzaremos desde Thinetic una completa y económica solución comercial con estos aparatos tan prometedores, y todo ello con Software Libre .

24 March, 2011 10:42PM by mario

Nacho Barrientos Arias

Search term completion using a search tree

Google search box completion

*lol*

Nowadays it’s very usual to find websites offering hints while you’re typing on a search box. Google is a pretty good example of it. But, how could it be implemented?

This feature could be implemented either in the client side or in the server side. If the word list is big (usually it is), it’s recommended to keep the lookup logic in the server side to save some bytes while transferring the page to the client and also to save some computing power using server-side caches (cool when you plan to serve many requests).

Either way, there should be a data structure somewhere containing the word list and an algorithm to do the lookup. The simplest approach may be to use a list to store the words and issue something like this when you want to get a list of hints for a given prefix:

filter(lambda x: x.startsWith(prefix), word_list)

That’s Python’s filter, but it works the same way the well-known Haskell’s first-order function filter does. It builds a new list with the elements of the original list (word_list) that match the predicate (the lambda function).

Although the results can (and should) be cached, the very first lookup (or when the cache expires) would be very inefficient because the entire list must be traversed and that operation will take linear time. Not bad, but when the size of the problem gets bigger (i.e. more and more words in the database) the lookup process may be too slow, especially whether you’re serving several users at the same time. If the list was sorted, the execution time could be improved a little bit by writing a more sophisticated algorithm, but let’s keep it that way for now.

Fortunately, there are better and faster ways to face the problem. If you don’t want to write code (usually the best choice) you may use some high-performance indexing engine such as Apache Lucene. But if you prefer the ‘do-it-yourself’ way (for learning purposes), a search tree (more specifically, a trie or a prefix tree) is a good approach.

I’ve poorly benchmarked both alternatives (the list and the tree) and as expected the tree is pretty quicker generating hints. What I did was to feed both data structures with the content of an American English word list holding ~640k words (debian package wamerican-insane).

So, assuming four is a reasonable minimum prefix length, I measured the time it would take to get a list of words prefixed by hous (yes, just one, remember I said this was a poor benchmark? ;). Unsurprisingly, it took around 230 times longer for the list alternative to generate the hints (438.96 ms vs 1.92 ms). Wow.

My implementation of the tree is as follows. The API is quite straightforward, the “hot” methods are put and get_hints. I’ve stripped off the test suite for space reasons.

Usage example:

>>> tree = HintSearchTree()
>>> tree.put("nacho")
>>> tree.put("nachos")
>>> tree.put("nachete")
>>> tree.get_hints("nach")
['nachete', 'nacho', 'nachos']
>>> tree.get_hints("nacho")
['nacho', 'nachos']
>>> tree.delete("nacho")
>>> tree.get_hints("nacho")
['nachos']
>>> tree.count_words()
2
>>> tree.get_hints("n")
['nachete', 'nachos']
>>> tree.is_indexed("nachete")
True
>>> tree.is_indexed("nach")
False
>>> tree.empty()
False
class HintSearchTreeNode(object):
class HintSearchTreeNode(object):
  def __init__(self, parent=None, terminal=False):
    self._children = {}
    self._terminal = terminal
    self._parent = parent
 
  @property
  def children(self):
    return self._children
 
  @property
  def terminal(self):
    return self._terminal
 
  @terminal.setter
  def terminal(self, value):
    self._terminal = value
 
  @property
  def parent(self):
    return self._parent
 
class HintSearchTree(object):
  def __init__(self):
    self._root = HintSearchTreeNode()
 
  def put(self, word):
    """Adds a word to the tree."""
    # TODO: Sanitize 'word'
    if len(word) &gt; 0:
      self._put(self._root, word)
 
  def count_words(self):
    """Retrieves the number of indexed words in the tree."""
    return self._count_words(self._root)
 
  def is_indexed(self, word):
    """Returns True if 'word' is indexed."""
    node = self._find(self._root, word)
    return node is not None and node.terminal is True
 
  def get_hints(self, prefix):
    """Returns a list of words prefixed by 'prefix'."""
    return self._match_prefix(self._root, prefix)
 
  def delete(self, word):
    """Deletes 'word' (if exists) from the tree."""
    terminal = self._find(self._root, word)
    if terminal is not None:
      terminal.terminal = False
      self._prune(terminal.parent, word)
 
  def empty(self):
    """Returns True if the tree contains no elements."""
    return len(self._root.children) == 0
 
  def _put(self, node, word, depth=0):
    next_node = node.children.get(word[depth])
    if next_node is None:
      next_node = HintSearchTreeNode(parent=node)
      node.children[word[depth]] = next_node
    if len(word)-1 == depth:
      next_node.terminal = True
    else:
      self._put(next_node, word, depth+1)
 
  def _count_words(self, node):
    words = 1 if node.terminal is True else 0
    for k in node.children:
      words += self._count_words(node.children[k])
    return words
 
  def _match_prefix(self, node, prefix):
    terminal = self._find(node, prefix)
    if terminal is not None:
      return self._harvest_node(terminal, prefix)
    else:
      return []
 
  def _harvest_node(self, node, prefix, path=""):
    hints = []
    if node.terminal is True:
      hints.append(prefix + path)
    for k in node.children:
      hints.extend(self._harvest_node(node.children[k], prefix, path+k))
    return hints
 
  def _find(self, node, word, depth=0):
    if depth == len(word):
      return node
    else:
      child = node.children.get(word[depth])
      if child is not None:
        return self._find(child, word, depth+1)
      else:
        return None
 
  def _prune(self, node, word):
    if self._count_words(node.children[word[-1]]) == 0:
      del node.children[word[-1]]
      if len(node.children) == 0 and node.parent is not None \
          and node.terminal is not True:
        self._prune(node.parent, word[:-1])

The code is released in the public domain.

24 March, 2011 11:31AM by Nacho Barrientos

February 24, 2011

Some Perl to redirect HTTP requests

After almost a year without publishing a single post, it seems this week I’m going to beat all my records.

A week ago, I wanted to prank my brother for a while. Nothing sophisticated… just some Iptables rules, Tinyproxy and HTTP magic. To go ahead with my evil plans, I needed “something” able to redirect a HTTP request. Actually, there are several ways to do that: Apache redirects, Tornado, Netcat* and so on. These alternatives are fast, bulletproof and time-saving, but not fun.

As many of you probably know, I didn’t get a job yet. That necessary means that I’ve got plenty of free time to waste. So… what did I do? I wrote some Perl and today I’m publishing the source code just in case someone finds it useful somehow. Like the previous entry, it’s published in the public domain.

The script just collects connections, issues 301 back (Moved Permanently) and sets Location to the URI specified as a command line argument (option -u). It lacks some security checks (left as an exercise to the reader) but it does what it is supposed to do. You may likely spot some silly bugs as I haven’t spent much time reading it again. Reports are welcome!

For those wondering, the prank was a big success. I’m afraid I can’t spare any detail by now but it turns out my bro is still thinking that his computer has been cracked.

Example invocation:

$ perl redir.pl -p 7070 -v -t 3 -u http://31337.pl
2011/02/24 21:41:54 Listening on port 7070
2011/02/24 21:41:54 Redirecting HTTP requests to: ‘http://31337.pl’
2011/02/24 21:41:54 3 thread(s) working under the hood

And finally the source code:

use warnings;
use threads;
 
use Thread::Queue;
use POSIX;
 
use IO::Socket::INET;
use HTTP::Request;
use HTTP::Status qw(:constants status_message);
 
use Getopt::Long;
use DateTime::Format::HTTP;
use Data::Validate::URI qw(is_http_uri);
use Log::Log4perl qw(:easy);
 
use constant MAX_THREADS => 10;
use constant MAX_LEN_HEADERS_BUFFER => 8*1024;
use constant DEFAULT_REDIRECT_URI => "http://www.example.org";
use constant DEFAULT_PORT => 80;
use constant DEFAULT_POOL_SIZE => 3;
 
my $redir_uri = DEFAULT_REDIRECT_URI;
my $server_port = DEFAULT_PORT;
my $thread_pool_size = DEFAULT_POOL_SIZE;
my $verbose;
 
GetOptions('url=s' => \$redir_uri, 
           'port=i' => \$server_port,
           'threads=i' => \$thread_pool_size,
           'verbose'  => \$verbose) or exit -1;
 
die "Invalid redirect URI (e.g. http://www.example.org)\n" unless is_http_uri($redir_uri);
die "Invalid port (e.g. 8080)\n" unless 0 < $server_port && $server_port < 2**16;
die "Invalid pool size (should be in [1..".MAX_THREADS."])\n" 
            unless 0 < $thread_pool_size && $thread_pool_size <= MAX_THREADS;
 
Log::Log4perl->easy_init( level => $verbose? $DEBUG : $INFO );
 
my $pending = Thread::Queue->new(); 
 
my $lsock = IO::Socket::INET->new( LocalPort => $server_port,
                                   Proto => 'tcp',
                                   Listen => 1,
                                   Reuse => 1 ) or die "Couldn't bind listening socket ($!)\n"; 
 
INFO("Listening on port $server_port\n");
INFO("Redirecting HTTP requests to: '$redir_uri'\n");
 
my @workers = ();
for (1..$thread_pool_size) {
    if ($thread = threads->create("worker")) {
        push(@workers, $thread);
    }
}
 
DEBUG(sprintf("%d thread(s) working under the hood\n", $#workers+1));
 
# Set a tidy shutdown just in case an external agent SIG{INT,TERM}s the process
$SIG{'INT'} = $SIG{'TERM'} = sub {
    # Dirty hack. threads->kill() does not wake up the thread :(
    for (1..@workers) {
        $pending->enqueue(-1);
    }
    for (@workers) {
        DEBUG(sprintf("Worker %d terminated: %d clients served\n", $_->tid, $_->join())); 
    }
    close($lsock); 
    exit 0; 
};
 
while(1) {
    my $csock = $lsock->accept() or next;
    $pending->enqueue(POSIX::dup(fileno $csock));
    DEBUG(sprintf("New client enqueued: %s:%s\n", $csock->peerhost, $csock->peerport));
    close($csock);
}
 
sub worker {
    my $clients_served = 0;
    while(my $fd = $pending->dequeue) { # API promises thread safety :-)
        if ($fd == -1) {
            return $clients_served;
        }
 
        my $sock = IO::Socket::INET->new_from_fd($fd, "r+");
        DEBUG(sprintf("Dequeued client %s:%d by worker %d.\n", $sock->peerhost,
                            $sock->peerport, threads->tid()));
 
        my $buf = "";
        while(<$sock>) {
            # CAUTION: there isn't any self protection against very long lines
            last if /^\r\n$/;
            $buf .= $_;
            goto BYE if length $buf > MAX_LEN_HEADERS_BUFFER;
        }
 
        if (my $request = HTTP::Request->parse($buf)) {
            INFO(sprintf("[%s] %s {%s}\n", $request->method, $request->uri, $sock->peerhost));
        }
 
        printf $sock "HTTP/1.1 %d %s\r\n", 
            HTTP_MOVED_PERMANENTLY, status_message(HTTP_MOVED_PERMANENTLY);
        printf $sock "Date: %s\r\n", DateTime::Format::HTTP->format_datetime;
        print $sock "Location: $redir_uri\r\n";
        print $sock "Server: Simple HTTP Redirection/0.1 ($^O)\r\n";
        print $sock "Connection: close\r\n";
        print $sock "\r\n";
 
BYE:  
        $clients_served++;
        close($sock);
    }
}

(*) just an approach, may drop connections:

while [ 1 ]; 
 do echo -e "HTTP/1.1 301 Moved Permanently\r\nLocation: http://31337.pl\r\n\r\n" | nc -l 7070; 
done

24 February, 2011 09:55PM by Nacho Barrientos

February 23, 2011

Reverse Polish Notation Evaluation in Python

This introduction is followed by some Python code (function evaluate_postfix_expr) to evaluate expressions (only integers, but may be extended with ease) in Reverse Polish Notation (RPN). Some simple tests are also included in the bundle.

I agree it’s a little useless, but I thought it might be useful for someone (CS students maybe?). If you want to examine the stack in each iteration you only have to turn debugging on. That can be accomplished by changing logging.INFO to logging.DEBUG (line 7).

Copy, distribute or do whatever you want with it. It’s released in the public domain.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env python
 
import logging
import re
import unittest
 
logging.basicConfig(level=logging.INFO)
 
operators_table = {'+': int.__add__, 
             '-': int.__sub__,
             '*': int.__mul__,
             '/': int.__div__,
             '^': int.__pow__}
 
class ExpressionError(Exception):
    def __init__(self, message):
        self._message = "Expression error: %s" % message
    def _get_message(self): 
        return self._message
    message = property(_get_message)
 
class TestEvaluation(unittest.TestCase):
    def test_correct(self):
        self.assertEqual(666, evaluate_postfix_expr("666"))
        self.assertEqual(2+3-6, evaluate_postfix_expr("2 3 + 6 -"))
        self.assertEqual(2*3+4, evaluate_postfix_expr("2 3 * 4 +"))
        self.assertEqual(2*(3+4), evaluate_postfix_expr("2 3 4 + *"))
        self.assertEqual(3**4, evaluate_postfix_expr("3   3  *     3  *      3 *"))
        self.assertEqual((7/2)**4, evaluate_postfix_expr("7 2 / 4 ^"))
        self.assertEqual((2**3)**4, evaluate_postfix_expr("2 3 ^ 4 ^"))
        self.assertEqual(5+((1+2)*4)-3, evaluate_postfix_expr("5 1 2 + 4 * 3 - +"))
 
    def test_malformed(self):
        self.assertRaises(ExpressionError, evaluate_postfix_expr, "+")
        self.assertRaises(ExpressionError, evaluate_postfix_expr, "2 +")
        self.assertRaises(ExpressionError, evaluate_postfix_expr, "+ 2 2")
        self.assertRaises(ExpressionError, evaluate_postfix_expr, "2 2")
        self.assertRaises(ExpressionError, evaluate_postfix_expr, "2 2 + -")
        self.assertRaises(ExpressionError, evaluate_postfix_expr, "a 2 -")
 
def evaluate_postfix_expr(expr):
    atoms = re.split(r"\s+", expr)
    stack = [] 
    for atom in atoms:
        if atom in ["+", "-", "*", "/", "^"]:
            try:
                op2 = stack.pop()
                op1 = stack.pop()
            except IndexError:
                raise ExpressionError("Too few operands (unbalanced)")
            logging.debug("Calculating %d %s %d" % (op1, atom, op2))
            atom = operators_table[atom](op1, op2)
        else:
            try:
                atom = int(atom)
            except ValueError:
                raise ExpressionError("Unable to parse '%s' as integer" % atom)
 
        try:
            stack.append(atom)
        except MemoryError:
            raise ExpressionError("Too long expression")
 
        logging.debug("Pushed element %d. Stack status: %s" % (atom, stack))
 
    if len(stack) == 1:
        return stack.pop()
    else:
        raise ExpressionError("Too many operands (unbalanced)")
 
if __name__ == "__main__":
    unittest.main()

23 February, 2011 12:03AM by Nacho Barrientos

February 19, 2011

Mario Izquierdo

Drivers de TDT (DVB) AverTV TwinStar 07ca:0825 para kernel 2.6.37

Esta es la continuación de otro  artículo de hace más o menos un año , en estos días en Debian unstable ha entrado una nueva versión del kernel (2.6.37) y las anteriores fuentes ya no compilan. Las nuevas instrucciones quedan así (el nuevo parche disponible  aquí ): 1.- Descargar nueva rama v4l: hg clone http://mercurial.intuxication.org/hg/s2-liplianin/ cd s2-liplianin zcat s2-liplianin-af9035-af9033.diff.gz | patch -p1 2.- Añadir al v4l/.config estas líneas: ############################### CONFIG_DVB_AF9033=m CONFIG_DVB_USB_AF9035=m CONFIG_MEDIA_TUNER_TUA9001=m ##############################   3.- Compilar make   4.- Instalar en un temporal make install DESTDIR=`pwd`/tmp 5.- Copiar al directorio de módulos del kernel sudo cp -ra tmp/lib/modules/$(uname -r)/kernel/drivers/media/ \             /lib/modules/$(uname -r)/updates/v4l sudo depmod -a 6.- Reiniciar y disfrutar (del hardware porque de la tele últimamente no mucho)   UPDATE . Para el kernel 2.6.38 nuevo parche:  aquí

19 February, 2011 03:18PM by mario

February 03, 2011

Gestión de dispositivos extraíbles en MultiSeat

Hacía tiempo que programar me aburre (según que cosas claro) pero el fin de semana pasado me lo he vuelto a pasar como un niño escribiendo código.   Problema:   En la Consejería de Educación de la Comunidad de Madrid han empezado a usar un nuevo invento llamado Multiseat ( Microsoft lo llama Multipoint ) que consiste en unos pequeños aparatos que de una forma lógica vienen a ser un HUB USB que contiene una tarjeta de vídeo, una tarjeta de sonido, y 4 puertos USB, si conectamos varios (pongamos seis) en un equipo automáticamente multiplicamos los puestos disponibles en ese equipo (por USB conectamos un teclado y un ratón a cada Multiseat) (puedes  ver algún detalle más en la web de Thinetic Systems )   El cómo hicimos andar todo este montaje es otra historia que algún día contaré, pero lo que hoy nos centra es un pequeño problema, y es la gestión de los dispositivos de almacenamiento que se conectan a los puertos USB del Multiseat, para que todos lo entendamos, cuando conectamos una memoria USB se conecta físicamente al servidor (con un HUB USB por el medio) y teníamos que inventar una manera de que sólo pudiera verlo/usarlo el usuario sentado directamente en ese puesto. Ya os adelanto que en Microsoft aún no lo han conseguido (que yo sepa) .   Solución:   En los sistemas basados en Linux durante los últimos años se han venido usando distintas soluciones para el automontaje de discos extraibles (usbmount, HAL, DeviceKit), ahora estamos en la era de  UDisk . Es un software que se conecta al gestor de dispositivos del kernel (udev) mediante unas reglas (/lib/udev/rules.d/80-udisks.rules) y crea un bus de sistema (en dbus) donde expone todo lo que encuentra, así las aplicaciones que quieran gestionar un dispositivo sólo tienen que escuchar esos eventos.   UDisks permite inhibir el montaje (sigue reconociendo lo que enchufamos pero advierte en dbus que está inhibido y no realiza ninguna acción) por lo que no se montan los dispositivos automáticamente, a este inhibidor se le puede pasar un comando que cuando termine deje de inhibir... un ejemplo de uso práctico es el asistente de instalación gráfico que usa Ubuntu (ubiquity) y que inhibe el montaje de dispositivos (por razones obvias) durante la modificación de particiones y la instalación.   Nuestra primera aplicación a desarrollar es un demonio que se conecte al bus del sistema, escuche los dispositivos que se conectan y desconectan, leemos sus propiedades y a partir de ellas adivinamos (por el DEVPATH) en que puesto Multiseat se ha conectado para entonces montarlo con privilegios exclusivos para ese usuario y crearle un icono en el escritorio para que pueda desmontarlo. Este demonio decidí programarlo en python y lo bauticé como  multiseat-udisks.py  se ejecuta cuando (al arranque) encuentra los puestos MultiSeat (subcarpetas en /dev/usbseat)   Ya tenemos solucionado que los dispositivos de almacenamiento se automonten en su sitio y con sus permisos, ahora viene cuando el usuario quiere extraerlo, GNOME crea un icono en el escritorio con nuestro pendrive, realmente no es un archivo y con el inhibidor por el medio no lo va a crear por lo que modifiqué multiseat-udisks.py para que crease un lanzador *.desktop especial con la línea mágica « X-multiseat-desktop=x » siendo x el puesto donde esta montado (subcarpeta de /dev/usbseat ).   Para desmontar tenemos dos problemas, primero el usuario no es root y como el dispositivo no está en fstab no le va a dejar desmontarlo, y segundo ese icono del escritorio nos permite abrir el contenido del dispositivo de memoria pero no extraerlo de manera segura (sync && umount) lo primero que se me ocurrió es hacer una extensión para Nautilus (gestor de archivos de GNOME) para que cuando se haga click derecho sobre un archivo *.desktop busque la línea mágica y, si existe, añada una entrada a ese menú derecho del tipo « Desmontar dispositivo extraíble multiseat », cuando se pulse sobre esa opción se llama al proceso de desmontar. Esta extensión (también escrita en Python) la bauticé como  nautilus-umount-multiseat.py     Para el problema de los privilegios tuve que programar la tercera ficha de este puzle, una pequeña aplicación en C (instalada con bit SUID) y que eleva privilegios a root para llamar al comando de desmontaje  umount.multiseat.c . Muchas aplicaciones de montar y desmontar (instaladas en /sbin) van con el BIT SUID por lo que me parece una manera bastante estandar de hacerlo y más teniendo en cuenta que los usuarios que usan MultiSeat pueden estar en un LDAP.   Cuando la extensión de Nautilus detecta que el icono es de un dispositivo conectado a un Multiseat, llama a esta aplicación que eleva los privilegios a root (mediante setuid(0) ) y llama a multiseat-udisks.py con 2 argumentos, el primero es el dispositivo montado (ejemplo: /dev/sdc1 ) y el segundo que se genera dentro del programa C es el UID (identificador numérico del usuario que quiere desmontarlo). El script multiseat-udisks hace una serie de comprobaciones para que los parámetros sean correctos y que el usuario pueda desmontar ese dispositivo (que el punto de montaje le pertenezca) lo desmonta y limpia tanto la carpeta donde se ha montado como el icono del escritorio.   El sistema lo hemos probado en varias instalaciones y funciona a la perfección, más tarde convertí el código en paquete *.deb y a instalar en los centros...   El motivo por el que me he vuelto a divertir programando es que nadie había hecho algo del estilo y la documentación que podía buscar por internet solo se centraba en el uso de cada herramienta o API por separado por lo que el desarrollo ha sido desde cero hasta algo terminado y funcionando.   Siento el tostón técnico pero a algunos nos gusta contar nuestras frikadas

03 February, 2011 12:56PM by mario

January 15, 2011

hackergotchi for Miriam Ruiz

Miriam Ruiz

“La Ley del Código”, en Mundo Babel de Radio 3 (RNE)

Este sábado he tenido el placer de poder participar en el programa radiofónico Mundo Babel de Juan Pablo Silvestre, en Radio 3 de RNE con dos grandes personas a quienes admiro mucho: Javier de la Cueva (abogado, creador, luchador y gran amigo) y Pedro Martínez García (fiscal del tribunal superior de justicia de Madrid), bajo el título de “la ley del código”, y en el que también ha participado Ana Morente, en el que hemos estado hablando tranquilamente de cosas como WikiLeaks, hacktivismo, la Ley Sinde o los derechos en la red, acompañados de una música muy excelentemente escogida, y que me ha gustado mucho. El audio está ya disponible online, y se puede descargar desde este enlace.

15 January, 2011 07:03PM by Miry

December 22, 2010

La Cultura y los Derechos Humanos

Llevo hace tiempo queriendo hacer una entrada sobre el enfrentamiento entre dos derechos que a veces se ven como contrapuestos: El derecho a ganarse la vida con la creación artística y cultural, y el derecho de todas las personas a acceder y participar de la cultura. He decidido finalmente hacerlo, tras la victoria política de ayer, con la no aprobación en la comisión de economía del congreso de la Ley Sinde, y a raiz de una de las falacias que publica Eduardo Bautista en un boletín de la SGAE: “desde que en los rescoldos de la Revolución Francesa el insigne Beaumarchais consiguiera incluir entre los Derechos del Hombre el solemne reconocimiento de los Derechos de Autor, o lo que es lo mismo, el respeto a que solo el autor pueda decidir el futuro y destino de sus obras y de los rendimientos económicos que estas generen.”
 
Esta relación lógica es, además de falsa, absurda.
 
El Artículo 27 de la Declaración Universal de los Derechos Humanos, dice dos cosas:
  • Toda persona tiene derecho a tomar parte libremente en la vida cultural de la comunidad, a gozar de las artes y a participar en el progreso científico y en los beneficios que de él resulten.
  • Toda persona tiene derecho a la protección de los intereses morales y materiales que le correspondan por razón de las producciones científicas, literarias o artísticas de que sea autora.
Esto quiere decir que, evidentemente, cualquier persona tiene derecho a obtener beneficios de las creaciones científicas, literarias y artísticas que realice, o en las que contribuya, pero no a costa de limitar el acceso de otras personas a las mismas. Ninguno de los dos derechos es superior al otro, y no se dice en ninguna parte que el modelo económico que sustente esto deba de ser el de la restricción del acceso de las personas a estos contenidos. Más bien al revés.
 
Evidentemente el definir lo que es cultura, entretenimiento y arte no es algo obvio, pero tampoco se puede estar jugando a un doble juego. Si la ciudadanía está financiando el desarrollo de diversas producciones, como por ejemplo las cinematográficas, por considerarlas cultura, lo que nos hace coproductores de las mismas a todas las personas que pagamos impuestos, lo que no tiene ningún sentido es que esta consideración de dercho público no se mantenga para su uso y compartición. En última instancia, en mi opinión, habría que reelaborar la regulación de la cultura en la línea que realmente marcan los Derechos Humanos, y no intentar forzar una solución totalitarista para intentar hacer andar a un caballo muerto.

22 December, 2010 07:03PM by Miry

November 08, 2010

Mario Izquierdo

Flasheando Nexus One con CyanogenMod 6.1.0-rc1

Seguir los pasos escrupulosamente, no me responsabilizo de posibles daños en tu teléfono. Este proceso es para teléfonos nuevos, si has flasheado alguna ROM antes quizás te sobre algún paso.   Descargar herramientas necesarias Fastboot . Android SDK  (necesitamos el adb) ROM y Google APPS  (ACTUALMENTE update-cm-6.1.0-RC1-N1-signed.zip y gapps-hdpi-20101025-signed.zip) Radio en versión zip FRF50-radio-4_06_00_12_7.zip Recovery 1.8.0.1 recovery-RA-nexus-v1.8.0.1-aw.img   Descomprimimos el zip del fastboot y el SDK (copiar el binario adb de la carpeta tools) y arrancamos el teléfono en modo fastboot (power+trackball) Desde consola ejecutamos sudo ./fastboot devices (deberá salir un número de serie HTXXXXXXXX y luego la palabra fastboot) Desbloqueamos el terminal (con esto se pierde la garantía) sudo ./fastboot oem unlock En el teléfono aparece (muy bien explicado lo que estamos haciendo) pulsar Vol Up y después Power para desbloquear. Ahora volvemos a arrancar en modo fastboot (Power + Trackball) para instalar el recovery sudo ./fastboot flash recovery recovery-RA-nexus-v1.8.0.1-aw.img Dejamos que reinicie y volvemos a entrar a fastboot para pasar al BOOTLOADER->RECOVERY (Vol Down y Power) (Recovery se verá en verde) Ahora deberíamos ver algo parecido a GRUB con varios menus, tenemos que copiar en la SDCARD la nueva radio sudo ./adb devices (se tiene que ver nuestro teléfono) sudo ./adb push FRF50-radio-4_06_00_12_7.zip /sdcard/ sudo ./adb shell ls /sdcard/*zip (tenemos que ver el archivo que acabamos de copiar) Desde el teléfono con el trackball bajamos hasta la opción "Flash zip from sdcard", buscamos el zip del radio y pulsamos el trackball para actualizar el radio, cuando termine reiniciamos y volvemos al recovery siguiendo los mismos pasos del punto 6. Copiamos la ROM de Cyanogen y las Google APPS. sudo ./adb devices (deberíamos ver el teléfono) sudo ./adb push update-cm-6.1.0-RC1-N1-signed.zip /sdcard/ sudo ./adb push gapps-hdpi-20101025-signed.zip /sdcard/ sudo ./adb shell ls /sdcard/*zip (deben verse estos 2 archivos) Desde el teléfono vamos al menú "Flash zip from sdcard" e instalamos PRIMERO el zip update-cm-6.1.0-RC1-N1-signed.zip, cuando termine y sin reiniciar el otro gapps-hdpi-20101025-signed.zip. Antes de reiniciar hacemos wipe (volver a datos de fábrica) desde el menú del teléfono, Wipe -> Wipe data/factory reset, wipe cache, wipe dalvik-cache y reiniciamos. El primer arranque es un poco más largo de lo normal, podemos ver como se van configurando por primera vez las aplicaciones con este comando: sudo ./adb logcat

08 November, 2010 01:31PM by mario

October 03, 2010

hackergotchi for Ana Beatriz Guerrero Lopez

Ana Beatriz Guerrero Lopez

Videos de la dudesconf 2010

Los videos de la dudesconf, (la mini-debconf española) están ya disponibles en http://dudesconf.org/2010/programa.html. Una vez más, me gustaría aprovechar estas líneas para darles las gracias a todo el mundo que trabajo para hacer la tercera edición de dudesconf posible.

Poco a poco, empieza a haber mucho material en español sobre Debian, como echaba en falta tener un sitio desde donde enlazarlo todo, he creado una página en el wiki de debian: http://wiki.debian.org/VideoTalks/Spanish. Si sabes de algún video, no dudes en añadirlo :)

Actualización: Hay problemas con los enlaces de los videos de las dudesconf, espero que en unos días estará arreglado.

03 October, 2010 02:18PM by Ana

October 01, 2010

hackergotchi for Ren&eacute; Mayorga

René Mayorga

Squeeze will have Boinc 6.10.58

Thanks to the efforts made by Steffen, and recently the great work from Daniel(Boinc’s Ubuntu maintainer, and now member of pkg-boinc team) Squeeze will have boinc 6.10.58 \o/.

If you are curious you can see all changes since 6.2.14(Current version on lenny) http://packages.debian.org/changelogs/pool/main/b/boinc/current/changelog

The main feature for this release is that now nvidia and ATI users can use their GPU with boinc(they need to download the non-free libs and apply some workarounds).

And if you read trough here, and you are a boinc user and want to help us, please send an email to pkg-boinc-devel@lists.alioth.debian.org, we need freshblood there :)

01 October, 2010 05:03PM by churro

September 23, 2010

27 years

Yes, 27 years(earth year) spinning around the sun(our sun).

Almost 11 years knowing about free software, and 10 years using Debian, and almost 4 years trying to work on Debian.

At least for me is a good time to say cheers!, holding a beer and keep trying to still be around for at least 27 years more :)

23 September, 2010 05:59AM by churro

July 13, 2010

hackergotchi for Luciano Bello

Luciano Bello

/home/duijvestijn

Tengo un nuevo huésped en mi departamento. Denle una cálida bienvenida al espíritu de Adrianus Johannes Wilhelmus Duijvestijn.

Muchísimas gracias a Bartu y a Rezlaj, quienes llevaron a cabo la sesión de espiritismo necesaria para hacer esto posible.

Todas las fotos están disponibles aquí. Si no tienes la menor idea de a qué se refiere esto, échale un ojo a la Wikipedia (solo en inglés) o a mi entrada anterior.

(this post is available in English too)

13 July, 2010 05:17PM by luciano

July 02, 2010

Carlos Galisteo

Yakuake + mouse

Hay pequeñas customizaciones que, aun siendo de lo más simple, te alegran un poco la vida.

Desde hace un tiempo vengo usando yakuake casi en exclusiva como emulador de terminal, y de las pocas pegas que tenía era que a veces es un poco molesto soltar el ratón para dar a F12 solo para ver si, por ejemplo, ha terminado algo que has dejado ejecutando.

En mi caso lo he solucionado añadiendo a ~/.xbindkeysrc:

"qdbus org.kde.yakuake /yakuake/window org.kde.yakuake.toggleWindowState"
b:9

Con eso (y añadiendo xbindkeys a ~/.bashrc o similar) puedo ocultar/mostrar yakuake con el botón lateral del mouse, que es bastante cómodo.

02 July, 2010 09:40AM by admin

June 29, 2010

Convocatoria reunión ADE

El próximo día 23 de julio a las 17:30, tendrá lugar una reunión de la
Asociación Debian España en las instalaciones de la Escuela Técnica Superior de
Ingenieros de Telecomunicación
de la Universidad Politécnica de Madrid.

El orden del día será el siguiente:
- Informe de estado de la Asociación (cuentas, infraestructuras y recursos)
- Renovación de estatutos (posibilidad de poner cuota de socio)
- Renovación de la Junta Directiva
- Preparación de actividades 2010/2011 (recepción de propuestas de socios)
- Ruegos y preguntas

Una hora antes de la misma, se abrirá la posibilidad de inscribirse en la
Asociación, permitiendo así la participación en la reunión de aquellos que no
fuesen socios hasta la fecha.

Esperamos veros a todos allí y os rogamos que le deis la mayor difusión a esta
convocatoria.

29 June, 2010 10:15AM by admin

June 22, 2010

Oauthcalypse

Al final el rollazo este del mundial va a tener algo bueno. Twitter ha pospuesto el “OAuthcalypse” un mes y medio.

Esto es una buena noticia para algunos de los clientes de Twitter que hay en Debian actualmente, que todavía no tenían implementado este protocolo por una serie de razones. En algunos casos los upstream directamente no se habían dado por enterados (y han sido convenientemente avisados), aunque en los casos en los que el upstream ha implementado la feature, los paquetes no están aún subidos, por que (y ahora hablo de qwit) usan qoauth, que a pesar de llevar mucho tiempo en ITP todavía no está empaquetado.

Después de algunas discusiones sobre temas de licencias (enlaza con openssl), el ITP ha sido convenientemente «hijackeado» por uno de los mantenedores de choqok y es de suponer que en un plazo razonable al menos qwit y choqok tengan implementado el soporte de oauth (no puedo hablar por otros clientes), aunque todavía no está del todo claro cómo se van a gestionar los tokens.

¿A donde quiero llegar con todo esto? Si usas algún cliente de Twitter en Debian (o en cualquier otra distribución), deberías interesarte por si está preparado para el “apagón” y en caso contrario reportar el bug. De lo contrario a partir de agosto no podrás seguir usándolo.

22 June, 2010 07:09PM by admin

June 21, 2010

Volviendo a la vida

Después de una serie de dramáticas coincidencias con el anterior blog, el disco duro del servidor donde se alojaba y los discos de backup…vuelvo a levantarlo, con algunos cambios.

21 June, 2010 08:41PM by admin

April 16, 2010

hackergotchi for Miriam Ruiz

Miriam Ruiz

¿Qué son Linked Open Data y cómo se usan?

Entre 1989 y 1990, Tim Berners-Lee realizó una propuesta para la gestión de información de forma distribuida en base a hiperenlaces, que luego se convertiría en un estándar de presentación y enlaces entre documentos, perdiendo parte de la esencia de la propuesta inicial que proponía enlazar información. En 2001 se realiza una revisión de la propia idea base de la Web, y surge el concepto de Web Semántica que, partiendo de un catálogo de tecnologías base, como son las especificaciones de XML (“Extensible Markup Language” o lenguaje de marcas extensible), las URIs (acrónimo de “Uniform Resource Identifier”, identificador uniforme de recurso), RDF (“Resource Description Framework” o marco de descripción de recursos), RDFS o RDF Schema (extensión semántica de RDF), el lenguaje de consulta OWL (“Ontology Web Language”), el lenguaje de consulta SPARQL (arrónimo recursivo de “SPARQL Protocol and RDF Query Language”), etc.

Dentro de este paradigma de Web Semántica, surge el concepto de Linked Data (o datos enlazados), y cuya propuesta consiste fundamentalmente en ampliar la Web con una base de datos común mediante la publicación de bases de datos distribuidas y enlazadas entre ellas. En marzo de 2009 la nube de datos semánticos enlazados era ya bastante importante, y ha continuado creciendo de una forma importante desde entonces.

Por otra parte surge el concepto de Open Data, una filosofía y práctica que persigue que determinados datos estén disponibles de forma libre a todo el mundo, sin restricciones de copyright, patentes  u otros mecanismos de control. Ambos conceptos se unen en el término Linked Open Data, o datos abiertos enlazados.

El último concepto que tengo que introducir es el de la reutilización de la información del sector público (RISP). Ésta consiste en el uso de documentos que obran en poder de organismos del sector público por parte de personas físicas o jurídicas, con fines tanto comerciales como no comerciales. El sector público -y cito literalmente las palabras de la Guía Aporta- produce una gran variedad de información relativa a diferentes materias, como por ejemplo información social, económica, geográfica, meteorológica o turística y sobre empresas, patentes y educación, que es potencialmente reutilizable por los ciudadanos y por la industria de contenidos digitales.

Hay diversas administraciones que han empezado a publicar datos abiertos enlazados, tanto a nivel nacional como internacional. Entre éstos últimos se encuentra el Gobierno del Principado de Asturias, que ha liberado ya algunos datasets que se espera que vaya ampliando progresivamente.

La idea es que vayan surgiendo espontáneamente nuevos usos para esos datos, que serían inimaginables si se hubieran mantenido cautivos en las distintas bases de datos internas de las organizaciones que los gestionan. El problema es que no todo el mundo sabe muy bien cómo explotar estas fuentes de datos de una forma sencilla. Actualmente, de todas formas, existen numerosas bibliotecas en diferentes lenguajes que hacen que esta tarea muy sencilla de realizar. Por ejemplo, para el lenguaje PHP disponemos de ARC2 (“Easy RDF and SPARQL for LAMP systems”).

Con el objeto de mostrar lo sencillo que puede ser el acceso a estas nuevas fuentes de datos, en concreto a algunos de los datasets publicados por el Gobierno del Principado de Asturias (los relativos a la oferta formativa del Servicio Público de Empleo del Principado de Asturias), desde CTIC Centro Tecnológico hemos querido publicar un ejemplo, muy muy sencillo, de cómo se podrían consultar a través de un pequeño script realizado en PHP y que podría ser desplegado sin problemas en cualquier sistema LAMP. El ejemplo se puede descargar aquí.

Termino enlazando a la presentación de Sergio Fernández (aka. Wikier) en el Día W3C realizado en el Tecnimap 2010, que creo que merece la pena que la leáis si os interesa el tema.

16 April, 2010 09:25AM by Miry

December 05, 2009

La hipocresía de algunos/as artistas ( #manifiesto )

No hay mucho nuevo ya que escribir sobre el escándalo organizado por las pretensiones del Gobierno de imponernos una censura a la publicación en Internet sin el respaldo previo de un juez o jueza y la respuesta multitudinaria en forma de apoyo al manifiesto “En defensa de los derechos fundamentales en Internet”. Empiezan a aclararse ya algunas cosas, como la posibilidad de que todo esto esté relacionado de alguna forma con el poco transparente acuerdo ACTA (“Anti-Counterfeiting Trade Agreement”) que está intentando imponer USA a Europa, y que no quieren que sea sometido al escrutinio público europeo, porque sería rechazado por la ciudadanía democrática europea, y por los ISPs. O cómo, aunque la ministra de cultura esté teniendo ahora que soportar en solitario el chaparrón (ella se lo ha buscado), las órdenes, sin embargo, parecen provenir de más arriba, directamente desde el gabinete de Zapatero, de mano de José Enrique Serrano*. A nuestros políticos y políticas parece, de alguna forma, atraerles cada vez más la idea del despotismo ilustrado (“todo para el pueblo, pero sin el pueblo”), que la de la democracia (forma de gobierno en la que las decisiones colectivas son adoptadas por el pueblo mediante mecanismos de participación directa o indirecta que le confieren legitimidad a los y las representantes).

De lo que sí me gustaría hablar es de lo decepcionante que es la actitud de los “artistas” que están demandando esa reimposición de la censura y el desmantelamiento de las garantías que supone que los derechos garantizados por la Constitución solo puedan ser cercenados por un juez. Aún no he conseguido encontrar la lista completa de todas las personas firmantes del manifiesto que presentaron al ministro Sebastian solicitando estas medidas, pero sí que hay muchos nombres que han salido repetidamente en los medios. Es muy triste encontrar en esa lista a muchas personas que se han hecho famosas por defender las libertades civiles, y que ahora se quitan la careta, mostrando al mundo de forma abierta una notable hipocresía. ¿Quienes han firmado lo habrán hecho realmente con plena conciencia, o habrán sido las discográficas y los lobbies quienes les han forzado a hacerlo?
En la listas de nombres que están saliendo aparecen personas que, a estas alturas, no nos ofrecían ya ninguna confianza, porque ya se habían quitado la careta de alguna forma hace tiempo, pero aparecen otras que están resultando sorprendentes para mucha gente. La lista incluye nombres como Ana Belén y Victor Manuel, Luis Eduardo Aute, Miguel Bosé, Ana Torroja, Raphael, El Canto del Loco, La Oreja de Van Gogh o La Quinta Estación, pero también otros como Andrés Calamaro, Joaquín Sabina, Pedro Guerra, Chambao, Dover, Pereza, Estopa, Sidonie, Mägo de Oz, Celtas Cortos, Benito Kamelas, Poncho K, etc.
Lo que más duele es ver en ella a muchos y muchas artistas que han hecho fama vendiéndose como defensores de los derechos y las libertades de las personas liberales, como pseudo-hippies, idealistas… resulta muy decepcionante darse cuenta de que todo eso era mera fachada. Luego se extrañarán de que la gente sea una descreída, que estemos enmedio de una enorme crisis de valores y que nos parezcan todos iguales.
Como nota positiva, hay grupos que no he visto en ninguna de las listas, como Amaral, Alaska, Hombres G, …

De lo que sí me gustaría hablar es de lo decepcionante que es la actitud de las y los “artistas” que están demandando esa reimposición de la censura y el desmantelamiento de las garantías que supone que los derechos garantizados por la Constitución solo puedan ser cercenados por un juez. Aún no he conseguido encontrar la lista completa de todas las personas firmantes del ya famoso manifiesto del 20 de octubre, que presentaron al ministro Sebastian solicitando estas medidas, pero sí que hay muchos nombres que han salido repetidamente en los medios. Es muy triste encontrar en esa lista a muchas personas que se han hecho famosas por defender las libertades civiles, y que ahora se quitan la careta, mostrando al mundo de forma abierta una notable hipocresía. ¿Quienes han firmado lo habrán hecho realmente con plena conciencia, o habrán sido las discográficas y los lobbies quienes les han forzado a hacerlo?

En las listas de nombres que están saliendo aparecen personas que, a estas alturas, no nos ofrecían ya ninguna confianza, porque ya se habían quitado la careta de alguna forma hace tiempo, pero aparecen otras que están resultando sorprendentes para mucha gente. La lista incluye nombres como Ana Belén y Victor Manuel, Luis Eduardo Aute, Miguel Bosé, Ana Torroja, Raphael, El Canto del Loco, La Oreja de Van Gogh, Loquillo o La Quinta Estación, pero también otros como Andrés Calamaro, Joaquín Sabina, Pedro Guerra, Chambao, Dover, Pereza, Estopa, Marlango, Sidonie, Mägo de Oz, Celtas Cortos, Benito Kamelas, Poncho K, etc.

Lo que más duele es ver en ella a muchos y muchas artistas que han hecho fama vendiéndose como defensores de los derechos y las libertades de las personas liberales, como pseudo-hippies, idealistas… resulta muy decepcionante darse cuenta de que todo eso era mera fachada. Luego se extrañarán de que la gente sea una descreída, que estemos enmedio de una enorme crisis de valores y que nos parezcan todos iguales.

Como nota positiva, hay grupos que no he visto en ninguna de las listas, como Amaral, Alaska, Hombres G, … . Por otra parte, hay artistas como Carmen París o Conchita que se han distanciado del discurso “antipiratería” de las discográficas.

* Nota: Ya que la página de la Wikipedia sobre este hombre ha sido eliminada: José Enrique Serrano Martínez (Madrid, 1949): Nieto del abogado y político Francisco Martínez García, es un político español, abogado y profesor de la Facultad de Derecho en la Universidad Complutense de Madrid (Universidad de la que ha sido Secretario General). En 1987 fue Director general de Personal del Ministerio de Defensa, cuando su titular era Narcís Serra. En 1991, al ser nombrado vicepresidente del Gobierno Serra, pasa al entorno de la Presidencia. Fue subdirector del Gabinete de Felipe González en 1993 y Director de Gabinete en 1995. Entre 1997 y 2000 fue Director del Gabinete del Secretario General del Partido Socialista Obrero Español. Con la vuelta del PSOE al poder vuelve a funciones similares, al ser Jefe del Gabinete del Presidente del Gobierno de España, José Luis Rodríguez Zapatero, desde 2004.

05 December, 2009 06:10PM by Miry