venerdì 20 ottobre 2017

Scrittura JSON su Android N

Un esempio semplice per scrivere un file JSON e gestire in permessi di scrittura su Android 7 e successivi
Nel codice le parti in azzurro sono quelle relative alla gestione dei permessi mentre quelle in giallo sono per la gestione della creazione del JSON


---------------------------------------
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.lucainnocenti.jsontester">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />



    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:roundIcon="@mipmap/ic_launcher_round"        android:supportsRtl="true"        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

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


---------------------------------------
package com.example.lucainnocenti.jsontester;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.JsonWriter;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;


public class MainActivity extends AppCompatActivity {
    private int requestCode;
    private int grantResults[];
    private FileOutputStream out;
    private JsonWriter writer;
    private File card;
    private File file;

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

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode);
        onRequestPermissionsResult(requestCode, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, grantResults);
        Button pulsante =(Button) findViewById(R.id.button);
        pulsante.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View view) {
                card = Environment.getExternalStorageDirectory();
                file = new File (card.getAbsolutePath(),"dati.json");
                try {
                    out = new FileOutputStream(file);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                try {
                    writer = new JsonWriter(new OutputStreamWriter(out,"UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                try {
                    writer.beginObject();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    writer.name("nome").value("Luca");
                    writer.name("cognome").value("Innocenti");
                } catch (IOException e) {
                    e.printStackTrace();
                }

                try {
                    writer.endObject();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                ;


            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 1: {

                // If request is cancelled, the result arrays are empty.                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    Log.d("permission", "granted");
                } else {


                    Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show();

                    onDestroy();
                }
                return;
            }
        }
    }
}

giovedì 19 ottobre 2017

Bash ftp script

uno script bash per inviare dati in FTP
un paio di dettagli

  1. per usare le wildcard si devono i comandi mdel ed mput
  2. Per usare mput con la wildcard ci si deve prima spostare nella directory in cui sono contenuti i file mediante lcd perche' mput non permette di inserire il path completo ma solo il nome file
  3. ftp -ni indica una sessione non interattiva e in modalita' autologin
  4. quote serve ad inviare il contenuto della variabile al server remoto
------------------------------------------------------------------------------
#!/bin/sh
HOST="ftp.xxxxxxxxx.it"
USER="xxxxxxxx@aruba.it"
PASSWD="xxxxx"

ftp -ni $HOST<<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd xxxxxx/yyyy/zzzzz/
mdel *
lcd /home/luca/
binary
mput *.ics
quit
END_SCRIPT
exit 0


SSH e disconnessione sessione

Succede piuttosto spesso di dover utilizzare una connessione remota in SSH e lanciare dei comandi (tipicamente delle query). Tipicamente quando si chiude una sessione ssh si uccidono anche tutti i processi che si erano aperti nella sezione. Per risolvere questo problema viene in aiuto il comando nohup

ssh luca@ip.ip.ip.ip "nohup /home/luca/comando> /dev/null 2>&1 &"

con la sintassi sopra riportata si lancia comando sia SSH senza che il suo processo venga chiuso al termine della sessione

FTP Client su Midnight Commander

A volte puo' essere utile avere un client FTP che funzioni su una shell testuale, in particolare quando si usa una connessione SSH. Una soluzione molto comoda e' quella di utlizzare Midnight Commander

Per prima cosa si deve creare e popolare il file netrc

touch ~/.netrc
chmod 600 ~/.netrc
nano ~/.netrc

A questo punto si inseriscono le configurazioni di connessione al server FTP con la sintassi

machine ftp.test.it login luca password test

a questo punto si apre Midnight Commander, Left (o Right) -> FTP Link e si digita l'indirizzo del server FTP. In questo modo in uno dei due pannelli viene mostrato il contenuto della directory FTP



mercoledì 11 ottobre 2017

SSTV


Slow Scan Television e' un metodo per inviare immagini/video utilizzando lo stesso canale radio impiegato anche per le comunicazioni voce ed ha origini che si perdono agli albori dell'esplorazione spaziale per inviare immagini dalle sonde verso Terra (anche le prime missioni Apollo utilizzavano SSTV)



La cosa divertente e' che oggi con due semplici terminali Android si puo' effettuare la codifica e decodifica di immagini in SSTV con le applicazioni gratuite SSTV Encoder e Robot36 (che e' il nome di uno dei formati previsti)

Il formato dati e' variabile in dimensione e numero di colori..una immagine in bianco e nero di 120x120 pixel impiega al minimo 8 secondi per essere trasmessa (e ricevuta)



Attualmente e' possibile ricevere immagini via SSTV dalla stazione spaziale internazionale


martedì 10 ottobre 2017

Draft su Lyx

Qui viene indicato come inserire in filigrana una scritta (tipicamente Draft) su un documento editato con Lyx

Qui si inizia scaricando il  pacchetto da qui. Si decomprime e si lancia il file Make...su Centos 7 per terminare correttamente la compilazione e' necessario oltre al pacchetto Lyx anche gv (ghostview)




al termine si copiano i file draftcopy.sty e draftcopy.cfg nella stessa directory dove si trova il file che si sta editando

si modifica quindi il Latex Preamble in Lyx menu Document/Settings/LaTex Preamble con il codice
\usepackage{draftcopy}

per ottenere il risultato si deve fare il preview con pdflatex


lunedì 9 ottobre 2017

Modificare grandezza delle iconde desktop di Centos 7

Le icone sul desktop di Centos 7 sono fastidiosamente grandi, indipendentemente dalla risoluzione. Come si risolve ?? cosi'

 gsettings set org.gnome.nautilus.icon-view default-zoom-level small

per creare uno shortcut sul desktop di una applicazione la via piu' semplice e' copiare il file .desktop da /usr/share/applications/ in /home/user/Desktop

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