martedì 26 agosto 2008

Back to work (and debian)

Post rapido rapido post vacanze:

Rientrato dalle vacanze domenica sera, ho prontamente deciso di dedicare il lunedì alla migrazione di un paio di pc a debian.

Infatti sul barebone, quasi due anni fa, non ero riuscito ad installare debian amd64, ai tempi troppo arretrata per supportare un pc problematico come quello (scheda madre nvidia).
ci avevo bestemmiato sopra davvero un sacco e alla fine avevo messo una versione di ubuntu. Ogni tentativo di aggiornare il sistema alla release successiva di ubuntu terminava in un disastro di proporzioni inaudite, alimentando il mio odio per l'architettura a 64bit ed il suo supporto inadeguato.

A gennaio compravo in fretta e furia il portatile nuovo, causa cedimento hardware (i sostegni dello schermo) del precedente. Dopo un paio di tentativi andati a vuoto di installare debian e ubuntu, non potendo permettermi il lusso di perdere troppo tempo ho messo su fedora 8 (parlo sempre di x86_64, eh).

Fedora è stata una piacevole sopresa, dai tempi della Fedora Core 3, che avevo usato per un po', hanno migliorato tantissimo la gestione dei pacchetti e hanno alleggerito il sistema. Aggiungeteci anche la semplicità di configurazione ed installazione e capirete perchè stia crescendo l'interesse intorno a questo progetto, prima davvero inutilizzabile, secondo me.

Però la voglia di tornare a debian è cresciuta dopo aver messo su un Pentium III in università una "lenny". Quindi approfittando del fatto che per un paio di giorni riesco a lavorare su un altro pc, ho raso al suolo entrambi mettendo la testing a 64bit. Incredibilmente è andato tutto a buon fine al primo colpo.. back to debian, quindi.. and back to work

venerdì 15 agosto 2008

Software Architecture Reconstruction

Software Architecture Reconstruction (SAR) è una procedura in cui si utilizzano diversi software per analizzare e capire le relazioni tra componenti, le interazioni tra essi e la loro implementazione all'interno di un progetto software.

Questa procedura viene normalmente divisa in quattro diversi passaggi:
* Source Information Extraction
* Information Formatting
* Architectural View Composition
* Architectural Analysis

In breve:

Source Information Extraction
-----------------------------

In questo passaggio vengono estratte delle informazioni sui componenti e sulle interazioni tra essi a partire dal codice sorgente


Information Formatting
----------------------
Questo passaggio è necessario quando l'output del passaggio precedente è incompatibile con l'input previsto dallo step successivo: si cambia il formato delle informazioni estratte.


Architectural View Composition
-------------------------------
Un tool grafico carica le informazioni estratte (ed eventualmente riformattate) e le rappresenta graficamente


Architectural Analysis
----------------------
Si utilizzano le funzionalità del visualizzatore usato nello step precedente per navigare le correlazioni tra i componenti e capire l'implementazione del software


Il primo passaggio può essere eseguito da Understand for Java[1], il terzo e quarto da Armin, sviluppato dal laboratorio SEI della Carnegie Mellon University[2] mentre il secondo step è coperto da u4j2rsf[3], necessario in quanto Understand for Java crea dei report testuali in un suo formato ed Armin prende in input formato RSF, creato dal Rigi parser, non disponibile per sorgenti Java


[1] Understand For Java, Scitools Inc (or Scientific Toolworks Inc) http://www.scitools.com/
[2] Software Engineering Institute, Carnegie Mellon University (CMU), Pittsburgh, Pennsylvania, United States. http://www.sei.cmu.edu/
[3] Understand for Java to Rigi Standard Format, http://sourceforge.net/projects/u4j2rsf

sabato 19 luglio 2008

Back to Fluxbox

In questi giorni ho voluto smanettare un po' sul mio portatile vecchio. Ho dovuto cambiarlo ad inizio anno perchè praticamente non si chiude più. Una staffa dello schermo si è staccata dalla scocca e va a far forza sulla plastica facendo dei rumori strani e spostando fuori asse lo schermo.

Inoltre diventava sempre più lento. E' una cosa che non mi spiego, ma ha avuto un decadimento delle prestazioni davvero incredibile.
Tempo di accensione fino alla schermata gdm: accettabile. Da lì in poi un disastro..

E così ieri mi sono girate:

> apt-get remove --purge `dpkg --list | awk '{print $2}' | grep gnome`

seguito a più riprese da:

> apt-get autoremove
> apt-get remove --purge `deborphan`

poi ho installato fluxbox e xdm. Ed è stato un po' un ritorno alle origini, quando un sacco di anni fa ho iniziato a farmi le ossa con GNU/Linux su un Pentium II @450 con 96Mb di RAM, ovviamente con Fluxbox e xdm.

Per la cronaca, quel pc è ancora vivo e vegeto, con ben 192MB di ram e XFCE.. e ha, giustamente per diritti d'anzianità, l'IP 192.168.1.2 :)

venerdì 18 luglio 2008

Java: Filter Servlet

Il bello di usare i Filter in java è che deleghi una serie di controlli che sarebbero da replicare nelle varie action struts (o pagine JSP, o altre servlet) al filtro.

Questo può servire sia come controllo sulla sessione sia come controllo di sicurezza.

Molto spesso mi son trovato a contatto con applicazioni (e sicuramente è un errore che ho fatto anch'io, eh) che non effettuano il controllo sul corretto stato della sessione in alcune aree dell'applicazione web. Per cui c'è la possiblità che alcuni punti di entrata non previsti (passando per esempio dalla cronologia del browser o da un bookmark) non effettuino i dovuti controllo.

Per tagliare la testa al toro allora si può implementare un filtro del genere che funzioni con una whitelist interna (il metodo userNotNeeded(uri)) in cui ci sono tutti gli url (quindi le funzionalità, per intenderci) che possono essere richieste anche senza utente loggato in sessione.

Quello che non passa il controllo viene rediretto alla pagina di errore


public class UserBeanFilter implements Filter {
[..]
public void doFilter(ServletRequest req, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
UserBean user = (UserBean)request.getSession().getAttribute(USER_BEAN);

String uri = request.getRequestURI();

if ( (user != null) || userNotNeeded(uri)) {
logger.trace("Session ok for " + uri);
chain.doFilter(request, response);
} else {
RequestDispatcher rd = request.getRequestDispatcher(ERROR_PAGE);
logger.warn("Session required for " + uri);
rd.forward(request, response);
}
}
}


Niente di particolarmente sofisticato, ma può tornare utile..

venerdì 27 giugno 2008

La guerra delle mappe

Sono lontanissimi i tempi in cui non si riusciva a trovare una cartina decente su Internet. Infatti in questi ultimi anni un sacco di società hanno colto l'importanza di queste informazioni e si sono buttate a capofitto in questo nuovo servizio.

Dai tempi in cui si usava le mappe con un'interfaccia old-school (ogni spostamento faceva ricaricare la pagina) si è passati ad una versione più interattiva, con i primi esempi in formato applet java (map24), che permetteva anche operazioni prima impensabili (calcolo della distanza, per esempio).

E poi arriva Google con il suo GoogleMaps. Interfaccia a dir poco innovativa, con la possibilità di passare a visualizzazione delle foto satellitari/aeree. Ed i mashup, davvero un'ottima ciliegina sulla torta.. Poi compare anche il servizio di MS Live ed altri. Tra tutti questi prodotti si inserisce un progetto a dir poco interessante: OpenStreetMap che cerca di raggiungere un obiettivo particolarmente ambizioso: creare delle mappe in modo _collaborativo_. Infatti, in quanti non hanno trovato mai un errore o un'imprecisione nelle mappe?

Un'idea così semplice e banale (soprattutto dopo wikipedia) che ora ha attirato l'attenzione di google, che ha pubblicato un tool per editare le sue mappe.. (MapMaker)
Strumento sicuramente importante per gli utenti di google maps, che potranno trovarsi i dati aggiornati continuamente, ma tra il coro di entusiasti, si leva alta la voce di OpenStreetMap: se dovete aiutare qualcuno ad aggiornare le mappe aiutate me:

> If you contribute to Google MapMaker, you are contributing
> to one single map view that looks how Google wants it to look.
> If you contribute to OpenStreetMap, you are contributing to
> a myriad of possibilities … most not even thought of yet.

E come dargli torto..

mercoledì 18 giugno 2008

Esportare feed da liferea

Ecco quello che è uscito dopo un po' di lavoro su liferea ed il suo database sqlite..


#!/bin/bash

FILENAME=feed-`date +%m-%d`.html
DATABASE=$HOME/.liferea_1.4/liferea.db

echo -e '<html>\n' > $FILENAME
echo -e '<body>\n\t<table>' >> $FILENAME

sqlite3 -html $DATABASE "select title, source, description from items where read = 0;" | sed 's/^<TD>/<\/TR><TR><TD>/' | sed 's/\&lt;/</g' | sed 's/&amp;amp;/\&/g' >> $FILENAME

echo -e '\n\t</table></body></html>' >> $FILENAME



In questo modo si ha un file html feed-$mese-$giorno.html da spostare sullo smart phone, per leggere i feed allegramente in treno.

il formato per ogni entry è:
riga col titolo
riga con l'url
testo

TODO:
* sostituire i caratteri particolari (apici inversi) che si sputtanano
* rimuovere tutti gli http:// interni (per le immagini soprattutto) per poterlo visualizzare offline
* evidenziare meglio il titolo (spaziato da quello sopra e magari bold)
* provare ad aggiungere un foglio di stile

MIGLIORIE POSSIBILI
* sqlite supporta altri formati di esportazione, provare se viene più leggibile lo script (tipo la riscrittura dei tag) con altri formati (anche se saltano fuori altri problemi.. tipo il csv che non sostiuisce le virgole interne..)

domenica 15 giugno 2008

Idea per progetto su RSS

Un sacco di volte ho parlato della mia passione per i feed RSS.
Sono così comodi quanto semplici concettualmente, visto che si tratta semplicemente di un xml fatto in un certo modo. Ormai da tempo uso liferea sotto gnome. Ne ho provati altri, come ad esempio RSSOwl,che ha sicuramente molte più funzionalità.

Forse per il motivo principale per cui non sono passato a quest'ultimo è il fatto che sfrutta fin troppo la piattaforma Eclipse e visto già quanto tempo passo usando Eclipse per lavoro la cosa non mi ha convinto troppo.. e poi mi piace che liferea è semplice, senza puttanate, chiaro ed integrato bene in gnome.

Ora, visto il periodo particolarmente delirante da qui a fine mese, ho pensato di ottimizzare i tempi e leggere gran parte dei feed la mattina in treno.

La prima soluzione è accendere il portatile prima di uscire di casa, fargli scaricare tutte le novità, poi spegnerlo e riaccenderlo in treno. Il problema è che la tratta che faccio io non è molto lunga e che è sempre abbastanza affollato (non voglio fare come le persone che corrono sul treno facendosi largo a spintoni e lo attraversano in lungo e largo disperati alla ricerca di un posto.. ).

Allora ho pensato di cercare un RSS reader per il nintendo ds. Non ho avuto molto successo, quello integrato in ndsmail non mi pare un granchè, mentre DSOrganize non l'ha ancora integrato.

Ho anche un palm treo 500v, ma non sono mai riuscito ad installarci un cazzo (che fosse java oppure no).. decisamente una delusione..soprattutto per windows mobile. Ma vabbè, ora il punto è un altro: sto cercando un modo di scaricare i feed in automatico dal portatile e spedirli sul telefono o sull'nds e poterli visualizzare offline.

Per cui sono partito da capire come funziona liferea, e se c'è un modo per esportare i feed non ancora letti. Visto che lo scripting integrato non pare andare ("Sorry, no scripting support available" cliccando su "Script Manager"), ho pensato di andare ancora più a basso livello..

Per esempio potrei partire dal database sqlite ~/.liferea_1.4/liferea.db in cui salva tutti i feed scaricati.. se devo lavorare con sql mi sento meglio che non con dovermi interfacciare con un linguaggio di cui non avevo mai sentito parlare.. lua, usato per gli script liferea..

In questi giorni indago sulla struttura di questo database, poi pubblicherò i risultati..

sabato 14 giugno 2008

Che bot mi compro oggi?

Leggendo qua e là sul mio feed reader, sono approdato, attraverso il blog di RSnake su un ottimo sito che vende bot per l'iscrizione/manipolazione/spam sui social network.

Infatti allo stato attuale, quello che attira più attenzioni ed utenti in assoluto in ambito internet è il social networking. E cosa c'è di meglio che modificare il numero di viste al proprio account myspace? Oppure, quanto ci può costare pubblicizzare un account youtube spammando commenti su altri video?

La risposta è su allbots.info (non è un caso che non sia un link)

L'importanza (ed il guadagno più o meno immediato) che si può raggiungere sui siti di social networking hanno creato un nuovo settore di mercato di sicuro interesse;

da parte mia l'interesse sta nel lato tecnico, nel bypass del captcha (l'unica parte un po' complessa di un bot del genere), e poco altro visto che sono fuori da siti come myspace, youtube (sul pc che uso di più non ho neanche il player flash) e facebook.

Ed anche il proliferare degli odiosissimi CAPTCHA sui vari siti ha aperto una nuova frontiera: il loro breaking.

Gli unici che resistono sono quelli incomprensibili anche all'occhio umano..

giovedì 12 giugno 2008

L'impegno da record per firefox 3

Per chi non ne avesse ancora sentito parlare, firefox 3 punta a stabilire il record di download in un giorno unico. Quindi appena verrà deciso il download day, tutti pronti a scaricare la nuova versione del browser di Mozilla, per dare un segnale forte (al mondo informatico e non).

La data è martedì prossimo, 17 giugno.

Download Day 2008

A parte questo, ci sono diversi motivi per cui aspetto la versione definitiva: da una parte i benchmark a dir poco incoraggianti. Fosse davvero così sarebbe un bel colpo per gli altri browser ed un passo in avanti per gli utenti e la fruibilità di internet. Dall'altra parte vorrei vedere se sono confermati o meno i problemi con certe librerie javascript ajax..

Infatti ho testato la beta 5 su un mio progetto lavorativo, che si basa fortemente su jquery e su sztreeview. Un sacco di funzionalità andavano a singhiozzo. Ovviamente non bisogna dargli troppo peso, visto lo stato di beta, ma è un motivo in più per aspettare il download day

mercoledì 11 giugno 2008

Utilizzo di wireless non protette

10 giorni fa circa ero in montagna per un weekend di relax e aria pulita. Domenica sera accendo il portatile per guardarmi un film, e già che ci sono lancio un

> iwlist wlan0 s

Con ben poche pretese, visto che ero in un paese a 1200 m slm praticamente deserto visto il periodo.. Eppure vedo due reti wireless, entrambe sprotette.

Mi attacco a quella col segnale più potente, DHCP abilitato. Non avendo nessuna intenzione di fare cose losche, ma solo di accedere ad internet, non modifico mac address nè prendo altre precauzioni (non ho firewall ma non partono in automatico servizi importanti) e non cerco nè di sniffare traffico nè di studiare la sotto rete nè di capire che access point è.

Dubito che ci sia qualcuno in ascolto, vista la situazione, ma essere paranoici a volte è anche divertente. E visto che non tutte le webmail che uso sono in https, decido che è comunque consigliabile affrontare questo problema.

ora: sul portatile ho una vpn (OpenVPN) per attaccarmi ai server in farm a Milano. Il gateway della lan virtuale effettua il nat delle connessioni che arrivano dall'interno, ed io, con la vpn, raggiungo direttamente l'interno della lan.
Il fatto che effettui il nat anche delle connessioni dalla vpn è un prerequisito fondamentale.

Quindi:
> /etc/init.d/openvpn start

Ora ho l'interfaccia tun0 che mi fa accedere direttamente ai server.

> route
La tabella di routing ha come default gateway 192.168.1.1 (l'access point), il che non mi sta bene, se voglio includere tutto il traffico nella vpn ed uscire su internet passando dalla farm. Quindi:

Elimino la rotta di default
> route del default

gli aggiungo la rotta per il server vpn (questo passo sembra non essere obbligatorio se si ha già tirato su la vpn, ma a me sembra più chiaro e "rigoroso" metterlo), dicendogli di passare dall'access point
> route add -host ip_pubblico_server_vpn gw 192.168.1.1

ed ora incapsulo tutto il traffico nell'interfaccia tun0:
> route add default tun0

Ora basta andare su una pagina che mostra l'ip da cui si arriva per notare che l'ip pubblico è ip_pubblico_server_vpn. Ora tutto il traffico generato dal mio portatile viene incapsulato nella vpn, passa quindi crittato a livello 4 iso/osi per la wireless e per il percorso dall'access point al mio server vpn per poi uscire in chiaro solo a partire dalla farm.

In realtà non è nulla di complesso o di innovativo, anzi, ma può tornare utile..