jueves, julio 21, 2011

El peligro de los ebooks (The danger of ebooks)

Paso a traducir uno de los artículos del boletín de la Free Software Foundation que nos envían periódicamente, en papel, a los miembros de la fundación. El artículo es de Mr. Stallman:

FSF Bulletin.
Issue 18
June 2011

"The danger of ebooks" by Richard Stallman
Translation: Jorge Muñoz Rodenas FSF member 5687

En una época donde las empresas dominan a nuestros gobiernos y escriben nuestras leyes, cada avance tecnológico les ofrece una oportunidad para imponer nuevas restricciones al público.
Las tecnologías, que nos podían haber enriquecido, se usan sin embargo para encadenarnos.
Con los libros impresos:
  • Puedes comprar cualquier libro en metálico, de forma anónima,  y una vez hecho esto te pertenece.
  • No se solicita que firmes una licencia que te restrinja su uso.
  • El formato se conoce y no se necesita tecnología propietaria para leer el libro.
  • Puedes dar, prestar o vender el libro a cualquiera.
  • Puedes, físicamente, escanear y copiar el libro, siendo esto en ocasiones lícito en el ámbito del copyright.
  • Nadie tiene la capacidad de destruir tu libro. 
Esto contrasta con los libros de Amazon:

  • Amazon solicita a los usuarios identificarse para obtener un ebook.
  • En algunos países, Amazon le dice al usuario que el libro no le pertenece.
  • Amazon también requiere del usuario que acepte una licencia restrictiva para el uso del ebook.
  • El formato es secreto, y sólo un software restrictivo-privativo puede leer el libro en toda su amplitud.
  • Para algunos libros se permite un "sucedaneo" de préstamo sólo posible si se especifica el nombre del usuario al que se presta el ebook. Dicho usuario ha de estar registrado.
  • No se permite dar o vender ebooks.
  • Copiar el libro es imposible debido a la gestión de derechos digitales (DRM) en el dispositivo lector y prohibido por la licencia, que es incluso más restrictiva que la propia ley de copyright.
  • Amazon puede, de forma remota, borrar el ebook usando una puerta trasera - Usó esta puerta trasera en 2009 para borrar miles de copias de la novela de George Orwell "1984".
Una sóla de estas infracciones deja a los ebooks a un paso por detrás de los libros impresos. Debemos rechazar los ebooks hasta que respeten nuestra libertad.
Las compañías de ebooks dicen que denegar la libertad que teníamos con el libro tradicional es necesario para continuar pagando a los autores - el sistema de copyright actual tiene un sistema de pago nefasto para los autores, pero es ideal para apoyar a esas compañías. Podemos mejorar nuestro apoyo a los autores de otras formas que no exijan restringir nuestra libertad, e incluso legalicen el acto de compartir.
Los dos métodos que he sugerido son:

  • Repartir fondos a los autores a través de impuestos basados en la raíz cúbica de la popularidad del autor.
  • Diseñar reproductores de ebooks para que los usuarios puedan hacer donaciones anónimas a los autores.
Los ebooks no necesitan menoscabar nuestra libertad, pero lo harán si las compañias así lo deciden. De nosotros depende pararles. La lucha acaba de empezar.

NdT:
ebook: libro electrónico.
copyright: derechos de copia.
Published with Blogger-droid v1.7.4



Copia y pega este texto si permiso para cualquier propósito. Lo único que pido es que menciones las fuentes, es decir, al autor de la traducción y al blog.

viernes, julio 15, 2011

Botonera para servos con Arduino UNO

Trasteando de nuevo con Arduino he hecho un montaje casero para almacenar y reproducir con sendos pulsadores la posición de un servo que se maneja o, mejor dicho, sigue a un potenciómetro. Esto me ha permitido jugar un poco con la librería Servo.h y las instrucciones para escribir y leer datos en la EEPROM de 1Kb que lleva el modelo Arduino UNO.

Ahí va la inmortalización del evento de pruebas:



El código fuente:
 
/*
Potentiometer-Servo-button-command
Author: Jorge Muñoz Rodenas jorgeroden1@gmail.com
License: GPL v.3
Date: 14/7/2011
Version: 0.2 (alpha)
Description: to do
 */

#include <eeprom.h>
#include <servo.h>

Servo myservo1;  
Servo myservo2;

// Constants

const int buttonPinMem1 = 2;               // digital pin Mem button1
const int buttonPinAct1 = 3;               // digital pin Act button1
const int buttonRelease = 12;              // digital pin RELEASE button
const int servo1Pin = 10;                  // Servo1 PWM pin
const int servo2Pin = 11;                  // Servo2 PWM pin
const int ledPin =  13;                    // the number of the LED pin (soldered on board)
const int potpin1 = 0;                     // analog pin used to connect the potentiometer1
const int potpin2 = 1;                     // analog pin used to connect the potentiometer2
const int addr0 = 0;                       // EEPROM 1st address  (Mem1-servo 1)
const int addr1 = 1;                       // EEPROM 2nd address  (Mem1-servo 2)

// Variables  

int val1 = 0;
int val2 = 0; 
int posPot1 = 0;
int posPot2 = 0;
byte pos1, pos2;                             //Servo position
int buttonStateMem1 = LOW;                   // memory pushbutton1 status
int buttonStateAct1 = LOW;                   // action pushbutton1 status
int buttonStateRelease = LOW;
boolean running = true;

void setup() {
  
   myservo1.attach(servo1Pin);                     // attaches the servo on pin 9 (digital) to the servo object 
   myservo2.attach(servo2Pin);                    // attaches the servo on pin 10 (digital) to the servo object 
   pinMode(ledPin, OUTPUT);          
   pinMode(buttonPinMem1, INPUT);  
   pinMode(buttonPinAct1, INPUT);  
}

void loop(){
    
  //Reads analog input
  
  val1 = analogRead(potpin1);              // reads the value of the potentiometer (value between 0 and 1023)   
  val1 = map(val1, 0, 1023, 0, 179);       // scale it to use it with the servo (value between 0 and 180) 
  val2 = analogRead(potpin2);              // reads the value of the potentiometer (value between 0 and 1023) 
  val2 = map(val2, 0, 1023, 0, 179);       // scale it to use it with the servo (value between 0 and 180)   
  
  //Reads digital input
  
  buttonStateMem1 = digitalRead(buttonPinMem1);
  buttonStateAct1 = digitalRead(buttonPinAct1);
  buttonStateRelease = digitalRead(buttonRelease);
  
  //Servo 1 and 2
  
  if (running == true)
  {
    myservo1.write(val1);
    myservo2.write(val2);
  }
 
 // Program 1
 
  if (buttonStateMem1 == HIGH) {    
    
    digitalWrite(ledPin, HIGH);          //LED 13 on
    EEPROM.write(addr0, val1);
    EEPROM.write(addr1, val2);
    digitalWrite(ledPin, LOW);           //LED 13 off
          
  } 
  
  if (buttonStateAct1 == HIGH) {     
 
    running = false;
    digitalWrite(ledPin, HIGH);                 //LED 13 on
    pos1 = EEPROM.read(addr0);
    pos2 = EEPROM.read(addr1); 
    myservo1.write(pos1);                       // sets the servo position according to the scaled value 
    myservo2.write(pos2);                       // sets the servo position according to the scaled value 
    digitalWrite(ledPin, LOW);                  //LED 13 off

    } 
 
    // Release button
  
  if (buttonStateRelease == HIGH) {    
    digitalWrite(ledPin, HIGH);                 //LED 13 on
    running = true;   
    delay(40);
    digitalWrite(ledPin, LOW);                 //LED 13 off      
  } 
   
}


Sobre el tema de las conexiones, los pines vienen en el software aunque si alguien lo quiere montar, y tiene dudas de cómo se conectan los servos, pulsadores y potenciómetros aquí dejo unos garabatos a mano (hoy paso del Eagle) a modo de recordatorio.

Ciao!