iPhone SMS Fixer

Anche l’iPhone ha i suoi bug. Uno particolarmente fastidioso fa sì che l’icona dell’applicazione che gestisce gli SMS mostri sempre che ci sono uno o più messaggi da leggere, ma di fatto tali messaggi non compaiono nel’applicazione stessa, rendendo impossibile leggerli o eliminarli. Se ne parla, ad esempio, qui.

In realtà, il problema è facilmente risolvibile agendo manualmente sul database in cui vengono memorizzati i messaggi, che è un normalissimo database SQLite. Dato che questo può non essere alla portata di tutti, e siccome volevo divertirmi un po’ col Python appena installato sul mio iPhone, ho scritto un’applicazioncina che permette di risolvere il problema lanciando un singolo comando. Essa va sotto il fantasiosissimo nome di iPhone SMS Fixer, ed è disponibile per il download al seguente link: [download#1#nohits].

Una caratteristica degna di nota è che l’applicazione può essere usata sia su un PC (con qualunque OS, essendo scritta appunto in Python) o sull’iPhone stesso, installando il pacchetto di Python attraverso Cydia. Il rovescio della medaglia è che serve per forza un iPhone jailbreakato.

Riporto uno spezzone del README in inglese, giusto per farmi indicizzare opportunamente da Google ;):

iPhone SMS Fixer – Fix wrong unread SMS count on an iPhone
===============================================================================
This program can fix a “corrupt” SMS database on an iPhone, which always
shows an unread message count of 1 (or possibly more). This issue seems to
happen quite frequently with the “missed call” SMS notifications sent by
Vodafone Italia and other operators. It seems present in all versions of the
iPhone firmware released so far (2.1 is the latest, at the time of writing).

Beh, è tutto. Ricordatevi di fare un backup del vostro telefono, e divertitevi :).

Buchi neri

Stasera volevo ascoltare un veeeeecchio bootleg degli U2 procuratomi mediante trading moooooolto tempo fa. Prendo la custodia, la apro e… AAAAAAAAAAAARGH! La “vernice” del CD stava cadendo a pezzi, bucherellandosi qua e là! Al che faccio una rapida cernita dei miei bootleg e scopro che tutti i CD di quella marca stanno facendo la stessa fine!

Era da un po’, in realtà, che volevo controllare i miei bootleg di vecchia data, proprio per paura che finissero a questo modo, ma non ne avevo mai trovato il tempo. L’idea era quella di passarli tutti in un formato digitale lossless, in modo da poterli conservare facilmente, e anche di poterli condividere su qualcuno dei tanti siti di scambio bootleg. Si imponeva dunque un’anticipazione della procedura, almeno per quanto riguardava i CD problematici, al fine di salvare il salvabile.

Per il ripping ho ovviamente utilizzato hCDrip, ovvero il programmino Python che mi sono fatto da solo tempo addietro, che fa un po’ da frontend a cdparanoia e ai vari encoder MP3, FLAC, Shorten, ecc…, condendo il tutto con un po’ di supporto CDDB (Forse ne ho anche già pubblicato una versione, non ricordo! Al momento ha trovato qualche problema minore, ma prima o poi ne pubblicherò una nuova versione). Il formato che ho scelto è il FLAC, uno dei più diffusi e supportati.

Comunque, a parte questo, riascoltando uno dei bootleg salvati, mi sono accorto che l’audio era decisamente più lento del dovuto. Ovviamente questo si notava anche dal pitch, troppo basso. Era quindi il caso di sistemare il problema. E questo mi ha permesso di apprezzare un tool come sox che, unito alla potenza di una shell Unix, rende il lavoro rapido e indolore. Ecco come ho fatto:

for i in *.flac; do flac -d -c "$i" | sox -t wav - "$(basename "$i" .flac).wav" speed 1.07; done
rm *.flac
flac --best *.wav
rm *.wav

Tutto qua! Evito di spiegare ogni passo, dato che dovrebbe essere tutto abbastanza comprensibile. Aggiungo solo che il valore 1.07 l’ho trovato a tentativi, provandone di diversi e ascoltando il risultato.

A qualcuno interessa il concerto degli U2 di Werchter 1982? :)

Convertire DVD per vederli sul Nintendo DS

Per la sempre maggiore gioia di NoKo, ieri ho deciso che volevo assolutamente vedere il video di It’s no good sul mio Nintendo DS.

Intanto, com’è possibile fare ciò, se il DS non ha uno slot per schede di memoria? Serve una cosiddetta Flashcart (in realtà in modo un po’ improprio), ossia una cartuccia in cui si inserisce una SD o simile, che permette poi di lanciare sul DS i programmi e giochi che si trovano su questa. Ce ne sono diversi modelli in giro: in particolare io ho una SuperCard Lite, che monta schede MicroSD/TransFlash.

Trovata una flashcart, serve un qualche media player. No problem: per DS c’è il buon Moonshell (LOL! Mentre scrivo questo hanno appena rilasciato una nuova versione :D), di cui, fra l’altro, sono disponibili i sorgenti completi.

Ora viene il difficile: infatti, mentre per quanto riguarda l’audio, Moonshell riproduce file OGG e MP3, per i video il programmatore si è inventato un formato tutto suo, che ha chiamato nDs-mPeG, per gli amici DPG. Si tratta in sostanza di video MPEG-1 e audio MPEG-2, rinchiusi in un container (che in realtà è un semplice header) assolutamente non standard che ha il seguente formato:

The header is 36 bytes. (Note: all of the numbers below are hexadecimal.)
44 50 47 30 (this stands for DPG0 in ASCII)
Four bytes for the number of frames in the video
00 00 00 00
Two bytes for the frames per second that the video runs
00 00
Four bytes for the audio sample rate
00 00 00 00
00 00 00 00 (this was the number of audio channels, now deprecated in favor of MP2 audio)
24 00 00 00 (this is the start of the audio file, i.e. right after the header)
Four bytes for the length, in bytes, of the audio
Four bytes for the above length + 36 bytes (i.e. the start of the video file)
Four bytes for the length, in bytes, of the video

Di nuovo, chi è interessato a vedere come concilare tutto ciò col solito ffmpeg, legga l’articolo intero! :)
Continue reading