22 noviembre, 2008

Teclado MIDI en Linux

Hace unos años compré este teclado MIDI (MK-3701) en ebay. Es un teclado puramente MIDI, no tiene altavoz ni genera sonido alguno. Para utilizarlo es imprescindible conectarlo a un puerto MIDI como el que tenían las tarjetas de sonido antiguas.
Por otro lado tengo un PC viejo con una tarjeta de sonido Avance Logic ALS120 (semi-compatible con Sound Blaster 16).


  • La primera opción era conectar directamente el teclado al sintetizador OPL3 de la tarjeta (mediante rosegarden). Pero por alguna razón no me funciona.
  • La segunda opción era usar un sintetizador software (timidity) y utilizar la salida PCM. El problema es el uso de CPU (es un PC que tiene bus ISA...) y la calidad de sonido (esta tarjeta parece funcionar en 8 bits).
  • La opción que me da mejor resultado es usar mi flamante portátil para sintetizar el sonido. Para ello tengo que enviar el protocolo MIDI por la red (al principio probé con rosegarden y multimidicast).
La forma más sencilla y eficiente de enviar los eventos MIDI por la red es usar las herramientas de ALSA:

Primero ejecuto esto en el PC antiguo que tiene el teclado:
aseqnet &       # Lanzar el servidor MIDI en red
aseqdump -l # Listar los dispositivos disponibles (16:0 Avance Logic, 128:0 Net Client)
aconnect 16:0 128:0 # Conectar la entrada del teclado al servidor MIDI.

A continuación ejecuto esto en el portátil:
aseqnet 192.168.1.10 &      # Conectar a la IP del servidor MIDI
timidity -iA -Os1 -B 2,3 & # Lanzar el sintetizador software (Fijarse que le asigna el nº 128:0)
aseqdump -l # Listar los dispositivos disponibles (129:0 Net Client)
aconnect 128:0 129:0 # Conectar el cliente MIDI con el sintetizador

Tras esto ya puedo tocar el piano con baja latencia y alta calidad de sonido.

Si algo falla lo primero es comprobar que el sonido se esté enviando por la red: ejecutar ambos comandos aseqnet y medir el tráfico en la red al pusar las teclas (debe subir a ~1 KB/s).

20 octubre, 2008

Tira #13: Manifestación

Vale, es un juego de palabras muy tonto.

Todas las tiras. Feed RSS de todas las tiras

Spam de nueva generación

Si el spam fuera en 3D sería así (no doy más pistas).

19 octubre, 2008

Tecla de inicio sin logotipo de windows

¿Por qué los teclados tienen que traer el logotipo de un sistema operativo, si además en muchos casos el ordenador no tiene ese sistema? Afortunadamente existe el disolvente universal para remediar esta incongruencia.
Basta empapar un bastoncillo de los oídos en disolvente y frotar la tecla. Luego secar con un pañuelo de papel. Hay que tener cuidado, la propia tecla se puede llegar a disolver, aplicar el disolvente en pequeñas cantidades y secar enseguida.



Teclado modificado en 2005



Teclado HP modificado en 2008 (comparado con un teclado original)

Publicidad original: Regreso a los precios del pasado II

Pues nada, que iba por la calle y me encuentro esta obra de arte tirada en el suelo:
Regreso a los precios del pasado

29 julio, 2008

Go suck, operator

Todavía no me lo creo, por alguna extraña razón hace un rato he sufrido un problema con mi teclado: se me ha quedado pillada la tecla de windows. Lo que ha sucedido a continuación es aún más increíble.

  • Primero he intentado repetidas veces escribir la letra P. El efecto al pulsar la tecla win es que se me han abierto decenas de instancias de mi cliente de chat pidgin.
  • Al poco me ha abierto una conversación un operador de la red de chat de IRC Freenode.
  • Le he intentado contestar, pero no podía pulsar la tecla T, ya que junto con la tecla win la tengo asociada al cliente de correo (Thunderbird). Intenté explicarle que algunas teclas se habían quedado pilladas, literalmente «some keys got stuck». Pero lo que realmente escribí fue: «go suck», aumentando su mosqueo.
  • Afortunadamente pude explicarme, como pude, usando el 1 en lugar de T, pareciendo un lamer pero ha sido la única forma de librarme del baneo de por vida...

27 julio, 2008

De mono a stereo

Mi idea parecía sencilla: poder escuchar una fuente mono con unos cascos stereo. Pero ¡al enchufar los cascos a mi vieja tv sólo los escucho por el oído izquierdo! Veamos a fondo el problema y la solución.


La historia de los jack mono

Los conectores de tipo jack (o TRS) son muy comunes, en sus distintos tamaños: jack (6.35mm2), mini-jack (3.5mm2) y sub-mini-jack (2.5mm2). A su vez los hay mono (TS), estéreo (TRS) y de 3 canales (TRRS).

Cuando se diseñó el estándar sólo se pensó en conectores mono, de un solo canal. La conexión más externa, como es habitual en electrónica se corresponde con la masa. Al añadirle un segundo canal, la única forma de hacerlo posible fue restando un trozo a la zona de masa.



El problema de este diseño es que al conectar unos cascos estéreo a una fuente mono sólo oiremos por el auricular izquierdo. Si todo se hubiese diseñado de otra forma desde el principio se podría haber evitado este inconveniente (habiendo hecho más corta la pieza de masa desde el principio).


Convertidor a estéreo

Vista la teoría, la forma de extender una fuente mono a un dispositivo estéreo es realizar por nuestra cuenta la conexión que falta del canal derecho. Para ello he construido este dispositivo con un mini-jack viejo del spectrum (no es ningún sacrilegio pues el cable estaba roto de todas formas), una ficha de empalme y unas pinzas de cocodrilo baratunas.



El mini-jack se enchufa a mi tele vieja, y las pinzas de cocodrilo se agarran de esta forma:

  • Una a masa (G).
  • Otra que pille simultáneamente los conectores L y R.
De esta forma la señal se reparte de manera efectiva por ambos auriculares.




Mono y estéreo con el mismo dispositivo

La última vez que hice algo parecido necesitaba un dispositivo sencillo que pudiese soportar a la vez cascos mono y estéreo (escuchándose ambos auriculares). Esto es imposible conseguir correctamente de manera sencilla, pero sí se puede hacer de manera chapucera con una resistencia pequeña (si no recuerdo mal de unos 10 Ω). Todo conectado a una hembra de mini-jack estéreo.
El único problema es que disminuye la impedancia de los cascos mono, haciendo que se escuche más bajo, y con cascos estéreo el canal derecho se escucha más bajo.



La solución más correcta creo que habría sido con amplificadores independientes para cada canal, e incluso con un detector de cortocircuito para evitar hacer sufrir la electrónica. Pero todo eso queda fuera de mi alcance.

24 julio, 2008

Ascensor a punto de explotar

¿Qué pasa cuando un ascensor se moja por una gotera en el techo?

¡Pues que se vuelve loco!

12 julio, 2008

Zoom en el applet java de camaras Axis.

Las cámaras Axis soportan distintos métodos de visualización:
- Stream MJPG. Soportado nativamente en Firefox, pero no en IE.
- Control ActiveX. Por defecto sólo soportado en IE.
- Shockwave Flash (SWF).
- JPG/Javascript.
- Applet Java.

Desde el menú de configuración de algunos modelos podemos encontrar ejemplos de código HTML/Javascript para incrustar el video en una web externa, que incluyen el código para detectar el navegador.

Una de las formas más universal de incrustar el video es mediante un applet Java. El problema es que el applet no ofrece, en principio, opciones para ajustar la imagen a un tamaño no estándar. Sin embargo, mediante ingeniería inversa (JODE) encontramos que existen varios parámetros no documentados, entre ellos uno para hacer zoom.

String string_16_ = getParameter("ama_zoom");
if ( string_16_ == null )
...
if ( string_16_.equals("auto") )
...
if ( string_16_.equals("free") )
...
else
...


Así que a nuestro applet añadimos esto para que el contenido se ajuste a la ventana:
<PARAM NAME="ama_zoom" VALUE="free">


Aquí una forma sencilla de obtener todos los parámetros del applet:
strings MediaApplet.class | grep ama_

04 junio, 2008

Tender la ropa con lluvia

La idea es muy sencilla: usar una funda de plástico impermeable sobre la ropa tendida. Sin embargo, en la práctica no es tan sencillo lograr un resultado aceptable por dos razones:

  • Un plástico mal colocado puede provocar bolsas de agua y hacer que se acabe cayendo.
  • Un plástico demasiado pegado a la ropa puede provocar condensación de agua y que tarde una semana en secar (y huela mal).
Por eso, lo mejor que se me ha ocurrido es hacer una estructura con perchas sobre la cuerda de tender.
En mi caso me viene especialmente bien porque tengo 2 cuerdas paralelas, una encima de la otra.


Este es el modelo de percha ideal, cuanto más grande mejor. Es necesario partirla por debajo para colocarla en la cuerda.




A continuación colocamos pinzas para sujetarla. Recomiendo colocar 4 en este orden:



Luego colocamos el plástico encima:



Y finalmente nos aseguramos de que todo está bien sujeto y sin puntos de entrada de agua. Ponemos más pinzas en las uniones de los extremos:



Para aprovechar mejor el espacio podemos tender la ropa en perchas. No recomiendo poner las perchas perpendiculares a la cuerda, sino más bien oblicuas, y así no sobresalen de la vertical del plástico.
Usamos más pinzas para fijar la posición y orientación de las perchas:
El resultado es bastante aceptable, muy recomendable para pisos de 30m2 donde no caben tendederos de interior.

10 febrero, 2008

Juegos para moviles y otras estafas

Por razones que no vienen al caso tuve la necesidad de bajar el juego de La Ruleta de la Suerte mediante SMS según anuncio televisivo de una conocida cadena de tv. Todo han sido problemas, y no me ha funcionado completamente a pesar de mi kung-fu.



1. Envío de SMS
Yo ya me imaginaba que había que enviar más de un SMS para recibir el juego, efectivamente eran 4 (en la letra pequeña por lo visto sale). De paso, en cada SMS les das información: cual es tu compañía y si estás por contrato o tarjeta.

  • Intento 1: Envío "J4" al "343". Luego envío modelo de mi teléfono: "LG KU250".
    • Respuesta: Terminal no válido.
  • Intento 2: Envío "J4" al "343". Luego envío modelo del teléfono al cual quería enviar el juego: "Samsung E250".
    • Respuesta: Terminal no válido.
  • Intento 3: Envío "J4" al "343". Luego envío modelo al tun-tun: "Nokia 6100"
    • Respuesta: Ahora enviar compañia, y otro SMS indicando si es contrato o tarjeta (prepago).
Coste total: 10 * 1,2 € = 12 € + tráfico de datos + IVA (en teoría habría sido 4,8 € + IVA).

Posteriormente, buscando «"ruleta de la suerte" movil» en google, he encontrado una página de la conocida cadena recomendando que llame a un 902 para consultar la compatibilidad con mi teléfono (si, hay que pagar, pero me habría salido más barato que probar al tun-tun).
Es gracioso que siguiendo un enlace desde ahí fui directo a la sección de descargas para movil de la cadena (contxta.com), pero una vez allí me ha sido imposible encontrar este juego para descargar o la información de compatibilidad del mismo (además de mostrar la desorganización de la web, no me dan gratis ni los buenos días).

2. Descarga del juego

Finalmente me llega una especie de SMS con una URL para que me conecte y me baje el juego (¡oh!, el tráfico de datos lo pago yo aparte). Cual es mi sorpresa cuando al pinchar en el enlace recibo un mensaje de error diciendo que ¡mi teléfono no es compatible! Eso me pasa por mentir.
Ahora toca de irnos al PC y usar la extensión User Agent Switcher de Firefox. Primero busco en google cual es el ID de Nokia. Encuentro el del Nokia 6600 y lo cambio para un 6100.
Me bajo el archivo Jad, que contiene el enlace al archivo Jar (unos 64 KB).

3. Transferencia del juego
Tengo 3 móviles para probar la transferencia y varios programas para transferir por bluetooth, aparte de una web donde puedo subir los archivos.
  • El LG Ku-250 se reinicia al intentar recibir el archivo por bluetooth desde qobexclient.
  • El Samsung E250 no recibe bien desde qobexclient ni ussp-push.
  • Si recuerdo bien, ni el LG ni el Sony-Ericsson Z310i permiten reenviar el archivo por bluetooth.
  • Cuando conseguí transferirlo al Samsung, mediante kbtobexclient, no me dejaba instalarlo.
La única forma de instalar el midlet fue subiendolo a una web para luego descargarlo desde el móvil. Tuve que modificar el archivo .htaccess para incluir el tipo mime: (AddType application/java-archive jar).

4. Jugando al juego

El juego no es compatible con el Samsung, pues da un error al inicar y sale. Tampoco es compatible con el LG, sale sin siquiera dar un fallo. Esto ya daría para un post entero, la implementación de J2ME me parece bastante arbitraria y la gestión de errores insuficiente (si es que el terminal lo permite). Repetid conmigo: JAVA NO ES UNIVERSAL NI PORTABLE. Algo tan sencillo como acceder a la api bluetooth en el LG provoca que la aplicación se cierre sin más... O cosas como una aplicación que graba un sonido y luego lo reproduzca pueden no ir en ciertos terminales...

Después de todo el juego parece funcionar en el Sony-Ericsson, pero cada vez que juegas un turno se queda «colgado» y ninguna combinación de teclas conocida lo restaura. Lo único que funciona es cerrar la tapa y abrirla de nuevo, entonces aparece un mensaje de «pausa» y se puede continuar. Aparentemente está relacionado con el vibrador del teléfono, pues desactivando los sonidos y efectos no se cuelga.

Tras unas pocas partidas notamos que se empiezan a repetir paneles. Descomprimimos el jar y encontramos el archivo d_es.txt que, según parece, contiene los paneles. ¡El maldito juego sólo trae 40 paneles distintos!

Resumen, los culpables son:
  • Los creadores del juego, por no hacerlo suficientemente compatible.
  • Los implementadores de J2ME de LG, Samsung, Sony-Ericsson, etc,etc,etc...
  • Los implementadores de Bluetooth de LG, Samsung, Sony-Ericsson, etc,etc,etc...
  • Quizás Sun por no haber definido más claramente las limitaciones de los distintos perfiles de J2ME, y el comportamiento en ciertos casos extremos.
  • Los timadores que ofrecen servicios por SMS (contxta, movilisto, etc,etc).
  • Los fabricantes de teléfonos que en lugar de sacar firmwares actualizados ni corregir bugs se limitan a sacar mierda-teléfonos nuevos cada 6 meses. Peor cuando las operadoras les piden que hagan firmwares modificados y capados, que luego son más difíciles de mantener.
Un recuerdo muy cariñoso a todos sus familiares.

Alguien dirá que eso me pasa por tener móviles de gama baja (y por intentar hacer las cosas de legal) pero por lo que veo y oigo los móviles de gama alta y última generación dan también bastantes problemas.

Cada vez me entran más ganas de pillarme algo libre como OpenMoko a cumple mis expectativas: algo estable, potente y universal, ya veremos...