venerdì 21 dicembre 2012

XMas


FreeDos in VirtualBox

Sempre piu' spesso mi capita di dover ritirare fuori dei vecchi programmi in Dos che al momento si rifiutano di girare sui moderni Windows

A questo punto (avevo gia' provato con Qemu) e' il turno di VirtualBox di far girare Freedos

Per prima cosa i settaggi di base
Ram 32 Mb
Disco fisso 200 Mb
Cd l'immagine di FreeDos 1.1

attenzione a come si imposta la scheda di rete virtuale. Per l'uso successivo e' meglio scegliere Bridged



la prima cosa da fare una volta avviata e' creare il disco C (opzione 2)


scegliendo poi "Create Dos Partition/Create Primary Dos Partition" ed Esc fino al reboot della macchina

Una volta ripartita la macchina virutale si sceglie l'opzione 1 "Install to HardDisk"

ci sara' una serie di errori di bad sector .. non c'e' da preoccuparsi
una volta riconquistato il controllo si formatta il disco fisso virtuale


si inizia l'installazione e si continua ad andare avanti fino alla scelta dei moduli in cui si aggiungono quelli net e gui


L'installazione di base e' terminata ma c'e' un ulteriore passo da fare. Non esistono le Guest Additions per Dos per cui per inserire dei programmi o dei file nella macchina virtuali questi devono essere fatti passare attraverso la rete virtuale via FTP per cui si procede alla configurazione della rete stessa e del server FTP

Per abilitare la rete virtuale si deve editare il file autoexec.bat




rimuovendo il REM all'inizio della riga che ha LH PCNTPK e rimuovendo il REM all'inizio della riga che ha DHCP (se si ha un DHCP server attivo)

Per configurare il Server Ftp si copia il file di configurazione
copy C:\FDOS\DOC\MTCP\SAMPLE.CFG C:\FDOS\MTCP.CFG

e si edita
edit C:\fdos\mtcp.cfg

cambiando i parametri
MTU 1472

e rimuovendo i REM dalle righe seguenti

ftpsrv_password_file c:\ftppass.txt
ftpsrv_log_file c:\ftpsrv.log
FTPSRV_FILEBUFFER_SIZE 16
FTPSRV_TCPBUFFER_SIZE 16
FTPSRV_PACKETS_PER_POLL 2



a questo punto si crea il file c:\ftppass.txt
edit c:\ftppass.txt

mettendo una riga come segue
luca     password      [none]     [any]      all


nb: i campi sono separati da un tabulatore
il server Ftp si lancia con il comando
ftpsrv

e dovrebbe apparire una schermata come la seguente

con Filezilla si puo' quindi interagire con il server (in questo caso all'indirizzo 10.200.3.94)

e dopo tanta fatica si puo' usare il programma DOS di cui si aveva bisogno


giovedì 20 dicembre 2012

Android Emulator e Http Proxy

La navigazione di Internet all'interno dell'emulatore e' di default abilitata ma nel caso sia presente un proxy_http si deve avvisare l'emulatore della corretta configurazione

Il metodo piu' semplice e' lanciare l'emulatore da riga di comando (il comando si trova nella sottodirectory tools dell'SDK) con la seguente riga

emulator -avd nome_avd -http-proxy http://mioproxy:8080

di seguito due esempi di navigazione tramite proxy



mercoledì 19 dicembre 2012

Embed HTML5 in Android

E' possibile sfruttare l'HTML5 anche per creare applicazioni Android
La tecnica consiste nel creare una pagina con una WevView e farla puntare ad una pagina HTML5

Di seguito i file necessari per il progetto (in cui e' stato usato il generatore di insieme di Mandelbrot in HTML5 visto nei precedenti post)



Attenzione : il browser di default di Android non e' pienamente compatibile con Android per cui alcune pagine HTML5 semplicemente non funzionano (vedi l'esempio di GUI con HTML5 presentato nei post precedenti)

activity_main.xml
-------------------------------------

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

    
    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

</RelativeLayout>

-------------------------------------
MainActivity.java
-------------------------------------

package com.web.html5;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView html5 = (WebView) findViewById(R.id.webView1);
html5.getSettings().setJavaScriptEnabled(true);
html5.setWebChromeClient(new WebChromeClient());
html5.loadUrl("file:///android_asset/www/index.html");
 
}

}

-------------------------------------
index.html
la pagina index.html deve essere inserita in asset/www/ quindi dentro alla directory asset
si deve creare il folder www e poi creare il file index.html. Dentro Eclipse, facendo doppio clic sul file html, il file viene visulizzato all'interno di un browser e quindi non e' editabile, si deve invece scegliere Apri con
-------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css">
            body { margin: 0; font-size: 2em; background-color: white; }
            #quit { background-color: gray; color: white; font-weight: bold; display: block; text-align: right; }
        </style>
        <script type="text/javascript">
            window.onload = function()
            {
            var canvas = document.getElementById("esempio");
                if (canvas.getContext) {
                  var context = canvas.getContext("2d");
                    var re_min = -2.0;
                    var im_min = -1.2;
                    var re_max = 1.0;
                    var im_max = 1.2;
                    var iterazioni = 255;
                    var r;
                    var a,b;
                    var x,y,x_new,y_new;
                    var test;
                    var k,j,i;
                    var SCREEN_HEIGHT = 320;
                    var SCREEN_WIDTH = 400;
                    var re_factor = (re_max-re_min);
                    var im_factor = (im_max-im_min);
                    for (var i=0;i<SCREEN_HEIGHT;i++)
                     {
                     for (var j=0;j<SCREEN_WIDTH;j++)
                      {
                      a = re_min+(j*re_factor/SCREEN_WIDTH);
                      b = im_min+(i*im_factor/SCREEN_HEIGHT);
                      x = 0;
                      y = 0;
                      test = 0;
                      for (var k=0;k<iterazioni;k++)
                       {
                       x_new = (x*x)-(y*y)+a;
                       y_new = (2*x*y)+b;
                       if (((x_new*x_new)+(y_new*y_new))>4)
                        {
                        r = k%2;
                        if (r == 1)
                            {
                            context.beginPath();
                            context.fillRect(i,j,1,1);
                            context.stroke();
                            }
                        break;
                        }
                       x = x_new;
                       y = y_new;
                       }
                      }
                     }
                }
         }
        </script>
    </head>
    <body>
        
        <canvas id="esempio" height="400" width="800">
        Il Browser non supporta HTML5.
        <!-- Utile per inserire informazioni di default -->
        </canvas>
    </body>
</html>

Test HTML5 su vari browser

Browser di Android 4.0.2
HTML5 ancora non e' uno standard ed i browser hanno una capacita' di interpretazione del linguaggio molto differente. Di seguito una prova del test di html5test.com su piattaforma Android e PC 

Come si vede Opera su Android surclassa il browser del sistema operativo mentre per l'ambiente Desktop il migliore (in modo abbastanza prevedibile) Chrome. E' anche evidente la progressione di miglioramenti nelle varie versioni di Android

Opera su Android

Browser di Android 4.1.2
Browser di Android 2.2 


Browser di Android 2.3

Chrome 23 su Windows Xp

Firefox 16 su Windows XP




martedì 18 dicembre 2012

Pico TTS vs Ivona TTS

Il motore Text To Speech di default per Android e' Pico ma esistono molte soluzioni alternative; particolarmente interessante e' Ivona TTS che ha una qualita' del parlato nettamente superiore e meno metalliche di Pico.

Il motore Ivona puo' essere scaricato gratuitamente da Google Play ed ha come unico difetto una occupazione di circa 10 volte superiore rispetto a quella di Pico

Di seguito due esempi in italiano

Ivona TTS



Esempio GUI con HTML5

Seguendo la strada gia' impostata tempo fa ecco un esempio di come realizzare l'esempio GUI con HTML 5

L'impaginazione e' bruttina ma il tutto funziona


-----------------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css">
         body { margin: 0; font-size: 2em; background-color: white; }
         #quit { background-color: gray; color: white; font-weight: bold; display: block; text-align: right; }
  .containter{width: 150px; margin: 0 auto;}
         .containter div{width: 150px;margin: 0 auto;}
        </style>

        <script type="text/javascript">
        function showValue(newValue)
        {
                document.getElementById("range").innerHTML=newValue;
                document.getElementById("progress").value=newValue;
        }

        </script>
    </head>


    <body>
    <div class="containter">
<div>
    <input type="range"  min="0" max="100" onchange="showValue(this.value)"  /></input>
    </div>
        <div>
        <span id="range">50</span>
        </div>
        <div>
        <progress id="progress" value="50" max="100">50%</progress>
        </div>
    </div>
    </body>
</html>

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