sabato 20 dicembre 2008

TestDisk, tanto di cappello!

Ultimamente mi è capitato, per conto di un mio amico, di dover recuperare delle foto erroneamente cancellate da schede SD.

Una brevissima ricerca mi ha portato a questo software: http://www.cgsecurity.org/wiki/PhotoRec.
Sotto debian è già disponibile sotto il nome di TestDisk, che è un altro strumento meno specifico per recuperare file cancellati da pendrive e memorie.
Quindi

> apt-get install testdisk

messa dentro la sd, ,lanciare photorec con il device come parametro

> photorec /dev/mmcblk0p1

seguire la semplice interfaccia testuale per lanciare in pochi passi il recupero delle foto e dei filmati erroneamente cancellati.

Come piace a me: scarno, efficace ed efficiente.. tanto di cappello

martedì 16 dicembre 2008

Benvenuta, mia giovane periferica..


shatsar@erakis:~$ dmesg | tail -8
[ 711.819213] usb 5-1: new low speed USB device using uhci_hcd and address 2
[ 711.999851] usb 5-1: configuration #1 chosen from 1 choice
[ 712.030131] hiddev96hidraw1: USB HID v1.10 Device [Phidgets Inc. PhidgetRFID] on usb-0000:00:1d.0-1
[ 712.030329] usb 5-1: New USB device found, idVendor=06c2, idProduct=0031
[ 712.030335] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 712.030341] usb 5-1: Product: PhidgetRFID
[ 712.030345] usb 5-1: Manufacturer: Phidgets Inc.
[ 712.030349] usb 5-1: SerialNumber: 77895

giovedì 11 dicembre 2008

Browser Security Handbook by Google

Rompo il silenzio con un post rapidissimo per un link su cui sono finito stamattina passando in rassegna i feed:

Browser Security Handbook.

In queste pagine è stata raccolta nel tempo buona parte della conoscenza di google riguardante la sicurezza di alcuni browser (IE 6 e 7, FF 2 e 3, Safari, Opera e ovviamente Chrome ed Android) ed il comportamento di ognuno di fronte a certe situazioni. Queste differenze, dovute all'implementazione effettiva, rendono quindi lo stesso link o la stessa pagina potenzialmente pericolosi per un browser specifico.

Sicuramente un lavoro interessante che merita più attenzione di quella che gli ho dedicato finora.. soprattutto per i test case da scaricare, studiare e testare!

lunedì 17 novembre 2008

jQuery plugin uiTableFilter e piccola modifica

Poco fa stavo usando questa ottima plugin di jquery: uiTableFilter.

Dandogli in pasto una tabella, ed eventualmente il testo dell'header () relativo alla colonna scelta, esegue una ricerca semplicissima tra le righe, nascondendo quelle che non contengono il testo voluto, eseguendo quindi in maniera rapida un filtro.

L'ho trovata molto semplice e dal codice leggibilissimo, per questi motivi ho scelto di utilizzarla.
Però la tabella su cui l'ho applicata è abbastanza complessa, per cui ho messo due input testuali, per filtrare su due colonne differenti. Il problema che si è subito evidenziato è che (giustamente) il filtro su una colonna non considera il filtro sull'altra. Il motivo è semplice: se una riga ha il match con la ricerca che ho effettuato, chiama la funzione show() di jquery, mentre se non contiene il testo cercato chiama una hide(), non avendo quindi modo di capire se la riga era nascosta per un testo cercato precedente oppure per il filtro sull'altra colonna. Ecco quindi come ho risolto:

Ecco il diff con la versione ufficiale


21c21
< jQuery.uiTableFilter = function(jq, phrase, column, ifHidden){
---
> jQuery.uiTableFilter = function(jq, phrase, column, dontUnhide, ifHidden){
28c28
< var success = function(elem) { elem.show() }
---
> var success = function(elem) { if(!dontUnhide) elem.show() }



Ho cambiato la signature del metodo aggiungendo un parametro "dontUnhide" che permette di specificare, in pratica se il campo su cui si sta filtrando è primario o meno. Quindi di default (non passando il parametro o dando valore false) si comporta normalmente, quindi è un campo primario. Passando invece il flag impostato a true, si comporta in modo da considerare il campo secondario, non chiamando mai lo show(), ma nasconde comunque le righe che hanno passato il filtro primario ma non passano quello corrente.. il risultato è l'effetto "AND" che mi serviva.. e l'utilizzo che ne faccio è il seguente:


$(document).ready(function() {
var theTable = $('table#filtered');

function realFilter() {
$.uiTableFilter( theTable, $("#filter").val() , 'Site Name');
$.uiTableFilter( theTable, $("#filterCity").val() , 'City', true);
}
$("#filter").keyup(function() {
realFilter();
})

$("#filterCity").keyup(function() {
realFilter();
})
});


Al caricamento della pagina associo le funzioni alle due caselle di testo, uno per filtrare su Site Name e l'altra su City. Ma in realtà al keyup su qualunque delle due, la funzione è la stessa, che filtra prima sul Site Name, poi sulla City (flag dontUnhide = true).

L'unica cosa che non mi piace tanto è il giro su dontUnhide.. che è macchinoso pensare quando il flag per non "non nascondere" vada impostato a false.. mi sarebbe piaciuto usare un flag tipo "primary", ma in javascript preferisco sempre avere flag booleani il cui valore false causi il comportamento "normale", in modo che siano non obbligatori.

Ho appena scritto al creatore della plugin.. chissà che non possa tornare utile a lui o ad altri..

sabato 15 novembre 2008

Il nuovo modello di campagna elettorale made in USA

Non è mia intenzione parlare dell'aspetto politico delle elezioni del nuovo presidente degli USA, ma puntare l'attenzione su un dettaglio che per me ha una grande importanza e sicuramente è un punto di svolta: l'utilizzo di internet durante la campagna elettorale.

Di questo aspetto hanno già parlato in molti: l'utilizzo massiccio di strumenti quali linkedin, myspace, twitter, facebook ed altri canali di comunicazione su internet è un evento senza precedenti. Da notare che questi strumenti sono stati usati da una parte e dall'altra. Per esempio su linkedin (l'unico network sociale a cui sono iscritto e quindi quello che conosco meglio) ci sono tutti i "protagonisti" da Obama (attualmente 16° su toplinked ) a McCain, Sarah Palin a Hillary Clinton (Joe Biden non mi pare ci sia..).
E già questo è un punto su cui si potrebbe discutere. Infatti l'utilizzo di questi strumenti ha reso possibile un diverso approccio alla vita politica ed alla vita di un politico.
Personalmente ho l'impressione che i nostri politici non riescano minimamente a rendere la gente partecipe delle decisioni, che vengono viste come un'imposizione dall'alto.
Ed è proprio su questa mancanza di comunicazione che ha trovato terreno fertile un movimento come quello dei grillini. Che va ben oltre, certo, ma non si può nemmeno negare che uno dei fattori del suo successo sia il concetto di estraneità che prova il singolo cittadino verso la classe politica.

Su questo si potrebbe andare avanti ancora molto, ma arrivo invece al motivo che mi ha spinto a scrivere queste riflessioni: Obama ha risposto alla grande, secondo me, ai dubbi di tutte le persone che si son chieste "ma dopo questa campagna in stile web 2.0, con il coinvolgimento in prima linea di elettori e simpatizzanti, cosa succederà?" la risposta è stata chiara: change.gov. In attesa dell'insediamento del nuovo presidente, che avverrà il prossimo 20 gennaio, quello sarà il canale ufficiale per seguire l'avvicinamento alla Casa Bianca di Barack Obama: da lì avremo notizie, video (proprio oggi ne hanno pubblicato uno), news e potremo anche interagire.. il fatto che questo sia avvenuto nel States, fa ben sperare che presto anche altri paesi si adegueranno, cercando di riavvicinare la gente al mondo politico attraverso gli strumenti che mette a disposizione internet e forse riusciranno anche ad attenuare un po' la sensazione di estraneità verso lo Stato.

PS: Basta che non sia un'altra puttanata in stile Italia.it!

martedì 11 novembre 2008

JQuery + thickbox con url dinamici

Ormai da tempo mi affido a jQuery per rendere più dinamica l'interfaccia grafica e non preoccuparmi della portabilità, dopo aver perso il sonno causa browser assolutamente non standard (che non nominerò, ma già sapete..).
Oggi mi trovo a dover sostituire, in un sito abbastanza recente, un parte fatta a popup con una più elegante e moderna versione ajax con tanto di thickbox, plugin che ho usato già per altri lavori.

Il problema è il seguente: allo stato attuale, all'href del link è associato una funzione javascript (selectSite()) che carica parametri in base a selezioni fatte dall'utente in diverse parti della pagina, crea un url con questi parametri e apre un "simpatico" popup con la pagina generata dinamicamente.

Ora, se attivo thickbox direttamente su questo link, esso cambierà l'href associato.
Il risultato è che se poi si cambiano i parametri nel resto del form, un click sul link genererà comunque la richiesta con i vecchi parametri. All'inizio ho pensato a come associare una callback alla chiusura della finestra thickbox per rimettere di nuovo la funzione "selectSite()" all'href del link in questione. Ma mi sembrava un po' macchinosa, soprattutto contando che esistono altri link del genere, con funzioni simili ("selectService()", "selectSupplier()".. etc).

Allora ho pensato di indirizzare il mio refactor in una direzione differente: lasciare intatto il link, ma usarne uno di appoggio fatto apposta per aprire il thickbox e niente più.
Quindi ho creato un link vuoto ed invisibile () ed una funzione a cui si appoggiano selectSite e le sue sorelle:


function loadAjaxContent(url) {
var urlPar = url + "&height=500&width=800";
var nodeId = '#HiddenLink';
if(!$(nodeId).hasClass( "thickbox" )) {
$(nodeId).addClass("thickbox");
tb_init('a.thickbox');
}
$(nodeId).attr("href", urlPar);
$(nodeId).click();
}


Vediamo cosa fa nel dettaglio:

* prepara l'href a partire dall'url (che prima veniva richiamato come popup)
* cerca il link nascosto; se è la prima richiesta aggiungo la classe "thickbox" al link nascosto ed inizializzo thickbox, questo perchè la pagina stessa viene chiamata attraverso ajax e messa dentro un div con innerHTML, quindi l'unico modo per inizializzare thickbox è lanciare l'init dopo il caricamento del contenuto (una callback sull'avvenuto inserimento) oppure on-demand.
* aggiorno l'href del link nascosto e lancio un click su questo.

In questo modo l'href viene aggiornato costantemente, i link non vengono toccati ed il mio refactor va a sostituire i window.open(url) con loadAjaxThickbox(url).. non male, direi..
Ora miglioro alcune cose:
* potrei creare direttamente il link con id HiddenLink in questa funzione
* lancio tb_init('a#HiddenLink') per non appesantire nel caso ci siano diversi thickbox nella pagina
* aggiungo altri parametri per rendere più flessibile la gestione della finestra (altezza, larghezza, modal..)

lunedì 10 novembre 2008

Ma che bello tvtime

Stasera ho pensato di dare un'occhiata alla scheda tv che ho su un pc fisso che non uso molto. Ecco come è andata:
intanto da lspci ho scoperto che la scheda è una:

02:00.0 Multimedia controller: Philips Semiconductors SAA7134/SAA7135HL Video Broadcast Decoder (rev 01)

Il driver del kernel è semplicemente saa7134, quindi
> modprobe saa7134

Per quanto riguarda l'applicazione, pensavo ci sarebbero stati problemi, visto che il pc non è recentissimo e tanto meno lo è il sistema operativo..

=Primo tentativo: zapping
Tendo ad installare applicazioni specifiche per gnome, ma questa volta mi è andata male. La versione è la 0.9.6, mi dà problemi da subito e mi pare l'interfaccia un po' scarna. Non riesco a prendere un canale neanche per errore, mi si pianta ogni volta che cerco di aprire le impostazioni, quindi ringrazio, saluto e disinstallo.

=Secondo tentativo: tvtime
Lo installo, lo avvio, mi chiede un minimo di configurazione e attraverso un semplice menù intuitivo lancio la scansione delle frequenze. In meno di un minuto ho tutto configurato e funzionante.. davvero complimenti! Semplice ed efficace.
http://tvtime.sourceforge.net/

mercoledì 29 ottobre 2008

Delirio di fine giornata: upgrade di joomla

Dopo aver aggiornato un'installazione di Joomla dalla versione 1.0.12 (datata dicembre 2006) alla versione stabile corrente del branch 1.0 (1.0.15) mi chiedo: com'è possibile che un progetto open di questo tipo (parlo soprattutto delle dimensioni del progetto) abbia una qualità di codice decisamente alta (per quanto sia possibile in PHP, ma questa è un'altra storia) e non dia alcun tipo di problema durante l'upgrade?
Quanto sono bravi quelli di Joomla?
Non per niente è un progetto pluripremiato il cui upgrade consiste nello scompattare un archivio sostituendo i file sul server.

Nel caso vi sembrasse strano il mio stupore per questa semplice ma efficace procedura, probabilmente non avete mai provato ad aggiornare SugarCRM, oppure vi è andato di culo l'upgrade.. cosa che a me non è _mai e poi mai_ capitata

martedì 28 ottobre 2008

L'avanzata del Cloud Computing

Dopo essermi perso dietro agli impegni universitari, che mi porteranno (probabilmente) a finire gli esami entro pochi giorni, ho pensato di scrivere qualche riga su una delle "keyword" del momento: cloud computing.

Seguo ormai da qualche tempo la crescita costante di interesse del mondo informatico a riguardo; E proprio in questi giorni ha ricevuto una spinta notevole da parte di Microsoft, con la presentazione di una piattaforma di servizi per il cloud computing: Azure. D'altra parte la stessa tecnologia era già stata criticata da Richard Stallman, ma andiamo con ordine.

Il concetto principale del Cloud Computing (ma non è _solo_ questo) è il fatto di fornire software come servizio attraverso Internet (la classica nuvoletta nei diagrammi di rete, da cui il nome). Da qui le critiche di Stallman, che vede come un pericolo il fatto di accettare sempre di più che i nostri dati (ed anche quelli aziendali) risiedano fisicamente su server remoti, potenzialmente di proprietà e sotto il controllo di aziende esterne. Infatti pensiamo ad aziende che affidano la contabilità a fogli di calcolo su Google Apps. Rubare la password di un account internet è sicuramente più semplice che penetrare in una rete aziendale e rubare dati dal server centrale.

Ma d'altra parte con l'avvento della categoria dei subnotebook o netbook, si fa sempre più concreta ed appetibile la possibilità di usare il browser in giro per il mondo lavorando su computer decisamente più potenti e più sicuri (se non altro dal punto di vista del backup, ridondanza e per il fatto di essere in un data center) attraverso internet. A questo punto il fatto di non avere i dati nel proprio pc può diventare un punto di forza.
Come non si può definire punto di forza il fatto di essere in giro per lavoro con un portatile che pesa meno di un kg e che costa 300 euro, poter lavorare su documenti grossi, salvare foto etc.. e non dovermi preoccupare più di tanto se mi si rompe/me lo rubano?

Quindi come al solito, credo che la tecnologia di per sè non sia pericolosa e che non sia neanche indispensabile, ma utile ed interessante. Quindi con un po' di buon senso, sapendo a cosa si va incontro, si può decidere in che modo usufruire di questa nuova tecnologia su cui un sacco di aziende di livello mondiale stanno investendo non poche risorse..

sabato 4 ottobre 2008

AtLeap: free open-source java cms

In questo periodo sono venuto a contatto con atleap, uno dei pochi cms scritto in java. L'ho trovato decisamente interessante.

Bene o male le potenzialità che mostra all'utente finale sono le solite dei cms. Eppure ha qualcosa in più: usa un sacco di tecnologie interessanti.
La prima cosa che mi ha impressionato è il fatto che basta scaricarlo (uno zippone da più di 30MB), scompattarlo e lanciare dalla root il comando

> bin/start-demo.sh

Facendo così lancia un'istanza di jetty, crea il db su hsqldb e avvia l'applicazione web che si basa su Spring, Hibernate, diversi progetti Commons ed altri che non sto qui ad elencare. E subito si può partire ad utilizzarlo.

Questo per dire che mi è parso un progetto serio, fatto bene ed abbastanza documentato, cosa che non sempre avviene nei progetti open source.
Quello che secondo me manca rispetto ai vari cms in PHP è l'usabilità. Per quanto siano progetti fatti davvero bene, sia questo che opencms (che uso ormai da un po') hanno una complessità tale che all'inizio può davvero spaventare. Sono entrambi progetti seri, stabili e di una qualità davvero ottima, ma l'usabilità di Joomla è ancora un miraggio..

domenica 28 settembre 2008

FFmpeg per video su smartphone windows mobile 6

Oggi ho deciso di perdere qualche decina di minuti nel secondo round di uno scontro che avevo abbandonato tempo fa..

Infatti ho deciso di riprendere in mano ffmpeg e fare un secondo tentativo per capire come adattare i video per il dannato smartphone windows-based (quanto mai, ne ho dovuto effettuare un terzo hard reset in circa un anno..).

Comunque, dato che ormai lo sto pagando (visto che fa parte del contratto business) ogni tanto mi viene in mente di sfruttarlo il più possibile (vedi la voce su liferea hacking).

Su debian bisogna aggiungere prima di tutto il repository debian-multimedia, per avere più facilmente codec aggiornati/proprietari e software compilati in modo ottimale per certe operazioni.
Per la cronaca, installare ffmpeg da debian-multimedia manderà a puttane vlc.

Detto questo, ecco il comando che sto attualmente usando per effettuare l'encoding di un video qualsiasi in modo da poterlo vedere/sentire sullo smartphone:

> ffmpeg -i $input -s qvga -vcodec wmv2 -b 128k -r 24 -acodec wmav2 -ar 22050 -ab 64k $output.wmv

Quindi:
* dimensione: qvga, cioè 320*240
* video: wmv2 (la mia versione non ha wmv3) a 128kbps con 24 frame al secondo
* audio: wmav2 (si potrebbe provare mp3 o msmpeg4, ma la mia versione non li supporta, per cui per ora mi accontento) con audio sample rate 22050Hz e bitrate 64kbps)

$input può essere qualsiasi tipo di filmato supportato (quindi .mov . avi..) mentre $output è meglio che sia un .wmv, così il vostro amato smartphone eviterà di rompere troppo..

Per dare un'ordine di grandezza dell'output, ho fatto l'encoding di un .avi di 20 minuti da 160 MB:

> Duration: 00:20:30.00, start: 0.000000, bitrate: 1090 kb/s
> Stream #0.0: Video: mpeg4, yuv420p, 576x432 [PAR 1:1 DAR 4:3], 29.97 tb(r)
> Stream #0.1: Audio: mp3, 44100 Hz, stereo, 128 kb/s


ed il risultato è stato un file da 31MB.
Sicuramente c'è ancora margine di miglioramento, a partire dai codec audio, ma per ora è sufficiente così! :)

martedì 2 settembre 2008

Debian, apache2 e userdir

Un post rapidissimo per segnarmi una cosa che è sicuramente cambiata dall'ultima volta che ho configurato sotto debian apache httpd:

su altre distribuzioni linux, mod_userdir (quello necessario per fare localhost/~user , per intenderci) è compilato nel binario e già pronto all'utilizzo; molto spesso basta decommentare la direttiva UserDir all'interno del file di configurazione. Altre volte bisogna creare il link simbolico da mods-available a mods-enabled.

Invece oggi è stato ancora più semplice e decisamente più rapido:

mod_userdir non è abilitato di default, infatti mettendo la direttiva UserDir in httpd.conf genera un chiaro errore:

> Invalid command 'UserDir', perhaps misspelled or defined by a module not included in the server configuration

E dopo aver verificato che effettivamente non è tra i precompilati nel binario:

> erakis:/etc/apache2# apache2 -l
> Compiled in modules:
> core.c
> mod_log_config.c
> mod_logio.c
> prefork.c
> http_core.c
> mod_so.c

è bastato abilitare il modulo:
> erakis:/etc/apache2# a2enmod userdir
> Enabling module userdir.
> Run '/etc/init.d/apache2 restart' to activate new configuration!

e riavviare l'httpd.. Ora ha creato il link simbolico in mods-enabled con la direttiva per il caricamento (contenuta nel file userdir.load) e una configurazione standard (userdir.conf).

Quanti passi in avanti sono stati fatti dai tempi dell'apache 1.3 con il file di configurazione monolitico gigantesco con decine di direttive LoadModule da commentare/decommentare e tutte le direttive specifiche dei vari moduli messe insieme..

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..

giovedì 5 giugno 2008

[Howto] create fedora 9 xen images (on fedora)

A little howto on creating xen images (using torrent to download the iso instead of using http/ftp during installation).

**On Domain-0**

Get DVD iso
-----------

retrieve the .torrent
> wget http://torrent.fedoraproject.org/torrents/Fedora-9-x86_64-DVD.torrent

download the image with rtorrent (text-based) or any other bittorrent client
> rtorrent Fedora-9-x86_64-DVD.torrent

check the file
> sha1sum -c Fedora-9-x86_64-DVD/SHA1SUM


Mount the image and "create" a repository
--------

Mount the iso image using loop device
> mkdir /mnt/fedora_loop/
> mount -o loop Fedora-9-x86_64-DVD/Fedora-9-x86_64-DVD.iso /mnt/fedora_loop/

Make a symlink in apache (so http://localhost/fedora will be the content of the iso image
this is also helpful if you don't have internet connection here but only the dvd: you can link directly the dvd content and proceed ahead
> ln -s /mnt/fedora_loop/ /var/www/html/fedora

Start httpd service
> service httpd start

Install
-------

Start the install process with virt-install (parameters are optional)
> virt-install -b xenbr1 -s 16 -f /xen/fedora9.img -n fedora9 -r 256 --nographics -l http://192.168.1.1/fedora

*where 192.168.1.1 is Domain-0's IP address*

mercoledì 4 giugno 2008

Utilizzo avanzato di PostgreSQL

Per la prima volta vengo a contatto, per lavoro, con qualcuno che usa il database in modo avanzato ed ecco qualche tip che ho estratto (da mettere come campi della select):

Concatenazione
--------------

> 'pref-' || nome :: varchar (5) as "nome con prefisso"

dove || concatena il prefisso alla sotto stringa di lunghezza 5 del campo nome

Condizione
---------

> case when data is null then NULL
> else to_char(data :: date, 'dd/mm/yyyy')
> end as "data_str"

con il controllo sul campo data che viene trasformato in stringa impostata a null se era null, altrimenti formattata secondo un modo diverso


Differenza tra date
-------------------

> extract(year from age(data_arrivo :: date, data_partenza :: date))
> as "anni impiegati"

calcola la differenza tra date e ne estrae il solo anno

Formattazione ore
-----------------

> case
> when ora is null then null
> else to_char(((ora :: varchar(2)) || ':00:00') :: time, 'hh24:mm')
> end as "ora formattata"

controlla il campo ora (varchar(2) con valori "00" -> "23") e se è non nullo lo trasforma in "00:00" -> "23:00"

Altro esempio di age()
----------------------

> case
> when age(data1 :: date + time1 :: time, data2 :: date + time2 :: time) < '6 hour' then 0
> when age(data1 :: date + time1 :: time, data2 :: date + time2 :: time) < '24 hour' then 1
> else -1
> end as 'interval'

calcola la differenza tra due somme di date+time, e mette nel campo interval un flag intero -1 -> 1


che dire.. troppe volte ho dovuto fare a livello superiore controlli che andavano fatti direttamente nel database, per cui sono rimasto positivamente colpito da questo script, che tra l'altro viene usato per creare una view.. altro strumento che troppo spesso viene ignorato
ah, sto cercando di usare questo: markdown

venerdì 23 maggio 2008

Come funziona Google Analytics

Navigando tra un blog e l'altro, sono approdato su un blog monotematico sul noto servizio di statistiche di Google.

Più o meno il funzionamento è come me l'ero immaginato, e penso che in molti siano giunti alle mie conclusioni, però è un post scritto in modo semplice e schematico, per cui è una simpatica lettura per capire la struttura e il funzionamento di questo strumento così diffuso: http://www.goanalytics.info/lordine-e-importante/

Buona lettura

venerdì 9 maggio 2008

Audio e video per windows media player 10 mobile

Sto bestemmiando con ffmpeg per convertire un po' di filmati in un formato ottimale da visualizzare sullo smartphone, quindi procedo con qualche appunto sparso.
i formati supportati sono:
Windows Media Audio (WMA), Windows Media Video (WMV) e MP3

mentre dalla documentazione pare che i codec supportati siano:
Microsoft Windows Media Video codec versions 7, 8, and 9.
Microsoft Windows Media Video 9 Image codec versions 1.0 and 2.0.
Microsoft MPEG-4 codec version 2.0 and 3.0.
ISO MPEG-4 video codec version 1.0.

Ovviamente la mia versione di ffmpeg, da quello che ho visto, non supporta NESSUNO di questi codec.. è compilato in modo un po' troppo restrittivo, quindi dovrò lavorarci un po'.

per quanto riguarda la risoluzione, invece, dipende dal dispositivo. Il mio, per esempio, è in 320x240, risoluzione anche conosciuta come qvga (un quarto di VGA), per cui ad ffmpeg va passata l'opzione -s qvga.

Alla prossima

giovedì 1 maggio 2008

Flowplayer: per quelli che "non esiste solo youtube .."

Oggi ho usato per la prima volta flowplayer. Ne avevo già sentito parlare, ma finora non avevo ancora avuto necessità di includerlo in qualche mio progetto. Ora invece ne avevo bisogno e sono rimasto decisamente soddisfatto del prodotto.

Andando con ordine: Flowplayer viene giustamente definito così sul sito ufficiale:
FlowPlayer is a Flash media player. You can use it on your HTML pages to play video files. "It is your personal YouTube".


E visto che non sempre si può o si vuole codividere il filmato su youtube, questo è uno strumento sicuramente utile. In particolare io avevo bisogno di pubblicare con questo player flash un filmato .MOV. Flowplayer supporta tre formati video: .flv, mpeg4 e h264.
Quindi un mov bisogna convertirlo, per cui ho scaricato ffmpeg e ho lanciato il comando:

ffmpeg -i movie.mov -vcodec flv movie.flv

ho uploadato il file .flv e flowplayer via ftp sul server, ho configurato il file di esempio per caricare il .flv e ho mandato un'email al cliente per fargli vedere il player.. se gli piace avrò modo di configurarlo meglio e vederne le potenzialità.

Per ora mi ha fatto un'ottima impressione e lo terrò presente per eventuali necessità simili in futuro, quando non è possibile appoggiarsi a youtube o simili

lunedì 28 aprile 2008

Mai usare distribuzioni a 64 bit parte 2a

rinnovo l'odio e la frustrazione già espressa tempo fa
nel mio post "mai usare distribuzioni a 64 bit" aggiungendo che mi era sfuggita una cosa secondaria ma non troppo: anche le applet java non funzionano!

La plugin icedtea è indietro, e su un'applet di cui ho bisogno si inventa un errore su un certificato, mentre la sun (che ha appena rilasciato open source un'altra parte della jdk) si para il suo dannato culo scrivendo, sotto i file java distribuiti per questa architettura maledetta:

* Please use the 32-bit version for Java applet and Java Web Start support.


ma dai cazzo, non riesco a credere che sia così fottutamente impossibile dare un supporto decente a questa architettura che ha sempre di più una quota di mercato significativa!!

Non so se sono incompetenti o semplicemente stronzi

mercoledì 23 aprile 2008

Piattaforma di blog alternativa

Nei miei viaggi alla deriva in internet, sono finito su un progetto davvero delirante.

nel senso buono.

Sinceramente non ci ho ancora messo le mani sopra.. ma ho il dubbio che lo farò al più presto. Infatti è interessante vedere come si possano usare certe tecnologie già esistenti per creare delle alternative (che siano valide o meno è tutto da decidere) a modelli che ormai sono degli standard de facto per alcune applicazioni.
Mi riferisco al modello LAMP. Nulla in contrario, anzi.. lo uso da parecchi anni, ma questo non vuol dire che non si possa esplorare altre strade..

E poi c'è da installare il modlisp su apache :D

Credo sia proprio il fatto che ci sia di mezzo il LISP a stuzzicarmi..
eccolo: tekuti .. enjoy

lunedì 21 aprile 2008

History Meme

da qualche tempo sto trovando in giro questo meme.. e per una volta ho deciso di seguirne uno, anche perchè mi è sembrato molto più interessante del solito:


$ history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
265 cd
220 ls
105 svn
56 ant
38 vim
32 evince
31 pdflatex
26 cat
25 su
23 ssh


beh.. si nota subito la mia tendenza a navigare per le cartelle a riga di comando.. :)

giovedì 10 aprile 2008

docx, niente paura.. o forse si?

Oggi è salito a quota 3 il numero di persone che mi han chiamato a metà tra disperazione e l'ira funesta per aver ricevuto un documento .docx in cui ci sono informazioni importantissime che non riescono ad aprire.

Questo capita per il fatto che, evidentemente, il formato Office Open XML è diventato il default per le applicazioni Ufficio di Microsoft. E senza troppo preavviso.. nel senso che comunque ai non addetti ai lavori, questa inversione di rotta è passata inosservata. Per cui ci si ritrova con un problema che prima era sconosciuto ai più: l'incompatibilità!
Ed a poco serve cercare di usare i convertitori online (io ne ho provato uno ed è stato un fallimento, ma ora che è standard ISO mi aspetto che migliorino..) o piangere e sospirare..

l'unica soluzione è comprare l'ultima nuova fiammante versione di Ufficio! E via!

mercoledì 2 aprile 2008

E siamo ad aprile: NDS, smanettamenti e progetti

Cazzo se è volato il tempo. Il primo quarto di 2008 se n'è andato di corsa.. ma vabbè.

In questi giorni ho appreso con soddisfazione della scelta ricaduta su Milano per l'Expo 2015 (sapete tutti che è stato merito di Berlusconi, no? Ma avevate dubbi che una persona malata di protagonismo avrebbe rinunciato all'occasione di spararne una così grossa?).
Ma a parte questo, la cosa che più mi rende felice è notare che ho sempre più voglia di ricominciare a darmi all'hacking, agli smanettamenti notturni su software/hardware e via dicendo.
Ed ora che mi ritrovo, in previsione, con un po' di tempo libero (grazie a progetti che finalmente stanno giungendo a conclusione) sto per ordinare qualcosa da phidgets.com .. non ho ancora deciso, forse il pacchetto per gli RFID, o uno starter kit generico e via..
Gli RFID sono un mio pallino da un po' di tempo, immaginatevi ora dopo gli ultimi sviluppi (Mifare Classic) ..

Per ultimo ieri notte ho flashato un altro nds, sempre per la supercard slot-2.
I link di riferimento sono sempre i soliti (anche se non li avevo ancora postati):
http://home.comcast.net/~olimar/flashme/
http://www.gbarl.it/index.php?showtopic=12495

Altri appunti in ordine sparso:
* Il compilatore per NDS non è il compilatore normale ARM, in quanto mancano alcune caratteristiche.. ma c'è già la versione patchata.
* A breve organizzerò un appuntamento fisso con alcuni miei amici smanettoni e proveremo finalmente a programmarci sopra.
* La wifi del DS non supporta modalità monitor
* finalmente ho capito come montare in loop device le immagini di xen (quelle del tipo: più partizioni all'interno dello stesso file .img).. lomount -t ext3 -diskimage FILE -partition NUM /mnt/sticazzi ..
* Io pocahontas me la farei (ho trovato degli .mp3 di qualche anno fa.. :) )

Magari approfondirò qualche punto di questi in post successivi..

lunedì 31 marzo 2008

L'importanza di essere sincronizzati

Una delle varie cose che mi fa innervosire è l'orario sputtanato sui vari computer.
per cui:
http://it.wikipedia.org/wiki/Network_Time_Protocol per un'infarinatura generale.
http://www.pool.ntp.org/zone/it per il pool italiano

Se non si vuole configurare ntpd, il demone per tenersi allineati con il server, può tornare utile lanciare manualmente l'aggiornamento con il comando:

ntpdate 2.it.pool.ntp.org

Ci vuole così poco!

mercoledì 19 marzo 2008

I poteri nascosti di FireBug

Sono un grande utilizzatore e fan della plugin di firefox FireBug.
E' davvero avanti..come già ho avuto modo di dirvi. Ma quello che mi ha davvero lasciato di stucco oggi è il fatto che firefox abbia un comportamento decisamente diverso con firebug attivo o no:
purtroppo non sapevo che l'oggetto nativo XMLHttpRequest viene wrappato da FireBug.
E mentre in rete leggo che questo genera dei problemi, a me li genera il fatto che quando non è wrappato, la responseXML non venga riconosciuta... Eppure mi pare un .xml con tutti i crismi, ma con firebug attivato mi ritrovo con l'xmlhttprequest correttamente riempito con la responseXML, mentre con firebug off no..

mah .. va a finire che uso questa libreria per uniformare il comportamento dei vari browser: http://code.google.com/p/xmlhttprequest/ chissà, magari funziona...

mercoledì 5 marzo 2008

Come resettare la password di root in mysql

A volte capita di fare le cose di fretta.. molta fretta.
Ed in quelle volte capita fin troppo spesso di fare qualche cazzata.. :)

Mi sono ritrovato a dover cambiare la password di root (che era sconosciuta) di mysql su un server.
Il trucco è il seguente che, agli utenti linux un minimo smaliziati, ricorderà la possibilità di passare l'init a grub/lilo:

prima di tutto stoppare il server mysql.
Preparare le seguente query in un file .sql (tipo /tmp/reset.sql):
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('assword');
riavviare il server mysql così:
mysqld_safe --init-file=/tmp/reset.sql &
loggarsi con utente root e la nuova password 'assword'
lanciare il comando drop database mysql :)

inutile dire quanto tempo/bestemmie mi abbia fatto risparmiare questo trucchetto..

documentazione mysql ufficiale

mercoledì 27 febbraio 2008

Mai usare distribuzioni a 64 bit

E che palle, non funziona mai un cazzo sull'architettura a 64 bit.

L'ultima applicazione che si è aggiunta alla lista di software non funzionanti/non installabili/buggati, sotto questa fantastica architettura, è il dannato Sun Java Wireless Toolkit

Continuo a chiedermi come mai i processori a 64 bit siano fuori da un sacco di tempo (inizio del millennio) mentre le relative distribuzioni GNU/Linux sono disponibili da pochi anni, e da ancora meno tempo è in circolazione windows a 64 bit.. mah.

Certo la decisione di non creare un'architettura veramente nuova che lasciasse perdere l'instruction set i386 famoso per delle istruzioni che hanno poco a che fare con l'assembly (istruzioni su stringhe..), ma che desse una qualche continuità con il passato ha avuto un peso decisivo in questo. Infatti se da un lato ha permesso una commercializzazione immediata di questi processori, dall'altro ha concesso alle software house il lusso di prendersela con calma.. con molta calma.

Al punto che dopo quasi 8 anni di commercializzazione di questa architettura che ormai domina il mercato ci si ritrovi ancora a fare i conti con un player flash non disponibile, con un sun java sticazzi che non può funzionare, con un eclipse fottutamente instabile e con mega e mega di librerie di compatibilità con 32 bit.

bello, eh?

E sia chiaro, come nerd non accetterei mai di usare una distribuzione a 32 bit... :)

venerdì 15 febbraio 2008

Sourceforge: sztreeview

Ho deciso che è ora di fare una prima simpatica release dei due progetti software che sto sviluppando su sourceforge. Non mi aspetto che vengano usati, uno perchè troppo specifico (e quindi verrà usato più avanti in università) ed uno un po' troppo complesso.

Infatti sztreeview è cresciuto all'inverosimile, al punto che a volte è complesso anche per me capire alcune parti. Infatti è una libreria javascript per creare strutture ad albero; e fin qua nulla di strano.
Pienamente configurabile nell'aspetto (attraverso css) e tendenzialmente aderente agli standard w3c; dico tendenzialmente perchè all'inizio era XHTML Strict, e non dico altro. Con le ultime caratteristiche aggiunte potremmo aver lasciato qualche imperfezione.

Abbiamo anche aggiunto supporto ajax, sviluppando una piccola libreria per gestire le chiamate in background per richiedere, per esempio, i figli di un nodo all'apertura dello stesso.

La cosa si complica pensando al supporto in ambiente distribuito, per cui aggiunta/modifica/cancellazione di nodi, con conseguente notifica al server (via libreria ajax sviluppata per l'occasione) dei cambiamenti e quindi possibilità di ricevere cambiamenti effettuati da altri attraverso semplice polling oppure notifica alla prima richiesta effettuata al server.

Intoltre ad ogni nodo dell'albero è possibile associare uno user object, quindi è sorta la necessità di poterlo visualizzare, da qui è quindi nato lo userObjectDisplayer da estendere con le proprie funzionalità.

Ah, e c'è pure il menu contestuale, ma non credo funzioni molto sotto explorer.
E questo è solo il lato client, lato server ci sono parecchi oggetti e anche delle taglib..

Il tutto cmq funziona ed è già utilizzato, bisogna solo cercare di renderlo più chiaro ed user friendly :)

Magari spiegherò meglio il resto quando preparo la release.. spero presto, ma non assicuro niente.
intanto continuo a lavorare su entrambi (e che soddisfazione vedere tutti e due sopra il 90 percentile di attività!)

domenica 10 febbraio 2008

Hacking NDS Parte 2: dldi

Come avevo detto nel post precedente, dedico qualche minuto alla stesura di poche righe riguardanti un passaggio fondamentale per eseguire codice non ufficiale sul nintendo ds: patchare con dldi.

Praticamente il senso è questo: sarebbe troppo oneroso per un programmatore dover prevedere nel proprio codice tutti i tipi di dispositivi (in termini hardware quali supercard, sdhc one..) su cui verrà eseguito il software e distribuire quindi n compilati, uno per ogni dispositivo.
Per questo motivo è utile potersi affidare a patch che vengono applicate in un secondo momento e che in qualche modo "adattano" l'eseguibile alla particolare configurazione che si ha.

I passi per far questo sono semplici: andare sul sito ufficiale a prendere il file .dldi (sul wiki, perchè lì sono messe le versioni aggiornate) per il proprio dispositivo. Per esempio quello che uso io per la supercard ds one hc è Scsdhc.dldi. scaricare il sw per applicare la patch. scaricare un homebrew, patcharlo col comando:

./dlditool <dldi> <app>

metterlo sulla scheda ed avviare. partirà l'ambiente grafico (un micro sistema operativo distribuito con la scheda da mettere sulla microsd) da cui selezionare l'homebrew per lanciarlo.

per i file .nds con la supercard slot2 a volte questo procedimento non basta e ci si ritrova con l'nds piantato con schermata bianca. noi abbiamo risolto usando il software ufficiale supercard che è ampiamente descritto su gbarl.it

ed ora via con dslinux! :-)

giovedì 24 gennaio 2008

log4j 1.2.12 e log level trace

La versione di log4j in oggetto aveva evidentemente un buco enorme nella gestione del trace. Infatti dopo un bel po' di tempo perso a capire come mai il livello trace aveva un comportamento anomalo, ho aggiornato la versione di log4j, senza cambiare una virgola del codice, e tutto è andato a posto.

I sintomi erano: una configurazione giusta caricata correttamente ( testato con i metodi logger.isTraceEnabled(), isDebugEnabled...) ed un livello trace che nei file di log si presentava con un ottimo "?" al posto del nome della classe a cui il logger è associato.

Aggiornando la libreria è sparito il problema. Evviva il progresso...

mercoledì 23 gennaio 2008

Hacking NDS Parte 1: Concetti preliminari

La prima cosa da fare quando si smanetta su qualcosa è secondo me, capire con cosa si ha a che fare, chiarire qual è l'obiettivo da raggiungere e conoscere gli strumenti che useremo per raggiungerli.

Quindi, lasciamo perdere le cazzate e partiamo subito.

Abbiamo a che fare con una piattaforma particolare: infatti e' una console di gioco con delle caratteristiche decisamente interessanti che potete visionare su wikipedia. In dettaglio ci interessa il fatto che sia praticamente un computerino, con un processore (ma anche due) arm abbastanza diffuso in ambito embedded.

L'obiettivo e' far eseguire alla console codice non ufficiale. E quindi si presenta il problema del check. Infatti all'avvio, il nintendo ds effettua dei controlli sul codice presente sulla carta inserita in quel momento.

Il modo sicuramente piu' semplice per bypassare questo controllo è quello di far avviare la console in un ambiente sotto il nostro controllo. Esistono delle schede in commercio adatte a questo scopo, ma prima chiariamo un altro aspetto.

Lo slot 1 e' quello dietro, in cui si inseriscono i giochi nds. E' quello da cui la console effettua il boot. Lo slot 2 e' quello frontale, usato per i giochi gba e per l'espansione di memoria ram (i 4 mega integrati non sempre sono sufficienti). Non si puo' avviare da questo senza cambiare il firmware del nintendo ds.

Ci sono diversi tool per eseguire il codice per entrambi gli slot, ma io consiglio la supercard ds one sdhc o la supercard slot 2 non la versione rumble ma quella con 32mb di ram. Con la prima se avete l'expansion pack Opera siete a posto. Con la seconda siete abbondanti con la ram ma avete bisogno che qualcuno vi cambi il firmware con una card slot 1. E' un'operazione delicata di per se', ma non particolarmente complessa.

Ed ora un brevissimo resoconto: questo weekend mi sono trovato con un amico e la nostra situazione era: due ds lite, un expansion pack Opera (il mio), una supercard sdhc (quindi che può leggere le microsd hc) una supercard dsl con 32 mb di ram. Come prima cosa abbiamo cambiato il firmware del suo nds. Come ho già detto è un'operazione delicata, perchè nel momento in cui smanetti col firmware ti perdi la garanzia, e se qualcosa andasse storto ti sei giocato la console. Quindi seguite alla lettera le istruzioni che trovate in rete, ed andrà tutto bene. Nel giro di pochissimi minuti entrambe le console erano pronte ad eseguire codice non ufficiale. Una con la sc sdhc e espansione di 8 MB di ram e l'altra con la sc e 32 mb di ram aggiuntivi.

Nel prossimo post vi parlo del dldi, altro step necessario prima di far partire i vari software.

domenica 13 gennaio 2008

..ed è già duemilaeotto

Eccomi ad inaugurare il nuovo anno di questo blog. Non ho intenzione di fare un bilancio approfondito del 2007, ma mi limiterò a dire che è stato un anno positivo, fatto di molto lavoro e qualche esame ma soprattutto di un sacco di soddisfazioni nella real life.

Il 2008 parte sotto i migliori auspici: un'ottima vacanza in montagna seguita da un rientro carico di lavoro e di impegni. E questo mi piace. Mi piace un sacco. E mi riporta all'entusiasmo di due anni fa, che forse mi è mancato alla fine del 2007, quando era diventato tutto più grigio e stancante.
Mi riporta a quell'entusiasmo positivo, quello che mi spinge a lavorare parecchie ore in più del normale, quello che mi porta a trovare sempre un ritaglio di tempo per la donna, quello che mi permette di dedicare uno spicchio di giornata alla musica, quello che mi tiene su la notte a studiare, a scrivere email, a pianificare le giornate, a programmare e a pensare che, in fondo, mi piace davvero un sacco.

buon anno

ah, per la cronaca.. tra i progetti che metto in coda, c'è anche il cracking del nintendo ds, martedì ritiro la supercard.. ci sarà da smanettare e divertirsi..