martes, 16 de junio de 2015

Actualizacion Insta-script

Bueno, pues recientemente empecé a seguir nueva gente en Instagram, y viendo que muchos no me seguian de vuelta, decidí organizar un evento en el que dejaría de seguir a todos los que no me siguieran de vuelta en un mismo día, a la vez que celebrariamos una fiesta al mas puro estílo hardcore. Se tarta de #UnFollowProjectFest2015.


Bueno, pues tonterías aparte, con mi reciente incremento de seguidos y seguidores en mi cuenta, me di cuenta al ejecutarlo, de que el instascript que hice tiene una gran limitación: Solo carga los primeros 200 seguidos/seguidores, ya que la pagina de texto plano de Instagram que carga los seguidos seguidores esta limitado a 200, dando un link a una pagina con los siguientes repetidamente hasta que ya no hay mas y no hay mas links. Bueno pues he actualizado el post y ahora si teneis mas de 200 seguidores/seguidos el script funcionará correctamente. Cualquier comentario o duda aquí.

sábado, 13 de junio de 2015

Transmitir datos por la toma de auriculares: archivos de cualquier tipo

Bueno, pues en el anterior articulo os enseñé como transmitir imagenes sin compresion a traves de la toma de auriculares con los defectos que esta transmisión analogica suponia (Desincronización, alteracion de los valores,...) por lo que no pasé de las imagenes en blanco y negro sin compresion. No obstante, aprovechando que tenia un par de dias de descanso entre los examenes finales, analicé las limitaciones que esta transmisión analogica de audio me suponía, y decidí buscar una forma de transmitir datos digitales de forma fiable y a una velocidad aceptable.
Pues lo conseguí, despues de analizar el comportamiento de las señales de audio analogicas de la entrada de audio, conseguí crear un codificador y un decodificador de archivos que permiten transmitir cualquier tipo de archivo de forma fiable (y con sincronizacion) a una velocidad de hasta 48kbps (con una señal de audio a 48Khz con mis equipos).
Esta forma de transmitir los datos es haciendo variar la señal de audio de 1 a -1 en intervalos muy pequeños transmitiendo los datos de forma binaria. Esto es distinto a por ejemplo como se codificaban los datos en cassetes de ZX Expectrum o similares, los cuales al codificar en medios mas sensibles como son los cassetes, utilizaban tonos (a una velocidad de datos mucho menor). Os adjunto los programas con... Atencion... El codigo fuente (Es la primera vez en la historia de mi blog que adjunto un codigo fuente, sin contar scripts linux).
Podeis decargar todo aquí. Dentro del zip hay un fichero con instrucciones detalladas sobre el uso.

Por ultimo recomiendo transmitir los archivos siempre comprimidos (en zip por ejemplo) ya que los valores altos o bajos continuados hacen que la señal acabe cayendo (Como se puede apreciar en la imagen), lo cual puede arruinar la transmision.

Cualquier duda o comentario aqui me teneis ;)

sábado, 6 de junio de 2015

Transmitiendo datos (imagenes) por la toma de auriculares

Bueno, pues lamentablemente aqui teneis otro articulo chorra de los que se que no os interesan XD
Si leisteis el articulo en el que imprimí canciones en formato PCM en un folio, este se trata del experimento a la inversa. Lo que hago es transmitir una imagen a traves de la toma de auriculares, la cual como sabeis trabaja con audio analogico, por lo que usaremos imagenes sin comprimir (*.BMP)

-Procedimiento:
¿Como lo haremos? Lo primero es pasar la imagen a transmitir en formato jpg o png (o el que sea) a formato BMP, ya sea abriendolo con Paint, Gimp, o vuestro programa favorito, para pasarlo a BMP.
Ahora conectamos dos equipos toma de auriculares con toma de entrada (Usando un cable de auriculares 3,5mm macho-macho). Yo en mi caso utilizo de equipo emisor una Raspberry-Pi (mas tarde un radio-cassete-cd) y de receptor mi portatil. Ahora en el equipo receptor debemos grabar la transmision, en Audacity por ejemplo, y en el emisor reproducir la imagen BMP como audio RAW sin comprimir (Unsigned 8bit PCM dará los mejores resultados). Ahora, creamos un archivo BMP usando la cabecera de archivo del archivo emitido, y mediante un editor hexadecimal como Hex Workshop, insertamos el contenido grabado con la toma de entrada (el cual deberiamos haber grabado en un archivo PCM U8) en el contenedor BMP.

-Resultados:
El primer problema que vemos con este experimento es la desincronización, aunque la tasa de bits es igual en los dos equipos, hay una ligera diferencia, la cual al no haber ningun modo de sincronización no se puede evitar. Esto hace que sea imposible transmitir una imagen en RGB, ya que se distorsionan los colores como podeis ver en la imagen de ejemplo mas adelante.

El segundo problema es el contraste. Al no conservar en la grabacion y la emisión el mismo volumen de audio, los resultados son que hay distintos niveles de color/BN.

Aunque he realizado el experimento con varias imagenes os dejo las 2 mas relevantes:

La primera es de una imagen de ejemplo de Windows, a la cual bajé bastante la resolución y transmití a 16.000 Hz desde la Raspberry-Pi. Como veis, incluso a bajos rates de audio, es imposible evitar la desincronizacion y los colores salen alterados. Si queremos obtener resultados buenos debemos utilizar imagenes B/N.

La segunda, es una imagen obtenida esta vez desde un radio-cassete-cd domestico. Grabando en un CD-RW un disco de audio con la imagen RAW, y mas tarde conectando la toma de auriculares del radio-cassete-cd a la entrada de audio del ordenador, conseguimos transmitir la imagen desde el cd (el cual lee el radio-cassete) a nuestro ordenador. De esta forma, ademas de estar limitados a usar 44.100 Hz (tasa de bits de los CD de audio), la calidad de la imagen, incluso en B/N, es inferior, ademas de que la sincronización tambien es peor, por lo que tuve que reajustar la imagen en Gimp, ya que salia torcida. En cualquier caso los resultados los podeis ver vosotros mismos, tampoco sale muy mal. En fin, cualquier comentario o duda aquí ;)


Imagen original:






Imagen obtenida desde la toma de auriculares del radio-cd