Primera semana programando BLK

Como este es un tipo de proyecto al que no estoy acostumbrado, que requiere hacer las cosas con cuidado y de forma constante, en vez de tirar codigo según vengan las ideas durante un rato y acabar, me he decidido a ir "documentando" la experiencia, a ver si de paso consigo interesar a alguien en el proyecto :P

El plan original (el roadmap_del_proyecto esta en su wiki) era aprovechar la semana anterior para preparar el parser de C y la definición del bytecode, pero las cosas se torcieron:





Rompiendo captchas animados [post-relampago]

La historia es así, ayer un colega me "medio retó" a saltarme el_captcha_de linksave.in, con la particularidad de que es un gif animado, el detalle es que realmente esto no le confiere gran seguridad, por ejemplo este script puede eliminar eso rápidamente [ unmask.py ], he aquí unas pruebas:

Original Después de pasar el script

Se podría hacer una máscara que al final pusiese en blanco los píxeles que no se escribieron, pero creo que queda clara la idea :P

Proyectos varios [off-topic]

Tengo esto medio abandonado, por falta de una buena gestión del tiempo, es decir, no me puedo quejar de tener poco tiempo, pero no se repartirlo :P a modo de excusa dejo un par de proyectos a medio/largo plazo en los que ando metido:

Nota: me enteré de que el código de github no es libre, así que migre los otros proyectos a gitorious que si lo es, el posible desarrollo continuará ahí [ https://www.gitorious.org/~kenkeiras ]

* Paint wars ***

Un juego ( un amago de bullet_hell ) muy, muy sencillo, hecho con python y pygame, aunque no tiene un rumbo definido ya es "jugable". Lo utilizo sobretodo como campo de pruebas para ideas sobre este tipo de juegos. [ https:// www.gitorious.org/rand/paint_wars ]

* BLK ( Bytecode Land Kit ) ***

Es un proyecto para el Concurso_Universitario_de_Software_Libre, citando la descripción que escribió un colega ( que parece que entendió el proyecto mejor que yo :P ):

Renderizador de variantes varias de Mandelbrot

Pues eso, que he ampliado y traducido a C++ este script, debería ser bastante portable, todo es estándar (bueeeno,  los pthreads...), lo único que me preocupan son las tuplas que tenían una ruta curiosa ¿? enfin, que debería funcionar bien, la memoria está bastante pulida y tal ( aunque todos sabemos como son estas cosas xD ).

Se puede descargar de este repo [ https://gitorious.org/rand/ff ], compila con make (en Unix debería detectar solo el número de núcleos, en todo caso se puede especificar con -t <hilos>), se pueden ver los parámetros con ./ff -h, ahora algunas pruebas con los modos nuevos... ( las 3 primeras están rotadas 90 grados )

[caption id="attachment_920" align="aligncenter" width="580" caption="Buddhabrot: -a -i 1000 -m 100 -d 120 -r 10000000 -w 3000 -h 3000"][/ caption]

[caption id="attachment_921" align="aligncenter" width="580" caption="Anti buddhabrot: -aa -i 1000 -m 100 -d 120 -r 10000000 -w 3000 -h 3000"][/caption]

Librería necesaria para instalar Freenet en Trisquel 5 [tip]

Después de 20 minutos buscando por qué fallaba ( no da error, solo no muestra el interfaz del instalador :P ), y antes de que le pase a alguien más: sudo apt-get install openjdk-6-jre

Ojalá todo fuera tan fácil de solucionar xD

Conocer en número de nucleos en Unix [C]

Muy rápidamente...

El número de nucleos de CPU se puede ver a través del directorio "/sys/ devices/system/cpu/", así que aprovechando que en Poesia_binaria_hay_un_post sobre_como_leer_directorios_en_C... aquí está un código que lee, la idea sería usar la función para usar el número correcto de hilos/procesos [getcpus.c]

include

include

include

include

define CPU_PATH "/sys/devices/system/cpu/"

int getCores(){

DIR *dir;

struct dirent* it;

int count = 0;

int i, isCpu;

dir = opendir(CPU_PATH);

if (dir == NULL){

exit(1);

}

while((it = readdir(dir)) != NULL){

if (strncmp(it->d_name, "cpu", 3) == 0){

isCpu = 1;

for(i = 3; it->d_name[i] != '\0'; i++){

if ((it->d_name[i] < '0')||(it->d_name[i] > '9')){

isCpu = 0;

break;

}

}

count += isCpu;

}

}

closedir(dir);

return count;

}

int main(int argc, char **argv){

printf("Encontrado(s): %i nucleo(s)\n", getCores());

return 0;

}

Hasta la próxima

Lo que nadie dice sobre la generación de números aleatorios

Cuando uno aprende a programar, algo que se suele mostrar es como generar números aleatorios, y a veces (muchas) se muestra como forma generar un número y despues "recortarlo", por ejemplo en C: int r = random() % 100;

Esto tiene un problema grave, y es que se pierde aleatoriedad en el proceso, por ejemplo, si tomamos los datos de urandom y luego le aplicamos el "recorte" quedaría esta distribución de datos:

Código: http://pastebin.com/sXtAe7nK

Los dos colores se refieren a los mismos datos, en rojo como son originalmente (de 0 a 255, uniformemente distribuidos) y en verde después de aplicarles el módulo (entre 55 y 56 se rompe la uniformidad), la causa es obvia: Para 0 hay 3 posibilidades: 0, 100, 200

Para 1 también: 1, 101, 201 ... Para 55: 55, 155, 255 Pero a partir de 56 solo 2: 56, 156 (no hay 256)

Una solucion es forzar a que el "rango de entrada" sea multiplo del "rango de salida" por ejemplo, ignorando los valores mayores que 199Código: http:// pastebin.com/H9cK3ezg

Recuperar una "HOME" cifrada desde un live cd

Supongamos que hemos cifrado la carpeta de usuario (Trisquel y Ubuntu dan esa posibilidad al instalarlo), y por cosas de la vida perdemos la posibilidad de acceder al SO, pero seguimos teniendo acceso a la particion con los datos (  y la clave, se entiende ). Esto es lo que podríamos hacer desde un LiveCD para volver a montar la partición:

Nota: substituye $DRIVE por la ruta hacia la particion home + .ecryptfs, por ejemplo sería /media/blablabla/.ecryptfs/

[ 1 ] Obtener clave del sistema de cifrado, contenida en $DRIVE/<nombre de usuario>/.ecryptfs/wrapped-passphrase , y envuelta con la contraseña del usuario.

1
2
3
$ ecryptfs-unwrap-passphrase $DRIVE/<nombre de usuario>/.ecryptfs/wrapped-passphrase
Passphrase: # Aqui la clave del usuario
e25c829b60e65e63a1ec2b9581ae4d4a

Entonces e25c829b60e65e63a1ec2b9581ae4d4a sería la clave con la que se cifraron los datos, pero queda otra, a partir de Ubuntu 9.04 se cifran por defecto tambié los nombres de archivo.

Ojo con las @ en las url

Cuidado con ellas, que el navegador piensa que lo que va antes es el usuario [ y contraseña ] para acceder a la pagina, algo como http://google.es: blablabla@codigoparallevar.co.cc/blog.

Si entras en esa pagina acabaras en codigoparallevar.co.cc, y con un blablabla algo extenso puede pasar por un link legítimo, curiosamente distintos navegadores reaccionan de distinta forma:



* Lynx: Muestra un aviso 'Alert!: Address contains a username: google.es:
blablabla' mientras carga, después lo muestra ( en este caso no se
muestra la URL ).
* Opera (por helq): No muestra ningún mensaje. * * Elinks (por mungu): no muestra nada *

El hackmeeting de este año es en A Coruña

**** Hackmeeting@A_Corunha ****

**** 21, 22 y 23 de Octubre ****

 
**** ¿Qué es Hackmeeting? ****


=====================================================================


Hackmeeting es un encuentro libre y autogestionado que gira en torno
a las nuevas tecnologías, sus implicaciones sociales, la libre
circulación de saberes y técnicas, la privacidad, la creación
colectiva, el conflicto telemático... Está destinado a todo tipo de
personas que tengan una mente abierta y curiosa con ganas de
compartir sus experiencias y vivirlo participando en la coordinación
como una más. Algunas charlas y talleres exigen conocimientos
informáticos avanzados, otros no; y otros ni informáticos.

( Sacado_del_Wiki )

El hackmeeting de este año se celebra en A Coruña ( que a mano que me queda! ^^ ), ya hay propuesto_un_nodo_sobre_IPv6 y hay información varia en el Wiki.

Ahí nos vemos... a ver si saco tiempo para proponer un nodo sobre redes anónimas :)

Newer posts Older posts