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

Sólo por curiosidad: ¿De qué tamaño son los datos en el Arduino?
sizeof(char)=1
sizeof(short)=2
sizeof(int)=2
sizeof(long)=4
sizeof(long long)=8
sizeof(void*)=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!

miércoles, 21 de agosto de 2013

¿Dónde te agarró el temblor?

Yo sabía que sólo era cuestión de tiempo para escribir en este olvidado blog el registro de un sismo M>6:

M6.1 - 18km NW of Ayutla de los Libres, Mexico

Event Time

2013-08-21 12:38:33 UTC
2013-08-21 05:38:33 UTC-07:00 at epicenter
2013-08-21 07:38:33 UTC-05:00 system time

Location

17.008°N 99.355°W depth=34.8km (21.6mi)

Nearby Cities

18km (11mi) NW of Ayutla de los Libres, Mexico
23km (14mi) N of San Marcos, Mexico
30km (19mi) SE of Tierra Colorada, Mexico
59km (37mi) ENE of Acapulco de Juarez, Mexico
268km (167mi) S of Mexico City, Mexico

Más información en http://earthquake.usgs.gov/earthquakes/eventpage/usb000j83t

Lo nuevo de este registro es la solicitud a mis escasos lectores para que llenen el cuestionario.

lunes, 8 de julio de 2013

Fedora 19

Por fin he terminado de actualizar los equipos a Fedora 19 (Schrödinger's Cat). Todos maullan muy bonito :-) Excepto, claro, los gatos que están muertos- o al menos apagados :-P

De entrada no parece haber nada revolucionario. Si acaso para los equipos de bajo nivel el regreso del entorno de escritorio clásico GNOME-2 bajo el nombre de MATE (*che boludo).

Ahora a desahogarse. Sigo sin entender el «nuevo» concepto del Anaconda. En particular para realizar una instalación cuando ya tienes Fedora. Más aún: cuando Fedora son tus únicos sistemas operativos. Sí, tengo instalados dos Fedora: la versión más nueva, y una versión anterior. Totalmente libre de Windows. Y lo vengo haciendo desde Fedora Core 1.

Si bien es cierto que desde la versión 18 Anaconda perdió la habilidad de actualizar una instalación previa, es una habilidad que siempre dejó mucho que desear y por lo tanto una habilidad despreciada a favor de una instalación nueva en un volumen lógico preexistente para tal propósito. Un volumen lógico para el sistema de archivos /home aseguraba una transición dócil entre versión y versión. Si algo no funcionaba bien en la nueva versión (como cuando dejaba de funcionar quake3) bastaba con reiniciar el equipo solicitando al GRUB arrancar la versión anterior.

Pero el nuevo Anaconda insiste en destruir la configuración anterior. De entrada pretende reclamar el volumen físico. ¡De ninguna manera! Luego, en el menú avanzado uno trata de realizar la configuración deseada y los quehaceres gráficos se cuatrapean. Al menos eso funcionaba en el Fedora 18, aunque era igual de incomprensible (RTFM).

Para no hacer el cuento largo, terminé instalando una máquina virtual. Luego, como si se tratara de una Raspberry Pi, copié el sistema de archivos raíz en el volumen lógico predestinado. Un par de órdenes en el entorno de rescate para recuperar las cuentas de usuario y la capacidad de arranque y ¡Listo!

Casi estoy seguro que será imposible instalar Fedora 19 en la computadora que el IER-UNAM me presta para trabajar. Al menos con Anaconda. 4 discos duros, 5 dispositivos RAID-1, 3 volúmenes físicos, 1 grupo de volúmenes, 3 volúmenes lógicos, y 1 sistema de archivos cifrado con LUKS. Tal vez FedUp sea capaz de actualizar F17, mientras conservo F18. Por si acaso.

sábado, 20 de abril de 2013

2013 VEX Robotics Middle School World Championship - Rankings

Al terminar las rondas de clasificación del 2013 VEX Robotics Middle School World Championship, después de diez juegos jugados, los equipos Mexicanos tienen los siguientes resultados:

En el grupo Spirit:

Rank Num Equipo     (G-E-P) Puntos
9 6966A GONBOTZ - A (8-0-2) 817
22 4359A SECUNDARIA TÉCNICA NO. 22 (6-0-4) 1110
55 4402A Cuitlabots (3-1-6) 838
57 5918A Secundaria 13 (3-0-7) 905
65 6395B Tecnobots (3-0-7) 719
69 6637 Sec. Tec. 67 (3-0-7) 633
80 7351C Sec. Tec. 56-C (0-0-10) 713

En el grupo Oportunity:

Rank Num Equipo    (G-E-P) Puntos
12 7313D SEED-AS 4 (7-0-3) 868
54 5918B Secundaria 13  B (4-0-6) 409
56 6395 Robotics Verein (3-1-6) 725
70 5381B Tenovex (2-1-7) 798
78 7351A Sec. Tec. 56-A (1-0-9) 694
79 5324A Discovery IV (0-0-10) 733

viernes, 19 de abril de 2013

Segundo día de competencias

Al terminar el segundo día de las rondas de clasificación del 2013 VEX Robotics Middle School World Championship, después de ocho juegos jugados, los equipos Mexicanos tienen los siguientes resultados:

En el grupo Spirit:

Rank Num Equipo     (G-E-P) Puntos
13 6966A GONBOTZ - A (6-0-2) 597
19 4359A SECUNDARIA TÉCNICA NO. 22 (5-0-3) 779
57 6637 Sec. Tec. 67 (3-0-5) 539
62 5918A Secundaria 13 (2-0-6) 640
67 6395B Tecnobots  (2-0-6) 613
72 4402A Cuitlabots (1-1-6) 663
79 7351C Sec. Tec. 56-C (0-0-8) 550

En el grupo Oportunity:

Rank Num Equipo    (G-E-P) Puntos
17 7313D SEED-AS 4  (5-0-3) 753
44 5918B Secundaria 13  B (4-0-4) 320
64 5381B Tenovex  (2-1-5) 608
71 6395 Robotics Verein (1-1-6) 554
73 7351A Sec. Tec. 56-A (1-0-7) 584
79 5324A Discovery IV (0-0-8) 668

El día de mañana se jugarán los dos últimos juegos. ¡Suerte para todos!

jueves, 18 de abril de 2013

2013 VEX Robotics Middle School World Championship (First Day)

Al terminar el primer día de las rondas de clasificación del 2013 VEX Robotics Middle School World Championship, después de tres juegos, los equipos Mexicanos tienen los siguientes resultados:

En el grupo Spirit:

Rank Num Equipo    (G-E-P) Puntos
#3: (6966A) GONBOTZ - A (3-0-0) (6-260)
#35: (6637) Sec. Tec. 67 (2-0-1) (4-161)
#40: (4402A) Cuitlabots (1-1-1) (3-199)
#41: (4359A) SECUNDARIA TÉCNICA NO. 22 (1-0-2) (2-341)
#55: (5918A) Secundaria 13 (1-0-2) (2-209)
#56: (6395B) Tecnobots (1-0-2) (2-201)
#72: (7351C) Sec. Tec. 56-C (0-0-3) (0-256)

En el grupo Oportunity:

Rank Num Equipo  (G-E-P) Puntos
#9: (7313D) SEED-AS 4 (3-0-0) (6-212)
#12: (5918B) Secundaria 13  B (3-0-0) (6-120)
#65: (5381B) Tenovex (0-1-2) (1-241)
#66: (6395) Robotics Verein (0-1-2) (1-171)
#77: (5324A) Discovery IV (0-0-3) (0-190)
#80: (7351A) Sec. Tec. 56-A (0-0-3) (0-130)

El día de mañana se jugarán 5 rondas. ¡Suerte para todos!

Nuevo centro de trabajo

Dr. Antonio del Río
109B1160, originalmente cargada por hdaniel.

Lo único constante en el universo es que todo cambia - autor desconocido

Contrariamente a lo que suele suceder, no he cambiado mi centro de trabajo. El centro de trabajo ha cambiado. Ahora trabajo en el Instituto de Energías Renovables antes Centro de Investigación en Energía

Con la designación del Dr. Antonio del Río como Director, el cambio no podría ser mejor. Cuando Antonio estuvo al frente de la Unidad de Cómputo se dio impulso a Linux y al Software Libre. Y al frente de la Secretaría Académica el desarrollo de Sistemas de Información así como Scientometría y Minería de Datos.

Hay muchas cosas que hacer, muchas cosas que cambiar, otras que reparar. Me reporto listo para la faena. Espero que mis habilidades sean útiles al nuevo IER como lo fueron para el CIE.

miércoles, 3 de abril de 2013

Corrigiendo problemas SELINUX

Para ver todos los problemas:
# audit2allow -a
Para ver los problemas desde el último arranque:
# audit2allow -b
Para un problema nuevo context_t
# fgrep context_t /var/log/audit.log | 
  audit2allow -M local.context_t
# semodule -i local.context_t
Para un problema adicional de un context_t previo:
# fgrep context_t /var/log/audit.log | 
  audit2allow -m context_t >> local.context_t.te
Editar en número de versión de context_t.te como se necesite y luego:
# checkmodule -M -m -o local.context_t.mod local.context_t.te
# semodule_package -o local.context_t.pp -m local.context_t.mod
# semodule -u local.context_t.pp

viernes, 7 de septiembre de 2012

Citation Mining 2.0

Sólo una breve nota antes de ir a dormir:

Colaboraciones entre países:

SELECT ctys, COUNT(ctys) AS count FROM
(SELECT seq, ARRAY_AGG(cty) AS ctys FROM
(SELECT DISTINCT seq::int,isi_cty(value) AS cty 
FROM isiunam WHERE field='C1'
ORDER BY seq,cty) AS foo
GROUP BY seq) AS bar
GROUP BY ctys
ORDER BY count DESC
Colaboraciones entre ogranizaciones:
SELECT orgs, COUNT(orgs) AS count FROM
(SELECT seq, ARRAY_AGG(org) AS orgs FROM
(SELECT DISTINCT seq::int,isi_org(value) AS org 
FROM isiunam WHERE field='C1'
ORDER BY seq,org) AS foo
GROUP BY seq) AS bar
GROUP BY orgs
ORDER BY count DESC
* Falta la tabla SINORG de sinónimos de organizaciones