venerdì 27 settembre 2013

Sqlite in Php per uso Web



Per poter effettuare delle operazioni di Insert/Update/Delete su database Sqlite gestito da interfaccia Web e' necessario che il file di database abbia i permessi corretti

Non e' sufficiente settare a 777 i permessi del file .db ma deve essere anche impostato come proprietario del file l'utente apache (che su Debian e' www-data) con il seguente comando (attenzione ai punti)
----------------------
chown www-data. . 
----------------------

in caso contrario degli script sintatticamente corretti non funzioneranno

giovedì 26 settembre 2013

Nexus 7 ed Rfid

Un piccolo problemino con Nexus 7: nonostante tutti i Nexus condividano il medesimo chip ed antenna per l'NFC/RFID su Nexus 7 non sempre viene riconosciuto il tag


la soluzione e' semplice: l'antenna non e' grande quanto la dimensione del dispositivo ed e' ubicata poco sopra la E della scritta Nexus. Per leggere i tag e' quindi necessario strusciarli  nella posizione esatta dell'antenna

MTP in Nexus 7 e Debian Testing

Con il Nexus 7 e Android 4.3 e' cambiato il sistema per accedere alla memoria di Android
Se prima per abilitare la memoria si doveva esplicitamente cliccare attualmente inserendo il cavo USB viene riconosciuta subito una unita' esterna

Il protocollo di trasmissione dati e' MTP e, come si vede dall'immagine sottostante, Debian testing monta automaticamente il dispositivo



Cercando di copiare dati si generano in modo abbastanza casuale errori di questo tipo


Ho notato che modificando il nome del file permette di compiere senza errori l'operazione ed in altri casi e' la dimensione del file che genera l'errore

Ho provato ad aggiornare libmtp all'ultima versione compilando dai sorgenti ma senza sensibili miglioramenti. Ho quindi compilato dai sorgenti il programma Mtpfs (link) con poco successo (il dispositivo e' stato montato ma era molto lento nel fare la lista dei file presenti)

Ho provato anche questo sistema ma senza significativi miglioramenti

In buon sostanza la cosa migliore al momento rimane Airdroid

Postare su GMail con Temboo in Php


Insieme ad Arduino Yun viene fornito anche il supporto per Temboo, un metodo semplice per utilizzare le API di diversi servizi Web come per esempio Google o Facebook

Per utilizzare questo metodo, dopo essersi registrati, si deve individuare quali sono le Application Keys. Per l'account Free e' possibile definire una sola applicazione con un limite di 1000 transazioni/mese 



Si puo' quindi scaricare l'SDK preferito (in questo caso Php) e creare il seguente semplice script
Di fatto devono essere inserite le credenziali di Temboo (username=c1p81, Appname = myFirstApp e Secret Key) e poi le variabili per spedire la mail con le credenziali (in chiaro....scelta un po' opinabile) di Google
----------------------------------------------------------
<?
require './php-sdk/src/temboo.php';
$session = new Temboo_Session('c1p81', 'myFirstApp', '09d467e6-xxxxxxxxxx');
$sendEmail = new Google_Gmail_SendEmail($session);
$sendEmailInputs = $sendEmail->newInputs();
$sendEmailInputs->setMessageBody("Da Giglio")->setSubject("Giglio automatico")->setUsername("lucainnoc")->setPassword("xxxxxx")->setFromAddress("lucainnoc@gmail.com")->setToAddress("l.innocenti@xxxxxxx.it");
$sendEmailResults = $sendEmail->execute($sendEmailInputs)->getResults();
?>

Ancora su Arduino Yun


Un po' di aggiornamenti sulla Yun

1) Al contrario di Arduino Uno, gli sketch di Yun non si resettano quando si collega il terminale sulla seriale virtuale. Per effettuare il reset si deve premere il pulsante fisico di reset oppure collegarsi alla serial con una velocita' di 1200

2) Nelle configurazioni avanzate e' presente un menu avanzato per visualizzare lo stato della rete denominato Luci


3) Se la Yun non e' in modalita' Access Point e' possibile collegarsi in SSH. L'utente e' root e la password e' quella che e' stata impostata dall'utente


4) Dopo un riavvio da modalita' Access Point a modalita' normale la Yun non puo' essere pingata ma solo chiamata con il nome impostato (per esempio c1p81.local).

5) Direttamente dal forum di Arduino Yun il pinout
6) Per poter osservare i messaggi che prima si potevano inviare sulla seriale virtuale quando vi e' la sola connessione WiFI od Ethernet si deve usare la libreria Console.h al posto di Serial.h. I messaggi si osservano come al solito sul monitor serial della IDE
Per esempio
------------------------------
#include <Console.h>

void setup() {
  Bridge.begin();
  Console.begin(); 

  while (!Console){
    ; // wait for Console port to connect.
  }
  Console.println("You're connected to the Console!!!!");
 }

void loop() {
 }

Httpclient con Arduino Yun

Un primo esempio dell'HttpClient di Yun

-----------------------------------------
#include <Bridge.h>
#include <HttpClient.h>
#include <Console.h>


void setup() {
  Bridge.begin();
  Console.begin(); 
  while (!Console) {
  }
  Console.println("Inizio"); 
}

void loop() {
  HttpClient client;
  client.get("http://mxxxxxxxx/luca/examples/like3.php");

  while (client.available()) {
    char c = client.read();
    Console.print(c);
  }

  Console.flush();

  delay(5000);
}
-----------------------------------------

Questa e' la risposta del server

m.msn.unifi.it:80 151.44.64.150 - - [19/Sep/2013:16:17:02 +0200] "GET /luca/examples/like3.php HTTP/1.1" 200 394 "-" "curl/7.29.0"

Budenza Demo 1994


Frugando su Internet ho trovato questa demo scritta nel 1994 da un paio di miei amici (tanto per dare l'idea era scritta per DOS e sviluppata su 386 e 486 per le VGA)
L'aspetto ancora piu' curioso e' che all'epoca Internet era (in Italia) ancora sostanzialmente sconosciuta ed infatti sono riportati gli indirizzi mail in formato FIDO-Net (BBS Telin)

All'epoca ne seguii di riflesso lo sviluppo (conoscendo anche alcuni trucchi che sono stati utilizzati per gli effetti grafici) e non mi sarei mai aspettato di metterla in esecuzione 19 anni dopo in una Debian Box








Elettronica in un telefono

Per tentare di recuperare un po' di elettronica ho smontato un telefono da tavolo
Con mia grande sorpresa la scheda si presentava come nella foto sottostanti

In pratica di elettronica discreta sono presenti solo

n.1 A7275AL-A52533
n.2 switch
n.4 diodi
n.10 resistenze
n.1 buzzer

in buona sostanza tutte le funzionalita' (tastiera + telefonia) sono racchiuse in un solo chip con pochissimi altri componenti


a




Libsoup crash in Eclipse 64 Bit

Se si utilizza Eclipse 64 bit per Android c'e' un fastidioso bug nella gestione della libreria libsoup

Per correggere il problema si deve correggere il file eclipse.ini aggiungendo la seguente riga
-Dorg.eclipse.swt.browser.DefaultType=mozilla
informazione ripresa da https://bugs.eclipse.org/bugs/show_bug.cgi?id=405786

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f1c73b60ab1, pid=5477, tid=139761754089216
#
# JRE version: Java(TM) SE Runtime Environment (7.0_40-b43) (build 1.7.0_40-b43)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.0-b56 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libsoup-2.4.so.1+0x6fab1]  soup_session_feature_detach+0x11
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/luca/android/eclipse/hs_err_pid5477.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.

mercoledì 25 settembre 2013

Display 7Led con controller MAX72XX in Arduino


In questo post viene mostrato un esempio per utilizzare i display a 7 Led abbinati al controller MAX72XX con Arduino (in questo caso una Yun)

Sono necessari 5 connessioni
VCC
GND
DIN (al pin 7 nello sketch sottostante)
CLK (al pin D6 nello sketch sottostante)
LOAD o CS (al pin D5 nello sketch sottostante)

la libreria di riferimento e' LedControl che deve aggiunta all'ambiente di sviluppo per poter compilare correttamente lo sketch sotto riportato


Lo sketch effettua un conteggio alla rovescia e poi mostra una stringa


Curiosamente utilizzando un diverso display (con i numeri piu' grandi) le posizioni dei caratteri sono invertite usando il medesimo sketch




---------------------------------
#include "LedControl.h" 

// Arduino 
//D7 to DIN, 
//D6 to Clk, 
//D5 to LOAD, su alcuni Led il pin e' denominatoCS
//1 = numero del dispositivo, in questo caso e' uno solo

LedControl lc=LedControl(7,6,5,1); 
void setup() 
{
// Initialize the MAX7219 device 
lc.shutdown(0,false); // Enable display 
lc.setIntensity(0,10); // Set brightness level (0 is min, 15 is max) 


void loop() 

{
lc.clearDisplay(0); // Clear display register

 //setDigit
//il primo numero indica il display
//il secondo la posizione partendo da sinistra con valore 0
//il numero da mostrare
for (int s=5;s>=0;s--)
   {
  for (int t=9;t>=0;t--)
      {
      lc.setDigit(0,3,s,false);
      lc.setDigit(0,4,t,false);
      delay(1000);
      }
   }

lc.clearDisplay(0); // Clear display register

//usando setChar si puo' invece mostrare alcuni caratteri
lc.setChar(0,2,'L',false);
lc.setRow(0,3,0x1c);
lc.setChar(0,4,'c',false);
lc.setChar(0,5,'a',false);
  
delay(4000); 
}

lunedì 23 settembre 2013

Abilitare la funzionalita' di sviluppatore in Android 4.3

Nel menu' di Android 4.3 sono (a prima vista) scomparse le opzioni per mettere in modalita' sviluppatore il device Android..cio' vuol dire che si cerca il device con adb la lista risulta vuota

In realta' esiste un trucco piuttosto subdolo. Per prima cosa si deve andare in Informazioni sul tablet e cliccare ripetutamente sul Numero Build...compare un contatore (in una toast)


Alla fine appare la scritta "Sei diventato uno sviluppatore"

Adesso si puo' tornare indietro di un menu e compare Opzioni sviluppatore


E da qui si puo' abilitare l'opzione di debug

Ripreso da qui

martedì 17 settembre 2013

Configurazione iniziale di Arduino Yun




Una volta accesa la Arduino Yun, questa si configura in modalita' access point e compare nell'elenco delle reti disponibili senza nessuna protezione


Accoppiandosi con la rete Arduino e digitando 192.168.240.1 si arriva al pannello di configurazione Web (la password di default e' Arduino)


Si preme quindi Configure per associare la scheda alla rete wireless


Nel menu a tendina viene presentata la lista delle reti WiFi disponibili


Terminata la configurazione la Arduino si riavvia sulla nuova rete e lo stesso si deve fare con il computer/portatile di lavoro


Per programmare Arduino Yun e' necessario installare l'ambiente di sviluppo della serie 1.5 (al momento 1.5.4). La cosa divertente e' che Yun si puo' programmare direttamente wireless senza la necessita' di un cavo USB. Nel menu Port infatti compare il dispositivo con il suo numero di rete (viene individuato in automatico)



Per caricare gli sketch e' necessario digitare la password di rete



Primi problemi con Arduino Yun

Cercando di accoppiare la Arduino Yun con un Access Portatile Onda PN51T, la Arduino non compariva nelle periferiche di rete
Arduino Yun e PN51T

La schermata di errore

Osservando meglio il file di log della Arduino si legge chiaramente che Yun ha effettuato l'accoppiamento con l'access point ma poi si e' generato un errore

"HT AP is missing WMM params or HT capability/operation in AssocResp"

Soluzione : ho attivato l'hotspot portatile su Android e tutto ha funzionato

Yun con Access Point Android

lunedì 16 settembre 2013

Compilare OpenGl con CodeBlocks

Per compilare gli esempi di OpenGL derivanti dal sito Nehe in Windows si puo' prima installare Code::Blocks con MingW
Successivamente si installa la libreria OpenGL scaricando questo file (vedi sito originale)
A questo punto si copia manualmente.
1) il file glut32.dll in C:\Windows\System32
2) il file libglut32.a in C:\Programmi\CodeBlocks\MinGW\lib
3) il file glut.h in C:\Programmi\CodeBlocks\MinGW\include


Fatto cio' si puo' creare un nuovo progetto vuoto e con clic destro si selezionano le Build Options (vedi figura sottostante)


Nel tab Linker Settings si aggiungono opengl32, glu32 e glut32


Si puo' quindi procedere con la compilazione con il primo degli esempi OpenGl di Nehe




Sqlite e Php

Un metodo semplice per avere un database su un sito Web senza utilizzare un sql server e' quello di impiegare sqlite (che non e' basato su un motore sql ma su semplici file)

Per l'installazione si procede semplicemente con

apt-get install php5-sqlite


Di seguito un breve codice che crea il file di database (rfid.db), crea una tabella all'interno, la popola ed effettua una select rilasciando poi l'oggetto db
---------------------------
<?php
$db = new PDO('sqlite:rfid.db');
$db->exec("CREATE TABLE rfid (rfid TEXT,token TEXT)");  
$db->exec("INSERT INTO rfid (rfid, token) VALUES ('12345', 'abcdef');");
$results = $db->query('SELECT * FROM rfid');
foreach($results as $row)
{
print $row['rfid']."-".$row['token']."<br>";
}
$db = NULL;
?>

Mac Os X in Virtualbox

Mac Os X e' virtualizzabile su VirtualBox in modo nativo ma non e' banale da configurare.

Si ricorda che pur possedendo una licenza di OsX (come nel mio caso) non e' possibile in modo legale virtualizzare il sistema


Per prima cosa va scelto il sistema a 64 Bit (almeno per le versioni moderne tipo Mountaion Lion)


Successivamente si deve garantire almeno 1Gb di Ram, si deve selezionare ICH9 e si deve togliere l'abilitazione di EFI

Per le CPU piu' sono meglio e'

Ovviamente devono essere abilitate le accelerazioni hardware

La memoria video deve impostata al valore massimo con accelerazione hardware



Per quanto riguarda i dischi che si devono montare non riporto le indicazioni esatte perche' si tratta di materiale che puo' essere reperito in modo non legale dai torrent. L'unica cosa che si puo' dire e' che bisogna montare prima un boot da cdrom assieme al' hd virtuale.
Attenzione : e' riportato da altri utenti  che i file che si scaricano da torrent effettuano traffico via rete su indirizzi non appartenenti ad Apple. Cio' puo' voler indicare che nel file immagine sia installato software legato a botnet o simili. Per questo motivo io lo ho provato con la scheda di rete virtuale disattivata


Se si avvia il sistema si entra nell'installazione


e poco dopo si arriva al desktop


Al momento non sono riuscito a far funzionare le estensioni di Virtualbox per cui non sono disponibili il copia/incolla, le cartelle condivise e la modalita' a tutto schermo

Guest SO 64 Bit in Virtualbox

Per usare un sistema operativo in modalita' Guest in Virtualbox non e' sufficiente avere il sistema Host a 64 bit.



Devono essere infatti attivate le opzioni AMD-V e VT-x. Esistono infatti alcuni processori (un po' vecchietti ma sono quelli che uso io) che hanno l'estensione 64 bit ma non la virtualizzazione
Inoltre deve essere impostata la giusta versione del SO dal menu a tendina. Come si puo' vedere dalla figura sottostante esistono differenti opzioni per la versione 32 e 64 bit del medesimo SO


The Playground is Open : Nexus 7

E' arrivato il Nexus 7
Si tratta della versione 2012 perche', con l'ingresso del nuovo modello, i prezzi sono piu' accettabili


La confezione e' oramai simile a quella di mille altri prodotti informatici (leggi Apple)

Dotazione minima (niente cuffie)



domenica 15 settembre 2013

Retrogaming con Chameleon PI

Un progetto interessante per trasformare una Raspberry in una piccola stazione di gioco e' Chameleon Pi, una modifica del sistema operativo base con preinstallati alcuni emulatori di consolle di retrogaming ed una interfaccia minimale


L'idea e' molto carina anche se la sostanziale mancanza di documentazione rende un po' difficile l'avvio per un principiante. Di fatto, dopo aver copiato i dati sulla scheda SD ed avviato il sistema si puo' fare ben poco perche' mancano i file ROM per gli emulatori
Sul sito vengono consigliati come sistemi
1) connettersi alla condivizione Samba denominata rpichameleon con username zx e password spectrum
2) connettersi in SSH (stesse credenziali)

per il primo sistema c'e' da dire che Chameleon Pi e' settato in DHCP quindi si deve prima capire quale e' l'IP della Raspberry e poi avviare la condivizione
nel secondo caso invece ci si trova nella home directory dell'utente zx ma non si capisce dove inserire le ROM

Leggendo invece l'help direttamente all'interno dell' SD Card si scopre che le ROM sono contenute in una partizione a se stante. Per cui la cosa piu' comoda e' inserire la SD nel lettore e digitare (nel mio caso)

mount /dev/mmcblk0p3 /media/sdcard

per copiare velocemente le ROM
Attenzione: tra le directory vi e' anche una dir denominata amiga ma non e' presente nessun emulatore Amiga per cui al momento e' inutile copiare 

E si arriva al secondo problema critico ovvero la non uniformita' dei comandi e dei modi per mettere in esecuzione le varie ROM dei giochi. Visto che ogni emulatore e' nato come progetto a se stante i tasti funzione sono sempre differente e non sono documentati all'interno di Chameleon Pi.

Di seguito una breve sintesi

Chameleon Pi
Frecce : per scorrere a destra e sinistra la lista emulatori
Enter : per selezionare
Q : Shutdown della Raspberry
O : entra nella opzioni. da notare quella effettuare il ridimensionamento della partizione delle ROM
T : lancia il terminale (exit per chiudere il terminale)
Molto carino il salvaschermo (raccolta di schermate di errore dei vari SO) anche se ti fa venire un infarto....il primo che si visualizza e' un finto kernel panic




Emulatore NES
i file ROM sono quelli con estensione .nes e vengono direttamente elencati come nell'immagine sottostante
Per iniziare il gioco premere Enter
P = Pausa
Z = Fuoco 1
H = Reset del gioco
Esc = esce dall'emulatore




Arcade (AdvancedMame)
Le varie ROM si possono salvare direttamente in formato ZIP di cui si vede la lista una volta effettuata la selezione Arcade



I Tasti funzione sono
CTRL = Fuoco 1
ALT = Fuoco 2
5 = inserire moneta
1= 1 giocatore
2 = 2 giocatori
P = pausa
Esc = esce dal gioco e due volte esce dall'emulatore

Megadrive (OGEN)
Il formato delle immagini ROM e' .md




Atari 2600 (Stella)
Il formato file per le ROM Atari e' .bin 
I pulsanti sono
Fuoco : CTRL




Gameboy (Gnuboy)
Il formato delle immagini ROM e' .gbc




Commodore 64 (Vice)
non ho ancora capito come funziona. In Vice normalmente c'e' un menu nella finestra ma in questo caso si apre direttamente a tutto schermo. Digitando la combinazione Alt+8 dovrebbe aprirsi la finestra per la selezione dell'immagine disco ma niente compare