7/4/09

Zomb pelo blog.

http://santiagotec9.blogspot.com/

Aca esta el blog de mi amigo hacker de hardware.
Me cago la entrada que iba a hacer sobre el PIC, sacamos las fotos y en vez de pasarmelas me las anti-hurtó (el celular es de él).

11/3/09

Feria 2008: Shooter/Mover mouse con la mano.

Para la feria de ciencias d la EET nº9 de Lanus del 2008 yo,pereira y britez teniamos algo en la mente: Un jueguito donde le disparas a unos logos de WindowsXP con una pistola de jugete a un monitor/pantalla de proyector.

El proyector teniamos (prestaba profesor), la pistola de juegete y la webcam las aporte yo.

La idea constaba de poner un led infrarojo arriba del monitor y una webcam atada a la pistola y hackeada para que no filtre los rayos infrarojos, pero filtrando todos los demas con el material de los diskettes (la cosa gris/negra/marron) y que mande una foto a una PC que detectaria la posicion del punto mas brillante (led infrarojo) y calcularia la posicion XY donde se esta apuntando.

El programa era una mezcla rara de C con opencv (libreria analizadora de imagenes) y bash.

/***laopencv.c***/

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>


int main(int argc, char *argv[])
{
  IplImage* img = 0;
  int height,width,step,channels;
  uchar *data;
  int i,j,k;

  if(argc<2){
    printf("Usage: main <image-file-name>\n\7");
    exit(0);
  }

  // load an image  
  img=cvLoadImage(argv[1],-1);
  if(!img){
    printf("Could not load image file: %s\n",argv[1]);
    exit(0);
  }

  // get the image data
  height    = img->height;
  width     = img->width;
  step      = img->widthStep;
  channels  = img->nChannels;
  data      = (uchar *)img->imageData;
  printf("Processing a %dx%d image with %d channels\n",height,width,channels);

  // create a window
  //cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
  //cvMoveWindow("mainWin", 100, 100);

  // invert the image
  //for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
  //  data[i*step+j*channels+k]=255-data[i*step+j*channels+k];

  //IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
  for (int x=0;x<width;x+=10) {
  for (int y=0;y<height;y+=10){
    CvScalar s;
    s=cvGet2D(img,y,x); // get the (i,j) pixel value
    printf("%f %i %i\n",s.val[0],x,y);
  }
  }

  // show the image
  //cvShowImage("mainWin", img );

  // wait for a key
  //cvWaitKey(0);

  // release the image
  cvReleaseImage(&img );
  return 0;
}

/***laopencv.c***/

/***shooter.sh***/

XY=($(./laopncv tmp.jpg | sort -r -n | head -n 1 | awk '{printf("%i %i",$2*3.41,$3*3.41)}'))
echo "mousemove ${XY[0]} ${XY[1]}" | xte

/***shooter.sh***/

El C esta practicamente robado de los ejemplos que vienen con la libreria, lo que hace es agarrar una foto y detectar el punto mas "brillante" (creo, yo en realidad fui cambiando el 0 en s.val: printf("%f %i %i\n",s.val[0],x,y);) hasta que me dio mas o menos lo que esperaba)

La documentacion daba asco, lo que encontramos era poco y dificil de entender, casi sin ejemplos simples.

La cosa esta andaba bastante bien, pero algo fallab enormemente: para adquirir la foto probamos cientos de comandos, tecnicas y programas, y todos tardaban mas de 1 segundo (lo que es excesivo siendo un jugeito de disparar que tenga un lag de mas de 1 segundo).

Capaz era el driver, capaz era la webcam, capaz mi kernel, nadie supo; pero el proyecto quedo ahi, ademas nadie tenia ganas de ensamblarlo(pereira = C, britez = PHP, alvare = Python, nadie sabia ni queria).

No solo eso sino que ademas si la persona era mas baja o se paraba mas cerca y al costado ya el mouse se movia para cualquier lado.

Bueno eso quedo en la nada, hace unos dias britez me viene mostrando progresos con una libreria llamada "touchlib" que encima es multitouch, con una caja y un vidrio (absurdamente simple comparado con nuestro pandemonium).

Dejo el codigo ahi, si cualquiera quiero robarlo, invitado sea.

4/3/09

Pygame error.

Si alguna vez le paso esto:

/usr/lib/python2.5/pydoc.py:1459: RuntimeWarning: use movieext: No module named movieext

Y se rompieron el tuje buscando una solucion yo la tengo.
Me habia baja un plugin para Vim que autocompletaba las clases, y cuando intentaba autocompletar pygame. tiraba un error. Despeus de googlear inutilmente intente arreglarlo yo, y encontre que el error surgia cuando pgyame intentaba cargar los mudulos, entonces la solucion fue esta:

[python]
try: import pygame.movie
except (ImportError,IOError), msg:movie=MissingModule("movie", msg, 0)

#try: import pygame.movieext
#except (ImportError,IOError), msg:movieext=MissingModule("movieext", msg, 0)

try: import pygame.surfarray
except (ImportError,IOError), msg:surfarray=MissingModule("surfarray", msg, 0)
[/python]

Comentarear esas dos lineas del demonio!
Habria que decirles a los de pygame de esto, solo apsaba con esa clase, movieext.

3/3/09

apt-cache search con colores.

Cuando use Arch lo que mas me gusto era que pacman era super colorido, eso ademas de facilitar las cosas es "sexy", yme decidi hacer que apt tambien tenga. Como hacer esto? Una RegEx horrible y gigantesca o recompilar apt y hacer bien las cosas?

acs (){
    echo -e `apt-cache search $* | sed "s:\s$*\s:\\\\\e[1;31m&\\\\\e[0m:I" | sed -e '2,$ s:^:\\\n:' -e 's:^\S*\s:\\\e[1;32m&\\\e[0m:'` #Fucking ReGeX !!!
}

Pones eso en tu .bashrc y ahora buscas haciendo:

$ acs package

Y el nombre del paquete saldra en verde, y las palabras exactas que buscaste en rojo. Ej:

Mas wallpapers Fractal/GIMP

Estos los hice cuando mi escritorio era todavia mas oscuro, pero ya se volvia dificil vivir en tanto negro. El primero es un IFS y el otro un Barnsley 3:


PS: Correr esto en Python:

# Alvare-ClrnD 2.66 @ 3.52
d = list(set("tuiqwnolyasedfjkhzxcmvb")^set ("qwryipasdfghjklzxcv bnm"))
b = "5321504673"
for q in range(len(b)): print d[int(b[q])],

GIMP Art for newcomers.

Hace poco me sumergi en el tema de los fractales, y descubri que podia hacer mis propios wallpapers sin robar de algun 3º. La posta esta en los fractales tipo flama, aca dejo una compilacion de mierdas:




Use GIMP !

22/2/09

Que paso con los drivers?

El otro dia pege una pasado por mi instalacion con Windows XP, hacia un año que no la booteaba.
Despues de instalar Pidgin y Emesene, y descubrir que ninguno andaba, me decidi a imprimir unos documentos de mi vieja.

Voy a ser claro, Windows XP SP2 con drivers originales EPSON y cartuchos usados.

La impresion salio una mierda! Los colores desfasados y mezclados, y con manchones de tinta, por si las dudas imprimi otra vez y salio peor!

Despues de eso me decidi probar en Ubuntu que no me costaba nada (excepto la tinta y la hoja) y la impresion salio perfecta! Que paso con lo de la incompatibilidad de Linux con el hardware propietario? A la mierda todo, Windows no existe ni en ese campo ahora.

2/2/09

Pyker

Esto es un juego en Python+PyGame donde hay que atrapar cuadrados verdes con el mouse, esquivando los azules que nos matan. Si tinen el tema "Aerodynamite" de "Daft Punk" del album "Daft Club" ponganlo en el mismo directorio que este archivo y cambien la variable music a True.

http://pastebin.com/f7c8ede52

17/1/09

Juego simple en Python/PyGame

Aca les dejo un juego basico hecho en DIOS CULEBRA (Python) con PyGame.

http://pastebin.com/

10/12/08

Como sacarse de encima gnome-power-manager

Habia entrado en la situacion de que gnome-power-manager no andaba y xscreensaver se trababa, asi que decidi que era hora de simplificar toda esa basura y resumirla a un script. El script es basatante simple, guarda el valor x del mouse y el valor 1 de /proc/interrupts (este valor es un numero que cambia cuando tocamos una tecla en el teclado) en variables y entra en un loop que cada 5 segundos le suma 5 a una variable que llamariamos "segundos", ahora en cada loop se vuelve a fijar estos 2 valores y si cambiaron la variable es reseteada a 0, entonces recien cuando no se toque el mouse ni el teclado por 1200 segundos el monitor se apaga con xset.


#!/bin/bash
# Power of the fucking monitor without
# fucking gnome-power-manager or xscreensaver.
# Alvare-ClrnD / 2.66 @ 3.52

a=`/usr/local/bin/mousepos | head -n 1`
c=`awk "NR == 3 {print \\$2}" /proc/interrupts`
b=0
while true;do
     sleep 5
     if [ "$a" -eq "`/usr/local/bin/mousepos | head -n 1`" ] && [ "$c" -eq "`awk "NR == 3 {print \\$2}" /proc/interrupts`" ];then
           b=$(($b+5))
     else
        a=`/usr/local/bin/mousepos | head -n 1`
        c=`awk 'NR == 3 {print $2}' /proc/interrupts`
        b=0
     fi
     if [ $b -gt 600 ];then
        xset dpms force off # Shutdown screen
        b=0
     fi
done