November 20, 2014

Alberto Gonzalez Iniesta

LVM para torpes (III). Ampliando espacio.

¿Así que ya tienes LVM funcionando? ¿Y seguiste mi recomendación de dejar todo el espacio posible en el VG y tus LVs están justitos de espacio? ¿O te has quedado sin espacio en el VG? En este post veremos como ampliar el espacio disponible en los diferentes componentes del LVM.

Ampliar un PV

Aunque no es corriente que un dispositivo “físico” de almacenamiento pueda crecer, este caso se puede dar cuando se trata de una máquina virtualizada, en la que podríamos aumentar el tamaño su disco, o en una máquina en la que ampliemos una partición tradicional, o un RAID, usada como PV. Esta operación (la ampliación del PV), como las que siguen, se puede realizar sin problemas con todo el sistema corriendo, sin tener que parar ningún servicio o desmontar sistema de ficheros. Lo que se denomina “en caliente”. Simplemente hay que indicarle al LVM que “estire” el tamaño del PV, hasta su nuevo tamaño completo, con el comando “pvresize DISPOSITIVO“. Veamos un ejemplo:

## Originalmente el PV tenía 400MB
# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/vda3 multimedia lvm2 a-- 396.00m 356.00m
## Se amplia la partición a 500MB y se ejecuta pvresize
# pvresize /dev/vda3
 Physical volume "/dev/vda3" changed
 1 physical volume(s) resized / 0 physical volume(s) not resized
# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/vda3 multimedia lvm2 a-- 496.00m 456.00m
## Ya tenemos 100MB más en el PV y por tanto en el VG

Ampliar un VG

Cuando nuestros LVs han consumido todo el espacio del VG no podremos seguir creciendo éstos cuando lo necesitemos. Para solventar esta situación podemos ampliar el VG añadiendo un PV nuevo. El comando vgextend es muy similar al de creación (vgcreate), simplemente hay que indicar el nombre del VG a ampliar y el (o los) PV(s) nuevo(s) a añadir:

## Inicialmente el VG multimedia tiene 50MB libres y 1 PV
# vgs
 VG #PV #LV #SN Attr VSize VFree 
 multimedia 1 1 0 wz--n- 496.00m 50.00m
## Recuerda "marcar" el dispositivo como PV primero
# pvcreate /dev/vda5
 Writing physical volume data to disk "/dev/vda5"
 Physical volume "/dev/vda5" successfully created
## Añadimos el nuevo PV al VG
# vgextend multimedia /dev/vda5
 Volume group "multimedia" successfully extended
## Ahora nuestro VG tiene 150MB libres y 2 PVs
# vgs
 VG #PV #LV #SN Attr VSize VFree 
 multimedia 2 1 0 wz--n- 592.00m 150.00m

Comentar que lo ideal es que los PVs que pertenezcan al VG tengan características de redundancia y velocidad similares. Si bien es verdad que a la hora de crear LVs podemos elegir de que PV podemos sacar su espacio, si no prestamos atención a esta posibilidad el LVM irá asignando espacio de los PVs según crea conveniente y podríamos acabar con parte de un LV sobre un PV con RAID y otra parte en otro PV sin él. No tendría mucho sentido. Lo mismo que si un PV es muy rápido y otro es lento. Esto no quiere decir que no podamos tener PVs completamente diferentes en un VG, y que podamos usarlos de forma selectiva. Por ejemplo un PV puede ser un RAID y sobre él tener un LV importante, y otro PV puede ser un disco simple que nos permita crear un snapshot del LV principal, quitando esta “carga” temporal del RAID.

Ampliar un LV

El caso más frecuente de ampliación que se nos presentará será el de ampliación de un Volumen Lógico. Si seguiste mi recomendación de no dar espacio en vano a los LVs, es decir dejando la mayor parte de espacio libre en el VG, cuando el espacio usado en el LV vaya creciendo tendremos que ir ampliando el LV. Gracias a que esta operación se realiza “en caliente” no supone ningún inconveniente realizarla en cualquier momento.

Podemos usar dos comandos para realizar esta tarea: lvextend y lvresize. Si bien la sintaxis de ambos es prácticamente idéntica, suelo usar lvextend que sólo amplia, evitando posibles errores con lvresize que acabaran en el LV más pequeño (y el sistema de ficheros jodido, digo… dañado). En ambos casos daremos el nombre del LV (/dev/NOMBRE_VG/NOMBRE_LV) como argumento y usaremos la opción -L para indicar el tamaño nuevo. Como argumento de la opción -L podemos usar el tamaño final (por ejemplo -L2G, para un tamaño final de 2G) o la cantidad que deseamos ampliar, poniendo un “+” delante de ésta (por ejemplo -L+1G, para ampliar un giga). Veamos un ejemplo:

## Nuestro LV tiene 40MB actualmente
# lvs
 LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
 musica multimedia -wi-ao-- 40.00m
## Pedimos una ampliación de 10MB
# lvextend -L+10M /dev/multimedia/musica 
 Rounding up size to full physical extent 12.00 MiB
 Extending logical volume musica to 52.00 MiB
 Logical volume musica successfully resized
## Como el tamaño de las extensiones físicas es de 4MB,
## el LVM ampliará 12MB (3 PEs) en vez de los 10M solicitados.
## El resultado final, 52MB
# lvs
 LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
 musica multimedia -wi-ao-- 52.00m

Aquí no acaba la tarea. Una vez ampliado el LV debemos ampliar el sistema de ficheros (si es que estamos usando el LV para un sistema de ficheros). Si nos fijamos, aunque hemos ampliado el LV, el espacio disponible en el sistema de ficheros siguen siendo los 40MB originales:

# df -h /mnt/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/multimedia-musica 39M 4.5M 33M 13% /mnt

En función del sistema de ficheros debemos usar un comando u otro:

## Para XFS
## xfs_growfs LV 
## o
## xfs_growfs PM (PM -> Punto de Montaje, p.e. /mnt)
##
## Para reiserfs
## resize_reiserfs LV
## o
## resize_reiserfs PM
##
## Para ext3/ext4
## resize2fs LV
## En nuestro caso:
# resize2fs /dev/multimedia/musica 
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/multimedia/musica is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/multimedia/musica to 53248 (1k) blocks.
The filesystem on /dev/multimedia/musica is now 53248 blocks long
## Ahora ya tenemos los 52MB disponibles en el sistema de ficheros
# df -h /mnt/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/multimedia-musica 51M 4.7M 43M 10% /mnt

Como se puede observar en el ejemplo anterior, el sistema de ficheros está en todo momento montado y en uso. No hay escusa para dar espacio de más a un LV y dejar “seco” el VG, impidiendo usar el espacio libre para cualquier necesidad futura, como los snapshots que veremos en un futuro post.

$ exit

 

 

 

 

 

 

 

20 November, 2014 04:57PM by Alberto Gonzalez Iniesta

October 31, 2014

LVM para torpes (II)

Si mis dibujos no te dejaron muy claro los conceptos básicos del LVM no te preocupes, ahora lo explicaré desde el principio con los comandos de gestión del LVM. Seguro que quedará más claro.

Empezar de cero a montar LVM en un sistema ya en marcha no es lo más común, ya que lo ideal es hacerlo en el momento de la instalación, pudiendo así incluir todos los discos por completo. Casi todas las distribuciones permiten hacerlo automáticamente, aunque el resultado final no suele ser ideal (ver Consideraciones finales). Cuando comprendas el funcionamiento podrás usar el instalador de tu distribución para crear una estructura LVM personalizada que tenga más sentido que la que propone el instalador sin preguntar.

Entregando dispotivos de almacenamiento al LVM (PV)

El primer paso para usar LVM es decidir que dispositivos de almacenamiento queremos usar. Pueden ser discos, dispositivos RAID por software, particiones, etc. Lo más importante en este paso es que al LVM le daremos el dispositivo para que lo gestione y, salvo raras excepciones, no volveremos a tocar el dispositivo directamente. Nada de darle una partición al LVM y luego crear un sistema de ficheros en ella. Dicho de otra forma, no le toques los PVs al LVM.

La forma de entregar un dispositivo al LVM es marcarlo como un Physical Volumen (PV). Cuando vayas a crear un PV asume que la información que contenga hasta ese momento ya no es tuya, dala por perdida. Así que cuidado con equivocarse con el nombre del dispositivo en el comando pvcreate. Este comando básicamente indica que desde su ejecución el dispositivo indicado como argumento pasa a ser de dominio del LVM. Ejemplos:

# Estos comando deben ser ejecutados con el usuario root
# Normanlment los usuarios no pueden jugar con los discos :-)
# Marcar el primer disco, por completo, como PV
pvcreate /dev/sda
# Marcar varias particiones como PV
pvcreate /dev/sda3 /dev/sdb1 /dev/sdc1
# Marcar un dispositivo RAID por software como PV
pvcreate /dev/md0

Una vez “marcado” un dispositivo como PV, podemos ver información del mismo con los comandos “pvs” y “pvdisplay“:

# pvcreate /dev/vda3
 Writing physical volume data to disk "/dev/vda3"
 Physical volume "/dev/vda3" successfully created
# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/vda3 lvm2 a-- 400.00m 400.00m
# pvdisplay /dev/vda3
 "/dev/vda3" is a new physical volume of "400.00 MiB"
 --- NEW Physical volume ---
 PV Name /dev/vda3
 VG Name 
 PV Size 400.00 MiB
 Allocatable NO
 PE Size 0 
 Total PE 0
 Free PE 0
 Allocated PE 0
 PV UUID q2noaK-2apE-kkGe-MnNA-IzuE-ICDY-3MiKns

En este ejemplo cabe destacar el tamaño del PV, /dev/vda3, 400M, que están por completo libres y que en la columna “VG” (del comando “pvs“) o la fila “VG Name” (en “pvdisplay“) no hay ningún valor. Es decir, el PV está a disposición del LVM pero no pertenece a ningún VG, por lo que por ahora no podemos usarlo (Allocatable NO). Por ahora no entraré en la definición de PE, no quiero meter más conceptos y no es necesario a estas alturas.

Creando un Grupo de Volúmenes (VG)

Como comenté en la entrada anterior, un VG es una especie de disco duro virtual. Su tamaño viene dado por la suma del espacio de los PVs que lo componen. Y es del espacio disponible en el VG de donde crearemos los Volúmenes Lógicos (LVs, algo similar a las particiones). Son los LVs los que finalmente usaremos para crear sistemas de ficheros, espacio para swap, discos para máquinas virtuales, etc.

El comando de creación de un VG es extremadamente sencillo. Simplemente le daremos como primer argumento el nombre del VG que estamos creado y a continuación el/los dispositivo(s) (marcados como PVs previamente) que queremos que lo compongan:

# Creando un vg llamado "multimedia" con un PV
vgcreate multimedia /dev/vda3
  Volume group "multimedia" successfully created
# Creando un vg con más de un PV
vgcreate produccion /dev/sdb /dev/sdc /dev/sdd
  Volume group "produccion" successfully created

Importante en este punto es dar un nombre identificativo al VG. Una de las ventajas del LVM es que vamos a poder dar nombre significativos a nuestro almacenamiento. No pierdas esta ventaja llamando a los VGs algo como “vg00″. Yo tengo VGs llamandos “raid” y “sinraid” en máquinas que tienen parte de los discos en RAID y otra parte no. Ese nombre me permite, a la hora de crear un LV, saber si mis datos estarán protegidos (y/o acelerados) por el RAID o están en un simple disco. Tengo máquinas que tiene un VG llamado “interno” (formado por los discos físicamente dentro de la máquina) y otro llamado “cabina”, porque sus discos están en una cabina externa. Igualmente podríamos tener “producción” y “desarrollo”, o “sistema” y “datos”. Para gustos los colores, pero aprovecha el poder elegir el nombre :-) Huelga decir que es mejor evitar símbolos especiales (como espacios), acentos, eñes y esas cosas que podrían dar problemas en nombres de dispositivos.

Una vez creado el VG podemos ver información del mismo con los comandos “vgs” y “vgdisplay“:

# vgs
 VG #PV #LV #SN Attr VSize VFree 
 multimedia 1 0 0 wz--n- 396.00m 396.00m

# vgdisplay
 --- Volume group ---
 VG Name multimedia
 System ID 
 Format lvm2
 Metadata Areas 1
 Metadata Sequence No 1
 VG Access read/write
 VG Status resizable
 MAX LV 0
 Cur LV 0
 Open LV 0
 Max PV 0
 Cur PV 1
 Act PV 1
 VG Size 396.00 MiB
 PE Size 4.00 MiB
 Total PE 99
 Alloc PE / Size 0 / 0 
 Free PE / Size 99 / 396.00 MiB
 VG UUID xuYff2-maw7-0ldW-PiLv-xZ6F-NFa3-3gNPod

Con estos comandos podemos comprobar que nuestro VG se llama “multimedia”, está compuesto de un PV, todavía no tiene ningún LV creado y dispone de 396MB libres. Las Physical Extensions (PE) son las unidades de asignación mínima del LVM. Por defecto son de 4MB (aunque se puede cambiar en la creación del VG). Es decir, cada vez que creemos un LV lo haremos en múltiplos de (por defecto) 4MB. Pero esto no es algo que os deba preocupar por ahora.

A por el producto final, Volúmenes Lógicos (LV)

Una vez tenemos un VG ya podemos crear los dispositivos que realmente usaremos. Los volúmenes lógicos (LV) pertenecen a un VG, del que toman su espacio. Pueden crearse, borrarse y crecer sin necesidad de reiniciar la máquina o parar servicios (bueno, para borrarlos hay que dejar de usarlos primero, obvio).

Un LV puede usar espacio de un solo PV, o de varios. En este último caso puede deberse a que vaya creciendo con el tiempo, y ya no quede espacio en el PV original, o que al crearlo hemos decidido que use varios PVs (por motivos de rendimiento, por ejemplo). Pero esto lo veremos en próximas entradas del blog. Por ahora nos centraremos en la creación de un LV simple.

Para crear un LV, con el comando lvcreate, debemos indicarle el VG al que pertenece (como argumento del comando), el tamaño (en PEs con la opción -l o en megas/gigas/teras con -L) y optionalmente, pero muy recomendable, el nombre que queremos darle (-n). Emplos:

# Un LV de 40MB en el VG multimedia para guardar música
lvcreate -L 40M -n musica multimedia

# O especificando el número de PEs (de 4MB por defecto)
lvcreate -l 10 -n musica multimedia

Una vez más, aprovecha para darle un nombre representativo del contenido que habrá en él. Desde este momento la forma de referirse al LV (para crear el sistema de ficheros, montarlo, o cualquier uso que le vayamos a dar) será: /dev/NOMBRE_DEL_VG/NOMBRE_DEL_LV. En este ejemplo: /dev/multimedia/musica. En realidad ese nombre es un enlace al dispositivo creado por el subsistema del kernel encargado del LVM, el Device Mapper. El nombre del dispositivo real puede variar y será del tipo /dev/dm-##. Por eso es importante usar /dev/VG/LV, que siempre apuntará al dispositivo real correcto. También podemos encontrarnos referencias en el sistema al LV como /dev/mapper/multimedia-musica, es decir /dev/mapper/VG-LV. Mi recomendación es que uses siempre /dev/VG/LV y así no hay líos :-)

Al igual que en los pasos anteriores, podemos ver información sobre el LV creado con los comandos “lvs” y “lvdisplay“:

# lvs
 LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
 musica multimedia -wi-a--- 40.00m

# lvdisplay -m
 --- Logical volume ---
 LV Path /dev/multimedia/musica
 LV Name musica
 VG Name multimedia
 LV UUID KTtf7H-z5kt-68f6-8B8r-cNk0-OUBa-2cRFfe
 LV Write Access read/write
 LV Creation host, time curso, 2014-10-30 18:35:31 +0100
 LV Status available
 # open 0
 LV Size 40.00 MiB
 Current LE 10
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:0

 --- Segments ---
 Logical extent 0 to 9:
 Type linear
 Physical volume /dev/vda3
 Physical extents 0 to 9

Podemos ver el tamaño de nuestro LV (en megas o en LEs), el nombre que tiene, el VG al que pertenece, y si en “lvdisplay” añadimos la opción “-m” veremos en donde se encuentra localizado físicamente el LV (que PV(s) a usado el LVM para obtener el espacio del LV, destacado en negrita en el ejemplo anterior).

Ya está listo para usar. Podemos crear un sistema de ficheros en él y montarlo como cualquier otro dispositivo de almacenamiento:

# mkfs.ext4 /dev/multimedia/musica 
mke2fs 1.42.5 (29-Jul-2012)
....
# mount /dev/multimedia/musica /media/
# df /media/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/multimedia-musica 39663 4587 33028 13% /media

Consideraciones finales

Algo que considero fundamental para poder aprovechar plenamente la flexibilidad del LVM es mantener el máximo de espacio libre en el VG. Es decir, no dar espacio “a lo loco” a los LVs antes de que éstos lo necesiten. Me mata ver como en una intalación nueva todo el espacio del VG es asignado a uno o varios LVs que apenas usan dicho espacio. De nada sirve tener gigas y gigas de espacio libre en un LV. Y un VG sin espacio sin asignar tampoco sirve para mucho (al menos hasta que se aumente con un PV nuevo). Todo espacio libre que pueda estar en el VG nos va a permitir crecer los LVs que lo necesiten o crear LVs nuevos (aunque sólo los necesitemos temporalmente). Si tenemos un VG de 1T y hoy sólo necesitamos un LV que contendrá 100G de información, no le des mucho más (tal vez 150G o 200G), pero deja el resto en el VG para cuando sea necesario. Crecer un LV es sencillo y no causa interrupciones en el servicio, encojerlo es otra historia…

$ exit

31 October, 2014 10:39AM by Alberto Gonzalez Iniesta

October 10, 2014

LVM para torpes (I)

El LVM (Gestor de volúmenes lógicos, Logical Volume Manager) es una de mis funcionalidades preferidas en Linux. En esta y posteriores entradas intentaré explicarlo de la forma más sencilla posible para que los que no lo usaron nunca se adentren en él.

De forma simplificada podríamos decir que LVM es una capa de abstracción entre un dispositivo de almacenamiento (por ejemplo un disco) y un sistema de ficheros. En realidad pueden existir múltiples capas, como cifrado con device-mapper, raid software con md, etc. por encima o debajo de LVM. Pero para empezar diremos que LVM estará entre nuestros discos físicos y los sistemas de ficheros (o swap, o almacenamiento de máquinas virtuales,…).

Las ventajas que tienen son múltiples, pero la inicial y más evidente es la flexibilidad frente al particionado tradicional. Pongamos (sin LVM) que creamos 4 particiones contiguas en un disco. Si en el futuro quisieramos aumentar alguna de las 3 primeras no podríamos hacerlo sin borrar las siguientes, lo que es complejo, peligroso y requiere de parada del servicio casi seguro. Pongamos que quisieramos ampliar la última, siempre tendríamos el límite del tamaño del disco. Pongamos que compramos un disco nuevo, y queremos ampliar el espacio de un sistema de ficheros existente en el disco anterior con el espacio nuevo, imposible salvo con “ñapas” de nuevos sistemas de ficheros y puntos de montaje. Con LVM todas esas limitaciones desaparecen. Podemos aumentar sus “particiones” (volúmenes lógicos en adelante) independientemente de que no haya espacio libre contiguo a éstas. Podemos aumentar sus volúmenes lógicos con espacio libre de diferentes discos físicos. E incluso podemos mover volúmenes lógicos entre dispositivos físicos. Y lo mejor de todo… ¡en caliente! Sin desmontar el sistema de ficheros, ¡sin parar un servicio! ¡Brujería! ¡Brujería!

Las ventajas no terminan ahí, y procuraré repasarlas todas en lo sucesivo. Pero empecemos hablando de nomenclatura. Para entender casi por completo el LVM debemos tener muy claros únicamente tres conceptos (y que el concepto es el concepto):

  • Volumen físico/Physical Volume (PV). Un volumen físico (PV en adelante) es un dispositivo de almacenamiento, o más correctamente expresado un dispositivo de bloque. Puede ser un disco duro, una partición, una tarjeta SD, un floppy, un dispositivo RAID, un dispositivo loop (que convierte un fichero a un dispositivo de bloque), un dispositivo cifrado, ¡incluso un volumen lógico (LV) puede usarse de PV!. Para simplificar diremos que un PV es una fuente de almacenamiento, es decir un dispositivo que nos proporciona espacio. En el ejemplo más sencillo: el disco duro de nuestra máquina, o una partición en él. Un PV no hay que formatearlo, simplemente se le entregará al LVM “en crudo” y desde ese momento será gestionado por el LVM, no volveremos a tocarlo.
Dispositivos que pueden usarse como PVs

Dispositivos que pueden usarse como PVs

  • Grupo de volúmenes/Volume Group (VG). Para poder usar el espacio/almacenamiento de un PV, éste debe pertenecer a un Grupo de volúmenes (en adelante VG). El VG será el centro del universo LVM. Podemos decir que un VG es una especie de disco duro virtual (ya veo a los puristas rasgándose las vestiduras). Un VG es un “disco” compuesto de UNO o más PVs y que crece simplemente añadiendo más PVs. A diferencia de un disco real, un VG puede crecer con el tiempo, sólo hay que “darle” un PV más. En una máquina con un sólo disco podemos crear un VG que esté compuesto por un sólo PV (el disco físico o una de sus particiones). Si con el tiempo nos quedamos sin espacio en el VG, compramos otro disco (PV), lo añadimos al VG y el resto es transparente para sistemas de ficheros, procesos o usuarios. ¡Magia negra!

 

Un VG con nombre acorde a su composición: vg_absurdo

Un VG con nombre acorde a su composición: vg_absurdo

  • Volumen Lógico/Logical Volume (LV). Los volúmenes lógicos (en adelante LV) son “el producto final” del LVM. Son estos dispositivos los que usaremos para crear sistemas de ficheros, swap, discos para máquinas virtuales, etc… Por seguir con la analogía del “disco duro virtual” que es el VG, los LVs serían las particiones. Con los que vamos a trabajar realmente. A diferencia de “sus primas” las particiones tradicionales, los LVs pueden crecer (mientras haya espacio en el VG) independientemente de la posición en la que estén, incluso expandiéndose por diferentes PVs. Un LV de 1G puede estar compuesto de 200MB procedentes de un disco duro, 400MB de un RAID software, y 400MB de una partición en un tercer dispositivo físico. El único requisito es que todo los PVs pertenezcan al mismo VG. Por supuesto, aunque posible, no parece una combinación con mucho sentido :-P

 

Un LV (lv_ejemplo) dentro del VG (vg_absurdo) usando espacio de 3 PVs

Un LV (lv_ejemplo) dentro del VG (vg_absurdo) usando espacio de 3 PVs

Perdón por los dibujos, el día que repartían “venas artísticas” no fui al cole. La idea es visualizar los diferentes componentes. Que agrupamos PVs para dar forma (tamaño) al VG, y que con el espacio del VG podemos crear LVs. Los LVs de un VG pueden usar espacio de uno o varios PVs, por supuesto seremos nosotros los que decidamos de que PVs sacamos el espacio que compone un LV. El ejemplo actual no tiene mucho sentido ya que tenemos un LV (pensemos en una “partición”) que tiene partes redundadas (el espacio que viene del RAID) y partes que no (el espacio asignado desde el disco o la partición), o partes más rápidas (posiblemente el RAID) y partes más lentas. En este VG (insisto, un tanto extraño) podríamos tener LVs que sólo usaran espacio del disco, y LVs que sólo usaran espacio del RAID, lo que tendría algo más de sentido. En cualquier caso lo normal es que los PVs que forman un VG tengas características (redundancia, velocidad) similares.

Otra ventaja del LVM que ya podemos ver es que los nombres de los componentes los elegimos nosotros, lo que facilita su comprensión. Al crear un VG o un LV, somos nosotros los que decidimos sus nombres. Por tanto nos alejamos de cosas “raras” como sda5, md3, etc. y pasamos a una nomenclatura que nos ayuda a comprender que hay en cada LV:

# Ejemplos de nombres para VGs y LVs
# Un VG para producción, posiblemente con RAID como PVs
# Los nombres de los LVs permiten saber que es lo que contienen
/dev/produccion/datos
/dev/produccion/aplicacion
# Un VG para desarrollo, tal vez sin RAID y con discos "baratos"
/dev/desarrollo/datos
# Una máquina con discos internos y con acceso a una cabina de discos
/dev/interno/raiz
/dev/interno/swap
/dev/cabina/web

Con estos términos claros podemos explicar mejor la flexibilidad del LVM con unos ejemplos:

  • Un LV puede crecer siempre que haya espacio libre en el VG al que pertenece. El LVM se encarga de que lo que haya sobre el LV (frecuentemente un sistema de ficheros) vea todo el espacio continuo. Podemos crear inicialmente un LV usando espacio de un PV, pero si posteriormente queremos aumentarlo, aunque no quede espacio en el PV original, podemos usar espacio de cualquier PV que pertenezca al VG. Para el sistema de ficheros será transparente.
  • Podemos cambiar el espacio asignado  de un PV a un LV a otro PV (que tenga espacio suficiente libre). Me explico, yo puedo crear un LV de 10G en un PV que sea un disco. Si posteriormente meto en el VG un PV que sea un RAID, podría mover los 10G que estaba usando del disco al RAID, en caliente y de forma transparente al sistema de ficheros y las aplicaciones que lo usan. De forma que si con el tiempo puedo mejorar el hardware de la máquina, no tengo porque volver a crear un sistema de ficheros, copiar los datos y cambiar el montaje. Con LVM simplemente digo: los 10G del LV que están en un PV los quiero mover a un PV diferente. Y el hará la mudanza sin interrumpir el funcionamiento del sistema.
  • Para poder disfrutar al máximo de la flexibilidad del LVM es importante tener la mayor cantidad de espacio libre en el VG (volveré a este tema más tarde), pero tarde o temprano nos quedaremos sin espacio en un VG (porque usemos todo el espacio de sus PVs). Bien, esto, que tradicionalmente es bastante complicado de gestionar, con LVM es tan sencillo como darle otro PV al VG. Añadimos un disco (PV) a la máquina y lo asignamos al VG, que pasa a tener todo ese espacio nuevo disponible para cualquiera de los LVs que contenga. O para crear LVs nuevos.

La idea, al menos de esta primera ventaja que nos presta el LVM, es que el almacenamiento no nos imponga límites “artificiales”. Nada de particiones que no pueden crecer porque les sigue otra en el disco. O discos que una vez llenos no podemos seguir usando sin hacer malabares. El espacio de mis dispositivos está ahí a mi disposición, para que lo use como me convenga. Para crecer mientras haya espacio libre, para mover los datos entre dispositivos sin que tenga paradas en el servicio. En resumen, los megas son mios y los uso como quiero.

En la próxima entrada empezaré a hablar de los comandos para la gestión del LVM y estarán mucho más claros todos esto ejemplos y funcionalidades. ¿Preguntas? Pon un comentario e intentaré resolverlas.

$ exit

10 October, 2014 09:56AM by Alberto Gonzalez Iniesta

September 10, 2014

No pierdas el correo de tus servidores

Históricamente los servidores GNU/Linux han contando con un servidor de correo en sus instalaciones más básicas, aunque sólo fuese para uso propio/interno. Por ello hay aplicaciones como cron, at, logcheck, smartmontools, etc. que dan por hecho que este servicio está presente y bien configurado y lo usan para enviar avisos, algunos de máxima importancia. Por este motivo es importante asegurarse de que nuestra máquina hará llegar los posibles correos que se envíen desde ella a una dirección de correo que sea comprobada de forma periódica. Por ejemplo a nuestra propia dirección de correo.

Como alternativa podríamos entrar en la máquina y mirar el correo en ella (por ejemplo con el comando mail del paquete “mailx” o similares). El problema de esta solución es que hay que tener la disciplina de hacerlo frecuentemente y no escala en el momento que gestionemos varios servidores.

Acciones a realizar para asegurarse de que el correo llegará correctamente a una cuenta externa:

  • El servidor tiene un nombre válido de DNS (servidor.example.net) o pone uno a los correos que salgan de él.
  • El servidor tiene que tener acceso a Internet (para sacar el correo) o al menos a un servidor de correo que usemos como relay.
  • El servidor tiene que ser capaz de resolver entradas DNS (tener un servidor DNS alcanzable en el /etc/resolv.conf), salvo que lo entregue por un servidor de relay.
  • Las cuentas de los usuarios deben apuntar a la cuenta de correo real a la que queremos que llegue el correo.
  • Siempre realizar pruebas (por ejemplo con el comando mail) para comprobar el correcto comportamiento.

No voy a entrar en la configuración de red (salida a Internet y DNS) en este post, porque debería ser trivial. Si entraré en detalle en los otros puntos.

Nombre válido del servidor

La mayoría de los servidores de correo en Internet rechazarán correo proveniente de una dirección no válida, por ejemplo: root@mi_servidor, root@mi_servidor.local o root@mi_servidor.dominio_que_no_exite.com. Por ello debemos asegurarnos de que el nombre completo (FQDN) de nuestra máquina puede ser resuelto por el sistema DNS, o configurar el servidor local de correo para que use un dominio válido (por ejemplo cuando el nombre de nuestro servidor sólo es válido en su red local). En el caso de Postfix podemos usar la variable myorigin para indicarlo:

# En /etc/postfix/main.cf
# En el caso de Debian el valor de la variable está en el fichero mailname
# Podemos cambiarlo ejecutando: echo servidor.example.net > /etc/mailname
# Ejecutar "postfix reload" después de hacer los cambios
myorigin = /etc/mailname
# También podríamos especificarlo directamente
#myorigin = servidor.example.net

Servidor relay

Si nuestra máquina no está conectada directamente a Internet, porque presta un servicio local, lo ideal es que haga llegar todo su correo a un servidor que pueda realizar esta labor. Por ejemplo el servidor de correo que usemos normalmente. Llegados a este punto existen dos posibilidades: que nuestra máquina pueda ser identificada por su IP en el servidor de correo (y por tanto este último acepte su correo directamente) o que esto no sea posible y por tanto nuestra máquina tenga que identificarse con un usuario y contraseña SMTP en el servidor (como lo haría cualquier cliente de correo). Como fan de Postfix, pondré los ejemplos de configuración para dicho software. Esta sería la configuración para que un servidor (con Postfix instalado) use a otro (relay) para sacar su correo interno:

# El correo se envía a 10.20.30.40 para que éste lo envíe al destinatario final
# También podemos usar el nombre del servidor de correo en vez de su IP
relayhost = 10.20.30.40
# En caso de necesitar autenticación en el servidor relay,
# descomentar las siguientes líneas y crear el fichero indicado
#smtp_sasl_auth_enable = yes
#smtp_sasl_password_maps = hash:/etc/postfix/passwords

En el caso de necesitar autenticación, crearíamos el fichero passwords con el siguiente contenido y posteriormente ejecutaremos el comando “postmap /etc/postfix/passwords” como root:

# Contenido del fichero /etc/postfix/passwords
# Servidor          usuario_smtp:clave_smtp
10.20.30.40         fulanito@example.com:s3cr3t0s
# El campo servidor debe coincidir exactamente
# con el indicado en la opción relayhost

Dirigir el correo de los usuarios locales a una cuenta externa

Por defecto el correo para usuarios locales (root, logcheck, tu propio usuario) se quedará en la propia máquina. Para que llegue a nuestro correo tenemos varias opciones. Mi preferida es mandar todos los correos de usuarios de sistema a root, y el de éste a mi usuario local:

# /etc/aliases
logcheck: root
nagios: root
www-data: root
# [ los que ya vengan por defecto]
root: agi

Importante: Después de modificar el fichero /etc/aliases, debemos ejecutar el comando “newaliases” como root.

Llegados a este punto tenemos dos opciones. Una es meter la siguiente entrada en el /etc/aliases también:

agi: example@example.net

La otra es crear un fichero llamado “.forward” en nuestro $HOME con nuestra dirección de correo como único contenido:

echo "example@example.net" > ~/.forward

Esta última solución tiene como ventaja que no requiere del uso de root (o la ejecución de newaliases), por lo que es más útil para usuarios que no tengan dichos privilegios.

Prueba que funciona

Una vez todo configurado, queda probar que el correo llega a su destino. Para ello basta con ejecutar “ps ax | mail root” o “ls -l /etc | mail mi_usuario” o “cat /etc/hosts | mail logcheck” y comprobar que el correo llega a nuestra dirección de correo. En caso contrario habrá que empezar a revisar los logs de correo.

Es vital que se realice esta comprobación, incluso de vez en cuando de forma manual si la máquina no suele generar correo. El objetivo es evitar que el día que la herramienta de monitorización de discos (por poner un ejemplo), empieza a detectar errores y notificarnos por correo, nos enteremos inmediatamente y no pasados unos días cuando el disco esté completamente muerto.

$ exit

10 September, 2014 12:08PM by Alberto Gonzalez Iniesta

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 Ríos Peña (noreply@blogger.com)

June 17, 2014

Alberto Gonzalez Iniesta

Monitorización de cambios en ficheros con tripwire (II)

Si has instalado tripwire, habrás empezado a recibir correos con los cambios en el sistema de ficheros desde la última actualización de la base de datos.

En algunas ocasiones son cambios que has realizado tú, o cualquier otra persona o proceso, y que simplemente requieren que actualices la base de datos (tripwire -m u) para que queden registrados. Pero en otras ocasiones se trata de ficheros o directorios que están en constante cambio (spools de correo o impresión, directorios de usuarios, bases de datos, logs, etc…).

En este caso debemos enseñar a tripwire que esos cambios son normales (dentro de unos límites) y evitar que en el correo con el informe diario vengan listados como cambios no esperados. Esto es de vital importancia porque acabaremos acostumbrándonos a que el correo de tripwire liste un montón de cambios (y hará inútil el uso de la herramienta) y porque no podremos diferenciar un cambio normal en un fichero que varía con el tiempo, por ejemplo que cambie su fecha de modificación, de un cambio sospechoso, por ejemplo que cambie su propietario o permisos. Repito lo que dije en mi post anterior. El correo diario de tripwire debe limitarse a decir: No violations.

El fichero de políticas (/etc/tripwire/tw.pol) nos permite definir que ficheros no pueden cambiar en absoluto, cuales pueden ver su contenido modificado pero no otros atributos como propietario o permisos, cuales debemos ignorar porque varían aleatoriamente (como el $HOME de un usuario), etc. El fichero de políticas se genera partiendo de un fichero de texto (en los paquetes de la distribución suele venir uno base: /etc/tripwire/twpol.txt), es este fichero en el que definimos las reglas y posteriormente generamos el fichero de políticas real.

Adicionalmente con la documentación de tripwire (normalmente bajo /usr/share/doc/tripwire) viene un fichero de ejemplo hiper-documentado con casi todas las posibilidades que permite el fichero de políticas, su nombre es policyguide.txt.

Sintaxis

En el fichero de políticas podemos encontrar (entre otras cosas):

  • Propiedades a tener en cuenta en los ficheros o directorios a vigilar. Por ejemplo:
 g - El grupo propietario
 i - El número de inodo
 l - El tamaño de un fichero va en aumento (para logs, aunque cuando sean rotados fallaría)
 m - La fecha de modificación
 n - El número de enlaces duros. Que varía sobre todo en directorios con la creación o borrado de subdirectorios
 p - Los permisos
 s - El tamaño
 t - El tipo de fichero
 u - El propietario
 C - CRC32 del contenido
 M - MD5 del contenido
 S - SHA del contenido
  • Variables que nos permiten organizar mejor nuestro fichero. Su contenido puede ser cualquier valor que podamos usar en el fichero de políticas (el nombre de un directorio, una lista de propiedades comunes que podemos aplicar a varios ficheros, etc..):
# Para agrupar propiedades
Intocable = +pinugtsdbmCM-rlacSH;
# Y luego usarlo en reglas
/etc/passwd -> $(Intocable);
  • Ficheros o directorios sobre los que aplicar reglas:
# /etc no debe cambiar
/etc -> +pinugtsdbmM-rlacCSH;
# el mtab varia en su contenido
/etc/mtab -> +pnugtd-ismMrlacCSHM;
# este fichero puede estar o puede no estar, lo ignoramos totalmente
!/etc/foobar;
  • Agrupaciones de ficheros/directorios para aplicarles la misma gravedad ante cambios, notificar a unos destinatarios concretos o ejecutar chequeos sólo sobre ese grupo:
(Rulename=sistemabase, severity=90)
{
/etc -> +pinugtsdbmM-rlacCSH;
/bin -> +pinugtsdbmM-rlacCSH;
/lib -> +pinugtsdbmM-rlacCSH;
/usr -> +pinugtsdbmM-rlacCSH;
}
(Rulename=aplicacion, emailto=desarrollo@example.com, severity=50)
{
/usr/local/foo -> +pinugtsdbmM-rlacCSH;
/usr/local/foo/data -> +pinugtd-srlbacmCMSH;
}

 Definiendo una política

El verdadero trabajo con tripwire consiste en ajustar una política a nuestro sistema. Podemos partir de la que viene definida por el fichero de políticas que viene en el paquete (o en la instalación desde fuentes). O podemos comenzar con una de cero. Esta última opción será más dura, pero posiblemente cubrirá mejor nuestras necesidades.

Empezaríamos definiendo una regla que abarque todo el sistema de ficheros y que indica que no debe cambiar nada (luego iremos corrigiendo). Para mayor comodidad podemos definir alguna variable que englobe tipos de cambios comunes (ficheros inmutables, ficheros que cambian su contenido, cambios en las propiedades pero no en el contenido, etc..)

@@section FS

# INTOCABLE. Ignoramos la fecha de acceso, alguna propiedad
# menos interesante y los checksums CRC, Haval, y SHA1 por
# economía en los chequeos. Dejamos el MD5 para comprobar la
# integridad del contenido del fichero.
# Para los más paranoicos, mover CSH a continuación de la "M"
# Equivalente a la variable predefinida por tripwire llamada
# "ReadOnly"
INTOCABLE = +pinugtsdbmM-rlacCSH ;

# CAMBIA_CONTENIDO. Ficheros en los que el contenido cambia,
# pero que deben mantener otros atributos (propietarios,
# permisos, inodo, dispositivo,...)
# Igual que la variable "Dynamic" de tripwire
# CAMBIA_CONTENIDO = $(Dynamic)
CAMBIA_CONTENIDO = +pinugtd-srlbacmCMSH ;

/ -> $(INTOCABLE) ;

Si ya tenemos una política (ya estamos haciendo chequeos diarios), tendremos que cambiar la política con el siguiente comando:

# tripwire -m p -Z low mi_politica.txt

El motivo de usar la opción “-Z low” es que nos permita cambiar la política aún cuando ya hay ficheros que se salen de la política anterior. De otra forma no nos dejaría realizar el cambio. Si no hemos usado ninguna política hasta ahora, es decir no estamos ejecutando tripwire todos los días, deberemos de cifrar nuestra política e inicializar la base de datos:

# twadmin -m P -S mi_politica.txt
# tripwire -m i

En ambos casos podemos encontrarnos con advertencias de este tipo:

The object: "/boot" is on a different file system...ignoring.
The object: "/dev" is on a different file system...ignoring.
The object: "/proc" is on a different file system...ignoring.
The object: "/run" is on a different file system...ignoring.

Se trata de sistemas de ficheros diferentes al de la partición raíz. Esto significa que debemos de añadir una regla para cada uno de ellos. En algunos casos (por ejemplo en /boot con el kernel y el gestor de arranque) querremos chequearlos y en otros ignorarlos por completo, o aplicar reglas menos estrictas. En este caso podemos añadir las siguientes reglas a nuestro fichero de políticas:

# Comprobar /boot. Necesario por ser un sistema de ficheros
# diferente al raíz
/boot -> $(INTOCABLE) ;

# Para /dev hay una variable que vigila permisos, propietarios
# y algún atributo propio de dispositivos: $(Device)
/dev -> $(Device) ;

# /proc varía mucho lo ignoramos por completo. Pero podemos
# vigilar las variables de configuración en /proc/sys
!/proc;
/proc/sys -> $(INTOCABLE) ;

# En /run tenemos ficheros de PID y sockets, podemos vigilarlos
# pero teniendo en cuenta que cambiaran sus contenidos, fechas,
# ID de dispositivo e inodo. Podemos partir de CAMBIA_CONTENIDO
# y quitar estas cosas:
/run -> $(CAMBIA_CONTENIDO) -id ;

Una vez más tendríamos que actualizar la política con el contenido de nuestro fichero de texto:

# tripwire -m p -Z low mi_politica.txt

Y una vez más veremos cosas que corregir, por ejemplo de ficheros que no se pueden leer:

### Filename: /proc/sys/net/ipv6/route/flush
### Permission denied
### Continuing...
### Warning: File could not be opened.
### Filename: /proc/sys/vm/compact_memory
### Permission denied

Así que añadimos unas reglas que ignoren esos ficheros por completo:

# Algunos ficheros en /proc/sys no se pueden leer, los ignoramos
!/proc/sys/net/ipv4/route/flush;
!/proc/sys/net/ipv6/route/flush;
!/proc/sys/vm/compact_memory;

Volveríamos a ejecutar la actualización de política (-m p) y si ya no tenemos errores mi recomendación es ejecutar un chequeo (-m c). De esta forma vamos a tener inmediatamente un listado de ficheros que están cambiando (logs, bases de datos, directorios temporales) y que por tanto hay que añadir nuevamente a la política. Y el segundo motivo es que los ficheros de tripwire habrán sido modificados con la actualización de la política y por tanto un chequeo y posterior actualización de la base de datos (-m u) evitará que en el chequeo nocturno salgan como modificados con nuestro consiguiente susto :-)

En mi caso un chequeo me devolvió campos en el directorio de la base de datos, el spool del servidor de correo y algunos logs. Así que añadiré unas reglas que los contemplen:

# Los logs varían, pero los permisos y propietarios no.
# Si lo hará su inodo
/var/log/ -> $(CAMBIA_CONTENIDO) -i ;

# La propia base de datos de tripwire varía cuando se actualiza,
# así que no podemos vigilar el contenido. Por eso viene la
# recomendación de tenerla en un dispositivo que evite su
# modificación
/var/lib/tripwire/ -> $(CAMBIA_CONTENIDO) ;
# El directorio de informes de tripwire va creciendo
# No nos interesa el contenido, sí sus permisos
/var/lib/tripwire/report -> $(CAMBIA_CONTENIDO) (recurse=false) ;

# Del spool de postfix nos interesa su estructura, no su contenido
# Miramos sólo el primer nivel
/var/spool/postfix/ -> $(CAMBIA_CONTENIDO) -i (recurse=1) ;

# /tmp es el caos, vigilamos sólo el propio directorio
/tmp -> $(CAMBIA_CONTENIDO) (recurse=0) ;

# El HOME de root puede variar por su uso
/root -> $(CAMBIA_CONTENIDO);
# El .viminfo cambia de inodo con el uso de vim
/root/.viminfo -> $(CAMBIA_CONTENIDO) -i;

Y repetimos el proceso una vez más. Digamos que quedaría un modus operandi de este tipo:

## Editamos el fichero txt de reglas y actualizamos la política
tripwire -m p -Z low mipolitica.txt
## Ejecutamos un chequeo
## (sin prioridad de io, para dejar a la máquina hacer su trabajo)
ionice -c 3 tripwire -m c
## Si lo único que sale del chequeo son los cambios en los ficheros de tripwire,
## actualizamos la base de datos con ellos y listo
tripwire -m u -r /var/lib/tripwire/report/$( hostname ) -FECHA-HORA.twr

Una vez tengamos la política afinada, sólo tendremos que actualizar la base de datos (-m u) cuando hagamos cambios fuera del funcionamiento normal de la máquina (actualizaciones, cambios de configuración, etc.).

Una vez más, el objetivo es:

===============================================================================
Object Summary: 
===============================================================================

-------------------------------------------------------------------------------
# Section: Unix File System
-------------------------------------------------------------------------------

No violations.

===============================================================================
Error Report: 
===============================================================================

No Errors

-------------------------------------------------------------------------------
*** End of report ***

 

$ exit

17 June, 2014 11:49AM by Alberto Gonzalez Iniesta

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).


Filed under: My experiences and opinion, Videos Tagged: Communities, Contributing to libre software, Español, Free Cultural Works, Free Software, libre software, MediaGoblin

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í :)


Filed under: My experiences and opinion Tagged: Communities, Español, Free Software, Freedom, identi.ca, libre software, Moving into free software, pump.io, social networks, statusnet

03 November, 2013 10:21PM by larjona

August 20, 2013

José Luis Redrejo

Usos no habituales de ssh

Para la mayoría de los administradores de sistemas, ssh es la herramienta más usada con diferencia. Su función principal: establecer un acceso seguro a un ordenador o servidor a través de la red.

Sin embargo, la página man de ssh lista una gran cantidad de opciones que no son demasiado conocidas. Veamos un par de casos en los que, si tenemos un ordenador con ssh accesible desde Internet, estamos salvados:

CASO 1: Hace pocos días, comentaba con un antiguo alumno el problema que tenía para acceder a un servidor que estaba conectado a Internet a través de una tarjeta 3G: La mayoría de las compañías telefónicas dan acceso a Internet a través de NAT si estás usando 3G, con lo que tu ordenador o móvil no tiene nunca una dirección IP pública a la que se pueda acceder. Si queremos entrar en ese ordenador con nuestra contraseña ssh viene en nuestra ayuda mediante la posibilidad de hacer un túnel inverso: ssh conecta a un servidor al que sí tengamos acceso generando un túnel encriptado, y una vez conectado, podemos entrar en el primer ordenador a través del túnel que la primera conexión creó.

red2

En el ordenador con la conexión 3G ejecutamos:

ssh -nNT -R 2200:localhost:22 usuario@servidor

Entramos en el servidor y ejecutamos:

ssh 127.0.0.1 -p 2200

Nos pedirá la contraseña del usuario correspondiente en el ordenador con la conexión 3G y voilá ¡estamos dentro!

 

CASO 2: A veces es necesario saltarse las limitaciones que en algunas redes o intranets existen. Algunas de ellas tan absurdas como no poder hacer ssh a un servidor en Internet. De nuevo ssh viene a nuestro auxilio.

En el servidor , editamos el archivo /etc/ssh/sshd_config y añadimos una línea con el contenido:

Port 443

Con eso nuestro servidor escuchará conexiones ssh también en el puerto 443. Ese es el puerto usado para las conexiones https, por lo que si en nuestra red tenemos acceso a páginas seguras, ya podemos acceder a un servidor via ssh.

Ahora, desde la máquina en la red limitada tan sólo tenemos que hacer

ssh -p 443 usuario@servidor

y ya estaremos en un ordenador con acceso a Internet via ssh.

 

En otra ocasión comentaré las posibilidades del archivo config en nuestro directorio .ssh, que permite hacer muchas de estas cosas automágicamente.

20 August, 2013 03:07PM by José L. Redrejo Rodríguez

August 17, 2013

Robótica asequible en la enseñanza secundaria

Parámetros D-H del robot

Durante el pasado curso, fui orgulloso profesor de TIC de, entre otros, los alumnos que ganaron la First Lego League en Extremadura. Su entrenamiento con los robots de Lego fue posible por la inestimable colaboración de alguien externo al instituto, que prestó sus conocimientos, ganas y el equipamiento necesario para las prácticas y el aprendizaje. Aun viendo el enorme potencial, sobre todo por su facilidad de uso, del sistema Lego, su precio lo hace inalcanzable a muchos alumnos y departamentos de enseñanza.
Robot para la educación en África
En paralelo, este año, el Ciclo de Grado superior en el que también doy clase, evoluciona en su temario y normativa a ser el ciclo de Automatización y Robótica Industrial. Está claro que, poco a poco, el mundo de los robots va pasando ya de la universidad y la industria a las aulas. Mi sorpresa ha sido mayúscula cuando he encontrado un par de proyectos espectaculares que, a bajo o muy, muy bajo precio permitirían empezar con la robótica en las asignaturas de TIC, Tecnología y, por supuesto, en muchos Ciclos formativos que tengan relación con la electrónica, electricidad o informática.

El primero de ellos son estas propuestas para un  par de robots de bajo coste para la educación en África. No sólo el coste es muy bajo (en torno a los $10, sí ¡diez! dólares)  sino que los proyectos están excelentemente documentados. Incluyen tanto el software como el hardware necesario y, en uno de los modelos para los más avanzados, las obtención de los parámetros D-H que permiten modelar la cinética del robot.

El segundo proyecto es algo más caro, en torno a los 200 $, pero lo original de la idea y lo espectacular del resultado hacen que merezca la pena intentar llevarlo a cabo. Se trata de una mano robótica en la que el autor ha tenido la genialidad de usar una cadena de bicicleta para fabricar los dedos, dándole así una apariencia “manual” y el agarre necesario para poder manipular objetos. El proyecto puede verse completo, con todos los detalles para la construcción, incluyendo vídeos en estas páginas web.

17 August, 2013 08:17AM by José L. Redrejo Rodríguez

August 16, 2013

MeMeces

Para que no me pillara en caliente, he dejado pasar algo de tiempo antes de opinar sobre el Megaacuerdo de Microsoft con nuestro Ministerio de educación. Dedico este post especialmente a la letra M:

Mentiras:

  • Se ha difundido en la prensa que el software va a costar 8 euros, lo que es falso de todas todas. La licencia es anual (con 1000 alumnos en un instituto son 8.000 euros /año). No incluyen el precio de una herramienta para control de aula ni un antivirus, filtro de control parental o aplicación educativa alguna.
  • También se ha dicho que la rebaja es del 90%. Pero si las matemáticas no me fallan, eso tampoco es verdad.
  • Si en los centros educativos se va a poner algún servidor, o alguien con dos dedos de frente ha pensado en sistemas de gestión para un parque de centenares de miles de portátiles, que se prepare también a pagar lo que no está escrito en licencias de servidores y herramientas de gestión de red.
  • Algún miembros destacados de MS dice que el arranque dual facilita la libertad de los alumnos (entre otras lindezas) , lo que es Mentira, o ¿es que en un aula van a poder arrancar los niños que quieran con Linux y otros con el sistema privativo?. Van a usar lo que les diga su profesor, evitando que los niños conozcan otra cosa que la que conoce el adulto, coartando realmente la libertad del alumno. Y el 99% de los adultos de España sólo conocen un sistema operativo, con lo que será lo que inculquen a los futuros usuarios. Se me ocurren otros negocios en los que también intentar enganchar a los niños lo antes posible.
  • ¿Qué hace nuestro ministerio de educación prestándose a suministrar esa pedazo de publicidad de forma tan escandalosa y burda a una empresa extranjera? Ya querría cualquier otra empresa de software la décima parte del pastel publicitario que se han comido gratis estos señores a costa de nuestros dirigentes. Me gustaría que algunos  de los paladines del software libre en España levantara la voz, aunque sea su partido el que mete la pata, ha metido la pata.

Eva Almunia
Modelos:

El pasado noviembre nos visitaron en Extremadura unas personas de Microsoft para ver lo que habíamos hecho en educación, y después de explicarles en detalle todo lo que nos preguntaron y bastante más, sus palabras fueron que con nuestro “Modelo” es normal que no encajara su propuesta. Porque, bueno o malo, en Extremadura tenemos un Modelo, una idea de qué hacer con los portátiles en el aula, como integrarlos para formar un todo.

Un amigo me comentaba que en la pasada conferencia de software libre de Cáceres, unos representantes de Panamá comentaron su experiencia con  portátiles. Habían entregado los portátiles a los niños sin ninguna herramienta educativa ni integración en el centro, y se habían convertido en un simple juguete tecnológico (los que no habían desaparecido). Para jugar le compro a mis hijos una consola, y para aprender le doy herramientas educativas. Por amor de Dios ¿qué uso tiene en educación windows con office?

Mejoras:

Después de ver lo que ofrece el acuerdo del ministerio resulta que sus grandes aportaciones a la educación son que windows 7 arranca más rápido que windows vista y que si pasas el ratón por el panel inferior te muestra una fotito de las aplicaciones minimizadas.

En esto del software privativo nos encontramos con la batalla de las grandes empresas por mantener su pastel, por mantener enganchados a los futuros usuarios a sus herramientas para que no se sientan cómodos con nada más. ¿Me quiere decir alguien que característica de Office necesitan los alumnos de primaria que no puedan hacer con Linux y Openoffice?

En Extremadura llevamos ya 7 años con ordenadores en todos los institutos, con centenares de miles de niños que han pasado por ellos a diario, haciendo de todo y visitando en Internet los sitios más inauditos. Jamás ha habido un virus o una intrusión. ¿Han incluido alguna de estas mejoras los señores del ministerio en su acuerdo? ¿quien va a formatear y reinstalar los windows cuando una semana después estén estropeados e infectados en esos portátiles sin lector de cd? ¿Eso cuesta o no cuesta dinero?

Seguro que es muy mejorable, pero también estoy seguro que si los señores de MS hubieran hecho la décima parte de lo que incluye el portátil en Extremadura, estarían en todos los telediarios por sus grandes aportaciones a la educación. Es una pena, pero la realidad es que lo que nos enseñaron los responsables de educación de esa empresa es lo mismo que le podían haber mostrado a alguien de sanidad o a un contable. Su aportación educativa es cero.

16 August, 2013 03:47PM by José L. Redrejo Rodríguez

Concurso de Google para estudiantes

Acaba de publicarse la noticia de que Debian ha sido aceptada para participar en el concurso Google Code-in

Es un concurso pensado para pre-universitarios, es decir para estudiantes de ciclos formativos, secundaria y bachillerato que tengan entre 13 y 18 años.

Las instrucciones de participación a través de Debian están descritas en http://wiki.debian.org/GoogleCodeIn2010

En resumen se trata de realizar colaboraciones relacionadas con Debian y el software libre,  mediante programación, documentación, traducciones, gestión de calidad, seguridad, etc.

Si algún profesor (con sus alumnos) o estudiante extremeño se anima a participar,  que no dude en ponerse en contacto conmigo a través de este blog si no tiene un desarrollador Debian de mentor.

El 22 de Noviembre se abre el plazo para concursar y termina el 10 de Enero.

¡¡Ánimo mis muchachos !!

16 August, 2013 03:40PM by José L. Redrejo Rodríguez

20 años de Debian

Hoy mi distribución Linux de cabecera ha cumplido 20 años. En el mundo informático eso es todo un record. Empresas como Google no habían nacido cuando Ian Murdock puso en marcha la distribución en la que el usuario puede ser parte en cualquier momento.

Empecé con Debian como usuario cinco años después de su nacimiento, como desarrollador algunos años más tarde, expecialmente a partir de mi implicación en el proyecto LinEx. En 2004 subí mi primer paquete a la distribución oficial: https://lists.debian.org/debian-devel-changes/2004/11/msg00068.html y desde 2007 guardo con cariño el correo en el que me comunicaban oficialmente mi paso a Debian Developer, con todos los derechos y obligaciones que eso implica.

Son muchos años en los que he conocido a gente extraordinaria, técnica y humanamente, y aunque ultimamente los veo menos, desde aquí mi saludo a todos ellos y mi pequeña aportación a soplar las velas de esta extraordinaria tarta de cumpleaños.

 

¡Felicidades Debian!

Foto de familia de la Debconf 2013, Zurich

Debconf 2013, Zurich

Debian is the operating system that makes me free.

Debian is a family gathered around great idea.

16 August, 2013 03:33PM by José L. Redrejo Rodríguez

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 Ríos 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 Ríos 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 Ríos 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 Ríos 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 08, 2013

Laura Arjona

De LaTeX a ePub, experimentos con publicación multiformato

You can find this article in English.

¿He dicho esto antes? Me encanta el texto sencillo (#iloveplaintext). Puedes estar segura de que hay alguna manera para cambiar del formato que elegiste para escribir un documento, a otro formato diferente, probablemente conservando la mayoría del diseño y apariencia del texto original. Esta fue mi premisa cuando surgió el reto de obtener un ePub (o .mobi o algún otro formato de ebook) similar a este PDF en apariencia, pero mejorado para los lectores de libros electrónicos como Kindle o Cool Reader para tabletas con Android. La cosa buena es que se disponía de los fuentes en LaTeX para usarlos en la conversión. En este artículo publico las recetas y los resultados obtenidos de mis 5 experimentos, así cualquiera puede tener una imagen de lo poderosas que son las herramientas de software libre para este tipo de tareas, y cuáles pueden probar (o no probar) para su caso particular. Si quieres saber el método que mejor funcionó para mí, ve al 5º intento.

  • 1er intento: clase memoir de LaTeX.
  • 2º intento: clase geometry de LaTeX.
  • 3er intento: Pandoc (versión antigua)
  • 4º intento: Pandoc (versión nueva)
  • 5º intento (¡Bueno!): text4ht + Calibre

1er intento: clase memoir de LaTeX

Tiempo total de esta transformación: 5 minutos máx. Lo que he hecho:

  • Abrir el .tex con Kile (mi editor LaTeX favorito)
  • Marcar como comentarios las líneas de documentclass, la del paquete geometry y todonotes
  • Incluir una línea documentclass con clase memoir y diversas opciones específicas para ebook (las he tomado de aquí, en ese artículo se incluye una plantilla completa pero yo fui “al grano”.
  • Mis gráficos y tablas tenían anchos en cm (#grr), he hecho una búsqueda y reemplazo por múltiplos de \linewidth (a ojo de buen cubero). Creo que no sirvió de mucho.
  • Las medidas verticales en cm no las cambié por pereza.
  • Compilar con Kile a PDF y ya.

El resultado no es muy allá, así que probé otra cosa.

2º intento: clase geometry de LaTeX

Tiempo total de esta transformación: 5 minutos máx. Lo que he hecho:

  • Abrir el .tex con Kile
  • Marcar como comentarios las líneas de documentclass, la del paquete geometry y todonotes
  • Incluir una línea documentclass con clase geometry y márgenes tomada de aquí.
  • He puesto márgenes izdo y dcho iguales (estaban diferentes).
  • He buscado y reemplazado los anchos en cm de gráficos y tablas para ajustarlas: 13cm y 14cm >> 8cm; 5cm > 3cm, 7cm > 4cm.
  • Las medidas verticales en cm no las cambié por pereza.
  • Compilar con Kile a PDF y ya.

El resultado tampoco es muy allá, así que probé otra cosa.

3er intento: Pandoc (versión antigua)

Tiempo total de esta transformación: 5 minutos max. Lo que he hecho:

  • Transformar a HTML con pandoc (instalado desde apt en Debian Squeeze):
 pandoc -f latex -t html larjona_thesis_translations_en.tex -s -S -R --toc -o larjona2.html
  • Abrir Calibre y agregar el libro HTML
  • Convertir a epub (no me paré mucho en los metadatos etc)

Las conversiones directas a ePub con Pandoc no podían abrirse en Calibre, por eso lo hice así. El resultado (cambiar el nombre para quitar el “.pdf” y dejar la extensión “.epub”) era significativamente peor que los PDF anteriores: los gráficos desaparecieron (mal), los pies de página están todos al final (mal), los títulos de los apéndices han desaparecido (mal), el verbatim ahora sí se ve bien (bien), la bibliografía ha desaparecido (mal). El lector Kindle para Android no reconocía el ePub. No trasteé mucho, porque otro lector de software libre, FBReader, sí lo abrió.

4º intento: Pandoc (versión nueva)

Repetí el proceso anterior en Debian Wheezy, que tiene una versión más actualizada de Pandoc. El resultado es algo mejor, aunque sigue sin tener ni tablas, ni figuras, ni bibliografía.

5º intento (¡Bueno!): text2ht + Calibre

Tiempo total de esta transformación: 10 minutos, mas lo que haya que tocar para pasar a dvi sin errores con tex4ht. Lo que he hecho:

  • Instalar tex4ht desde apt en Debian Wheezy.
  • Abrir el .tex con Kile y marcar como comentario un título de sección que incluía una nota al pie con una URL y un título corto para el índice, y daba error al compilar con tex4ht. He escrito en su lugar un título sencillo.
  • Compilar de nuevo con Kile (PDFLatex) para que se generen los archivos intermedios de bibliografía
  • Desde línea de comando:
 htlatex larjona_thesis_translations_en_tex4ht.tex

(da algunos avisos sobre el tamaño de las imágenes)

  • Abro Calibre y añado libro, eligiendo el HTML “raíz” que se ha generado.
  • Convierto a ePub, agregando una portada y rellenando los metadatos
  • ¡FIN!

El resultado (cambiar el nombre y borrar la extensión .pdf, dejando la .epub) es bastante aceptable: mi lector de ePub para Android renderiza bien los enlaces (URL, índice, pies de página y citas bibliográficas), pero no el verbatim (los *) ni las tablas. Sin embargo, desde el portátil, veo todo bien con Calibre o con Okular.

Comentarios

  • Hice esto hace casi un año, así que quizá ahora hay mejores herramientas (o las mismas se han mejorado) para hacer el apaño.
  • No tenía mucho tiempo para invertir en esto, así que no leí toda la documentación etc., sólo busqué un poco por internet, leí las cosas más importantes, y probé. Estoy segura de que hay otras maneras de hacer la conversión, más elegantes, o como sea.
  • Tenía un fichero concreto en LaTeX que quería convertir, y ya estaba escrito en LaTeX. Quiero decir: si tuviera que empezar a escribir un documento otra vez (con la idea de publicación multiformato), quizá no habría escogido LaTeX como fuente (por ejemplo, usaría markdown, o docbook y edición con Publican (como en el Manual del Administrador de Debian), o el modo org-mode de Emacs (sí, es posible escribir una tesis en org-mode), o HTML). Depende mucho del tipo de documento: el mío era uno sencillo, otros trabajos pueden tener por ejemplo muchas fórmulas o gráficos o tablas y necesitas escoger el formato principal y la herramienta de edición en función de eso.
  • Por supuesto, he usado sólo software libre para hacer las conversiones. No estoy interesada en herramientas no libres.

Agradecimientos

Gregorio Robles preguntó si podía convertir mi Trabajo Fin de Máster o sus fuentes LaTeX a un formato amigable para lector de libros electrónicos. Para mí, ha sido una oportunidad para:

  • Jugar con conversores “de LaTeX a lo que sea”. De hecho, yo quería publicar una versión HTML aquí en mi blog, y aquí la tenéis ;)
  • Jugar con lectores de libros electrónicos en mi portátil y dispositivos Android (no tengo Kindle ni ningún lector de libros electrónicos (la maquinita), aún prefiero el papel…) pero conocía Calibre, FBReader, Cool Reader y por supuesto Okular que maneja muchos tipos de fichero incluidos ePub y .mobi.
  • Poder ofrecer aquí lo que he averiguado, y ahorrar algo de trabajo (espero) a otras personas.

Así que ¡muchas gracias Gregorio!


Filed under: My experiences and opinion, Tools Tagged: Español, Free culture, LaTeX, libre software, Moving into free software, mswl, mswl-intro, mswl-thesis, translations

08 May, 2013 06:29PM by larjona

May 07, 2013

José Luis Rivas

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

May 01, 2013

Laura Arjona

Conversión de Identi.ca a pump.io

Este documento es la traducción al español del original en inglés
Identi.ca conversion to pump.io, escrito por Evan Prodromou.
Este artículo está bajo una licencia CC-By (Creative Commons Reconocimiento 3.0 Unported).

El servicio de red social Identi.ca se cambiará a una nueva plataforma
de software el 1 de Junio de 2013.

  • Las cuentas activas se convertirán automáticamente a la nueva plataforma.
    Los usuarios activos no tienen que hacer nada para seguir usando el servicio.
  • Las cuentas que no se han usado desde el 1 de Mayo de 2012 no se
    convertirán. Si tienes amigos o gente que te gusta en Identi.ca, que crees que deberían seguir siendo usuarios, por favor házselo saber. Sólo con que publiquen un aviso, significará que su cuenta se migrará.
  • Si estás interesado en ver cómo funciona ahora mismo pump.io, puedes crear una cuenta yendo a http://pump.io/ y haciendo clic en el botón “try it”.
  • pump.io tiene una API muy diferente a la de StatusNet. Si usas un cliente de escritorio o en el móvil para Identi.ca, por favor comprueba con los desarrolladores de ese software para ver si planean portarlo a pump.io.
  • Estarán disponibles copias de seguridad de todos los datos públicos en archive.org después del cambio. También puedes hacer una copia de seguridad manual.
  • pump.io está en desarrollo activo; algunas características que usas en StatusNet no estarán disponibles o serán implementadas por terceros. Hay un montón de cosas que pump.io hace mejor, sin
    embargo. Juegos sociales, compartir imágenes, y botones sociales en toda la web son sólo parte de la nueva diversión.

Filed under: News Tagged: Español, Free Software, identi.ca, Moving into free software, translations

01 May, 2013 07:50PM by larjona

April 10, 2013

Arranque seguro y arranque restringido

Esto es una traducción del artículo “Secure Boot and Restricted Boot” escrito por Matthew Garrett y publicado el 26 de marzo de 2013. El repositorio git que he usado para la traducción sigue activo, por si alguien tiene alguna contribución o quiere iniciar la traducción a otro idioma.

Este fin de semana di una presentación en Libreplanet sobre el tema del arranque seguro y arranque restringido. Hay una copia del vídeo aquí – en algún momento se subirá al sitio de la conferencia. Ha resultado ser en un momento excelente, pues esta mañana, un grupo de España ha demandado a Microsoft ante la Comisión Europea, argumentando que la imposición de Microsoft del arranque seguro en el mercado de PC clientes x86 es anticompetitiva. Sospecho que es improbable que tenga éxito (la Comisión ya ha establecido que la implementación actual parece ser conforme a la ley de la UE), y me temo que esto va a hacer más difícil luchar la batalla real que enfrentamos.

Arranque seguro significa diferentes cosas para diferentes personas. Creo que la definición de la FSF es una definición útil: arranque seguro es cualquier esquema de validación de arranque en el cual el control último está en las manos del propietario del dispositivo, mientras que arranque restringido es cualquier esquema de validación de arranque en el cual el control último está en manos de un tercero. Lo que Microsoft requiere para los dispositivos x86 con Windows 8 cae en la categoría de arranque seguro: asumiendo que las OEMs se ajustan a los requisitos de Microsoft, el usuario debe poder deshabilitar el arranque seguro completamente, y también poder dejar el arranque seguro habilitado, pero con su propia elección de claves y binarios de confianza. Si la FSF establece un servicio de firma para firmar sistemas operativos que cumplan todos sus requisitos de libertad, los requisitos de Microsoft permitirían a un usuario final configurar su sistema de tal manera que rechazara ejecutar software no libre. Mi sistema está configurado para confiar en lo que me envíe Fedora o haya compilado yo en local, una decisión que yo puedo tomar porque Microsoft requiere que las OEMs lo soporten. Cualquier sistema que cumpla con los requisitos de Microsoft es un sistema que respeta la libertad del propietario del ordenador para elegir cómo de restrictiva es la política de arranque de su sistema.

Decir esto no es decir que esto es ideal. La falta de una interfaz de usuario o formatos de clave comunes entre los proveedores de hardware hace difícil para los proveedores de sistemas operativos documentar los pasos que el usuario debe seguir para ejercer esta libertad. La presencia de Microsoft como la única autoridad de claves confiable de manera amplia, deja a las personas preocupadas, de manera justificada, sobre si Microsoft será igual de agresiva en poner en la lista negra sus propios productos que poniendo en la lista negra productos de terceros. Los fallos de implementación en un (muy) pequeño número de sistemas han resultado en sistemas operativos firmados correctamente que fallan al arrancar, requiriendo a los usuarios actualizar su firmware antes de poder instalar cualquier otra cosa distinta a Windows.

Pero concentrarse en estos problemas pierde de vista el punto importante. El mercado x86 permanece como uno donde los usuarios son capaces de ejecutar lo que quieran, pero el mercado x86 se está empequeñeciendo. Los usuarios están comprando tabletas y otros ultraportátiles basados en ARM. Algunos usuarios usan sus teléfonos como su primer dispositivo de tipo ordenador. En contraste con el mercado x86, las políticas de Microsoft para el mercado ARM restringen la libertad del usuario. Requieren que los dispositivos con Windows Phone y Windows RT arranquen solamente binarios firmados, sin opción para el usuario final de deshabilitar la validación de firmas o instalar sus propias claves. Aunque la tecnología que subyace es idéntica, este conjunto distinto de políticas predeterminadas significa que la implementación de Microsoft en ARM se describe mejor como arranque restringido. Los proveedores de hardware y Microsoft definen qué software se ejecutará en esos sistemas. Los propietarios no tienen voz.

Y, desgraciadamente, Microsoft no está sola. Apple, el mayor proveedor individual de este mercado, implementa de manera efectiva restricciones idénticas. Algunos proveedores de Android proporcionan secuencias de inicio desbloqueables, pero otros (ya sea a través de preferencias personales o por imposiciones de las operadoras de telefonía) bloquean sus plataformas. Un usuario naif puede que acabe comprando un dispositivo que, para evitar que se exploten fallos de seguridad, rechace funcionar si algún componente de sistema es modificado. Incluso en casos en los que los componentes que subyacen estén construidos usando software libre, no hay garantía de que el usuario tenga la posibilidad de ejercer esas libertades.

¿Por qué es importante esto? Algunas de esas plataformas (sobre todo Windows RT e iOS, pero también algunos dispositivos basados en Android) rechazarán ejecutar aplicaciones no firmadas. Los usuarios no pueden escribir su propio software y distribuirlo a otros sin tener que acceder a restricciones muchas veces onerosas. Los usuarios con la mala suerte de vivir en el país equivocado pueden incluso tenerlo prohibido. El proveedor puede escoger bloquear aplicaciones que compitan con las suyas propias, reduciendo la innovación. La posibilidad de explorar y cacharrear con los componentes de un sistema se ve restringida, haciendo más difícil a los usuarios aprender cómo funcionan los sistemas operativos modernos. Si yo poseo un teléfono perfectamente funcional que ya no recibe actualizaciones del proveedor, no tengo siquiera la opción de pagar a un tercero para asegurarme de que no voy a estar comprometido por un sitio web malicioso y afronto el riesgo de perder claves o detalles financieros. Se está dañando directamente al usuario con estas restricciones.

No voy a argumentar que no hay beneficios en los ecosistemas de software tutelados. No voy a argumentar siquiera contra los dispositivos que se proporcionan con una política bloqueada de manera predefinida. Voy a argumentar con fuerza que el propietario de un dispositivo debería no sólo tener la libertad de escoger si desea permanecer dentro de esos límites restringidos, sino que también debería tener la libertad para imponer sus propios límites. No debería haber elección obligada entre libertad y seguridad.

Aquellos que argumentan contra el arranque seguro ponen en riesgo nuestra libertad de tomar una decisión personal sobre en quién confiar. Aquellos que argumentan contra el arranque seguro ignorando el arranque restringido ponen en riesgo mucho más para todos nosotros. El mercado tradicional del PC está decreciendo en importancia. A no ser que hagamos algo sobre esto, el software libre estará limitado a un grupo nicho de entusiastas que han escogido con cuidado sus dispositivos de entre un conjunto pequeño de ellos, que respetan las libertades del usuario. Deberíamos haber estado haciendo campañas contra el arranque restringido desde hace 10 años. No lo retrasemos aún más luchando contra implementaciones que sí respetan la libertad del usuario.
26 de Marzo de 2013 07:25 pm


Filed under: Videos, Writings (translations) Tagged: Android, Español, Free Software, Freedom, libre software, Linux, Moving into free software, mswl

10 April, 2013 08:32AM by larjona

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)

August 14, 2012

Fernando C Estrada

Día Debian en la Ciudad de México

El 16 de Agosto el Proyecto Debian cumplirá 19 años, por lo que se tienen planeadas diversas fiestas alrededor del mundo, y la Ciudad de México no podía ser la excepción, es por ello que nos reuniremos para celebrar el Día Debian.

Debian Day

La cita es el próximo sábado 18 de Agosto a partir de las 13:00hrs. (y hasta las 19:00hrs.) en el centro de capacitación de Compugraf, ubicado en Calle Norte 72 No. 5832, Col Bondojito, C.P. 07850, Del. Gustavo A. Madero, México D.F.

Habrá charlas, talleres, firmado de llaves, jornadas de instalación, y un buen ambiente para intercambiar ideas y compartir conocimiento.

Para mayor información acudir a la lista de correo del grupo de usuarios de Debian México.

Saludos ;-)

14 August, 2012 03:46AM by Fernando C. Estrada

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

February 13, 2012

Fernando C Estrada

¡Asistiré a la DebConf 12 en Nicaragua!

Ya compré mi boleto de avión para asistir a DebConf 12, por lo que participaré por primera vez en la 13ª Conferencia Anual de Debian que se llevará a cabo del 8 al 14 de julio en la ciudad de Managua, Nicaragua.

DebConf 12

Saludos ;-)

P.D. Muchas gracias n0rman por toda tu ayuda.

13 February, 2012 04:00AM by Fernando C. Estrada

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

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

November 16, 2011

Fernando C Estrada

The Unarchiver cambia de nombre en Debian

El paquete en Debian correspondiente a la aplicación The Unarchiver (para la cual escribí un artículo hace poco) ha cambiado de nombre en Debian y ahora se llama unar, dicho cambio se debe a ciertas conversaciones  que se tuvieron con Dag Ågren (el desarrollador principal «upstream») en relación a la versión utilizada, y es por ello que en caso de que ya tengan instalado el paquete theunarchiver lo deben sustituir por el paquete unar:

apt-get --purge remove theunarchiver && apt-get install unar

Saludos ;-)

P.D. ¡Muchas gracias a Julián Moreno Patiño por la información!

16 November, 2011 05:16AM by Fernando C. Estrada

October 03, 2011

Primera reunión de usuari@s de Debian en la Ciudad de México

El pasado sábado 24 de Septiembre se llevó a cabo una reunión de usuari@s de Debian con la inquietud principal de formar un grupo local de usuari@s de Debian en la Ciudad de México.

Aunque la reunión estaba planeada a las 5:30pm, debido a algunos problemas en la organización desafortunadamente esta nunca “comenzó formalmente”, y considerando que ya era tarde y posiblemente no se contaría con el espacio posteriormente alrededor de las 8:15pm algun@s interesad@s nos reunimos y comenzamos a charlar al respecto, teniendo como primer acuerdo que el Telmex Hub no es una opción adecuada para llevar a cabo futuros encuentros, al poco tiempo los empleados de Telmex Hub pidieron que nos retiraramos por lo que la charla siguió en la calle y por último nos movimos a un bar cercano.

Las conclusiones y acuerdos a las que se llegaron en la reunión fueron las siguientes:

  1. Organizar actividades presenciales entre personas que compartimos una misma región y que tenemos en común el interés por Debian nos puede beneficiar para aprender y compartir más sobre Debian organizando talleres, charlas, etc, además de beneficiar al proyecto Debian directamente al darle difusión y atraer más personas interesadas en colaborar.
  2. La creación del grupo local en la Ciudad de México es completamente informal, no existe una estructura organizacional y por el momento no se planea que vaya a haberla, se trata simplemente de personas que compartimos el interés por Debian además de una misma región en la que vivimos, por lo que cualquier persona es bienvenida a participar, organizar, proponer, colaborar, etc.
  3. El trabajo que se realice siempre irá enfocado a Debian y no a algo local, por lo que una de las funciones del grupo será encaminar y canalizar a las personas a colaborar directamente en Debian, una propuesta al respecto es invitar a las personas interesadas en colaborar a que envíen un correo a la lista indicando sus intereses, habilidades, ideas, etc., para que así podamos canalizarl@s a algún equipo de trabajo en Debian y su esfuerzo se vea reflejado directamente y no quede en algo local que no tenga el impacto buscado.
  4. Se planea tener reuniones mensuales organizando entre tod@s charlas, talleres, maratones de traducción, BSPs y cualquier otra actividad relacionada a Debian y que además ayude en su difusión. Debido a las ocupaciones de la mayoría las reuniones se planean hacer en fines de semana por lo que el siguiente paso es encontrar el lugar y acordar la fecha y hora para la próxima reunión. Cualquier oferta brindando un espacio para una próxima reunión será de gran ayuda y sumamente bienvenida.

Favor de enviar cualquier comentario, sugerencia, propuesta y demás a la lista de Debian México para poder mantener la temática y por supuesto darle seguimiento a la misma.

Saludos ;-)

P.D.1. Gracias Jonathan por los apuntes sobre la reunión y principalmente por la charla que brindaste sobre Debian.

P.D.2. Ofrezco disculpas por el retraso en la minuta de la reunión.

03 October, 2011 01:32PM by Fernando C. Estrada

September 21, 2011

BOF: Grupo de usuari@s de Debian en la Ciudad de México

El próximo sábado se llevará a cabo una reunión entre usuari@s de Debian en la Ciudad de México, esto con la finalidad de convivir y tratar diversos temas como la propuesta de creación de un grupo local de usuari@s de Debian, la planeación de una Bug Squashing Party, ideas de colaboración, intercambio de llaves, etc. La cita es el próximo sábado 24 de Septiembre de 2011 en el Telmex Hub (Isabel la Católica #51 P.B., Colonia Centro, Delegación Cuauhtemoc.) a las 5:30pm.

Durante ese día se estará celebrando el «Día del Software Libre» por lo que se tienen varias charlas planeadas, entre ellas: «Debian, la participación en comunidad para la socialización del conocimiento» a las 4:00pm, así que consulta la agenda del evento, pasa la voz y ¡nos vemos el sábado!.

Saludos ;-)

P.D. ¿Ya te registraste a la lista de correo para la comunidad de usuari@s de Debian México?.

21 September, 2011 03:01AM by Fernando C. Estrada

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é 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

March 20, 2011

hackergotchi for Ana Beatriz Guerrero Lopez

Ana Beatriz Guerrero Lopez

Small applications missing in KDE 4

I have been working in the last weeks in the removal of the last pieces of KDE 3 from the Debian archive and I have found there are a lot of packages that is sad having to remove.

If you are looking for a good idea/excuse to learn and improve your KDE 4 / C++ /Qt4 skills, have to do a small application for school or you just feel like some useful coding, here is the list:

  • creox – real-time guitar effects
  • kbarcode – barcode and label printing application for KDE
  • kbiff – KDE mail notification utility
  • KKBSwitch – keyboard layout indicator for KDE (see this post also)
  • kmyfirewall – iptables based firewall configuration tool for KDE
  • kpogre – a graphical administrator tool for PostgreSQL
  • kredentials – KDE taskbar applet to update kerberos/AFS credentials
  • ksociograma – technical educational software to make sociograms
  • ktechlab – circuit simulator for microcontrollers and electronics
  • qalculate-kde – Powerful and easy to use desktop calculator – KDE version
  • score-reading-trainer – trainer for reading music notes

Note that I do not list here software whose port in KDE 4 is being developed although it is still not finished and therefore it is not packaged in Debian.

By the way, even if all those packages are being removed from Debian testing and unstable, they will remain in Squeeze, so you can keep using them or install it from there.

20 March, 2011 11:25PM by ana

February 24, 2011

Nacho Barrientos Arias

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 07, 2011

hackergotchi for Ana Beatriz Guerrero Lopez

Ana Beatriz Guerrero Lopez

post and pre-release fun

The last weeks before a Debian release are usually boring with respect to working on new stuff since unstable is pretty much closed to development. Now that the release is finished, this fun is back \o/

I have been in an ‘upload frenzy’ since yesterday night and I have updated some packages in unstable: KOffice[1] and KOffice-l10n 2.3.1, yakuake, rsibreak and tintin++. Another of my packages, kid3, got magically updated itself in unstable before I had time to look at it, the magic of having active co-maintainers.

[1] Thanks for the gentle push to update this, Pino :)

I also emailed one of my upstream maintainers to ask him about the KDE 4 version of his application and he will likely make a release soon. One of the goals for wheezy is remove completely KDE 3 and Qt 3. If you are maintaining a KDE 3 or Qt 3 based application, we are about to start annoying you about this! See http://wiki.debian.org/kdelibs4c2aRemoval and http://wiki.debian.org/qt3-x11-freeRemoval

The last 2 weeks before the release I had some fun watching how the Squeeze release countdown banner I published at http://news.debian.net spread to a lot of websites, personal blogs, community sites, forums to news portals.
The traffic has been increasing little by little through the 2 weeks the banner has been online and currently is still moderately high, since people keeps retweeting the news item about the Debian release. While writing these lines, the banner has been served 449575 times to a total of 244975 unique IP addresses!

07 February, 2011 09:06PM by ana

February 03, 2011

Mario Izquierdo

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

February 01, 2011

hackergotchi for Ana Beatriz Guerrero Lopez

Ana Beatriz Guerrero Lopez

Debian at the Google Code-in 2010-11

As you might know, Debian was one of the 20 organizations selected to participate in the first Google Code-in.

We got a moderate success since we started preparing the contest very late (I joined as mentor/admin the very first day of the contest!). Because of this, unlike other organizations, we did not manage to engage interested students from the very beginning of the Code-in. Since we did not have too many Debian tasks the first days, we did not attract many students, and thus did not have very many throughout the contest.

Given Debian tasks were mostly about improving and contributing to Debian, it was quite hard having tasks that did not require having a Debian installation and that made it difficult for many students to get involved. Also, until the last two weeks we did not have any translation task that could have attracted earlier students without too much confidence in their technical and English skills.

Nonetheless, Debian got 39 tasks done:

With about 30 students participating and at least one of the students has keep contributing to Debian after the contest!

The contest was sometimes stressful with several students wanting their tasks to be reviewed at the same time, and the date was problematic due to the winter (or summer!) holidays but still I am quite happy with the final result :D

Debian will be also participating again this year in the Google Summer of Code 2011. Join the soc-coordination mailing list and stay tunned if you want to participate as mentor or student.

01 February, 2011 10:55PM by ana

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

January 09, 2011

hackergotchi for Ana Beatriz Guerrero Lopez

Ana Beatriz Guerrero Lopez

KOffice 2.3.0 and future

It took a bit of time due to the holidays, but KOffice 2.3.0 is finally available from Debian experimental (give some hours to your mirror to sync!). If you are unstable user don’t be afraid to fetch it from experimental, it is there only because the Squeeze freeze. Squeeze will ship with KOffice 2.2.1, while not all the applications are so polished as it would be desirable, it clearly offers huge improvements over old KOffice 1.6.3.

I do not know if there will be a KOffice 2.3.1 upload but I know for sure the future is with Calligra :)

09 January, 2011 02:09PM by ana

December 22, 2010

hackergotchi for Miriam Ruiz

Miriam Ruiz

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