Cómo descargar una página web desde Linux

Como a todos/as quienes trabajamos en informática, me ocurre (ya van varias veces) que nos piden continuidad de un viejo trabajo pero resulta que el último administrador se fue dando un portazo y no hay manera de tener accesos como corresponde…

Entonces, debemos recurrir a nuestros mails, nuestra memoria… y finalmente, a alguna herramienta de descarga de una página web, para poder empezar con esa base.

Gracias a este post de GenBeta donde explican tres maneras de almacenar una página web para ver offline, pude retomar unos viejos interactivos.

Simplemente abriendo una terminal (en Debian) y poniendo:

wget --recursive --level=50 -p --convert-links http://lapaginaquequeresbajar.bla.bla

Esto descargará en forma “recursiva” todo el sitio hasta el nivel 50, convirtiendo los enlaces en locales.

En el mismo post se explica que si se quiere bajar todo el sitio se utiliza “inf” en lugar de un número, y se le agrega que espere 30 segundos entre una descarga y otra, para no sobrecargar el servidor:

--level=inf --wait=30

 

Actualizando mi versión de Linux

Bueno, tenía un Huayra viejito instalado por Euge Núñez hace unos cuatro años, y ya no daba para más.
Así que empecé por comprar una notebook con Windows y tuve que hacer allí la copia de seguridad. Luego, descargar un Debian y crear el pendrive instalable.
Aquí relato mis desventuras…
1) Siempre que intenté crear una red en casa fracasé. Esta vez me lo tomé en serio y seguí estos pasos: Configurar servidor Samba para transferir archivos entre Linux y windows

2) Las carpetas se veían y podía copiar un archivo. De todas formas me tiraba muchos errores de permisos hasta que empecé a editar los permisos de las carpetas en Linux, con el botón derecho, permisos, y le di todos los permisos a todos los usuarios y allí tuve éxito de verdad.

3) Luego busqué instrucciones para instalar linux. Según leí no era bueno actualizar por terminal porque lo que yo quería era cambiar de versión. Así que me descargué un Debian. Primero tuve que averiguar si mi computadora era de 32 o de 64 bits. Para ello utilicé el comando lscpu.

alumno@huayra:~$ lscpu
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian

4) No logré entender las instrucciones para  “Network Instal from a Minimal CD” (recomendada cuando uno tiene una buena conexión a Internet y va a realizar la instalación en una sola computadora), así que al final me bajé la versión live de 64 bits y luego de ejecutar Debian desde un pendrive elegí la opción “Instalar”. Todo anduvo de maravillas.

5) No funcionaba el sonido después de la instalación, y después de probar algunas cosas con los drivers, me di cuenta de que tenía desenchufados los parlantes… ja!

Un amigo, cuando le comenté lo del sonido me indicó cómo empezar con el tema. Estos comandos pueden ayudarte a detectar componentes:
lshw (hay que instalarlo)
lspci
lsusb

Estoy re contenta con mi computadora con Debian!

 

Un semáforo para invidentes en Arduino

El próximo sábado se realizará el primer encuentro(*) del taller de Arduino en el Centro Cultural Tierra Violeta.

Además de ver un marco teórico acerca de qué es la robótica, la idea es hacer un semáforo con sonido, similar a los semáforos para invidentes que se instalaron ya en algunas ciudades.

[Ver video 1 en youtube] [Ver video 2 en youtube]

Ejercicio de Arduino: semáforo para invidentes

Para ello vamos a usar tres leds, uno verde, otro amarillo y uno rojo. Los tres con sus respectivas resistencias y su conexión a un pin digital en el Arduino.

Comparto aquí el código:

//Les ponemos nombre a los numeros a traves de variables
int verde = 13;
int amarillo = 8;
int rojo=12;
int buzzer=9;
// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(verde, OUTPUT);
  pinMode(amarillo, OUTPUT);
  pinMode(rojo, OUTPUT);
  pinMode(buzzer, OUTPUT); // Set buzzer – pin 9 as an output
}
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(verde, HIGH);   // encender verde
  digitalWrite(amarillo, LOW); // apagar amarillo
  digitalWrite(rojo, LOW); // apagar rojo
  for (int i = 0; i < 10; i++) {
       tone(buzzer, 500); // encencer sonido
       delay(200);               // esperar 200 milisegundos
       noTone(buzzer); // apagar sonido
       delay(100); // esperar 100 milisegundos
  }
  digitalWrite(verde, LOW);    // apagar verde
  digitalWrite(amarillo, HIGH); // encender amarillo
  digitalWrite(rojo, LOW); // apagar rojo
  delay(500);               // esperar medio segundo
  digitalWrite(verde, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(amarillo, LOW);
  digitalWrite(rojo, HIGH);
  delay(2000);               // esperar dos segundos
  digitalWrite(verde, LOW);    // // apagar verde
  digitalWrite(amarillo, HIGH); // encender amarillo
  digitalWrite(rojo, LOW); // apagar rojo
  delay(500);               // esperar medio segundo
}

(*) El sábado pasado realizamos un primer encuentro pero como coincidió la fecha con otros eventos tuvimos pocas asistentes. Decidimos repetir el encuentro número 1, y hacer otro día el encuentro 2.

Simulador de Arduino

Gracias a mi trabajo pude conocer esta herramienta interesantísima para quienes no tienen un kit Arduino en su casa, o para quienes no quieren arriesgarse a quemar algo por conectar mal las cosas (y lo digo ahora que ya quemé tres leds esta semana…)

Para utilizar el simulador, empezamos accediendo al sitio circuits.io y haciendo clic en Open Electronics Lab Hub:

Open Electronics Lab Hub

Podemos comenzar mirando el video de presentación o directamente hacer clic en New Electronics Lab. Nos pedirá que comencemos creando una cuenta.

Una vez que creamos la cuenta y nos logueamos, podemos crear nuestro primer experimento. Veremos una protoboard vacía, lista para meter mano. Se trata de una base que se utiliza para conectar cada elemento sin realizar soldaduras, conectando y desconectando los distintos componentes una y otra vez. Claro que en un simulador no importaría realizar soldaduras, pero bueno, la idea es aprender a utilizar también la protoboard para luego aplicarlo en el kit físico.

¿Y cómo se entiende la estructura de la protoboard? Al mover el mouse por la protoboard veremos cómo se conectan los distintos orificios:

Conexiones de la protoboard

Esto significa que si pongo dos cables en orificios que están conectados, esos cables estarán conectados. Lo vamos a ver en la práctica.

Para comenzar la simulación vamos a agregar componentes, y buscaremos una placa Arduino Uno y un led:

Agregar los componentes

Accediendo a la opción “Code editor” podemos observar que se cargó automáticamente el ejemplo clásico (“Blink”) con el cual haremos titilar un led conectado en el pin 13.

Las conexiones para este primer experimento serán: un cable conectará la pata positiva (“ánodo”) del LED (la conexión se crea haciendo clic en un orificio y luego en el pin 13 de la placa arduino) y otro conectará la pata negativa (“cátodo”) a tierra (“Ground”, GND), como lo muestra la imagen. Luego hacemos clic en “Start simulation” para ver que hemos quemado el LED:

Quemando un led

¿Por qué lo quemamos? Porque esta conexión requiere de una resistencia. Vamos a agregar una de 220 ohm, y cambiaremos el circuito de esta manera:

Led y resistencia

Ahora sí, al hacer clic en “Start simulation” vamos a ver el LED titilando.

¿Por qué titila el LED? Vamos a mirar el programa. Lo que está después de las dos barras son comentarios, que en el simulador están en inglés pero acá los traduzco:

// El Pin 13 tiene un LED conectado.
// creamos una variable llamada LED, asignándole el valor 13 (el pin donde lo conectamos):
int led = 13;

// la rutina “Setup” se ejecuta sólo una vez al ejecutar el programa
void setup() {
// inicializamos el pin digital número 13 como salida (output).
pinMode(led, OUTPUT);
}

// la rutina loop se ejecuta “para siempre” (hasta apagar la placa):
void loop() {
digitalWrite(led, HIGH); // enciende el led
delay(1000); // espera un segundo
digitalWrite(led, LOW); // apaga el led
delay(1000); //espera un segundo
}

Podemos experimentar cambiando las sentencias delay, poniendo 2000 para dos segundos o 500 para medio segundo.

También podemos conectar el led en otro pin digital y cambiar el valor de la variable led de acuerdo a ese número.

Manejando el servo motor con el teclado

Hoy estrené el servo de mi kit básico de Arduino Uno.

Para utilizarlo, seguí instrucciones de varias páginas, pero el ejemplo que más me gustó fue el de www.electroensaimada.com

En él se utiliza la interacción con el puerto serial para enviarle una letra ‘a’ o una letra ‘z’ al robot, y en cada letra se aumenta o disminuye el ángulo del servo.

Programa para hacer funcionar el servo con el teclado

Aquí, el código para copiar y pegar:
#include
Servo mimotor;
int angulo=90;
void setup()

{
mimotor.attach(9);
Serial.begin(9600);
}

void loop() {
unsigned char comando=0;
if(Serial.available()){
comando=Serial.read();
if(comando=='a')angulo+=10;
else if(comando=='z')angulo-=10;
angulo=constrain(angulo,0,180);
}
mimotor.write(angulo);
Serial.print("Angulo: ");Serial.println(angulo);
delay(100);
}

microServo

Ver el video del programa funcionando:
Acceder al video del motor funcionando

Jugando con el buzzer de mi Arduino

Hoy conecté el buzzer que vino en mi kit de Arduino. No hubo que usar resistencia (en varios sitios la indicaban, pero así no me funcionaba), sólo conecté la pata más larga, positiva, al pin 11 y la más corta a tierra (GND).

Conezión del buzzer en la protoboard
La primera prueba que funcionó fue este código propuesto en el blog de Opiron.

void setup()
{
pinMode(11, OUTPUT); // El pin 11 es donde tenemos conectado el Buzzer
}

void loop()
{
ring(); // con este ejemplo hacemos que el buzzer vaya tocando
// tonos de diferentes frecuencias alternativamente
}
void ring (){
analogWrite(11,20); //emite 1 sonido
delay(500); //espera medio segundo
analogWrite(11,120); //emite otro sonido
delay(500); //espera medio segundo
}

Después, continué buscando, y encontré este post de El Cajón de Arduino donde se indica qué tono es para cada nota:

// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador
int speakerPin = 11;
 // Definimos una variable con el número de tonos que va a reproducir
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//                  mid C  C#   D     D#    E     F     F#    G     G#   A
// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen.
void setup()
{
// Generamos un bucle que recorra nuestro vector. Este será el encargado de introducir una determinada frecuencia al zumbador cada vez, conforme hayamos declarado el vector de tonos.
  for (int i = 0; i < numTones; i++)
  {
    tone(speakerPin, tones[i]);
    delay(500);
  }
  noTone(speakerPin);
}
void loop()
{
}

Después, jugué un poco con las distintas notas y los tiempos, para armar melodías.

Aquí,  una muy mejorable versión del “Feliz cumpleaños”, dedicado a Claudio Segovia que cumplió años ayer:

// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador
int speakerPin = 11;
// Definimos una variable con el número de tonos que va a reproducir
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
// mid C C# D D# E F F# G G# A
// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen.
void setup()
{

}
void loop()
{
delay(1000);
tone(speakerPin, 261);
delay(180);
noTone(speakerPin);
delay(20);
tone(speakerPin, 261);
delay(100);
tone(speakerPin, 294);
delay(600);
tone(speakerPin, 261);
delay(600);
tone(speakerPin, 349);
delay(600);
tone(speakerPin, 330);
delay(1200);
tone(speakerPin, 261);
delay(180);
noTone(speakerPin);
delay(20);
tone(speakerPin, 261);
delay(100);
tone(speakerPin, 294);
delay(600);
tone(speakerPin, 261);
delay(600);
tone(speakerPin, 392);
delay(600);
tone(speakerPin, 349);
delay(1200);
}

Video del feliz cumple con el buzzer

Taller de Huayra Motion en el Acosta

Mañana, en el colegio Mariano Acosta, nivel primario, vamos a hacer algunas animaciones utilizando Huayra Motion.

Primero, vamos a capturar una imagen cada 5 segundos, escribiendo algo:

Después, podemos hacer una secuencia de dibujos y fotografiarlos. El que se anima, le puede agregar detalles (el pasto y el sol en este ejemplo) usando Gimp u otro programa de edición:

Por último, vamos a animar personajes dibujados en cartulina, u otros objetos que tengamos ganas:

También podemos hacer animaciones con sal, con arroz, y todo lo que se nos ocurra!!

Aquí voy a ir publicando algunas de las animaciones que hicieron los chicos de 4to a 7mo grado

¿Cómo hacer más simple el foro de Moodle?

Esto es algo que me piden siempre: que en el foro de Moodle no se puedan crear nuevos temas, nuevos hilos, que sólo haya un tema planteado arriba y los usuarios respondan a ese tema.

La respuesta es simple: hay que configurar el foro en modo debate sencillo.

Para ello, basta con acceder al foro con un usuario profesor, gestor o administrador, y hacer clic en editar ajustes.

Allí hay un desplegable con los tipos de foro, en el que tenemos que elegir “debate sencillo”.

¿Y qué son las demás opciones?

Haciendo clic en el signo de interrogación al lado de Tipo de foro, encontramos la pantalla de ayuda que explica cada una de las opciones.

Encender y apagar una lámpara utilizando Arduino

Para poder encender y apagar una lámpara, es necesario contar con el Arduino, y con un módulo Relay o Relé, y experiencia previa en Arduino (encender un led, utilizar algún otro elemento como un sensor de distancia)

Fernando Bordignon, un gran colega con el que me comunico gracias a las redes, me facilitó este tutorial en el que se comprende perfectamente cómo conectar la lámpara. Para eso, es verdaderamente útil tener experiencia reparando interruptores y cosas por el estilo. Vamos a estar manipulando un dispositivo que funciona con 220v, así que hay que tener mucho cuidado.

Una vez leído el tutorial anterior, encontré este videotutorial donde se explica de otra manera cómo hacer las conexiones (mi módulo de relé tiene cuatro pines, como en este ejemplo, pero los hay de tres, como en el video tutorial que está debajo):


En este video explican perfectamente cómo funciona un Relé