martedì 11 dicembre 2012

Luna e Venere - Reale e Virtuale



Debian ed Ubuntu Full Screen in VirtualBox

Una volta installato Debian ed Ubuntu dentro una macchina virtuale Debian purtroppo la risoluzione massima dello schermo e' bloccata al 1024x768 e con i monitor moderni non e' certo un bel vedere
Debian Testing Lxde 1680x1050

per godere della modalita' Full-Screen si deve procedere come segue

Ubuntu 
sudo apt-get install virtualbox-guest-dkms

e poi riavviare la macchina virtuale

Debian
ovviamente con Debian e' piu' complicato
apt-get install build-essential module-assistant
m-a prepare

in seguito si monta il cd delle Guest Addition e si lancia VBoxLinuxAdditions.run
si riavvia ed il gioco e' fatto

con Gnome3 della Debian Testing la macchina virtuale funziona piuttosto male...non ci sono problemi per gli altri DE

venerdì 7 dicembre 2012

Driver ADB su Windows


Dato che uso normalmente Linux ho scoperto solo adesso che per programmare Android in Windows e' necessario installare i driver Adb prima di poter interagire con il telefono

Per i telefoni Android i driver sono contenuti all'interno del software Kies che include sia i driver che il software per l'aggiornamento del firmware e la gestione del telefono

Per altri telefoni, come l'Ideos della Huawei, sono disponibili  i driver presso il sito del costruttore

giovedì 6 dicembre 2012

Text to Speech (TTS) con Pico

Una delle funzioni meno utilizzate (ma anche delle piu' interessanti) e' quella di poter utilizzare delle API per poter enunciare una stringa

Il motore di TTS di default su Android e' Pico e non sempre ci sono tutti i linguaggi installati ..quindi se si vuole che il telefono parli in inglese non ci sono problemi ma se si vuole una lingua un po' piu' esotica va scaricata a parte

Gli esempi su come usare Pico sono gia' inclusi negli esempi dei developer di Android quindi non c'e' molto da fare se non usare il sistema


La voce e' piuttosto metallica e robotica rispetto ad altri motori TTS ma c'e' da dire che i file sono estremamente compatti

un primo metodo per testare TTS e' il seguente ma di fatto non e' utile in casi reali di programmazione
---------------------------------------------------------------

package com.example.tts;
import android.os.Bundle;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;


public class MainActivity extends Activity implements OnInitListener{

private TextToSpeech talker;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
talker = new TextToSpeech(this, this);
say("Luca Innocenti");
}

public void say(String text2say){
    talker.speak(text2say, TextToSpeech.QUEUE_FLUSH, null);
   }

public void onInit(int status) {
//say("Luca Innocenti");
}

@Override
public void onDestroy() {
if (talker != null) {
talker.stop();
talker.shutdown();
}
super.onDestroy();
}
}
---------------------------------------------------------------

Il secondo metodo e' decisamente piu' interattivo
---------------------------------------------------------------

package com.example.tts2;

import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
//import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.Log;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;
import android.view.View;

public class MainActivity extends Activity implements TextToSpeech.OnInitListener {

private Button pulsante;
private EditText txtv;
private TextToSpeech tts;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pulsante = (Button) findViewById(R.id.button1);
txtv = (EditText) findViewById(R.id.editText1);

tts = new TextToSpeech(this, this);

pulsante.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                speakOut();
            }

        });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if (status == TextToSpeech.SUCCESS) {
 
            int result = tts.setLanguage(Locale.US);

            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "This Language is not supported");
            } else {
                pulsante.setEnabled(true);
                speakOut();
            }

        } else {
            Log.e("TTS", "Initilization Failed!");
        }

}

private void speakOut() {
// TODO Auto-generated method stub
String text = txtv.getText().toString();
 
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);

}

}
--------------------------------------------------------

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginBottom="66dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="46dp"
        android:text="Button" />

</RelativeLayout>

Android su HTC TyTN II

Avevo gia' montato Android su un HTC TyTN II oltre tre anni fa ma all'epoca conoscevo molto poco di Android e quindi non avevo apprezzato la cosa anche perche' con un processore Arm da 400 MHz Android funziona piuttosto male,mettiamoci anche uno schermo nato per il pennino e non per il touch per rendere il tutto ingestibile

Il telefono era, quando usci' nel 2007, un ottimo oggetto rilasciato pero' con Windows Mobile 6 (aggiornabile al 6.1) con GPS, Bluetooth, WiFi, SdCard ed altro con uno schermo da 240x320 da 2.8 pollici. Non so quale fosse il prezzo (a me e' arrivato come rotto e sono riuscito a renderlo funzionante) ma doveva essere comparabile all'IPhone di oggi


Per inserire Android sul telefono si possono seguire le istruzioni riportate a questo link
Una volta lanciato il file haret. compare il boot di Android che sostituisce completamente Windows Mobile



Il tempo di boot e' piuttosto lento (oltre 2 minuti) ed al termine si entra in Android 2.1








Interrogato via Adb il sistema operativo funziona completamente (si entra in shell e si puo' fare il pull dei file) , si denota solo molto ritardo sensibile sull'interfaccia touch tale da renderlo sostanzialmente inservibile. La rete Wireless ed il GPS funzionano

Purtroppo non e' disponibile la funzione di screenshot mediante DDMS per cui sono dovute ricorrere ad una fotocamera

mercoledì 5 dicembre 2012

Installazione NDK per Android



L'nstallazione dell' NDK per Android e' quanto mai semplice e' molto piu' lineare rispetto a quella del corrispettivo SDK.

E' sufficiente scarica il file zip della piattaforma per cui e' richiesto lo sviluppo dal sito android ndk e successivamente decomprimerlo in una directory a piacere. Si aggiorna quindi la Path con il comando

export PATH=${PATH}:/home/luca/android_ndk

ed il gioco e' fatto

OCR in Linux con Tesseract

Ho iniziato ad usare dei software OCR nel lontano 1992 su un computer 486 DX/25 con un vetusto software Omniscan su Windows 3.1
Il tempo e' passato ed adesso sono disponibili dei software molto piu' perfomanti e gratuiti; per Linux ho provato ad utilizzare il software Tesseract che attualmente e' sponsorizzato da Google e si puo' scaricare da questo link

Esistono diversi pacchetti gia' compilati per tesseract ma visto che ci siamo sono partito dalla compilazione dei sorgenti

per prima cosa e' necessario eseguire
sudo apt-get install autoconf automake libtool
sudo apt-get install libpng12-dev
sudo apt-get install libjpeg62-dev
sudo apt-get install libtiff4-dev
sudo apt-get install zlib1g-dev


successivamente vanno compilate ed installate le librerie del progetto Leptonica tramite la classica sequenza configure/make/make install

terminata la fase preparatoria si scaricano i file dei sorgenti di Tesseract (i piu recenti sono qui) ed il file per il linguaggio di cui si desidera la conversione (italiano o inglese)

./configure
make
make install
ldconfig


terminata la compilazione si spacchetta il file del linguaggio in una directory (per esempio /home/luca/tessdata) ed al termine nella directory devono essere presenti file tipo ita.cube.bigram oppure ita.traindata

si indica quindi al programma dove sono ubicati i file della lingua mediante
export TESSDATA_PREFIX=/home/luca

e si procede da linea di comando ad effettuare una convesione OCR mediante il comando
tesseract immagine.tif testo_scansionato -l ita
(dove con -l ita si indica di utilizzare i file di conversione della lingua italiana, il risultato viene inserito nel file testo_scansionato.txt)

per testare il programma si possono scaricare le immagini di test da questo link

Attenzione: il programma accetta come input solo file TIF e solo con particolari caratteristiche prive di canale alpha. Nel caso di errato riconoscimento caratteri e' probabile che il file immagine non sia nel formato richiesto. Il formato richiesto e' di almeno 200 dpi con una profondita' di colore di 1 bit (quindi immagine a bianco e nero)

Come esempio di prova e' stata usata questa immagine


che ha come risultato della conversione il seguente testo
--------------------------------------------------------------------------------
 ~ Visual Linking allows users to join tables without having to understand
   the underlying table structure.

ReportSmith is available on MS-Windows and works with ASK INGRES/Net for
Windows to provide client/server reporting for ASK INGRES data.

Seeing is believing - - - so we've enclosed a Report Sampler that shows the types
of impressive reports available from ReportSmith.

We're so sure that ReportSmith will answer your reporting requirements that
we're offering a full development copy for $139~~over 50% off the regular price
-~so you can start generating new reports today!

Simply fill out the enclosed reply card, include your credit card number, mail it
back in the postage paid envelope, and we'll ship you a single-user copy of
ReportSmith today!

Once you've had a chance to use this product, I'm sure you'll see why it was
voted Byte Best of Comdex "Finalist" Award, and Windows Sources "Experts Pick"
Award.

For the reporting tool you've been waiting for... send in our reply card or call
1-800-446-4737 today! This special offer ends December 15th.


Regards,


George Kellar
Director Marketing
North America Operations
The ASK Group, Inc.


*This offer is limited to one user per site.
-------------------------------------------------------
facendo la prova invece con una pagina in italiano


e questa e' la ottima conversione in formato testo (gli errori ci sono ma sono abbastanza marginali e principalmente derivati da una cattiva interpretazione dell'apostrofo
------------------------------------------------------------------

ll punto di vista di ARPAT sulla prevenzione, enunciato formalmente fin dal i996, considera
elemento portante della propria politica gestionale la tutela della salute e sicurezza di tutti gli
operatori. Questo nel profondo convincimento che la salute sia un bene primario di cui ognuno ha
diritto, in ogni ambito di vita e di lavoro.

Le azioni intraprese da ARPAT per mettere in pratica questa scelta gestionale si sono concretizzate,
in primo luogo, nellîndividuazione del responsabile del servizio di prevenzione e protezione e,
successivamente, nellîndividuazione di tutte quelle ligure che rientrano nel “Sistema prevenzione”
dellfiAgenzia: fra queste, il medico competente ed autorizzato, che fin dal 1997 opera a fianco del
responsabile del servizio di prevenzione e protezione.

Le attività di quesfiultimo e del medico competente sono fra loro complementari e sinergiche,
Mentre il responsabile del servizio di prevenzione e protezione individua e propone le misure di
prevenzione primaria atte ad eliminare i rischi per la salute e la sicurezza degli operatori
dell’Agenzia (che sono legate ad interventi rivolti in particolare a strutture, impianti, attrezzature ed
organizzazione del lavoro), il medico competente rivolge la sua attenzione alla persona, mettendo in
pratica la sorveglianza sanitaria attraverso Feffettuazione di accertamenti sanitari preventivi e
periodici e l’espressione dei giudizi di idoneità allo svolgimento della mansione specifica di ogni
operatore delPAgenzia, Congiuntamente le due figure operano, invece, per Feffettuazione della
valutazione dei rischi e la formazione del personale delFAgenzia.

ll lavoro portato avanti fino ad oggi dal responsabile del servizio di prevenzione e protezione e dal
medico competente ha portato ARPAT ad accrescere progressivamente e sostanzialmente il suo
impegno nei riguardi delle norme di igiene e sicurezza. La situazione iniziale in cui si trovava
l'Agenzia al momento della sua costituzione, cosi come evidenziato nei primi documenti
predisposti e resi noti dal Direttore generale, vedeva oscillare, infatti, fra il 20 ed il 60% la
percentuale di adeguatezza alle norme tecniche (per le parti strutturali ed impiantistiche delle varie
sedi); d’altra parte anche il controllo sanitario dei lavoratori costituiva Feccezione alla regola,
risultando operativo, nel i996, solo in alcune realtà particolari.

Grazie all’impegno di tutta l’Agenzia, con il supporto tecnico del servizio di prevenzione e
protezione e del medico competente, la situazione iniziale e stata oggetto di un radicale mutamento.

Gli interventi tesi al miglioramento delle strutture e degli impianti, resisi necessari a seguito della
valutazione dei rischi, hanno portato alla realizzazione ed acquisizione di nuove sedi per il
Dipartimento provinciale di Siena, il Servizio sub-provinciale di Empoli, la Sede centrale
delFAgenzia a Firenze, Fimmobile “nuovo” per il dipartimento provinciale di Prato; di “locali
aggiuntivi” per i Dipartimenti provinciali di Livorno ed Arezzo ed a trasformazioni strutturali
(ampia quella del Dipartimento provinciale di Firenze), grazie anche agli interventi previsti dal
Progetto alimenti, per quanto riguarda la maggior parte delle altre sedi.

La politica degli investimenti adottata ha permesso, da un lato, di acquisire attrezzature specifiche
finalizzate alla sicurezza (annadi aspirati per sostanze pericolose, generatori di gas, cappe chimiche
e biologiche ecc.), dall’altro di procedere ad un rinnovamento delle dotazioni strumentali finalizzato
alla sicurezza prima di tutto, oltre che al miglioramento delle prestazioni.

Accanto a queste attività hanno preso vita progetti di formazione ed informazione interna del
personale ARPAT, attraverso incontri informativi gestiti dal responsabile del servizio di
prevenzione e protezione presso ogni sede e corsi di formazione su argomenti generali e specifici, ai
quali hanno preso parte finora circa 600 operatori (pronto soccorso, prevenzione incendi, rischio
cancerogeno e rischio biologico).

Contemporaneamente si e intrapreso un percorso di collaborazione con le altre Agenzie per la
protezione ambientale presenti sul territorio nazionale per accelerare il processo di miglioramento
grazie alla condivisione delle esperienze maturate fino ad ora, percorso che ha avuto recentemente
la sua manifestazione più concreta nel Seminario di Asti del giugno 2000 sullo stato di attuazione
del “sistema sicurezza nelle Agenzie”.




Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...