Foto(s) : 28/09/07


El metro cierra por las noches, pero ahí abajo parece seguir habiendo actividad.

Uno de los túneles de un carril-bici que rodea la ciudad, de las partes que más me gustan del recorrido que suelo hacer.
Esta es una calle de la ciudad después de una noche cultural con espectáculos callejeros, se pueden ver un par de rosquillas al fondo, que formaban parte de alguna de las actividades.

Mejor ver esta foto en grande.

Un semáforo, un poco torcido, es una sombra curiosa, no mucho más.

Que más se puede decir, a la gente le gusta su loopback.

Latest Post
Saturday, September 22, 2007

Optimizando código


Optimizando código

En la JIK-partida de póker acabamos más interesados en resolver este problema que en la partida en si:
¿ Cuántos cortes perfectos hacen falta para que la baraja vuelva a su estado original ?
Un corte perfecto es un corte en el que todas las cartas se intercalan.

Finalmente *lio encontró una solución rápida y elegante, haciendo un código en C que resolvía el problema para barajas de N cartas, además de eso, ha trazado unos gráficos muy interesantes que muestran el número de iteraciones ("barajeos") en función del número de cartas:

Por mi lado, fije la baraja en 50000 cartas y busqué la forma de optimizar al máximo el código para que el algoritmo se ejecutase lo más rápido posible.

Mi algorimo original es el siguiente:


do {

/*Delay*/
for(i=0;i<MAX/5000;i++*MAX) for(j=0;j<MAX;j++*MAX);


for (i=0;i<half;i++){
deck2[2*i+1] = deck[i];
}

for (i=half;i<MAX;i++){
deck2[(i%half)+(i-half)] = deck[i];
}

for (i=0; i<MAX; i++) deck[i] = deck2[i];


} while(check(deck));


Sobre este algoritmo he creado 3 optimizaciones:
  • Nivel 1: Se elimina la copia del final, donde restauramos el array deck
  • Nivel 2: Además de lo anterior, se añade una cache para las operaciones "2*i+1" y "(i%half)+(i-half)", para no tener que calcularlas durante la ejecución.
  • Nivel 3: Se elimina la función check, y se sustituye por un flag, comprobando en cada una de las mitades si el resultado asignado es correcto, esta optimización no aporta nada, de hecho retrasa incluso un poco sobre la segunda.
En un principio se ha compilado usando gcc y los resultados son los esperados 0>1>2=3, con lo que vemos que evitar copias en memoria es efectivo, al igual que aligerar carga al procesador.

Lo más interesante aparece cuando pedimos a gcc que optimice el código con -O1 -O2 -O3 -Os (optimización del tamaño). Los resultados son los siguientes:




RAW (0)No copy (1)+ Cache (2)+No check(3)
-O04121056379480234065003411833
-O1129762981584615779551723155
-O298082066656117110971785242
-O387906163788515828501620995
-Os1396125101536716426061691794

Los números son tiempos en microsegundos (1s = 1000000us). Los resultados empiezan a cobrar interés cuando se introducen las optimizaciones. Vemos que de pronto no es nada rentable precalcular los índices y sustituirlos por accesos a memoria. Con el código optimizado gastamos menos tiempo si solo realizamos las operaciones que si accedemos a memoria para recuperar resultados. También se puede observar que la optimización s no conduce a gran cosa en relación con las demás.

En estos gráficos se ven mejor los resultados:


Este es el código original. Si alguien lee la entrada (improbable) y se le ocurre algo mejor, estaré encantado de recibir sus comentarios.

Monday, September 17, 2007

29 !


29 !


Foto(s) : 17/09/07


Foto(s) : 17/09/07

Después de apagar el fuego, reposando sobre las hachas.

Nunca he estado dentro, la iluminación de fuera no es muy original, pero tampoco es fea.

En el metro, fijándome en como pasan las luces.

Y aquí viéndolas on the move.


Un poco más del metro, en un tren de "vagón único".

Sí, bueno, estaba dentro de una nevera.

Vas a tener que pagar la diferencia.

Curioso, la idea no es mala, aunque para mi gusto un poco cara.

¡ Diversión por un tubo !

Tuesday, September 11, 2007

Amplificador para la antena de un router wifi


Amplificador para la antena de un router wifi

La idea original está sacada de aquí. Al igual que el esquema. La idea es montar un "apéndice" parabólico que se engancha a la antena del router y sirve de amplificador direccional. El montaje es muy sencillo.

El material necesario:

  • Una cartulina
  • Papel de aluminio
  • Pegamento de barra (mejor que la cola)
  • Cúter Y tijeras (para cortar el papel de aluminio)

Lo primero es tener impreso en una cartulina el modelo, se puede usar el tamaño original, en un A4 (pdf), así se obtiene una ganancia (según los autores) de 6 dbi, si se hace del doble, se deberían obtener 12 dbi, etc...
Luego no hay más que recortar...


...pegar el papel de aluminio sobre la pieza rectangular...


... y finalmente, ¡ ensamblar y montar !


Mi experiencia "práctica" es la siguiente: he medido unas ganancias de entre 4 y 8 dbi, como en el portátil no tengo Linux (por razones que no vienen al caso) y no he podido usar wavemon, he aquí unas capturas de unos programas que corren bajo Windows, las primeras muestran las medidas sin y con amplificador y la última muestra un gráfico con la evolución y los cortes cuando he puesto y quitado el amplificador:

Foto : 11/09/07


Foto : 11/09/07

El camino de Santiago, presente de nuevo, esta vez en la plaza de Castilla.

Monday, September 10, 2007

29 ! 29 !


29 ! 29 !


Foto(s) : 10/09/07


Foto(s) : 10/09/07

Arreglando el mp3 (la soldadura de uno de los canales del Jack tenía una fisura).

Nada más despertarme...

Las joyas de mamá... ¿ en la basura ?

Saturday, September 08, 2007

Foto(s) : 08/09/07


Foto(s) : 08/09/07

¡ Subid ! Los pequeños ciclistas esforzándose.

Resulta que mi N70 si que tiene "macro", pero no donde pensaría, la cámara que tiene en el frontal (0.3 MPx) tiene una distancia focal más corta que la principal, y se pueden tomar fotos de cosas más pequeñas.

Alguna prueba más, esta es mi Casio FX-9850.

Y un número en un parking....

Tuesday, September 04, 2007

Foto(s) : 04/09/07


Foto(s) : 04/09/07

Esta es una vista poco habitual de los pedales de un coche :

En caso de emergencia... ¿ Hacia donde puedo ir ?

Reposando...

... de la bici.

29 !


29 !

Sunday, September 02, 2007

Testing tumblr


Testing tumblr

I'm trying tumblr which is a kind of blogging tool for "fast" posting. Inspired by terminally incoherent, I will use it to post all kind of random things I find in the Internet (I guess); as I don't want to have this blog affected. I also will post in english, justo to practice a bit and make it a little more "International".

Watch the link in the right bar.

Blogger templates

A cœur vaillant rien d'impossible.
Powered by Blogger.

Labels

About