Arxivat per a ‘codi i programes’

abril 7, 2012

localtunnel: publicar de manera fàcil el teu localhost a internet

One Thing Well és un blog amb recomanacions de programes simples que fan justament això, una cosa bé. El segueixo força de prop i de tant en tant hi surten recomanacions de perles com aquesta: localtunnel.

Un programa que, una vegada instal·lat (molt fàcil, amb RubyGems: $ sudo gem install localtunnell), permet publicar el teu localhost a una adreça de l’estil http://blabla.localtunnel.com simplement utilitzant una comanda on has d’indicar una clau pública ssh i el port que vols compartir (per exemple, el 8080). Fàcil i simple!

desembre 6, 2011

Els sistemes D’Hondt i Sainte-Laguë

El conegut —i criticat— sistema D’Hondt, l’utilitzat a Espanya, és un mètode de representació que assigna escons proporcionalment als resultats obtinguts per llistes de partits. És de la família dels mètodes de les “mitjanes més altes“, que inclou també el mètode Sainte-Laguë.

En aquests mètodes, els vots que rep cada partit es divideixen per una successió de divisors, obtenint una llista de quocients. Els escons s’assignen llavors als quocients més elevats, garantint una certa proporcionalitat. La diferència entre els divisors utilitzats dóna lloc a mètodes diferents: en el cas D’Hondt, s’utilitza la successió 1, 2, 3…, mentre que pel Sainte-Laguë s’utilitza 1, 3, 5… Així, la manera de calcular els quocients Q_s de cada partit en aquests dos mètodes és

Q_s = \frac{V}{a s + 1},

on V és el número total de vots del partit en qüestió, s és el número d’escons que aquest partit ja ha rebut (començant des de 0) i a és un coeficient que depèn del mètode (a=1 per el sistema D’Hondt i a = 2 pel Sainte-Laguë). El D’Hondt tendeix a donar als partits majoritaris una sobre-representació en la proporció d’escons respecte la proporció de vots, mentre que el Saint-Laguë respecta més la proporcionalitat.

Aquests sistemes sovint es modifiquen introduint un llindar, de manera que una llista que no obté aquest llindar no entra a la repartició d’escons. En el cas de les estatals espanyoles, el llindar és del 3% del total de vots en cada circumscripció electoral (que corresponen a les províncies).

Les següents funcions per a Mathematica simulen la repartició d’escons. Els paràmetres són vots, que és una llista dels vots obtinguts per cada partit amb el format

{{"Partit A", votsA}, {"Partit B", votsB}, ...}

n, que és el total d’escons a repartit i llindar (opcional, per defecte 0), que és la fracció mínima per entrar a la repartició (en el cas de les estatals espanyoles, com he dit abans, 0.03).

DHondt[vots_List, n_Integer, llindar_: 0] := Module[
  {taula, tall, votsTotal},

  votsTotal = Plus @@ vots[[All, 2]];

  taula = Table[
    {
     vots[[i, 1]],
     If[vots[[i, 2]] >= (llindar votsTotal),
        vots[[i, 2]]/#,
        0
        ] & /@ Range[n]
     }, {i, 1, Length[vots]}
    ];

  tall = Sort[Flatten[taula[[All, 2]]], Greater][[n]];

  Table[{
    taula[[i, 1]],
    Count[taula[[i, 2]], a_ /; a >= tall]
    }, {i, 1, Length[taula]}
   ]
  ]
SainteLague[vots_List, n_Integer, llindar_: 0] := Module[
  {taula, tall, votsTotal},

  votsTotal = Plus @@ vots[[All, 2]];

  taula = Table[
    {
     vots[[i, 1]],
     If[vots[[i, 2]] >= (llindar votsTotal),
        vots[[i, 2]]/(2 # + 1),
        0
        ] & /@ Range[0, n - 1]
     }, {i, 1, Length[vots]}
    ];

  tall = Sort[Flatten[taula[[All, 2]]], Greater][[n]];

  Table[{
    taula[[i, 1]],
    Count[taula[[i, 2]], a_ /; a >= tall]
    }, {i, 1, Length[taula]}
   ]
  ]

Actualització (07/12/2011): He tret el Floor[], que com diu en Bernat en un comentari no té sentit.

octubre 5, 2011

Trencant un xifratge de substitució

Aquest estiu, la segona sessió de les vermutacions va ser sobre criptografia, i en Ramon ens va posar com a exercici desencriptar un text encriptat mitjançant un xifratge de substitució. Aquest xifrat es pot trencar amb un full i un llapis, i una mica de paciència. Per anar una mica més ràpid, jo vaig utilitzar un petit script en perl que havia fet fa un temps i que està només acabat a mitges, però és més o menys operatiu (però per exemple només agafa textos amb A-Z, sense Ç o lletres per l’estil). Al resoldre’l, em van demanar que pengés l’arxiu, i així ho he fet aquí (és el subsolve).

Subsolve llegeix un text encriptat de stdin o d’un arxiu de text, i llavors permet anar trencant interactivament el text (i la clau). Evidentment, va bé saber (o tenir-ne una suposició raonable) la llengua en què està escrit el text. En aquest cas, subsolve permet comparar les freqüències del text amb una taula de freqüències de l’idioma, si es té aquesta taula. Les taules han d’estar guardades en arxius amb el nom llengua.ngr, on llengua és el codi de la llengua (per exemple, jo utilitzo en per anglès, ca per català, etc.) i n és la longitud de la cadena de la que es recompta la freqüencia (1 per lletres, 2 per dígrams, etc.). L’arxiu ha de contenir a cada línia una lletra, un o més espais i un número (la seva freqüència). Per exemple, l’arxiu amb la llista de freqüències de lletres en català (ca.1gr) seria:

a 12.55
b 1.32
c 3.60
ç 1.06
d 3.94
e 13.89
f 1.00
g 1.28
h 0.72
i 6.99
j 0.30
k 0.00
l 7.74
m 3.16
n 6.40
o 5.71
p 2.72
q 1.35
r 6.76
s 8.43
t 6.11
u 4.18
v 1.40
w 0.00
x 0.52
y 0.00
z 0.01

Per analitzar un text català encriptat, guardat a l’arxiu exemple.txt, es crida l’script amb

./subsolve.pl -f exemple.txt --lang ca --spaces

L’opció --spaces separa les lletres en grups de cinc. Es poden posar menys caràcters per línia amb l’opció -w o --width (per exemple, -w 30).

Una vegada dins, l’opció help o ? ens llista les accions possibles, i help <acció> mostra ajuda específica per una acció (per exemple, help count). count n (o simplement n) compta les freqüències de grups de n lletres. add Ab afegeix la correspondència A->b, on A és una lletra del text encriptat i b la corresponent en el text original. remove Ab ho elimina. show text mostra el text (majúscules la part encriptada, minúscules la part ja resolta). show key mostra la clau. search <cadena> n busca cadena al text, i mostra els resultats envoltats de text a dreta i esquerra de llargada n. La cadena pot contenir majúscules i minúscules (i el programa entén què signifiquen), i també expressions regulars senzilles. Per exemple search A.d 2 busca cadenes que continguin la lletra encriptada A, seguida de qualsevol lletra, seguida de la lletra del text original d, i retorna els resultats amb dues lletres a l’esquerra i a la dreta; o search [AB]C busca la cadena AC o BC; o search [AB]{2} busca les cadenes AA, AB, BA o BB. Per a més informació, feu servir help, llegiu-vos el codi o pregunteu-ho aquí! Comentaris o extensions a l’script són més que benvinguts.

En Ramon també ens va posar un altre exercici: trencar el xifrat Vigenère. Però això ja és una mica més difícil…

febrer 12, 2011

TV3: Pluja seca. Mediadors internacionals al País Basc

Dimecres passat el programa Sense ficció de TV3 va emetre un reportatge interessantíssim sobre els mediadors internacionals al País Basc. Per a aquells que no el vau poder veure o que hi voleu tornar, podeu consultar-lo directament en línia o us el podeu descarregar, com expliquen a Televisió a la carta i al blog d’en Natxo Sorolla. Bàsicament, cal que us instal·leu (si no el teniu) el programa rtmpdump i l’utilitzeu per a descarregar-vos el reportatge. Com he dit, en Natxo Sorolla ja ho explica. Però si teniu un Mac, tindreu algun problema a l’hora d’instal·lar el rtmpdump. Aquí us explico com fer-ho ràpidament:

  1. Descarregueu-vos l’última versió per Unix aquí (l’últim arxiu .tar.gz o .tgz, per exemple rtmpdump-2.3.tgz).
  2. Des d’una consola, aneu al directori on l’heu descarregat (eg. Downloads), descomprimiu-lo i aneu al directori descomprimit:
    $ cd ~/Downloads
    $ tar xzf rtmpdump-2.3.tgz
    $ cd rtmpdump-2.3
  3. Aquí hi ha el problema ara. Si intenteu compilar el programa amb un make us retornarà el següent error:
    gcc -Wall   -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL  -O2 -fPIC   -c -o rtmp.o rtmp.c
    gcc -Wall   -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL  -O2 -fPIC   -c -o log.o log.c
    gcc -Wall   -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL  -O2 -fPIC   -c -o amf.o amf.c
    In file included from amf.c:33:
    bytes.h:74:2: warning: #warning "Float word order not defined, assuming the same as byte order!"
    gcc -Wall   -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL  -O2 -fPIC   -c -o hashswf.o hashswf.c
    gcc -Wall   -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL  -O2 -fPIC   -c -o parseurl.o parseurl.c
    ar rs librtmp.a rtmp.o log.o amf.o hashswf.o parseurl.o
    ar: creating archive librtmp.a
    gcc -shared -Wl,-soname,librtmp.  -o librtmp. rtmp.o log.o amf.o hashswf.o parseurl.o  -lssl -lcrypto -lz 
    ld: unknown option: -soname
    collect2: ld returned 1 exit status
    make[1]: *** [librtmp.] Error 1
    make: *** [librtmp/librtmp.a] Error 2

    Per tant, heu de fer una petita modificació al Makefile que es troba al directori librtmp/. Aneu a aquest directori,

    cd librtmp

    obriu l’arxiu librtmp/Makefile, per exemple amb

    vim Makefile

    i canvieu el text -soname per -dylib_install_name.

  4. Torneu al directori anterior,
    cd ..

    i compileu el programa:

    sudo make install SYS=posix

Ara que ja el teniu instal·lat, podeu descarregar-vos el programa escrivint

rtmpdump -r rtmp://mp4-500-str.tv3.cat/ondemand/mp4:g/tvcatalunya/9/1/1297278450919.mp4 -o plujaseca.mp4

Si la descàrrega s’interromp, podeu continuar des d’on l’havíeu deixat amb

rtmpdump -r rtmp://mp4-500-str.tv3.cat/ondemand/mp4:g/tvcatalunya/9/1/1297278450919.mp4 -o fichero.mp4 --resume

I això és tot. Heu vist ja, doncs, el reportatge? Què us ha semblat?

gener 16, 2011

Muntant un servidor de Subversion en un Mac OS X

He muntat un servidor de Subversion a l’ordinador de la feina, i com que al final he fet servir guies i recomanacions de llocs diferents he escrit aquestes notes per a una futura referència i per si a algú li poden ser d’ajut.

L’ordinador en qüestió és un iMac amb el Mac OS 10.6, i l’objectiu és deixar en funcionament un dipòsit (repository) SVN que sigui accessible a través de HTTP i també remotament per SSH. Per a això últim, Subversion facilita molt les coses amb el protocol svn+ssh. Així doncs, els programes que necessitarem són Subversion, Apache, WebSVN i SSH.

Follow

Get every new post delivered to your Inbox.

Join 117 other followers