lunes, 18 de agosto de 2014

ssh over tor

Desde hace unas semanas ha estado fallando el enlace a Internet. Eso de tener tres enlaces... uno a RED-UNAM, otro a UNINET y otro a la, para nosotros, mal lograda Red NIBA, prometía ser un dolor de cabeza. Así ha sido.

Como no es la primera vez que falla, más de una vez he utilizado TOR para conectarme a los servicios de Web, y ha desmostrado ser una magnífica opción. Sin embargo, hoy el otro día necesitaba utlizar SSH... pero ¿cómo se usa tor para conectarse vía ssh?

Primero instalar tor: yum -y install vidalia y ejecutarlo. O si lo prefieres y la paranoia no te permite utilizar el RPM oficial, instala el paquete completo.

Luego, instalar connect-proxy: yum -y install connect-proxy.

Enseguida, necesitaremos un archivo de configuración ~/.ssh/config.tor para ssh, el cual debe contener al menos lo siguiente:

Host *
  CheckHostIP no
  Compression yes
  Protocol 2
  ProxyCommand connect -4 -S localhost:9050 $(tor-resolve %h localhost:9050) %p

Finalmente, a conectarse: ssh -F ~/.ssh/config.tor user@host.domain.tld.

martes, 29 de julio de 2014

Arduino TFT is CP437

¿Cuál es el Conjunto de Caracteres del TFT de Arduino?
#include <Esplora.h>
#include <SPI.h>
#include <TFT.h>
#include "rgbtxt.h"

void setup() {
  EsploraTFT.begin();
  EsploraTFT.background(MidnightBlue);
  EsploraTFT.stroke(wheat);
  EsploraTFT.setTextSize(1);
}

char strTFT[32];
String strTMP;

void loop() {
  byte i,j;
  char ch;

  for(i=0; i<16; ++i) {
    strTMP=String(i,HEX) + " ";
    for(j=0; j<16; ++j) {
      strTMP+=(char)((i<4)|j);
    }
    strTMP.toCharArray(strTFT,32);
    EsploraTFT.text(strTFT,0,i*8);
  }
  
  while(!0);
}

Cuál no sería mi sorpresa al darme cuenta que es (casi) el original del IBM-PC, también conocido como CP437.
Ahora sólo falta aplicar $ iconv -f utf8 -t cp437 ...

2014-07-29 10:46:15 (M6.3) VERACRUZ, MEXICO 17.8 -95.5 (8106c)

Globe with Earthquake Location


  • Ro
    •  km (37 mi) W of Sayula de Aleman, Mexico
  • 62 km (38 mi) SSE of Carlos A. Carrillo, Mexico
  • 65 km (40 mi) W of Acayucan, Mexico
  • 418 km (259 mi) ESE of Mexico City, Mexico
Location Uncertainty Horizontal: 0.0 km; Vertical 5.9 km
Parameters Nph = 149; Dmin = 324.4 km; Rmss = 1.12 seconds; Gp = 46°
Version =
Event ID us b000ry8m

For updates, maps, and technical information, see: Event Page or USGS Earthquake Hazards Program
National Earthquake Information Center
U.S. Geological Survey
http://earthquake.usgs.gov/regional/neic/


Disclaimer

lunes, 7 de julio de 2014

2014-07-07 11:23:58 UPDATED: (M7.1) CHIAPAS, MEXICO 14.8 -92.4 (8106c)

Globe with Earthquake Location

M7.1 - CHIAPAS, MEXICO

Preliminary Earthquake Report
Magnitude 7.1
Date-Time
  • 7 Jul 2014 11:23:58 UTC
  • 7 Jul 2014 06:23:59 near epicenter
  • 7 Jul 2014 05:23:58 standard time in your timezone
Location 14.782N 92.371W
Depth 92 km
Distances
  • 8 km (4 mi) NE of Puerto Madero, Mexico
  • 16 km (9 mi) SW of Tapachula, Mexico
  • 27 km (16 mi) WNW of Ciudad Tecun Uman, Guatemala
  • 30 km (18 mi) NNW of Suchiate, Mexico
  • 200 km (124 mi) W of Guatemala City, Guatemala
Location Uncertainty Horizontal: 0.0 km; Vertical 5.2 km
Parameters Nph = 128; Dmin = 78.6 km; Rmss = 1.58 seconds; Gp = 41°
Version = 1
Event ID us c000rr6a ***This event supersedes event AT00n8caby.
For updates, maps, and technical information, see: Event Page or USGS Earthquake Hazards Program
National Earthquake Information Center
U.S. Geological Survey
http://earthquake.usgs.gov/regional/neic/


Disclaimer

--
Mis resultados: Intensidad II

viernes, 13 de junio de 2014

Hoy juega la decepción nacional de fútbol.

Ni se hagan ilusiones. Veamos el desempeño de la Selección Mexicana de Fútbol.
La primera participación de México en la Copa Mundial de Futbol fue en la primera edición en Uruguay 1930, participación por demás decepcionante: en la última posición (de 13), con cero puntos y una diferencia de goles de -9, sólo superada por la participación en Argentina 1978, en la misma última posición (de 16), con la misma ausencia de puntos y -10 goles de diferencia.
Pero aún más vergonzosa ha sido (y esperemos que será) la no participación de México en Italia 1990, debido al escándalo de Los cachirules.
En el otro extremo, la mejor participación consiste en ser eliminados en la ronda de cuartos de final, por la vía de los penalties. Con un registro invicto de tres partidos ganados y dos empatados, nos permitió obtener la sexta posición (de 24). México 86, el mundo hundido por un deudón.
La segunda mejor actuación, otra sexta posición (de 16) en cuartos de final, es en México 70, con un registro de dos partidos ganados, uno empatado y uno perdido. Deberíamos organizar mundiales más seguido.
En épocas modernas del fútbol nacional, después de Los Cachirules y fuera del territorio nacional, la mejor participación es la del 2002, en Corea del Sur/Japón, con un desempeño de dos partidos ganados, uno empatado y uno perdido; el cual nos hizo acreedores a la décimoprimera posición (de 32). El resto de las ocasiones, aunque si bien es cierto que se ha superado la ronda de grupos, la decepción nacional cuando mucho sólo ha ganado un (1) partido.
Mi pronóstico pesimista: el destino de la decepción nacional estará sellado en dos partidos.
Mi pronóstico optimista: se juegan cuatro partidos y se obtienen 4 de 12 puntos posibles.

sábado, 31 de mayo de 2014

2014-05-31 11:53:48 UPDATED: (M6.2) OFF THE COAST OF JALISCO, MEXICO 18.9 -107.4 (8106c)

Globe with Earthquake Location

 Earthquake Report


Magnitude 6.2
Date-Time
  • 31 May 2014 11:53:48 UTC
  • 31 May 2014 04:53:48 near epicenter
  • 31 May 2014 05:53:48 standard time in your timezone
Location 18.852N 107.445W
Depth 10 km
Distances
  • 259  kmlo (160 mi) WSW of Tomatlan, Mexico
  • 303 km (187 mi) SW of Puerto Vallarta, Mexico
  • 306 km (189 mi) W of Cihuatlan, Mexico
  • 311 km (192 mi) SW of Ixtapa, Mexico
  • 877 km (543 mi) W of Mexico City, Mexico
Location Uncertainty Horizontal: 0.0 km; Vertical 1.8 km
Parameters Nph = 117; Dmin = 594.7 km; Rmss = 1.14 seconds; Gp = 78°
Version = 1
Event ID us c000r9g2 ***This event supersedes event AT00n6ft1q.
For updates, maps, and technical information, see: Event Page or USGS Earthquake Hazards Program
National Earthquake Information Center
U.S. Geological Survey
http://earthquake.usgs.gov/regional/neic/

sábado, 10 de mayo de 2014

2014-05-10 07:36:03 (M6.0) GUERRERO, MEXICO 17.3 -100.8 (8106c)

Globe with Earthquake Location

M6.0 - GUERRERO, MEXICO

Preliminary Earthquake Report
Magnitude 6.0
Date-Time
  • 10 May 2014 07:36:03 UTC
  • 10 May 2014 02:36:04 near epicenter
  • 10 May 2014 01:36:03 standard time in your timezone
Location 17.263N 100.754W
Depth 35 km
Distances
  • 7 km (4 mi) W of Tecpan de Galeana, Mexico
  • 34 km (21 mi) WNW of Atoyac de Alvarez, Mexico
  • 61 km (37 mi) ESE of Petatlan, Mexico
  • 77 km (47 mi) WNW of Coyuca de Benitez, Mexico
  • 294 km (182 mi) SW of Mexico City, Mexico
Location Uncertainty Horizontal: 0.0 km; Vertical 1.9 km
Parameters Nph = 97; Dmin = 235.0 km; Rmss = 1.33 seconds; Gp = 60°
Version =
Event ID us b000qgt2
For updates, maps, and technical information, see: Event Page or USGS Earthquake Hazards Program
National Earthquake Information Center
U.S. Geological Survey
http://earthquake.usgs.gov/regional/neic/


Disclaimer

jueves, 8 de mayo de 2014

¿Dónde te agarró el temblor?

Durante la Visita Guiada, frente al Laboratorio de Fotovoltáicos I.

Resultados del Cuestionario: Intensidad II - Leve

M6.4 - 15km N of Tecpan de Galeana, Mexico

2014-05-08 17:00:17 UTC

Event Time

2014-05-08 17:00:17 UTC
2014-05-08 12:00:17 UTC-05:00 at epicenter
2014-05-08 12:00:17 UTC-05:00 system time

Location

17.385°N 100.656°W depth=23.9km (14.9mi)

Nearby Cities

15km (9mi) N of Tecpan de Galeana, Mexico
31km (19mi) NW of Atoyac de Alvarez, Mexico
66km (41mi) ESE of Petatlan, Mexico
73km (45mi) WNW of Coyuca de Benitez, Mexico
277km (172mi) SW of Mexico City, Mexico

Fuente: USGS usb000qea2

viernes, 18 de abril de 2014

¿Dónde te agarró el temblor?

M7.5 - Guerrero, Mexico

Event time

2014-04-18 14:27:29 UTC
(2014-04-18 09:27:29 UTC-05:00)

Location

17.554°N 100.895°W depth=51.8km (32.2mi)

Ciencia ciudadana:

¿Sentiste el temblor? Llena el cuestionario y tranquilízate.

viernes, 14 de marzo de 2014

Arduino SizeOf

¿De qué tamaño son los datos en el Arduino Uno?

#include <stdio.h>

#define FOO(x) Serial.println(String("sizeof(" #x ")=") + String(sizeof(x)))

void setup() {
  Serial.begin(9600);
}

void loop(void) {
  Serial.println("\nArduino sizeof, (C) 2014 'Aztec Eagle' Turbo");
  FOO(char);
  FOO(short);
  FOO(int);
  FOO(long);
  FOO(long long);
  FOO(void*);
  FOO(float);
  FOO(double);
  FOO(long double);
  delay(1000);
}

Esto da como resultado:

Arduino sizeof, (C) 2014 'Aztec Eagle' Turbo
sizeof(char)=1
sizeof(short)=2
sizeof(int)=2
sizeof(long)=4
sizeof(long long)=8
sizeof(void*)=2
sizeof(char*)=2
sizeof(int*)=2
sizeof(float)=4
sizeof(double)=4
sizeof(long double)=4

miércoles, 5 de marzo de 2014

perl -V

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.4.30, archname=mips-linux-uclibc
    uname='linux merope 2.4.30 #1 di 23. jan 15:23:42 cet 2007 mips unknown unknown gnulinux '
    config_args='-der'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='mips-openwrt-linux-uclibc-gcc', ccflags ='-Os -pipe -mips32r2 -mtune=mips32r2 -fno-caller-saves -mno-branch-likely -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -DUSE_CROSS_COMPILE -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/include -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/usr/include -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/include',
    optimize='-O2',
    cppflags='-Os -pipe -mips32r2 -mtune=mips32r2 -fno-caller-saves -mno-branch-likely -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -DUSE_CROSS_COMPILE -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/include -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/usr/include -I/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/include'
    ccversion='', gccversion='3.4.3', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='mips-openwrt-linux-uclibc-gcc', ldflags =''
    libpth=/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/lib /home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/lib
    libs=-lgdbm -ldb -lnsl -ldl -lm -lcrypt -lutil -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc 
    libc=, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -rdynamic -L/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/lib -L/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/lib -L/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/usr/lib -L/home/build/builddir/all-in-one/dogstick/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
                        USE_LARGE_FILES USE_PERLIO
  Built under linux
  Compiled at Sep 12 2013 16:49:59
  @INC:
    /usr/lib/perl5/5.10
    .

lunes, 28 de octubre de 2013

Estrenando Arduino Yún


Estrenando Arduino Yún, originally uploaded by hdaniel.

Recién desempacado y recién conectado :-D

sábado, 26 de octubre de 2013

Wii Classic Controller

http://www.flickr.com/photos/hdaniel/10499561965/in/set-72157633601027807/
Wii Classic Controller, originally uploaded by hdaniel.

Hace rato que debí postear este mensaje (la fecha del programa fuente indica 9 de junio del 2013) así que voy a aprovechar mientras se actualiza Pidora.

Echar a andar un control Wii Nunchuck en la Raspberry Pi no tiene ningún chiste, tal como dice Resident Bull. Echar a andar un Control Clásico Wii tampoco debe tener mucho chiste :-P. De eso trata este post.

Materiales:

  • 1 Raspberry Pi (y todo que lleva alrededor, por supuesto)
  • 1 Control Clásico Wii
  • 1 Adaptador WiiChuck
  • 4 cables jumper F-F

Conexiones:

De la Raspberry Pi al Adaptador WiiChuck:

  • Pin 1 a "+".
  • Pin 6 a "-".
  • Pin 3 a "d".
  • Pin 5 a "c".

Al igual que el Wii Nunchuck, el Control Clásico envía un paquete de datos I2C de 48 bits. Pero el formato es totalmente diferente:

  Bit
Byte 7 6 5 4 3 2 1 0
0 RX<4:3> LX<5:0>
1 RX<2:1> LY<5:0>
2 RX<0> LT<4:3> RY<4:0>
3 LT<2:0> RT<4:0>
4 BDR BDD BLT B- BH B+ BRT 1
5 BZL BB BY BA BX BZR BDL BDU

Allí caben: los joysticks analógicos izquierdo (LX,LY) y derecho (RX,RY); dos disparadores LT, LR; el D-Pad: arriba, abajo, izquierda, derecha; y un titipuchal de botones: A, B, X, Y, ZL, ZR, +, -, HOME, LT y LR (sí, los disparadores también tienen botones).

Decodificar semejante estructura de datos requiere de unas de las tres virtudes del programador: lazziness. En lugar de andar aplicando máscaras y corrimientos cada vez que tienes que utilizar un dato, lo mejor es dejar que el compilador de encargue de todo eso:

struct wii_classic {
  unsigned lx:6;
  unsigned rx43:2;
  unsigned ly:6;
  unsigned rx21:2;
  unsigned ry:5;
  unsigned lt43:2;
  unsigned rx0:1;
  unsigned rt:5;
  unsigned lt20:3;

  unsigned padding:1;
  unsigned brt:1;
  unsigned bplus:1;
  unsigned bhome:1;
  unsigned bminus:1;
  unsigned blt:1;
  unsigned bdd:1;
  unsigned bdr:1;

  unsigned bdu:1;
  unsigned bdl:1;
  unsigned bzr:1;
  unsigned bx:1;
  unsigned ba:1;
  unsigned by:1;
  unsigned bb:1;
  unsigned bzl:1;
};

En http://xml.cie.unam.mx/~hdcg/pub/wiiclassic.c se puede bajar un pequeño programa de prueba (basado en el de Ressident Bull. La salida del programa se verá más o menos como lo siguiente:

./wiiclassic 
0x00 0x00 0xa4 0x20 0x01 0x01
33/30:15/16: 2/ 3; du dd dl dr a b x y lt zl zr rt minus home plus

Las primeros tres pares de números son los valores LX/LY:RX/RY:LT/LR. En seguida los valores del D-Pad: arriba (du), abajo (dd), izquierda (dl), derecha (dr). Y para terminar todos los botones. Cuando presiones un botón, se escribirá con MAYÚSCULAS.

Me quedan otros posts pendientes con la Pi y con el Arduino, pero por lo pronto es todo. ¡Felices códigos!