Oggi sulla homepage del Corriere, il maggior quotidiano italiano, si trova un titolo...
"Il radar Usa? Serve contro gli asteroidi"
che porta a questo interessante intervento di Antonino Zichichi
http://corrieredelmezzogiorno.corriere.it/palermo/notizie/cronaca/2013/22-febbraio-2013/zichichi-muos-smentisce-crocetta-il-radar-usa-serve-contro-asteroidi-2114153146834.shtml
"Essendo la
cultura detta moderna, pre-aristotelica.."
Il MUOS in realtà più o meno è questo:
http://en.wikipedia.org/wiki/Mobile_User_Objective_System
Non ha niente a che vedere ne con i radar, ne con proiettili di alcun genere, ne cosmici, ne terroristici. Tantomeno con gli asteroidi, ma è una stupidaggine del titolista del Corrierone.
D'altra parte nemmeno le potenze in gioco coi trasmettitori del MUOS sono trascurabili. Tuttaltro, anche se questo non vuole dire che il MUOS sia pericoloso. Zichichi, oltre ad essere un astrofisico emerito, è un assessore di Crocetta, eletto col PD.
Quella del MUOS è un polemica locale in cui ovviamente ora entrano anche
i grillini, alla loro prima esperienza, col loro prezioso apporto...
http://www.linksicilia.it/2013/02/muos-trizzino-m5s-le-rassicurazioni-usa-sono-una-provocazione/
Niscemi è,
incidentalmente, il paese di origine di mia nonna materna.Negli anni 20 e 30 del secolo scorso dal Sud della Sicilia provenivano molti coloni diretti in Libia. La famiglia di mia nonna era nel novero. Però mi hanno sempre parlato di Niscemi, ai tempi, come di una bella cittadina.
Domani in Italia si vota.
Saturday, 23 February 2013
Tuesday, 19 February 2013
La Prevalenza del Giannino
Da circa un giorno è scoppiato il caso Zingales-Giannino . Poco fa ho visto Giannino da Mentana al TG La7 parlare del suo inesistente master alla Chicago Booth e delle sue altrettanto inesistenti lauree in Giurisprudenza ed Economia. Il giornalista diversamente elegante parla di 'qualcosa che è montato in rete. Il video in cui dice chiaramente di aver fatto un master a Chicago però rimane.
Rimane anche la cronologia della pagina della Wikipedia italiana che mostra tutte le modifiche avvenute nel tempo alla voce 'Oscar Giannino'. Ecco il link:
http://it.wikipedia.org/w/index.php?title=Oscar_Giannino&offset=&limit=500&action=history
Provate a leggere partendo dal basso, da quando è stata creata la voce di wikipedia, ovviamente campionando le letture delle varie versioni della voce. Il link che porta al testo è quello della data di inserimento. E' interessante dare un'occhiata anche alla pagina delle discussioni relative alla stessa voce.
Il risultato è sorprendente: dapprima Giannino è il semplice figlio di operai che si mette a fare il giornalista. Poi appare la laurea in legge. E quella in Economia e il master alla prestigiosa Chicago Booth. A un certo sparisce una laurea, poi riappare.
Leggere la pagina http://it.wikipedia.org/wiki/Discussione:Oscar_Giannino come dicevo è interessante: c'è anche chi, ben prima dell'inizio della sgangherata campagna elettorale 2013 si era anche premurato di chiamare la Chicago Booth. La pagina di Wikipedia era stata corretta, ma non per molto. Comunque il CV taroccato di Giannino si era talmente diffuso che persino il sito della Treccani ancora in questo momento (19/2/13, 20:45) ( http://www.treccani.it/enciclopedia/oscar-fulvio-giannino/ ) riporta:
Giannino, Oscar Fulvio. - Giornalista italiano (n. Torino 1961). Laureato in Giurisprudenza e in Economia, tra gli anni Ottanta e Novanta è stato portavoce nazionale del PRI (1987-94) nonché direttore del quotidiano del partito, La Voce Repubblicana. Esperto in politica e finanza, ha curato la pagina economica de Il Foglio ed è stato vicedirettore de Il Riformista e Finanza&Mercati; tra il 2007 e il 2009 ha diretto l’inserto finanziario di Libero (Libero Mercato). Negli stessi anni si è riavvicinato alla politica attiva riprendendo la tessera del PRI e nel 2011 è diventato membro della Direzione nazionale del partito. G. conduce una trasmissione di approfondimento giornalistico su Radio 24 (Nove in punto, la versione di Oscar) e scrive per Panorama e Il Mattino (tra gli altri); è condirettore del mensile Capo Horn.
NB: 20/2/13 la voce è stata cambiata!
Fino a ieri qualunque persona ragionevolmente informata e capace di usufruire dei media di oggi non avrebbe avuto dubbi sui titoli accademici di Giannino, a meno di non fare una specifica e approfondita ricerca. Questo è un dato di fatto. E' anche un dato di fatto che la panzana del CV taroccato non è nata per FARE, per fini elettorali. E' nata da un bel pezzo: almeno due o tre anni. Ho letto di uno stagista, di errori di inserimento. Tutto può essere, può darsi che Giannino non sia responsabile direttamente. Certo, se non lo è (al netto del video di Repubblica) è però certo che ne lui ne il suo staff è in grado di usare bene la Rete. Possibile che non gli sia mai venuto in mente di cercare il suo nome e cognome su Google?
Non gli auguro troppi danni. FARE è un movimento che perlomeno avrà il merito di togliere a Berlusconi i voti di chi è deluso dallo stesso Banana ma ancora è fedele alla sharia neoliberista. E in effetti ha tra i suoi promotori gente molto competente, in generale: niente a che vedere con un esercito di formiche deficienti come i Grillini.
Ma tant'è. Comunque è più preoccupante constatare come funzionino veramente i media 'liquidi' Web 2.0. Proprio l'altro giorno ho noleggiato (sono all'antica, ormai anche a Firenze i videonoleggi cominciano a scarseggiare) http://en.wikipedia.org/wiki/Burn_After_Reading , l'ho visto e apprezzato, poi sono andato a leggere la pagina Wikipedia di cui al link. Nella sezione 'plot', trama della voce, il personaggio di Brad Pitt non muore. Nel film che ho visto il personaggio di George Clooney lo uccideva: una rapida verifica (clip, trailer, imdb, etc) mi assicura che, come nel mio Blu-ray, in realtà muore sempre: non ci sono versioni alternative del film. Ho corretto la pagina: non si può certo essere trattato di un errore a ben pensare. Una forma di strano vandalismo, ampiamente oltre lo psicopatologico.
Wednesday, 9 January 2013
Hindenburg - Der Mann, der von Frederick der Grosse bis zum Hitler lebte.
Heute abend bei arte gab es Hindenburg - Der Mann, der Hitler zum Kanzler machte:
ein Doku über Marschall Hinderburg von Cristoph Weinert. Hindenburg, als junger Mann, kämpfte im deutsch-französischen Krieg von 1870–1871.
Und hier sind die passende Bilder, laut den Autoren, für den deutsch-französischen Krieg von 1870-1871 (oder 1770-1771 vielleicht?)
ein Doku über Marschall Hinderburg von Cristoph Weinert. Hindenburg, als junger Mann, kämpfte im deutsch-französischen Krieg von 1870–1871.
Und hier sind die passende Bilder, laut den Autoren, für den deutsch-französischen Krieg von 1870-1871 (oder 1770-1771 vielleicht?)
Wednesday, 2 January 2013
The joys of floating point variables
The other week I had to examine a rather simple data import program, written in VB6. The program reads some numbers from a CSV file, and creates a bunch of SQL INSERTs to transfer them to a database: it worked flawlessly, except for some values with .15 or .45 as the decimal part.
In the end it all boiled down to a code snippet like this (it's VB6, but should compile in VB.NET too, just create a form with a button and a click event in both cases)
Dim s As Double
Dim s3 As Double
s = 8.45 - 5.45
s3 = 3
MsgBox "8.45 - 5.45 = :" & s
MsgBox "8.45 - 5.45 = :" & Format(s, "0.000000000000000000000")
MsgBox "8.45 - 5.45 = 3 :" & (s = s3)
MsgBox "Int(8.45-5.45) :" & Int(s)
MsgBox "Fix(8.45-5.45) :" & Fix(s)
Now, the funny part is that if you print, even with as many decimal digits as you like, 8.45 - 5.45, you get, apparently, the number 3.000. Then, why s = 3 is equal to False ? Why Int(s) and Fix(s) = 2?
Never mind that using Double is not recommended in cases like this, in any way - one should use Currency : I wanted to know exactly why there is such an apparently disconcerting behaviour.
I tried to replicate the snippet in C# (using Math.Floor instead of Int()) : same result. After that I extended the snippet with a routine found searching stackoverflow.com (look in the comments for the URL) to decode the internal IEEE 754 format used to store doubles (it is the same for each and every language using double precision floating point numbers since the last iterations of microsoft compilers for DOS I believe. Here's the code:
using System;
using System.Text;
namespace TestDouble
{
class Program
{
static void Main(string[] args)
{
double s, s3;
s = 8.45 - 5.45;
s3 = 3;
Console.WriteLine("s = 8.45 - 5.45 :" + s.ToString());
Console.WriteLine("s (formatted) :" + String.Format("{0:0.00000000000000000000000000000000}", s));
Console.WriteLine("s3 = 3 :" + s.ToString());
Console.WriteLine("s == s3 :" + (s == s3).ToString());
Console.WriteLine("Math.Floor(s) :" + Math.Floor(s).ToString());
Console.WriteLine("Math.Floor(s3) :" + Math.Floor(s3).ToString());
Console.WriteLine("s = 8.45-5.45 IEEE 754 : " + d2s(s));
Console.WriteLine("s3 = 3 IEEE 754 : " + d2s(s3));
Console.WriteLine();
}
static string d2s(double d)
{
// yanked from: http://stackoverflow.com/questions/389993/extracting-mantissa-and-exponent-from-double-in-c-sharp
// Translate the double into sign, exponent and mantissa.
long bits = BitConverter.DoubleToInt64Bits(d);
// Note that the shift is sign-extended, hence the test against -1 not 1
bool negative = (bits < 0);
int exponent = (int)((bits >> 52) & 0x7ffL);
long mantissa = bits & 0xfffffffffffffL;
// Subnormal numbers; exponent is effectively one higher,
// but there's no extra normalisation bit in the mantissa
if (exponent == 0)
{
exponent++;
}
// Normal numbers; leave exponent as it is but add extra
// bit to the front of the mantissa
else
{
mantissa = mantissa | (1L << 52);
}
// Bias the exponent. It's actually biased by 1023, but we're
// treating the mantissa as m.0 rather than 0.m, so we need
// to subtract another 52 from it.
exponent -= 1075;
if (mantissa == 0)
{
return " 0";
}
/* Normalize */
while ((mantissa & 1) == 0)
{ /* i.e., Mantissa is even */
mantissa >>= 1;
exponent++;
}
return (negative ? "-" : "+") + " " + mantissa.ToString() + " * 2 ^ " + exponent.ToString();
}
}
}
Now we're starting to shed some light: 8.45-5.45 and 3 are stored in a completely different way in IEEE 754.
8.45 - 5.45 is stored with a mantissa of 3377699720527871 and an exponent of -50.
I fired up Mathematica to check the numbers:
In[5]:= +3377699720527871 * 2^-50
Out[5]= 3377699720527871/1125899906842624
The fraction above is the exact value of 8.45-5.45, as stored in the 64 bit double variable.
With a 15 decimal digit precision this is..
In[21]:= N[3377699720527871/1125899906842624, 15]
Out[21]= 3.00000000000000
But with a precision of more than 15 digits..
In[22]:= N[3377699720527871/1125899906842624, 16]
Out[22]= 2.999999999999999
The problem with VB6/VB.NET and C# is that a double precision number is apparently converted to a string representing a decimal number with a maximum of 15 decimal digits. This is in compliance with the standard, as far as I've seen, but it's all that the language can churn out - if I specifiy more decimal digits in the formatting string I end up with the same precision anyway, not surprisingly of course. By the way, '3' is stored as what the IEEE 754 standard defines a 'subnormal' number, all in the mantissa with a zero exponent.
It seems that I stumbled on a really pathological case of double precision rounding. In the original program the numbers represented hours (the integer part) and minutes (the decimal part): it looked like the calculations were wrong only with quarter of an hour! I've event translated the C# program in Java. It seems that Java uses one decimal digit (but only one) more formatting double data - in my case it would have helped though...
public class TestDouble {
public static void main(String[] args) {
double s, s3;
s = 8.45 - 5.45;
s3 = 3;
System.out.printf("s = 8.45 - 5.45 :%f\n",s);
System.out.printf("s (formatted .14f) :%.14f\n",s);
System.out.printf("s (formatted .15f) :%.15f\n",s);
System.out.printf("s (formatted .30f) :%.30f\n",s);
System.out.printf("s3 = 3 :%f\n",s3);
System.out.printf("s == s3 :%b\n",(s == s3));
System.out.printf("Math.Floor(s) :%f\n",Math.floor(s));
System.out.printf("Math.Floor(s3) :%f\n",Math.floor(s3));
System.out.println("s = 8.45-5.45 IEEE 754 : " + d2s(s));
System.out.println("s3 = 3 IEEE 754 : " + d2s(s3));
}
static String d2s(double d)
{
// adapted from http://stackoverflow.com/questions/389993/extracting-mantissa-and-exponent-from-double-in-c-sharp
// Translate the double into sign, exponent and mantissa.
long bits = Double.doubleToLongBits(d);
// Note that the shift is sign-extended, hence the test against -1 not 1
Boolean negative = (bits < 0);
int exponent = (int)((bits >> 52) & 0x7ffL);
long mantissa = bits & 0xfffffffffffffL;
// Subnormal numbers; exponent is effectively one higher,
// but there's no extra normalisation bit in the mantissa
if (exponent == 0)
{
exponent++;
}
// Normal numbers; leave exponent as it is but add extra
// bit to the front of the mantissa
else
{
mantissa = mantissa | (1L << 52);
}
// Bias the exponent. It's actually biased by 1023, but we're
// treating the mantissa as m.0 rather than 0.m, so we need
// to subtract another 52 from it.
exponent -= 1075;
if (mantissa == 0)
{
return " 0";
}
/* Normalize */
while ((mantissa & 1) == 0)
{ /* i.e., Mantissa is even */
mantissa >>= 1;
exponent++;
}
return (negative ? "-" : "+") + " " + String.format("%4d * 2 ^ %4d", mantissa, exponent);
}
}
In the end it all boiled down to a code snippet like this (it's VB6, but should compile in VB.NET too, just create a form with a button and a click event in both cases)
Dim s As Double
Dim s3 As Double
s = 8.45 - 5.45
s3 = 3
MsgBox "8.45 - 5.45 = :" & s
MsgBox "8.45 - 5.45 = :" & Format(s, "0.000000000000000000000")
MsgBox "8.45 - 5.45 = 3 :" & (s = s3)
MsgBox "Int(8.45-5.45) :" & Int(s)
MsgBox "Fix(8.45-5.45) :" & Fix(s)
Now, the funny part is that if you print, even with as many decimal digits as you like, 8.45 - 5.45, you get, apparently, the number 3.000. Then, why s = 3 is equal to False ? Why Int(s) and Fix(s) = 2?
Never mind that using Double is not recommended in cases like this, in any way - one should use Currency : I wanted to know exactly why there is such an apparently disconcerting behaviour.
I tried to replicate the snippet in C# (using Math.Floor instead of Int()) : same result. After that I extended the snippet with a routine found searching stackoverflow.com (look in the comments for the URL) to decode the internal IEEE 754 format used to store doubles (it is the same for each and every language using double precision floating point numbers since the last iterations of microsoft compilers for DOS I believe. Here's the code:
using System;
using System.Text;
namespace TestDouble
{
class Program
{
static void Main(string[] args)
{
double s, s3;
s = 8.45 - 5.45;
s3 = 3;
Console.WriteLine("s = 8.45 - 5.45 :" + s.ToString());
Console.WriteLine("s (formatted) :" + String.Format("{0:0.00000000000000000000000000000000}", s));
Console.WriteLine("s3 = 3 :" + s.ToString());
Console.WriteLine("s == s3 :" + (s == s3).ToString());
Console.WriteLine("Math.Floor(s) :" + Math.Floor(s).ToString());
Console.WriteLine("Math.Floor(s3) :" + Math.Floor(s3).ToString());
Console.WriteLine("s = 8.45-5.45 IEEE 754 : " + d2s(s));
Console.WriteLine("s3 = 3 IEEE 754 : " + d2s(s3));
Console.WriteLine();
}
static string d2s(double d)
{
// yanked from: http://stackoverflow.com/questions/389993/extracting-mantissa-and-exponent-from-double-in-c-sharp
// Translate the double into sign, exponent and mantissa.
long bits = BitConverter.DoubleToInt64Bits(d);
// Note that the shift is sign-extended, hence the test against -1 not 1
bool negative = (bits < 0);
int exponent = (int)((bits >> 52) & 0x7ffL);
long mantissa = bits & 0xfffffffffffffL;
// Subnormal numbers; exponent is effectively one higher,
// but there's no extra normalisation bit in the mantissa
if (exponent == 0)
{
exponent++;
}
// Normal numbers; leave exponent as it is but add extra
// bit to the front of the mantissa
else
{
mantissa = mantissa | (1L << 52);
}
// Bias the exponent. It's actually biased by 1023, but we're
// treating the mantissa as m.0 rather than 0.m, so we need
// to subtract another 52 from it.
exponent -= 1075;
if (mantissa == 0)
{
return " 0";
}
/* Normalize */
while ((mantissa & 1) == 0)
{ /* i.e., Mantissa is even */
mantissa >>= 1;
exponent++;
}
return (negative ? "-" : "+") + " " + mantissa.ToString() + " * 2 ^ " + exponent.ToString();
}
}
}
Now we're starting to shed some light: 8.45-5.45 and 3 are stored in a completely different way in IEEE 754.
8.45 - 5.45 is stored with a mantissa of 3377699720527871 and an exponent of -50.
I fired up Mathematica to check the numbers:
In[5]:= +3377699720527871 * 2^-50
Out[5]= 3377699720527871/1125899906842624
The fraction above is the exact value of 8.45-5.45, as stored in the 64 bit double variable.
With a 15 decimal digit precision this is..
In[21]:= N[3377699720527871/1125899906842624, 15]
Out[21]= 3.00000000000000
But with a precision of more than 15 digits..
In[22]:= N[3377699720527871/1125899906842624, 16]
Out[22]= 2.999999999999999
The problem with VB6/VB.NET and C# is that a double precision number is apparently converted to a string representing a decimal number with a maximum of 15 decimal digits. This is in compliance with the standard, as far as I've seen, but it's all that the language can churn out - if I specifiy more decimal digits in the formatting string I end up with the same precision anyway, not surprisingly of course. By the way, '3' is stored as what the IEEE 754 standard defines a 'subnormal' number, all in the mantissa with a zero exponent.
It seems that I stumbled on a really pathological case of double precision rounding. In the original program the numbers represented hours (the integer part) and minutes (the decimal part): it looked like the calculations were wrong only with quarter of an hour! I've event translated the C# program in Java. It seems that Java uses one decimal digit (but only one) more formatting double data - in my case it would have helped though...
public class TestDouble {
public static void main(String[] args) {
double s, s3;
s = 8.45 - 5.45;
s3 = 3;
System.out.printf("s = 8.45 - 5.45 :%f\n",s);
System.out.printf("s (formatted .14f) :%.14f\n",s);
System.out.printf("s (formatted .15f) :%.15f\n",s);
System.out.printf("s (formatted .30f) :%.30f\n",s);
System.out.printf("s3 = 3 :%f\n",s3);
System.out.printf("s == s3 :%b\n",(s == s3));
System.out.printf("Math.Floor(s) :%f\n",Math.floor(s));
System.out.printf("Math.Floor(s3) :%f\n",Math.floor(s3));
System.out.println("s = 8.45-5.45 IEEE 754 : " + d2s(s));
System.out.println("s3 = 3 IEEE 754 : " + d2s(s3));
}
static String d2s(double d)
{
// adapted from http://stackoverflow.com/questions/389993/extracting-mantissa-and-exponent-from-double-in-c-sharp
// Translate the double into sign, exponent and mantissa.
long bits = Double.doubleToLongBits(d);
// Note that the shift is sign-extended, hence the test against -1 not 1
Boolean negative = (bits < 0);
int exponent = (int)((bits >> 52) & 0x7ffL);
long mantissa = bits & 0xfffffffffffffL;
// Subnormal numbers; exponent is effectively one higher,
// but there's no extra normalisation bit in the mantissa
if (exponent == 0)
{
exponent++;
}
// Normal numbers; leave exponent as it is but add extra
// bit to the front of the mantissa
else
{
mantissa = mantissa | (1L << 52);
}
// Bias the exponent. It's actually biased by 1023, but we're
// treating the mantissa as m.0 rather than 0.m, so we need
// to subtract another 52 from it.
exponent -= 1075;
if (mantissa == 0)
{
return " 0";
}
/* Normalize */
while ((mantissa & 1) == 0)
{ /* i.e., Mantissa is even */
mantissa >>= 1;
exponent++;
}
return (negative ? "-" : "+") + " " + String.format("%4d * 2 ^ %4d", mantissa, exponent);
}
}
Sunday, 30 December 2012
Archos Video Player (e altro) su Mediacom 101 S2 (e altri tablet Jelly Bean RK3066)
Nota bene: mi sono accorto poco dopo aver terminato questa guida che Archos Video trasferito anche se all'inizio funziona dopo un po' si blocca a causa di un sedicente 'license verification error'. Archos Music e Talk funzionano come descritto: però se se siete interessati al player video c'è ancora del lavoro da fare (ho già provato ad adattare il build.prop - niente da fare), comunque lascio il post perchè qualche informazione potrebbe essere utile comunque.
La Archos ha recentemente pubblicato su google play la versione 'universale' del suo player video. Si tratta di un player con una ottima interfaccia utente, e la possibilità di sfruttare share di rete (SMB) e server DLNA, anche se non mi sembra raggiunga il livello di compatibilità di un player come VLC.
Prima di questa release il player era disponibile solo come app di sistema in alcuni tablet archos come il Gamepad o l'Archos 80 XS: in questi dispositivi, basati su chipset RK3066 è sfruttata (a quanto pare) l'accelerazione nativa della GPU. Su altri tablet con lo stesso chipset (come il Mediacom 101 S2 su cui ho testato questa guida, comunque le informazioni dovrebbero essere valide anche per altri tablet con lo stesso hardware e la stessa versione, Jelly Bean, di Android) gira benissimo la versione commerciale del player: se si ha anche un dispositivo Archos - altrimenti sarebbe irregolare - e si vuole provare a usare lo stesso player video sull'altro tablet, ecco come fare. Inoltre il firmware Archos contiene anche una versione di Google Talk e di Magazines (non molto utile in italia credo) che può far comodo su dispositivi come il 101S2 che non dispongono nativamente di queste app.
Per effettuare lo spostamento delle app in questione è necessario:
- saper utilizzare ed eventualmente ricompilare programmi a linea di comando da window e/o linux
- poter almeno leggere dati da una immagine in formato RAW ext3, come quelle dei firmware archos: io ho usato direttamente linux, su window si può provare un tool come http://www.diskinternals.com/linux-reader/
- saper spostare file da/a il proprio dispositivo android, possibilmente con ADB (per il 101S2 vedi la mia guida in questo blog) oppure avere i permessi di root sul device e usare un file manager che li sfrutti (p.es. ES File explorer, per il root su 101S2 vedi qui)
Per prima cosa è necessario procurarsi una immagine del firmware archos. Ad oggi 30/12/12 l'unica disponibile è quella del Gamepad disponibile qui o comunque nella sezione download di www.archos.com.
Il file dovrebbe essere un file in formato standard Rockchip, ovvero l'impacchettamento di un loader e di alcune immagini raw delle varie partizioni da ricreare: tuttavia con i Wendal's tools originali apparsi sul forum di slatedroid (versione compilata qui) o anche la versione specifica per RK3066
non è possibile estrarre le immagini raw dal file update.img. A questa URL su github
menzionata nel thread originale su slatedroid però è possibile scaricare sorgenti di tool alternativi a quelli di Wendal che scompattano senza problemi il firmware archos. Dei tools, l'unico che interessa è rkunpack.c. Lo si può compilare (su Linux, o su Windows, posto che si disponga di un compilatore adeguato come quello del pacchetto cygwin) semplicemente con
cc rkunpack.c -o rkunpack (linux)
cc rkunpack.c -o rkunpack.exe (windows con cygwin)
se non ce la fate a ricompilare da soli rkunpack ecco qui una versione windows ricompilata col mio cygwin (su w7 a 64 bit, ma gira anche su xp a 32, servono anche le librerie cyg*.dll incluse nello zip ovviamente). Una volta posto il file update.img nella stessa cartella di rkunpack.exe e degli altri file dare da prompt dei comandi:
rkunpack update.img
il tool creerà una cartella image con dentro i file .img delle varie partizioni in formato raw/ext3. Il file che ci interessa è il più grande, system.img
Per accedere ai file da spostare io ho copiato i file su una macchina Linux (Ubuntu 11 per la precisione) e da shell ho usato il comando:
sudo mount -t ext3 -o loop /percorso/system.img /home/febo/cartella
ovviamente nell'esempio system.img è stato posto in /percorso ed è stata creata la cartella /home/febo/cartella : fatto questo i file della partizione sono visibili a partire da questo ultimo percorso e ricopiabili a piacere altrove. Alternativamente si può usare un tool windows, come già detto http://www.diskinternals.com/linux-reader/ funziona.
Fatto questo è possibile posizionarsi nella cartella app della partizione e copiare i file .apk delle app che interessano. I file nel caso del gamepad sono:
ArchosMusic.apk (video player archos)
ArchosVideo.apk (player mp3 archos)
Magazines.apk (applicazione google per abbonamenti)
Talk.apk (google talk per jelly bean)
Talk.apk e Magazines.apk sono installabili così come sono, basta copiarli sul tablet e installarli con un file explorer, o apk installer, o altro tool. Io uso ADB da linea di comando così:
adb install Talk.apk
adb install Magazines.apk
Provando a fare lo stesso con le altre due applicazioni si ottiene invece un bell'errore MISSING_SHARED_LIBRARY.
Esaminando meglio i due apk (consiglio questo ottimo tool, android-apktool) in effetti si nota che manca un file .jar del framework. Per estrarlo dal firmware archos e reinstallaro prelevare dall'immagine raw montata i file
./framework/com.archos.frameworks.jar
./etc/permissions/com.archos.frameworks.xml
i file devono essere ricopiati con i giusti permessi (644) nelle corrispondenti cartelle /system/framework e /system/etc/permissions del device di 'arrivo'. Seguono i comandi da dare per inserire i file da ADB (posto che i 2 file siano nella stessa cartella di adb.exe).
adb root
adb remount
adb push com.archos.frameworks.jar /system/framework
adb shell chmod 644 /system/framework/com.archos.frameworks.jar
adb push com.archos.frameworks.xml /system/etc/permissions
adb shell chmod 644 /system/etc/permissions/com.archos.frameworks.xml
Io ho usato questo sistema: sicuramente si dovrebbe procedere anche con un file manager come Root File Explorer o ES File Explorer con l'opzione apposita settata, anche se è possibile che sia comunque necessario usare adb remount per rendere scrivibile /system (non ho provato).
Una volta fatto questo al riavvio i due apk dei player archos saranno installabili senza problemi. Da Adb:
adb install ArchosMusic.apk
adb install ArchosVideo.apk
Una eventuale versione commerciale del player Archos deve essere disinstallata, altrimenti l'installazione fallirà ancora (da ADB errore SHARED_USER, messaggio generico di installazione fallita da android).
La Archos ha recentemente pubblicato su google play la versione 'universale' del suo player video. Si tratta di un player con una ottima interfaccia utente, e la possibilità di sfruttare share di rete (SMB) e server DLNA, anche se non mi sembra raggiunga il livello di compatibilità di un player come VLC.
Prima di questa release il player era disponibile solo come app di sistema in alcuni tablet archos come il Gamepad o l'Archos 80 XS: in questi dispositivi, basati su chipset RK3066 è sfruttata (a quanto pare) l'accelerazione nativa della GPU. Su altri tablet con lo stesso chipset (come il Mediacom 101 S2 su cui ho testato questa guida, comunque le informazioni dovrebbero essere valide anche per altri tablet con lo stesso hardware e la stessa versione, Jelly Bean, di Android) gira benissimo la versione commerciale del player: se si ha anche un dispositivo Archos - altrimenti sarebbe irregolare - e si vuole provare a usare lo stesso player video sull'altro tablet, ecco come fare. Inoltre il firmware Archos contiene anche una versione di Google Talk e di Magazines (non molto utile in italia credo) che può far comodo su dispositivi come il 101S2 che non dispongono nativamente di queste app.
Per effettuare lo spostamento delle app in questione è necessario:
- saper utilizzare ed eventualmente ricompilare programmi a linea di comando da window e/o linux
- poter almeno leggere dati da una immagine in formato RAW ext3, come quelle dei firmware archos: io ho usato direttamente linux, su window si può provare un tool come http://www.diskinternals.com/linux-reader/
- saper spostare file da/a il proprio dispositivo android, possibilmente con ADB (per il 101S2 vedi la mia guida in questo blog) oppure avere i permessi di root sul device e usare un file manager che li sfrutti (p.es. ES File explorer, per il root su 101S2 vedi qui)
Per prima cosa è necessario procurarsi una immagine del firmware archos. Ad oggi 30/12/12 l'unica disponibile è quella del Gamepad disponibile qui o comunque nella sezione download di www.archos.com.
Il file dovrebbe essere un file in formato standard Rockchip, ovvero l'impacchettamento di un loader e di alcune immagini raw delle varie partizioni da ricreare: tuttavia con i Wendal's tools originali apparsi sul forum di slatedroid (versione compilata qui) o anche la versione specifica per RK3066
non è possibile estrarre le immagini raw dal file update.img. A questa URL su github
menzionata nel thread originale su slatedroid però è possibile scaricare sorgenti di tool alternativi a quelli di Wendal che scompattano senza problemi il firmware archos. Dei tools, l'unico che interessa è rkunpack.c. Lo si può compilare (su Linux, o su Windows, posto che si disponga di un compilatore adeguato come quello del pacchetto cygwin) semplicemente con
cc rkunpack.c -o rkunpack (linux)
cc rkunpack.c -o rkunpack.exe (windows con cygwin)
se non ce la fate a ricompilare da soli rkunpack ecco qui una versione windows ricompilata col mio cygwin (su w7 a 64 bit, ma gira anche su xp a 32, servono anche le librerie cyg*.dll incluse nello zip ovviamente). Una volta posto il file update.img nella stessa cartella di rkunpack.exe e degli altri file dare da prompt dei comandi:
rkunpack update.img
il tool creerà una cartella image con dentro i file .img delle varie partizioni in formato raw/ext3. Il file che ci interessa è il più grande, system.img
Per accedere ai file da spostare io ho copiato i file su una macchina Linux (Ubuntu 11 per la precisione) e da shell ho usato il comando:
sudo mount -t ext3 -o loop /percorso/system.img /home/febo/cartella
ovviamente nell'esempio system.img è stato posto in /percorso ed è stata creata la cartella /home/febo/cartella : fatto questo i file della partizione sono visibili a partire da questo ultimo percorso e ricopiabili a piacere altrove. Alternativamente si può usare un tool windows, come già detto http://www.diskinternals.com/linux-reader/ funziona.
Fatto questo è possibile posizionarsi nella cartella app della partizione e copiare i file .apk delle app che interessano. I file nel caso del gamepad sono:
ArchosMusic.apk (video player archos)
ArchosVideo.apk (player mp3 archos)
Magazines.apk (applicazione google per abbonamenti)
Talk.apk (google talk per jelly bean)
Talk.apk e Magazines.apk sono installabili così come sono, basta copiarli sul tablet e installarli con un file explorer, o apk installer, o altro tool. Io uso ADB da linea di comando così:
adb install Talk.apk
adb install Magazines.apk
Provando a fare lo stesso con le altre due applicazioni si ottiene invece un bell'errore MISSING_SHARED_LIBRARY.
Esaminando meglio i due apk (consiglio questo ottimo tool, android-apktool) in effetti si nota che manca un file .jar del framework. Per estrarlo dal firmware archos e reinstallaro prelevare dall'immagine raw montata i file
./framework/com.archos.frameworks.jar
./etc/permissions/com.archos.frameworks.xml
i file devono essere ricopiati con i giusti permessi (644) nelle corrispondenti cartelle /system/framework e /system/etc/permissions del device di 'arrivo'. Seguono i comandi da dare per inserire i file da ADB (posto che i 2 file siano nella stessa cartella di adb.exe).
adb root
adb remount
adb push com.archos.frameworks.jar /system/framework
adb shell chmod 644 /system/framework/com.archos.frameworks.jar
adb push com.archos.frameworks.xml /system/etc/permissions
adb shell chmod 644 /system/etc/permissions/com.archos.frameworks.xml
Io ho usato questo sistema: sicuramente si dovrebbe procedere anche con un file manager come Root File Explorer o ES File Explorer con l'opzione apposita settata, anche se è possibile che sia comunque necessario usare adb remount per rendere scrivibile /system (non ho provato).
Una volta fatto questo al riavvio i due apk dei player archos saranno installabili senza problemi. Da Adb:
adb install ArchosMusic.apk
adb install ArchosVideo.apk
Una eventuale versione commerciale del player Archos deve essere disinstallata, altrimenti l'installazione fallirà ancora (da ADB errore SHARED_USER, messaggio generico di installazione fallita da android).
Mediacom 101 S2: inserire l'icona di Gmail sull'home screen
Un problema noto del nuovo tablet Mediacom 101 S2 è l'assenza dell'icona di Gmail nel launcher di sistema. In realtà la cosa è dovuta alla 'non ufficialità' della presenza delle Google apps nel firm del tablet: l'app in se e per se è presente, però non appare nell'app drawer e non c'è un modo semplice per far apparire l'icona sull'home screen. Per il momento l'unica soluzione trovata è stata ..installare un altro launcher.
Il problema si verifica con i due firmware di 'fabbrica' del 101S2: con il firmware presente fino a qualche giorno fa sul sito Mediacom bastava aggiornare Gmail e l'icona appariva subito. Il firmware però aveva anche la 'feature' di disabilitare la fotocamera posteriore del tablet ed è stato recentemente sostituito con l'immagine del firmware 'di fabbrica' del 19/10/2012 (vedi la mia recensione al riguardo). Visto che per il momento il rilascio di un aggiornamento vero sembra allontanarsi ho speso un po' di tempo per approfondire una mia idea relativa alla creazione 'manuale' dell'icona smanettando sulle impostazioni del launcher stesso. La ricerca ha avuto - almeno sulla mia unità - successo. Questo è il resoconto, ovviamente non posso offrire alcuna garanzia che funzioni anche con il vs 101S2, se perdete dati o altro sono problemi vostri, etc.
La procedura è stata provata con un firmware del 19/10/2012 flashato dall'immagine scaricata dal sito mediacom. Dovrebbe funzionare tranquillamente anche con l'altro firmware del 27/9/2012 ma non ho avuto modo di provare. Oltre a questo i requisiti sono:
- il tablet DEVE ESSERE ROOTATO : seguire una delle guide presenti online se non lo è già, ad esempio la mia.
- serve un file manager che sfrutti i permessi di root e consenta di copiare file da/a qualsiasi parti del file system del tablet. Io ho usato ES File Explorer abilitando dalle opzioni la modalità root, ma va bene qualsiasi altro programma simile
- bisogna essere in grado di spostare dei file dal tablet al proprio PC o viceversa (io ho usato lo stesso ES File Explorer in modalità LAN, ma ovviamente va bene qualsiasi altro sistema)
- serve un editor di file SQLite. Io ho usato 'SQLite Database browser' un ottimo freeware disponibile per tutte le piattaforme.
- per semplicità potete anche scaricare dal mio sito questo file con i dati dell'icona gmail già pronti da copiaincollare.
Se non avete un minimo di pratica nella gestione di qs file sia sul tablet che su android, sconsiglio di procedere oltre: fate meglio ad aspettare la prossima release del firmware: se non sapete cosa fare rischiate di dover riflashare il tablet (cosa ormai non drammatica vista la disponibilità di un'immagine finalmente funzionante dalla Mediacom)
Il trucco consiste semplicemente in questo: il launcher standard tiene le impostazioni delle icone in una tabella chiamata 'Favorites' in un database SQLite contenuto nel file /data/data/com.android/launcher/databases/launcher.db nella memoria del tablet. Un'icona è semplicemente un record di questa tabella, con campi relativi al nome dell'icona, all'apk da lanciare, alle coordinate dell'icona e al suo tipo etc. Ho preso da un altro dispositivo android (nella fattispecie, un'emulatore) i dati dell'icona, li ho riscritti su una copia del file launcher.db preso dal 101S2 e ho riscritto il file sul tablet (cosa possibile SOLO da root). Riavviando subito il tablet l'icona di Gmail appare finalmente senza problemi apparenti.
Per procedere la cosa più semplice è aggiungere nel punto in cui si vuole fare apparire l'icona di GMail l'icona di una qualsiasi altra app: poi basterà cambiare i campi della tabella rilevanti. Nell'esempio mostrato io ho aggiunto l'icona di 'Play Books' ma va bene qualsiasi icona.
Una volta fatto questo si tratta di localizzare il file launcher.db nella cartella /data/data/com.android/launcher/databases del tablet col file manager e di spostarlo in qualche modo sul proprio pc, dove in precedenza sarà stato installato SQLite Database Browser. Consiglio di copiare il file launcher.db su una sua cartella separata. Lanciate l'editor e localizzate il file con l'opzione Open Database del menu File. Fatto questo, scegliete la tab 'Browse Data' e la table 'favorites'. Dovrebbe apparire la lista delle icone del vs tablet, in fondo ci dovrebbe essere l'icona che avete aggiunto per tramutarla in quella di gmail. Nell'esempio è evidenziata la 'Play books'
I campi da modificare per fare questo non sono molti, eccoli (ovviamente si vedono scrollando orizzontalmente verso destra)
title: titolo dell'icona, va cambiato in
Gmail
intent: 'cosa' chiamare, inserire (esattamente) questo testo:
#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.google.android.gm/.ConversationListActivityGmail;end
itemType: è un valore numerico che se non lo fosse già deve essere messo a 0 (zero).
iconPackage: cancellare il valore presente (altrimenti rimane l'icona dell'applicazione di partenza)
iconResource: cancellare il valore presente (altrimenti rimane l'icona dell'applicazione di partenza, come sopra)
icon: deve contenere la scritta PNG preceduta e seguita da due caratteri speciali. Se non ci fosse, basta copiaincollarla da un'altra riga della tabella.
Ho messo in linea il file http://www.delenda.net/varie/launcher.zip che contiene il database preso dall'emulatore con i dati già pronti per un'icona gmail da copiaincollare: la cosa più semplice è lanciare due sessioni di SQLite Database browser e copiare i valori dei 5 campi indicati sopra. Il file E' SOLO UN ESEMPIO NON RICOPIATELO SUL TABLET !!!
Una volta editati i campi salvate le modifiche col bottone apposito e riportate il file sul vs tablet.
Col file manager DOTATO DI PERMESSI DI ROOT copiate il file modificato nello stesso percorso /data/data/com.android.launcher/databases da cui era stato preso. In teoria l'operazione è pericolosa, nel senso che si potrebbe corrompere il file ma ho fatto diverse copie senza problemi nel ricercare la giusta combinazione di campi e il loro significato (idealmente bisognerebbe procedere in altro modo, ev. da recovery). Ad ogni modo appena riscritto il file launcher.db è bene riavviare il tablet. Se tutto va bene dovrebbe apparire l'icona di Gmail. Se l'icona appare ma da 'applicazione non installata' oppure c'è ancora l'icona della vecchia applicazione o ancora un'icona col robottino verde di android avete probabilmente sbagliato a copiare qualche campo (riprovare).
Nota bene: ho anche provato la procedura con l'APK di Gmail 4.2 disponibile in questa pagina : è una versione di Gmail più aggiornata, la cui installazione però richiede ancora i permessi di root, visto che bisogna disintallare il Gmail di sistema (ad esempio con Link2SD o altro 'root uninistaller')
Il problema si verifica con i due firmware di 'fabbrica' del 101S2: con il firmware presente fino a qualche giorno fa sul sito Mediacom bastava aggiornare Gmail e l'icona appariva subito. Il firmware però aveva anche la 'feature' di disabilitare la fotocamera posteriore del tablet ed è stato recentemente sostituito con l'immagine del firmware 'di fabbrica' del 19/10/2012 (vedi la mia recensione al riguardo). Visto che per il momento il rilascio di un aggiornamento vero sembra allontanarsi ho speso un po' di tempo per approfondire una mia idea relativa alla creazione 'manuale' dell'icona smanettando sulle impostazioni del launcher stesso. La ricerca ha avuto - almeno sulla mia unità - successo. Questo è il resoconto, ovviamente non posso offrire alcuna garanzia che funzioni anche con il vs 101S2, se perdete dati o altro sono problemi vostri, etc.
La procedura è stata provata con un firmware del 19/10/2012 flashato dall'immagine scaricata dal sito mediacom. Dovrebbe funzionare tranquillamente anche con l'altro firmware del 27/9/2012 ma non ho avuto modo di provare. Oltre a questo i requisiti sono:
- il tablet DEVE ESSERE ROOTATO : seguire una delle guide presenti online se non lo è già, ad esempio la mia.
- serve un file manager che sfrutti i permessi di root e consenta di copiare file da/a qualsiasi parti del file system del tablet. Io ho usato ES File Explorer abilitando dalle opzioni la modalità root, ma va bene qualsiasi altro programma simile
- bisogna essere in grado di spostare dei file dal tablet al proprio PC o viceversa (io ho usato lo stesso ES File Explorer in modalità LAN, ma ovviamente va bene qualsiasi altro sistema)
- serve un editor di file SQLite. Io ho usato 'SQLite Database browser' un ottimo freeware disponibile per tutte le piattaforme.
- per semplicità potete anche scaricare dal mio sito questo file con i dati dell'icona gmail già pronti da copiaincollare.
Se non avete un minimo di pratica nella gestione di qs file sia sul tablet che su android, sconsiglio di procedere oltre: fate meglio ad aspettare la prossima release del firmware: se non sapete cosa fare rischiate di dover riflashare il tablet (cosa ormai non drammatica vista la disponibilità di un'immagine finalmente funzionante dalla Mediacom)
Il trucco consiste semplicemente in questo: il launcher standard tiene le impostazioni delle icone in una tabella chiamata 'Favorites' in un database SQLite contenuto nel file /data/data/com.android/launcher/databases/launcher.db nella memoria del tablet. Un'icona è semplicemente un record di questa tabella, con campi relativi al nome dell'icona, all'apk da lanciare, alle coordinate dell'icona e al suo tipo etc. Ho preso da un altro dispositivo android (nella fattispecie, un'emulatore) i dati dell'icona, li ho riscritti su una copia del file launcher.db preso dal 101S2 e ho riscritto il file sul tablet (cosa possibile SOLO da root). Riavviando subito il tablet l'icona di Gmail appare finalmente senza problemi apparenti.
Per procedere la cosa più semplice è aggiungere nel punto in cui si vuole fare apparire l'icona di GMail l'icona di una qualsiasi altra app: poi basterà cambiare i campi della tabella rilevanti. Nell'esempio mostrato io ho aggiunto l'icona di 'Play Books' ma va bene qualsiasi icona.
Una volta fatto questo si tratta di localizzare il file launcher.db nella cartella /data/data/com.android/launcher/databases del tablet col file manager e di spostarlo in qualche modo sul proprio pc, dove in precedenza sarà stato installato SQLite Database Browser. Consiglio di copiare il file launcher.db su una sua cartella separata. Lanciate l'editor e localizzate il file con l'opzione Open Database del menu File. Fatto questo, scegliete la tab 'Browse Data' e la table 'favorites'. Dovrebbe apparire la lista delle icone del vs tablet, in fondo ci dovrebbe essere l'icona che avete aggiunto per tramutarla in quella di gmail. Nell'esempio è evidenziata la 'Play books'
I campi da modificare per fare questo non sono molti, eccoli (ovviamente si vedono scrollando orizzontalmente verso destra)
title: titolo dell'icona, va cambiato in
Gmail
intent: 'cosa' chiamare, inserire (esattamente) questo testo:
#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.google.android.gm/.ConversationListActivityGmail;end
itemType: è un valore numerico che se non lo fosse già deve essere messo a 0 (zero).
iconPackage: cancellare il valore presente (altrimenti rimane l'icona dell'applicazione di partenza)
iconResource: cancellare il valore presente (altrimenti rimane l'icona dell'applicazione di partenza, come sopra)
icon: deve contenere la scritta PNG preceduta e seguita da due caratteri speciali. Se non ci fosse, basta copiaincollarla da un'altra riga della tabella.
Ho messo in linea il file http://www.delenda.net/varie/launcher.zip che contiene il database preso dall'emulatore con i dati già pronti per un'icona gmail da copiaincollare: la cosa più semplice è lanciare due sessioni di SQLite Database browser e copiare i valori dei 5 campi indicati sopra. Il file E' SOLO UN ESEMPIO NON RICOPIATELO SUL TABLET !!!
Una volta editati i campi salvate le modifiche col bottone apposito e riportate il file sul vs tablet.
Col file manager DOTATO DI PERMESSI DI ROOT copiate il file modificato nello stesso percorso /data/data/com.android.launcher/databases da cui era stato preso. In teoria l'operazione è pericolosa, nel senso che si potrebbe corrompere il file ma ho fatto diverse copie senza problemi nel ricercare la giusta combinazione di campi e il loro significato (idealmente bisognerebbe procedere in altro modo, ev. da recovery). Ad ogni modo appena riscritto il file launcher.db è bene riavviare il tablet. Se tutto va bene dovrebbe apparire l'icona di Gmail. Se l'icona appare ma da 'applicazione non installata' oppure c'è ancora l'icona della vecchia applicazione o ancora un'icona col robottino verde di android avete probabilmente sbagliato a copiare qualche campo (riprovare).
Nota bene: ho anche provato la procedura con l'APK di Gmail 4.2 disponibile in questa pagina : è una versione di Gmail più aggiornata, la cui installazione però richiede ancora i permessi di root, visto che bisogna disintallare il Gmail di sistema (ad esempio con Link2SD o altro 'root uninistaller')
Sunday, 9 December 2012
Trova le differenzi
Maledetto autunno piovoso e lavorativo che mi ha fatto scoprire in colpevole ritardo questa opera di ignoti vandali che dovrebbero essere staffilati in pubblico per le loro devastazioni, non prima di essere tuttavia ringraziati per il loro acvme.
Tutto somato comunque un candidato senza differenzi da Renzi alla carica di p.d.c. concorrerà comunque... C'è da pensare...
Tutto somato comunque un candidato senza differenzi da Renzi alla carica di p.d.c. concorrerà comunque... C'è da pensare...
Subscribe to:
Posts (Atom)