<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SukkoPera For The Masses V 3.1 &#187; python</title>
	<atom:link href="http://www.sukkology.net/blog/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sukkology.net/blog</link>
	<description>Taking a ride with your best friend</description>
	<lastBuildDate>Mon, 11 Jul 2011 22:41:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>iPhone SMS Fixer</title>
		<link>http://www.sukkology.net/blog/2008/10/09/iphone-sms-fixer/</link>
		<comments>http://www.sukkology.net/blog/2008/10/09/iphone-sms-fixer/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 20:00:53 +0000</pubDate>
		<dc:creator>SukkoPera</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[jailbreak]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sms]]></category>

		<guid isPermaLink="false">http://www.sukkology.net/blog/?p=380</guid>
		<description><![CDATA[Anche l&#8217;iPhone ha i suoi bug. Uno particolarmente fastidioso fa sì che l&#8217;icona dell&#8217;applicazione che gestisce gli SMS mostri sempre che ci sono uno o più messaggi da leggere, ma di fatto tali messaggi non compaiono nel&#8217;applicazione stessa, rendendo impossibile leggerli o eliminarli. Se ne parla, ad esempio, qui. In realtà, il problema è facilmente [...]]]></description>
			<content:encoded><![CDATA[<div class='pce-enabled-section'><p>Anche l&#8217;iPhone ha i suoi bug. Uno particolarmente fastidioso fa sì che l&#8217;icona dell&#8217;applicazione che gestisce gli SMS mostri sempre che ci sono uno o più messaggi da leggere, ma di fatto tali messaggi non compaiono nel&#8217;applicazione stessa, rendendo impossibile leggerli o eliminarli. Se ne parla, ad esempio, <a href="http://discussions.apple.com/thread.jspa?messageID=8168337" target="_blank">qui</a>.</p>
<p>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&#8217; col Python appena installato sul mio iPhone, ho scritto un&#8217;applicazioncina che permette di risolvere il problema lanciando un singolo comando. Essa va sotto il fantasiosissimo nome di <em>iPhone SMS Fixer</em>, ed è disponibile per il download al seguente link: <a class="downloadlink" href="http://www.sukkology.net/blog/download/iPhoneSMSFixer-0.1.0.tar.gz" title="Version 0.1.0 downloaded 775 times" >iPhone SMS Fixer</a>.</p>
<p>Una caratteristica degna di nota è che l&#8217;applicazione può essere usata sia su un PC (con qualunque OS, essendo scritta appunto in Python) o sull&#8217;iPhone stesso, installando il pacchetto di Python attraverso Cydia. Il rovescio della medaglia è che serve per forza un iPhone jailbreakato.</p>
<p>Riporto uno spezzone del README in inglese, giusto per farmi indicizzare opportunamente da Google ;):</p>
<blockquote><p>iPhone SMS Fixer &#8211; Fix wrong unread SMS count on an iPhone<br />
===============================================================================<br />
This program can fix a &#8220;corrupt&#8221; SMS database on an iPhone, which always<br />
shows an unread message count of 1 (or possibly more). This issue seems to<br />
happen quite frequently with the &#8220;missed call&#8221; SMS notifications sent by<br />
Vodafone Italia and other operators. It seems present in all versions of the<br />
iPhone firmware released so far (2.1 is the latest, at the time of writing).</p></blockquote>
<p>Beh, è tutto. Ricordatevi di <strong>fare un backup del vostro telefono</strong>, e divertitevi :).</p>
</div><img src="http://www.sukkology.net/blog/?ak_action=api_record_view&id=380&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.sukkology.net/blog/2008/10/09/iphone-sms-fixer/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Buchi neri</title>
		<link>http://www.sukkology.net/blog/2007/12/03/buchi-neri/</link>
		<comments>http://www.sukkology.net/blog/2007/12/03/buchi-neri/#comments</comments>
		<pubDate>Sun, 02 Dec 2007 23:59:41 +0000</pubDate>
		<dc:creator>SukkoPera</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[The world we live in and life in general]]></category>
		<category><![CDATA[bootleg]]></category>
		<category><![CDATA[flac]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[u2]]></category>

		<guid isPermaLink="false">http://www.sukkology.net/blog/2007/12/03/buchi-neri/</guid>
		<description><![CDATA[Stasera volevo ascoltare un veeeeecchio bootleg degli U2 procuratomi mediante trading moooooolto tempo fa. Prendo la custodia, la apro e&#8230; AAAAAAAAAAAARGH! La &#8220;vernice&#8221; 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 [...]]]></description>
			<content:encoded><![CDATA[<div class='pce-enabled-section'><p>Stasera volevo ascoltare un veeeeecchio bootleg degli U2 procuratomi mediante trading moooooolto tempo fa. Prendo la custodia, la apro e&#8230; AAAAAAAAAAAARGH! La &#8220;vernice&#8221; 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!</p>
<p>Era da un po&#8217;, 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&#8217;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&#8217;anticipazione della procedura, almeno per quanto riguardava i CD problematici, al fine di salvare il salvabile.</p>
<p>Per il ripping ho ovviamente utilizzato hCDrip, ovvero il programmino Python che mi sono fatto da solo tempo addietro, che fa un po&#8217; da frontend a cdparanoia e ai vari encoder MP3, FLAC, Shorten, ecc&#8230;, condendo il tutto con un po&#8217; 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.</p>
<p>Comunque, a parte questo, riascoltando uno dei bootleg salvati, mi sono accorto che l&#8217;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:</p>
<p><code>for i in *.flac; do flac -d -c "$i" | sox -t wav - "$(basename "$i" .flac).wav" speed 1.07; done<br />
rm *.flac<br />
flac --best *.wav<br />
rm *.wav</code></p>
<p>Tutto qua! Evito di spiegare ogni passo, dato che dovrebbe essere tutto abbastanza comprensibile. Aggiungo solo che il valore 1.07 l&#8217;ho trovato a tentativi, provandone di diversi e ascoltando il risultato.</p>
<p>A qualcuno interessa il concerto degli U2 di Werchter 1982? :)</p>
</div><img src="http://www.sukkology.net/blog/?ak_action=api_record_view&id=320&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.sukkology.net/blog/2007/12/03/buchi-neri/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Convertire DVD per vederli sul Nintendo DS</title>
		<link>http://www.sukkology.net/blog/2006/12/01/convertire-dvd-per-vederli-sul-nintendo-ds/</link>
		<comments>http://www.sukkology.net/blog/2006/12/01/convertire-dvd-per-vederli-sul-nintendo-ds/#comments</comments>
		<pubDate>Fri, 01 Dec 2006 00:23:56 +0000</pubDate>
		<dc:creator>SukkoPera</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ds]]></category>
		<category><![CDATA[dvd]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[nintendo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.sukkology.net/blog/2006/12/01/convertire-dvd-per-vederli-sul-nintendo-ds/</guid>
		<description><![CDATA[Per la sempre maggiore gioia di NoKo, ieri ho deciso che volevo assolutamente vedere il video di It&#8217;s no good sul mio Nintendo DS. Intanto, com&#8217;è possibile fare ciò, se il DS non ha uno slot per schede di memoria? Serve una cosiddetta Flashcart (in realtà in modo un po&#8217; improprio), ossia una cartuccia in [...]]]></description>
			<content:encoded><![CDATA[<div class='pce-enabled-section'><p>Per la sempre maggiore gioia di NoKo, ieri ho deciso che volevo assolutamente vedere il video di <em>It&#8217;s no good</em> sul mio <em>Nintendo DS</em>.</p>
<p>Intanto, com&#8217;è possibile fare ciò, se il DS non ha uno slot per schede di memoria? Serve una cosiddetta <em><a href="http://en.wikipedia.org/wiki/Game_Boy_Advance_flash_cartridges" target="_blank">Flashcart</a></em> (in realtà in modo un po&#8217; 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 <em>SuperCard Lite</em>, che monta schede <em>MicroSD/TransFlash</em>.</p>
<p>Trovata una flashcart, serve un qualche media player. No problem: per DS c&#8217;è il buon <a href="http://mdxonline.dyndns.org" target="_blank">Moonshell</a> (LOL! Mentre scrivo questo hanno appena rilasciato una nuova versione :D), di cui, fra l&#8217;altro, sono disponibili i sorgenti completi.</p>
<p>Ora viene il difficile: infatti, mentre per quanto riguarda l&#8217;audio, Moonshell riproduce file OGG e MP3, per i video il programmatore si è inventato un formato tutto suo, che ha chiamato <a href="http://en.wikipedia.org/wiki/NDs-mPeG" target="_blank">nDs-mPeG</a>, per gli amici <em>DPG</em>. 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:</p>
<pre>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</pre>
<p>Di nuovo, chi è interessato a vedere come concilare tutto ciò col solito <em>ffmpeg</em>, legga l&#8217;articolo intero! :)<br />
<span id="more-225"></span><br />
Il primo passo consiste ovviamente nel rippaggio del DVD, di cui ho già parlato nel precedente articolo, e che quindi non ritratterò :). Dirò solo che il video proviene dal DVD del <em>Best of Depeche mode</em> uscito da poco.</p>
<p>Passiamo direttamente alla transcodifica: purtroppo ffmpeg non supporta questo strano container, quindi dovremo creare gli stream a parte e poi integrarli con l&#8217;header. È ora il caso di dire che molti hanno lamentato problemi di compatibilità di Moonshell con gli stream creati da ffmpeg, e consigliano di usare <em>Mencoder</em>, un programma simile a ffmpeg, addirittura creato dallo stesso team (e, in effetti, mi sfugge la necessità di avere 2 programmi diversi). Io non ne ho assolutamente avuti, forse perché nel frattempo Moonshell si è evoluto, e per questo presento il mio procedimento.</p>
<p>Data la fighezza di ffmpeg, possiamo addirittura creare i due stream contemporaneamente. La linea di comando è la seguente:</p>
<pre>sukko@unholycathedral tmp $ ffmpeg -y -v 2 -i stream.dump -strict -1 -s 256x192 -b 256k -r 15 -flags +bitexact+mv0+trell+cbp -cmp 2 -subcmp 2 -precmp 2 -f mpeg1video nogood.mpg -ab 128 -ar 32000 -f mp2 nogood.mp2
FFmpeg version SVN-r7150, Copyright (c) 2000-2006 Fabrice Bellard, et al.
  configuration:  --prefix=/usr --disable-debug --enable-gpl --enable-mp3lame --enable-libogg --enable-vorbis --enable-faad --enable-faac --enable-libgsm --enable-xvid --enable-a52 --enable-pp --enable-shared --enable-pthreads --enable-amr_nb --enable-amr_wb --enable-x264 --enable-dts
  libavutil version: 49.1.0
  libavcodec version: 51.25.0
  libavformat version: 51.6.0
  built on Nov 22 2006 01:08:24, gcc: 3.4.6
Input #0, mpeg, from 'stream.dump':
  Duration: 00:04:17.3, start: 4112.417267, bitrate: 8227 kb/s
  Stream #0.0[0x1e0], 1/90000: Video: mpeg2video, yuv420p, 720x576, 1/25, 9800 kb/s, 25.00 fps(r)
  Stream #0.1[0xa0], 1/90000: Audio: pcm_s16be, 48000 Hz, stereo, 1536 kb/s
Output #0, mpeg1video, to 'nogood.mpg':
  Stream #0.0, 1/90000: Video: mpeg1video, yuv420p, 256x192, 1/15, q=2-31, 256 kb/s, 15.00 fps(c)
Output #1, mp2, to 'nogood.mp2':
  Stream #1.0, 1/90000: Audio: mp2, 32000 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0.0 -&gt; #0.0
  Stream #0.1 -&gt; #1.0
Press [q] to stop encoding
frame= 3875 q=2.0 Lsize=    7936kB time=258.0 bitrate= 252.0kbits/s dup=4 drop=2578
video:7935kB audio:4031kB global headers:0kB muxing overhead -33.679230%</pre>
<p>Avrete notato che ho usato alcune &#8220;nuove&#8221; opzioni, vediamole in dettaglio:<br />
- <tt>-v 2</tt>: Fa sì che ffmpeg ci dia qualche informazione aggiuntiva sul quel che sta facendo. In particolare, ci servono i dettagli sul numero di frame che ha effettivamente codificato.<br />
- <tt>-strict -1 -r 15</tt>: Sebbene distanti, queste opzioni sono correlate fra di loro. Infatti, <tt>-r</tt> serve a specificare il framerate (il numero di fotorgrammi al secondo). Ho usato 15 perché, purtroppo, il DS ha una potenza di elaborazione limitata, e non riesce a reggere framerate più alti. Pare che il massimo realmente utilizzabile sia 18, ma anche con 15 il risultato è decente. Ora, lo standard MPEG-1 non ammette un framerate a caso, ma solo quelli standard (tipo 25, lo standard PAL), e quindi ffmpeg si rifiuterebbe di creare un file MPEG-1 a 15 fps&#8230; non fosse per l&#8217;opzione <tt>-strict -1</tt>, che gli dice di non rompere le scatole e darci retta, perché sappiamo quel che stiamo facendo ;).<br />
- <tt>-s 256x192 -b 256k</tt>: Ridimensionamento e bitrate: anche questi parametri non devono essere &#8220;esagerati&#8221;, per lo stesso motivo del punto precedente. Questi valori sono accettabili per la maggior parte dei casi.<br />
- <tt>-flags +bitexact+mv0+trell+cbp -cmp 2 -subcmp 2 -precmp 2</tt>: Senza andare troppo nei dettagli, questi sono parametri &#8220;di qualità&#8221;. Li ho scoperti solo recentemente, e servono a migliorare la compressione, a leggero scapito della velocità. Consiglio di usarli sempre (anche nei casi che abbiamo visto in precedenza), perché la differenza si vede a occhio nudo (e soprattutto in questo caso, date le restrizioni sugli altri parametri).<br />
- <tt>-ar 32000</tt>: Frequenza di campionamento dell&#8217;audio, conviene usare sempre questa per evitare incompatiblità.</p>
<p>Bene, abbiamo così ottenuto gli stream. Per unirli insieme serve un programmino particolare, <em>DPG Maker</em>, che trovate qui: <a class="downloadlink" href="http://www.sukkology.net/blog/download/dpgmaker.py" title="Version 0.1 downloaded 370 times" >DPG Maker</a>. È uno script <a href="http://www.python.org" target="_blank">Python</a>, quindi dovete averlo installato per utilizzarlo, ma solitamente si trova già installato su tutte le distribuzioni GNU/Linux. Si usa così:</p>
<pre>sukko@unholycathedral tmp $ dpgmaker.py nogood.mpg 3875 256 15 nogood.mp2
Video file.....: nogood.mpg
Video frames...: 3875
Video bitrate..: 256
Video FPS......: 15
Audio file.....: nogood.mp2
Output file....: nogood.dpg
Creating nogood.dpg
Creating header
Removing temporary files
Done!</pre>
<p>I parametri:<br />
- <tt>3875</tt>: È il numero di fotogrammi presenti nello stream video. Grazie al parametro <tt>-v 2</tt> che abbiamo passato a ffmpeg, questo ce lo sputa direttamente fuori: è il primo numero della penultima riga, quello dopo <em>frame=</em>.<br />
- <tt>256</tt>: È Il bitrate dello stream video. Questo lo sappiamo per forza, dato che l&#8217;abbiamo passato a ffmpeg, dove però era seguito da una <em>k</em>.<br />
- <tt>15</tt>: È il numero di fotogrammi al secondo. Anche questo è noto, dato anche lo sproloquio di cui sopra :).</p>
<p>Eseguito questo comando, abbiamo finalmente il nostro bel <em>nogood.dpg</em>, che possiamo copiare sulla MicroSD e goderci tramite Moonshell, se abbiamo fatto tutto correttamente:</p>
<div style="text-align: center;"><a class="imagelink" title="It's no good su NDS" href="http://www.sukkology.net/blog/wp-content/uploads/2006/12/img_0845_small1.jpg"><img id="image227" src="http://www.sukkology.net/blog/wp-content/uploads/2006/12/img_0845_small1.miniatura.jpg" alt="It's no good su NDS" /></a></div>
<p>Per chi volesse fare il tutto più in fretta, esiste il buon <a href="http://theli.ho.com.ua/dpgconv/" target="_blank">DPG Converter</a>: si tratta dello script Python che io ho riadattato per creare il <em>DPG Maker</em> di cui sopra. Esso si preoccupa dell&#8217;encoding (usando Mencoder) e della creazione dell&#8217;header, tutto da solo.</p>
<p>A questo punto&#8230; dove accidenti posso vedere il video di <em>Personal Jesus</em>? Aspetto idee :).</p>
</div><img src="http://www.sukkology.net/blog/?ak_action=api_record_view&id=225&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.sukkology.net/blog/2006/12/01/convertire-dvd-per-vederli-sul-nintendo-ds/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

