Ricerca tra la vecchia roba

Il sabato del villaggio

Posted: Agosto 23rd, 2008 | Author: | Filed under: Hack, Life, Programmazione | 1 Comment »

Giornata a base di SSL: volevo scrivere un programma per condividere file con i miei friends direttamente senza passare da chat o cose simile che a colpi di 2KiB/s ci metto un anno a copiarmi i file; inoltre vogliamo mettere la possibilità di creare una connessione criptata con la quale scambiarsi file compromettenti? dopo due giorni di coding selvaggio in cui ho perso la elasticità del cristallino posso condividere questa merda di codice con voi. Il codice è questo (peerssl.tar.gz) decompattate e date make; per usare la versione server dovete creare un certificato chiave privata tramite openssl. Sulla mia debian sono solito eseguire

$ openssl genrsa -out packz-private-key.pem 2048
$ openssl req -new -x509 -key packz-private-key.pem -out packz-certificate.pem -days 1095

Non mi chiedete come si aprono le porte del router che esiste google (anche se io ho un link paura che adesso non ho voglia di cercare).

 Intanto beccatevi una foto dal mio modernissimissimo cellulare fatta sotto i portici della mia angusta città in uno dei pochi momenti di pausa della mia retina

I portici hanno sempre qualcosa da insegnare.

P.S: sono alla seconda lattina di birra di questo fottuto sabato e ho appena ucciso una zanzara di almeno 3cm di raggio che mi svolazzava in casa a colpi di scopa.


Piccolo vademecum per il programmatore

Posted: Agosto 22nd, 2008 | Author: | Filed under: Guide, Programmazione | 1 Comment »

Regole da seguire per scrivere codice in C

  1. Appena apri un file (sopratutto non tuo) imposta shiftwidth, tabstop ed eventualmente expandtab in maniera adeguata al tuo stile. Eventualmente set list ti può far capire che impostazioni sono state usate.
  2. Il preprocessore ti ha fatto conoscere # e ## che sono tue amiche e ci sanno fare.
  3. Ricordati che con -llibrary dici al linker che al programma serve la libreria library e con -L eventualmente dove trovarla. Un controllo con ldd non fa mai male.
  4. Commenta il codice
  5. Commenta il codice
  6. Se hai creato una funzione con più di due blocchi distinti mi sa che ti tocca riscriverla.
  7. Ricordati di nascondere con static una funzione al mondo esterno.
  8. Non sforare le 80 colonne.
  9. Sempre sia lodato ulimit -c unlimited.
  10. Quando migliori il codice assicurati di non peggiorarlo.
  11. I Makefile sono una figata
  12. Se il tuo programma prevede di scrivere su file usa full(4) per provare cosa succede nel caso si esaurisca lo spazio su disco (tu ovviamente credevi di aver pensato a tutto!!!).
  13. Le mailing list sono tue amiche (magari leggile tramite thunderbird che ha un eccellente sezione sulla iscrizione ai news groups di gmane.org).
  14. Se desideri open(2) ma vim ti apre open(1) ricordati di premere ‘2K‘.
  15. If a macro contains more than one statement, use a do/while structure to enclose the
    macro. (Don’t forget to leave out the semicolon of the statement).
  16. gcc -dM -E - < /dev/null può dirti quali sono le macro predefinite nel tuo compilatore preferito.
  17. Se per caso devi utilizzare le feature_test_macros(7), ricordati di inserire i #define prima di qualunque altro #include.
  18. Puoi impostare un campo di una struct tramite per esempio
    variabile_struct = (struct punto){ .x = 10.0 , .y = 14.89 }; secondo me è più leggibile e anche se cambi la definizione della struct non hai bisogno di cambiare l’ordine delle inizializzazioni (e il compilatore non ti avverte!!!).
  19. Usa -Wpadded, -Wpacked e nel caso utilizza __attribute__ ((__packed__)) per controllare l’alignment ed il padding di una struct. Utile se usi una fread su un file binario e gli elementi della struct non sono caricati correttamente.
  20. Usa un regola esplicita nel makefile per gli header: file.o: header.h. Altrimenti nella ricompilazione può usare una struct che in realtà è stata ridefinita e il segfault diventa un mistero.
  21. Quando definisci un file oggetto come libreria, con il nome per esempio "cazzo-util.c", includi in esso l’header "cazzo-util.h" così da avere sotto controllo eventuali definizioni diverse di funzione.
  22. extern va in .h
  23. Se devi leggere un double con scanf, devi usare il modificatore "long", cioè %lf,  porcatroia…
  24. Magari inizi a scrivere un po’ di funzioni static in un unico file e poi in un secondo tempo vuoi spostare per argomento in altri file queste, puoi usare sed(1) usando come pattern ‘/^static.*(/,/^}/p’ per studiartele un attimo.
  25. Usa valgrind per controllare memory leak: ‘valgrind –tool=memcheck <programma e argomenti>‘.
Compiling.
Linkografia

Shared library or something like this

Posted: Luglio 19th, 2008 | Author: | Filed under: Guide, Programmazione | Commenti disabilitati su Shared library or something like this

Sto riscrivendo dei miei esempi di codice in C e ho varie routine di X11 da modificare in maniera tale da farle lavorare come librerie shared e poterle condividere facilmente tra i vari programmi che scrivo; visto che ogni volta mi incasino per farle funzionare perché non mi ricordo le flags da passare al compilatore/linker qui metto i miei tricks. Per adesso scrivo questo poi metto apposto tutto (sono reduce da una serata di alcol).

Dalla pagina di manuale di gcc(1)

-llibrary
-l library
           Search the library named library when linking.  (The second
           alternative with the library as a separate argument is only for
           POSIX compliance and is not recommended.)

           It makes a difference where in the command you write this option;
           the linker searches and processes libraries and object files in the
           order they are specified.  Thus, foo.o -lz bar.o searches library z
           after file foo.o but before bar.o.  If bar.o refers to functions in
           z, those functions may not be loaded.

           The linker searches a standard list of directories for the library,
           which is actually a file named liblibrary.a.  The linker then uses
           this file as if it had been specified precisely by name.

           The directories searched include several standard system
           directories plus any that you specify with -L.

           Normally the files found this way are library files—archive files
           whose members are object files.  The linker handles an archive file
           by scanning through it for members which define symbols that have
           so far been referenced but not defined.  But if the file that is
           found is an ordinary object file, it is linked in the usual
           fashion.  The only difference between using an -l option and
           specifying a file name is that -l surrounds library with lib and .a
           and searches several directories.

  Ricordarsi che per passare opzioni direttamente al linker si necessita della flag -Wl,<Opzione>,<valore>. Molto comoda l’opzione -rpath (vedi ld(1)).


Git-php

Posted: Luglio 6th, 2008 | Author: | Filed under: Hack, Programmazione | Commenti disabilitati su Git-php

Siccome ero frustrato di non aver la possibilità di visualizzare i vari commit relativi al codice che scrivo e che ripongo nei miei repository git situati sul mio sito, ho deciso di scrivere una pagina in Php che faccia da interfaccia ai repository andando a riscrivere alcune delle routine che usa git; manca ancora il completo supporto per i repository che usano gli oggetti in versione pack, ma per i repository normali come i miei funziona abbastanza bene.

ATTENZIONE: IL CODICE È SCRITTO DA UN MALATO DI MENTE ED EROTOMANE, QUINDI ASPETTATEVI CHE IL VOSTRO SERVER PRENDA FUOCO O CHE MALGIOGLIO PRENDA IL POSSESSO DELLE CPU DEL VOSTRO PORTATILE! IO NON MI ASSUMO NESSUNA REPONSABILITÀ!!!

Per chi vuole provarlo, è possibile visionare anche il codice alla pagina http://www.autistici.org/packz/Project/git-php.php.


mod_rewrite

Posted: Luglio 5th, 2008 | Author: | Filed under: apache, networking, Programmazione | Commenti disabilitati su mod_rewrite

Apache è il server web forse più famoso nel mondo dell’open source e vanta fra le sue potenzialità la presenza di un gran numero di moduli tramite cui estendere le possibilità di un server web; alcuni di questi sono molto utili e ben testati come mod_dav, mod_ssl oppure mod_rewrite che è quello che interessa a noi. Poi c’è anche chi crea moduli da fuori di testa (un applauso per baku) Read the rest of this entry »


È tutto un simbolo

Posted: Giugno 7th, 2008 | Author: | Filed under: Bash, Hack, Life, Programmazione | Commenti disabilitati su È tutto un simbolo

La mia quest per la compilazione di Xorg con supporto MPX è senza fine: adesso voglio usare jhbuild che se non altro tiene conto in automatico delle dipendenze (ah… le dipendenze) e permette di gestire anche gli errori di compilazione e la generazione in automatico delle variabili necessarie alla compilazione di progetto ampi come X (è nato come supporto a Gnome); dopo vari segfault del driver della scheda video, adesso mi da un errore su un simbolo indefinito che è stato inserito in evdev da quel mago di Hutterer (uno dei pochi che risponde alle mail di un povero adepto della programmazione come me) e che non risulta in nessun file oggetto compilato e presente nei sorgenti. Read the rest of this entry »


Un po’ di documentazione facile

Posted: Maggio 25th, 2008 | Author: | Filed under: Life, Programmazione | Commenti disabilitati su Un po’ di documentazione facile

Nei sistemi Debian di solito i pacchetti inseriscono nella directory /usr/share/doc/${nome-pacchetto} dei file tipo README per conoscere qualcosa a riguardo della documentazione; spesso sono compressi e bisogna usare zcat (versione compressa di cat) ed è uno sbattimento scrivere anche a colpi di tab il path, quindi con la funzione

function doc(){ PatH=”/usr/share/doc/$1″; zcat “$PatH/README.gz” || cat “$PatH”/README.Debian || dpkg -L “$1″ || dpkg -l $1″*” ; }

si dovrebbe avere all’interno della bash un utile comando per avere subito il README a portata di command line. Ovviamente si può migliorare ma come prima storia non c’è male: prima controlla l’esistenza di REAME.gz, poi README.Debian, poi se questi non esistono ti fa la lista dei file installati nel pacchetto ed infine se neanche questo works allora fa una lista dei pacchetti simili installati (dal comando potete vedere come questo funzioni solo su sistemi debian like con chiavi SSH exploitabili).


Polar clock

Posted: Maggio 9th, 2008 | Author: | Filed under: Life, Programmazione | Commenti disabilitati su Polar clock

Nel mio mitico repository ho uploadato gli ultimi aggiornamenti dei miei esempi con Cairo, clonando (che modo fico di dire copiare) una applicazione che mi aveva colpito molto chiamata polar-clock.

In pratica si tratta di un orologio le cui lancette sono rappresentate da archi con una lunghezza proporzionale al loro valore; la mia versione è sicuramente da migliorare però non mi pare schifosa

manca ancora l’inserimento del giorno, mese ed anno e prima o poi lo farò (AIUTATEMI).

 

Per ottenere il codice andate sulla mia homepage (dovete avere git abilitato, nel caso non lo vogliate usare [ma perché?] posso rendere disponibili degli snapshot). Non mi insultate per il testo scritto in inglese pessimo che si trova nei log o nei commenti del codice, nel caso correggetemi senza problemi…


Codice

Posted: Aprile 21st, 2008 | Author: | Filed under: Life, Programmazione | Commenti disabilitati su Codice

Dopo aver smarronato mezzo pomeriggio per riuscire ad automatizzare l’aggiornamento di un repository git tramite ftp (in particolare un client più evoluto, lftp, che tra le tante feature ha anche il completamento automatico dei path), sono lieto di rendere pubblici i miei esperimenti di coding delle librerie cairo: per avere pieno accesso al codice seguite le istruzioni che trovate nella mia bella homepage e buon divertimento…

Per chi si sente un vero h4ck3r, vi sfido a ricavare questa immagine tramite uno dei programmi che trovate nel repo sopra citato….


Fuori piove

Posted: Aprile 18th, 2008 | Author: | Filed under: Life, Programmazione, TeX | Commenti disabilitati su Fuori piove

Il tempo passa e me ne accorgo dall’arrivo delle bollette della luce, del gas e dell’ADSL (e’ mai possibile che debbano farmi pagare 100euri solo di spese di allacciamento, dio il porco!!!); avrei da dire anche sulle elezioni, ma in fondo una farsa e’ una farsa, a prescindere da chi vinca e vedere il solito teatrino di chi analizza/somatizza la “sconfitta” (che in realtà non è tale dal loro punto di vista democratico, in quanto tutti devono dire la loro) ti fa scendere le palle ai malleoli (a Napoli intanto sguazzano nella monnezza con buona pace del dovere civico).

Nel frattempo, tra una sequenza esatta e un gruppo di ricoprimento, mi diletto con il metafont, mitico programma creato dal mitologico Knuth per il design dei caratteri tipografici; è un programma molto potente che permette di disegnare un carattere a partire da punti determinati tramite proporzioni geometriche: cio’ permette di creare tutte le famiglie di font a partire da pochi parametri variabili, tuttavia questo strumento non ha “sfondato” perche` per parole dello stesso Knuth “asking an artist to become enough of a mathematician to understand how to write a font with 60 parameters is too much“.

Io non mi considero assolutamente un artista, pero’ mi piace imparare ad usare i “mezzi di produzione” moderni, quindi ecco un mio primo esempio di font (che ho chiamato dummy); non e’ completo in quanto mancano alcune lettere e le legature, tuttavia penso di essere a buon punto. Sarebbe interessante interfacciarlo con cairo per creare uno strumento alla fontforge per avere uno strumento visuale per il design dei font… quante idee….

Intanto beccatevi l’aggiunta del link alla mia home page su autistici (pagina very poor) e al link ai miei bookmark sociali cosi’ da sapere le mie ultime scoperte 😉a presto…..