giovedì 7 febbraio 2013

Autenticazione su Linux con chiave USB

Ognuno di noi ha qualche chiavetta USB vecchia e poco capiente abbandonata in qualche cassetto ... perche' non usarla??




Nel mio caso ho usato una vetusta chiave Lexar Media da 32 Mb (!!!!) per usare una autenticazione automatica su Linux

per prima cosa si devono scarica i pacchetti pam

apt-get install pamusb-tools libpam-usb

successivamente si inserisce la chiave che si intende configure e si lancia

pamusb-conf --add-device my-usb-stick

seguito da 

pamusb-conf --add-user luca

(dove luca e' il nome dell'utente da configurare)

gia' finito almeno usando una Debian Testing....si puo' vedere il video allegato per verificare il funzionamento. In pratica alla finestra di login si inserisce la chiavetta e si digita il solo username (nel caso in cui non si ha la chiavetta il login e' automatico)



Eventualmente (se si usa Gnome) si puo' settare il comando che all'estrazione della chiavetta fa partire lo screensaver con il lock del monitor modificando il file /etc/pamusb.conf come segue
----------------------------------------------------------------------
<user id="ubuntu-user">
 <device> my-usb-stick </device> 
<agent event="lock">gnome-screensaver-command -l</agent> 
<agent event="unlock">gnome-screensaver-command -d</agent> 
</user>
----------------------------------------------------------------------

Testare PhoneGap con Ripple

Uno dei problemi maggiori di PhoneGap e' quello di non poter usare il debugger integrato nell'Android SDK in quanto tutto il codice e' Javascript

Per questo motivo puo' essere utile testare il solo codice HTML5 e PhoneGap in un ambiente esterno e la soluzione puo' essere utilizzare Ripple, una estensione per Chrome che permette questo tipo di operazione

Per prova e' stato utilizzato il codice del post precedente ed e' stato configurato un web server locale nel quale sono stati inseriti i file della cartella assets del progetto



Come si puo' vedere e' possibile simulare le accelerazioni e si osserva il programma in esecuzione come se fosse su un telefono reale

PhoneGap



PhoneGap e' un insieme di API che permette di interagire con l'hardware dei dispositivi mobile (Android, IPhone, WebOs ed altri) direttamente da HTML5 ed e' quindi sostanzialmente indipendente dal linguaggio nativo del sistema operativo di ogni telefono


Windows
installare Java JDK (non JRE)
installare Eclipse
installare Android SDK ed ADT
installare Ant
aggiungere alla path le directory platform-tools e tool dell'Android SDK
aggiungere alla path la directory bin del pacchetto ant
eseguire i comandi sottostanti
--------------------------------
C:\>set JAVA_HOME="C:\Programmi\Java\jdk1.7.0_09\bin"
C:\>set PATH=%JAVA_HOME%\bin;%PATH%
--------------------------------


Linux
in Linux (Debian Testing) l'unico problema e' relativo al fatto che stranamento ant non e' incluso in openjdk-7 ma nella versione 6 per cui deve essere scaricato il pacchetto precedente


Una volta configurato il sistema si procede andando nella directory
/phonegap/lib/android/bin
e si lancia il comando
create /directory_lavoro  com.prova.test phonegap

che creera' un nuovo progetto nella directory di lavoro.
A questo punto si apre Eclipse e si crea un nuovo progetto da Android Project From Existing code e si punta alla directory create

Il risultato sara' qualcosa di questo tipo




si vede subito che la funzione main e' piuttosto stupida in quanto crea un WebView che punta al contenuto di assets

phonegap.java
-------------------------------------------------------

public class phonegap extends DroidGap
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
    }
}
----------------------------------------------------------
quindi il codice da mofidicare e' index.html.


Nel seguente esempio ho provato a vedere il risultato dell' accelerometro
Index.html
-------------------------------------------------------

<!DOCTYPE html>
<html>
  <head>
    <title>Accelerazione</title>

    <script type="text/javascript" charset="utf-8" src="cordova-2.3.0.js"></script>
    <script type="text/javascript" charset="utf-8">

    document.addEventListener("deviceready", onDeviceReady, false);

    function onDeviceReady() {
    var options = { frequency: 3000 };
        navigator.accelerometer.watchAcceleration(onSuccess, onError);
    }

    // onSuccess: Get a snapshot of the current acceleration
    //
    function onSuccess(acceleration) {
    
    var accx = document.getElementById('accx');
    var accy = document.getElementById('accy');
    var accz = document.getElementById('accz');
    
    accx.innerHTML = 'Accelerazione X :  '     +acceleration.x;
    accy.innerHTML = 'Accelerazione Y :  '     +acceleration.y;
    accz.innerHTML = 'Accelerazione Z :  '     +acceleration.z;
    
  
    }

    // onError: Failed to get the acceleration
    //
    function onError() {
        alert('onError!');
    }

    </script>
  </head>
  <body>
    <p id="accx">Accelerazione X : </p><br>
    <p id="accy">Accelerazione Y : </p><br>
    <p id="accz">Accelerazione > : </p><br>
    
  </body>
</html>
-------------------------------------------------------

Qui il risultato di 5 minuti di lavoro. I dati vengono riaggiornati ogni 3 secondi


Considerando che ci ho messo meno di 5 minuti a capire come funziona il gioco direi che e' decisamente interessante

ADB in Virtualbox

In alcuni casi puo' essere necessario installare una macchina virtuale per sviluppare in Android senza particolari controindicazione
Qualche problema potrebbe venire dall'utilizzo di Adb con un telefono reale a causa del livello di isolamento derivante dalla macchina virtuale

Nel caso in cui si usi Virtualbox la soluzione e' costuita da installare i driver adb nella macchina host (questo per Windows, in Linux il problema non si pone) e successivamente di aggiungere mediante l'icona con il segno + il device alla macchina virtuale (vedi immagine sottostante)




A questo punto si puo' accendere la macchina virtuale e configurare il dispositivo nella macchina guest

Ping su una intera classe di indirizzi

Questo post e' un piu' un promemoria per me stesso che altro
Regolarmente  (una volta all'anno) mi trovo a dover tirare fuori dal cassetto qualche apparato di rete (in particolare qualche access point..in particolare un ben preciso access point) di cui mi sono scordato l'ip e che devo riconfigurare

Per questo motivo e' necessario effettuare una scansione completa della rete alla ricerca dell'ip dell'access point...in generale la cosa e' ristretta alla classe 192.168.x.x e 10.0.x.x

Per fare cio' e' molto comodo fping (da installare con apt-get install fping) che automatizza il compito

in generale la sintassi e'
fping -g - a 10.0.2.0/24

per scansionare la classe determinata dalla netmask e visualizzare sotto gli host attivi



ovviamente tutto cio' funziona fino a quando non e' impostato il No Ping  ma in generale gli apparati di rete non sono cosi' configurati

martedì 5 febbraio 2013

CMake


Guardando un po' a giro mi sono reso conto di quanto sono arretrato ....ero rimasto al fatto che autotools e' una cosa figa mentre e' stata sorpassata da altri concorrenti come CMake ed ho deciso di provarlo con il programma descritto a questo post

Per provare Cmake (che non e' installato di default in Debian) si deve creare il file CMakeLists.txt dove sono contenute le informazioni di compilazione come nel Makefile come il link verso la libreria SDL

CMakeLists.txt
----------------------------------------

cmake_minimum_required(VERSION 2.8)
PROJECT(CMake_TEST)
FIND_PACKAGE(SDL REQUIRED)
ADD_DEFINITIONS(-Wall -O3)
INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR})
ADD_EXECUTABLE(cmake_test test.cpp)
TARGET_LINK_LIBRARIES(cmake_test ${SDL_LIBRARY})
----------------------------------------

a questo punto, con il solo file sorgente e il CMakeLists.txt nella directory, si lancia
cmake .   (attenzione al punto)
vengono generati automaticamente altri file e se non ci sono errori si puo' digitare
make 
per compilare l'eseguibile

L'aspetto piu' interessante di CMake e' di essere indipendente dalla piattaforma e dal compilatore e puo' generare file di compilazione di Linux e Windows per i diversi compilatori supportati

Ovviamente non ha senso di usare Cmake per un caso cosi' semplice come quello utilizzato nell'esempio (e' sempre piu' veloce utilizzare la linea di comando per lanciare gcc, anche bypassando make)

Scrivere e leggere file binario in Qt

Ed adesso in confronto il metodo Qt ed il metodo standard C++ per leggere un file binario di interi

Qt
-----------------------------------------------------------

#include <QFile>
#include <QDebug>



   QFile f("/home/luca/luca.dat");
    f.open(QIODevice::WriteOnly | QIODevice::Append);
    QDataStream out(&f);
    out<<quint16(270);
    f.close();

    QFile g("/home/luca/luca.dat");
    g.open(QIODevice::ReadOnly);
    QDataStream in(&g);
    qint16 letto;
    in >> letto;
    qDebug() << letto;


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

C++
-----------------------------------------------------------
#include <iostream>
#include <fstream>
using namespace std;
int main(void){
   float fnum[4{42.22, -42.44, 1.27.8};
   int i;

   ofstream out("numeri.dat", ios::out | ios::binary);
   if(!out){
       return 1;
   }
   out.write((char *&fnum, sizeof(fnum));
   out.close();

   for (i=0; i<4; i++)
      fnum[i0.0;
   ifstream in("numeri.dat", ios::in | ios::binary);
   if(!in) {
      cout << "Cannot open file.";
      return 1;
      ;
   }
   in.read((char *&fnum, sizeof(fnum));
   cout << in.gcount() << " bytes read." << endl;
   for (i=0; i<4; i++)
      cout << fnum[i<< " ";
   in.close();
   cout << endl;
}
----------------------------------------------------------------
  
-----

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