Criptografía, Robótica, Linux, como afectan a nuestra vida la tecnología y más.
27 abr 2011
25 mar 2011
La chorrá de la semana (III)
17 mar 2011
Timelapse del Parc-Güell de Barcelona
BCN-Gaudí-Park Güell from mylapse on Vimeo
16 mar 2011
La chorrá de la semana (II)
13 mar 2011
Que está pasando en la central de Fukushima-Daiichi?
9 mar 2011
La chorrá de la semana
Esta semana: Who the fuck is wikileaks, de Chicken Soup con canción de Boney M
7 mar 2011
Donde pones las llaves cuando programas?
Forma básica
if(condicion) sentencia;
Estilo Whitesmith (uno de los primeros compiladores de C)
if(condicion)
{
sentencia0;
sentencia1;
}
Estilo GNU
if(condicion)
{
sentencia0;
sentencia1;
}
Estilo BSD/Allman
if(condicion)
{
sentencia0;
sentencia1;
}
Estilo Kernighan&Ritchie/Kernel
if(condicion) {
sentencia0;
sentencia1;
}
Con esto solo me queda añadir, y tú de quien eres?
Links de interés:
LinuxHispano
28 feb 2011
Rodilla motorizada
Por ello, han nacido empresas como la alemana ÖSSUR que ha puesto a la venta una rodilla motorizada para personas que hayan sufrido una amputación por encima de la rodilla. Con sus escasos 3,2 Kg de peso y con una batería que permite una autonomía de un día entero.
Esta rodilla dará a los usuarios la capacidad de volver a andar largas distancias, y subir y bajar escaleras como lo hacían antes.
Aunque estas prótesis todavía no solucionan el problema de la integración con la pierna, que provoca serios dolores a las largas horas de uso, aporta una movimiento que imita muy bien el caminar normal de una persona.
Algunos vídeos dentro...
17 feb 2011
HackU Barcelona
Aunque quizás un poco tarde este fin de semana del 4 de febrero tuve el placer de participar en un concurso de programación organizado por Yahoo en la Facultad de Informatica de Barcelona(UPC). El concurso se llama HackU y consiste en crear un pequeño proyecto. En primer lugar, Yahoo te presenta algunas de sus tecnologías más punteras, librerías como YQL, que permite hacer búsquedas en internet como si fueran sentencias SQL (realmente impresionante), o Yahoo Maps entre otras.
Y si al día siguiente crees que tienes una buena idea, puedes desarrollarla durante 24 horas sin descanso. Todo esto teniendo en comida, bebida, música, y todo lo que necesites para aguantar unas horas intensivas de programación y de diversión.
Al final de esas 24 se hace una pequeña presentación y se deciden los ganadores.
La idea
Desde el primer momento teníamos la intención de pasarlo bien, y no tomarnos el concurso como una afrenta personal. Creo que esa fue una de las razones por las que nos dedicamos cada uno a una parte y fuimos capaces de organizarnos de manera ordenada.
Después de un BrainStorming de ideas disparatadas quizás no aptas para desarrollarlas en 24 horas, elegimos una de ellas.
Nuestro proyecto consistió en controlar mediante Twitts un robot de LegoMindstrom controlado por bluetooth. Además este Robot contestaría creando un cierto feedback escribiendo en un blog un pequeño registro de las ordenes que iba recibiendo, y mediante la API de google maps geolocalizar desde donde recibíamos las ordenes.
La verdad es que en el momento nos pareció una idea alocada, pero ahora que tengo que explicársela a la gente me parece una completa locura de desarrollar en 24 horas.
Diferentes módulos
Nuestro proyecto lo desarrollamos como cualquier proyecto real debe diseñarse, utilizando una metodología por módulos, que después se integran en un proyecto común.
En primer lugar, teníamos la comunicación entre el ordenador que contenía el servidor y el robot por Bluetooth. Para esto usábamos la biblioteca LEJOS que permite utilizar la potencia del lenguaje java dentro de la plataforma LEGOMindtrom.
En segundo lugar, usamos la apide aming de twitter para registrarnos a un conjunto de tags y poder detectar cuando alguien enviaba un twitt desde cualquier parte del mundo que representara una orden para nuestro robot.
Por último, desarrollamos una pagina web, que mediante llamadas a la librería YQL, podía hacer inserciones en un blog alojado en WordPress y donde se encontraba el mapa que geolocalizaba los twiits. Para este último usamos la API de google Maps.
Entrega de premios
He de decir, y para no hacerme más pesado de la cuenta que ganamos el concurso. Contra todo pronostico, aunque haciendo balance de todo lo que usábamos quizás era más que razonable. El premio fueron un Ipod shuffle, 25$ en Itunes y un trofeo muy majo.
27 ene 2011
Ocultar mensaje en una imagen: Esteganografia
Aunque se suele confundir con la criptografía son dos cosas totalmente diferentes, incluso puede aplicarse juntas si ocultamos un mensaje cifrado, la esteganografia trata de ocultar un objeto o mensaje al que lo observa, en cambio la criptografía intenta que aunque se conozca de su existencia no seamos capaces de obtenerlo.
La parte teórica
Aunque hay muchas técnicas dentro de esta materia nos centraremos en la conocida como LSB (Least Significant Bit) que consiste en, sabiendo la representación que tiene un píxel en una imagen, modificar el bit menos significativo o de menor peso para esconder el mensaje.
Para utilizar este método tenemos que saber como está codificado un píxel en una imagen y aquí tenemos un problema ya que eso depende de su formato y de su calidad, si estas cambian la forma de esconder el mensaje también cambiará.
Aquí nos centraremos en los archivos .bmp que tienen 256 colores, es un formato sin perdidas (al comprimir no se pierden píxeles) y cada color está representado en dos bytes, normalmente, en la cabecera podremos comprobarlo realmente. Cuando tratemos el fichero tendremos que tener en cuenta la cabecera para no modificarla en el fichero destino. La cabecera del fichero nos interesa ya que no debemos modificarla, seria la siguiente:
offset | size | description |
0 | 2 | signature, must be 4D42 hex |
2 | 4 | size of BMP file in bytes (unreliable) |
6 | 2 | reserved, must be zero |
8 | 2 | reserved, must be zero |
10
| 4 | offset to start of image data in bytes |
14 | 4 | size of BITMAPINFOHEADER structure, must be 40 |
18 | 4 | image width in pixels |
22 | 4 | image height in pixels |
26 | 2 | number of planes in the image, must be 1 |
28 | 2 | number of bits per pixel (1, 4, 8, or 24) |
30 | 4 | compression type (0=none, 1=RLE-8, 2=RLE-4) |
34 | 4 | size of image data in bytes (including padding) |
38 | 4 | horizontal resolution in pixels per meter (unreliable) |
42 | 4 | vertical resolution in pixels per meter (unreliable) |
46 | 4 | number of colors in image, or zero |
50 | 4 | number of important colors, or zero |
Un ejemplo:
Si queremos esconder el carácter 'A' que en ASCII tiene codificación como
(0110) (0001) en binario o 0x41 en hexadecimal. Teniendo una imagen así totalmente inventada:
(0110) (1111) , (0110) (1111) , (0110) (1111) , (0110) (1111),
(0110) (1111) , (0110) (1111) , (0110) (1111) , (0110) (1111).
Obtendríamos:
(0110) (1110) , (0110) (1111) , (0110) (1111) , (0110) (1110),
(0110) (1110) , (0110) (1110) , (0110) (1110) , (0110) (1111).
Esto aplicado a toda la imagen y copiando en el fichero de salida todo lo que no modificamos obtendríamos un fichero igual que el de entrada donde hemos modificado algunos píxeles inapreciable para el ojo humano.
En proximas entregas!
Para acabar de rematar el tema, y como de momento los humanos no tenemos la habilidad para modificar píxeles a voluntad, escribiremos un pequeño programa en C++ que introduzca un String en una imagen con formato .bmp.
Enlaces de interés:
http://www.fastgraph.com/help/bmp_header_format.html
http://en.wikipedia.org/wiki/Bitmap