lunedì 10 marzo 2014

Documentario sui Frattali

Frugando su Internet ho trovato questo video ed e' stato un salto nel passato.
Correvano i primi anni 90 (non ricordo bene ma doveva essere 91-92) quando con due amici matematici lo comprammo via posta da LeScienze


Ci capii poco allora (come adesso) ma ricordo bene i tentativi di fare musica frattale con Olivetti M24 (e prima con un Commodore 64)

Target Mode su Mac

Ancora una volta mi sono trovato a dover passare dati tra il Mac Mini ed un altro computer.
In precedenza avevo utilizzato una Debian Box su cui avevo montato un FTP Server ed avevo scaricato i dati via rete mediante cavo cross (su PPC e' disponibile Transmission)

(ps sconsigliatissimo anche solo provare a copiare 100 Giga di dati usando dischi esterni USB)

Stavolta pero' il passaggio era Mac2Mac (da MacMini a MacBook late 2007) per cui ho voluto provare il trasferimento via cavo FireWire


Mediante il Target Mode e' possibile infatti che il computer sorgente dei dati venga avviato solo come se fosse un disco esterno. La procedura prevede di accendere la macchina target tenendo premuti i tasti CTRL+T. Se il comando e' riconosciuto a monitor si osserva l'icona dell'immagine sovrastante e compare una nuova unita' nel Finder

La velocita' di trasmissione e' stata di leggermente superiore ad 1Gigabyte/minuto

Nota bene: di solito non uso tastiera Apple connesse a Mac. Nel caso in esame, ho sempre utilizzato una tastiera Logitech Internet Navigator connessa al Mac Mini

Con questa tastiera mi e' stato impossibile entrare in Target Mode. Sostituendo con una tastiera USB con funzionalita' di base invece tutto ha funzionato

lunedì 3 marzo 2014

Linux su IBook A1054

Giusto per divertimento ho voluto provare a montare Linux su un IBook G4 A1054 che attualmente monta Mac OS X 10.4 e che svolge ancora decentemente il suo lavoro

Per rendere la cosa piu' semplice mi sono indirizzato su una distribuzione LUbuntu


Gia' dai primi passi iniziano i problemi. Il live CD entra in errore e stalla completamente con l'errore Fixing recursive fault but reboot is needed


Dopo qualche ricerca il sistema si e' avviato digitando al boot la seguente strina

live video=radeonfb:1024x768-32 snd-powermac.blacklist=yes

la prima parte rende utilizzabile X (altrimenti parte in modalita' 8 colori e l'installer si blocca) mentre la seconda risolve il problema sulla scheda audio che blocca il boot

Arrivati al momento di effettuare le partizioni si vede che non c'e' il supporto per il ridimensionamento delle partizioni HFS+. Sono ripartito sotto Mac OS X ed ho cercato di dividere il disco mediante Disk Utility ma con Mac OS X 10.4 non e' prevista questa opzione (presente sicuramente su 10.6)



Alla fine dei conti ne vale la pena formattare un disco di un calcolatore funzionante di cui non ho i dischi di reinstallazione (ho perso il DVD di installazione di 10.4) solo per provare una Ubuntu sicuramente poco supportata....diciamo di no. Mi sono tenuto il Mac funzionante con Os X anche se fa un certo effetto Linux anche su hardware Apple

giovedì 13 febbraio 2014

"Unable send data to printer" dopo aggiornamento

Dopo un aggiornamento di Cups ho perso il controllo della stampante Samsung ML-2160


L'unica soluzione che ho trovato e' stata quella di entrare nell'amministrazione di CUPS http://localhost:631/admin) e ricreare una nuova stampante. A questo punto e' stato possibile stampare ed eliminare la precedente stampante che risulta bloccata

lunedì 10 febbraio 2014

Kinect su Debian


Grazie ad un amico che e' passato su XBoxOne ho potuto provare la vecchia versione di Kinect da XBox360.

Per interagire con il dispositivo si deve usare (su computer non Windows) la libreria OpenKinect che ho compilato dai sorgenti mediante i comandi

apt-get install cmake libglut3-dev pkg-config build-essential libxmu-dev libxi-dev libusb-1.0-0-dev

git clone https://github.com/OpenKinect/libfreenect.git 
cd libfreenect
mkdir build
cd build
cmake .. 
make
sudo make install
sudo ldconfig /usr/local/lib64/

per verificare che il tutto funzioni si puo' lanciare il comando glview



Il sistema funziona ma l'aspetto piu' interessante e' quello delle interpretazioni delle gesture in modo da rendere veramente interattivo il kinect.
La soluzione piu' semplice e' quella di usare Processing con la libreria Simple OpenNI (che si installa dall'interno di Processing con il menu Sketch->Import Library->Add Library. Esistono molti esempi in questo campo ed anche un libro (sull'interazione tra Kinect ed Arduino) ma con la versione 2 della libreria gli sketch non sembrano funzionare ed e' bene usare gli esempi legati alla libreria scaricata)





Funziona tutto tranne il fatto che viene mostrato questo errore

Listening for transport dt_socket at address: 8276
libEGL warning: failed to create a pipe screen for i965
Smooth is not supported by this hardware (or driver)

per questo motivo non e' possibile vedere il tracking delle mani nel video sottostante (esempio Hands3D)


venerdì 7 febbraio 2014

Trasduttore lineare potenziometrico con Arduino Uno e ADS1115


La prova effettuata in questo post e' stata ripetuta con uno strumento della ditta Controls model 82 P0330, questo perche' il calibro centesimale e' specifico per questo strumento



Il trasduttore presenta un connettore a 6 poli come quello dello schema sottostante. Di fatto i poli utili sono solo 3 


e questa e' la pedinatura dei colori
5V = colore rosso
Segnale = marrone
GND = blu

lo strumento e' stato collegato ad una Arduino Uno mediante un ADC a 16 bit ADS1115
A differenza del precedente strumento il segnale oscilla tra 5 V (pistone completamente esteso) a 0 V (pistone completamente compresso)




lo sketch impiegato e' stato il seguente (gain a 2/3) vista l'uscita dello strumento
-----------------------------------------------
#include <Wire.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */

void setup(void) 
{
  Serial.begin(9600);
  //                                                                ADS1015  ADS1115
  //                                                               -------  -------
  ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
  
  ads.begin();
}

void loop(void) 
{
  int16_t adc0, adc1, adc2, adc3;

  adc0 = ads.readADC_SingleEnded(0);
  Serial.print("AIN0: "); Serial.println(adc0);
  delay(100);
}

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

questa e' la tabella delle misure


Le misure erano stabili fino alle decine mentre le unita' non possono considerate rappresentative

Ed ecco i grafici (una serie in compressione, l'altra in distensione)



In conclusione si e' vista una ottima linearita' dei dati. Considerando che per un millimetro cambiano circa 2645 DN e dato che le unita' sono poco significative si puo' dire che la minima variazione letta con sicurezza e' 1mm/264 = 0.004 mm. Dato che il calibro e' di tipo centesimale si ha che il traduttore legge tranquillamente dati precisi al centesimo di millimetro

venerdì 31 gennaio 2014

Phonegap-Cordoba 3.0 con Android/Ios/FirefoxOS

Visto che oramai ho terminali Android, Ios e FirefoxOs ho voluto riprovare ad usare Phonega e nel frattempo le procedure di installazione sono decisamente cambiate


Phonegap/Cordoba si installa mediante Node.js per cui si deve prima installare il pacchetto Node.Js
Su Windows e MacOs c'e' un semplice installare mentre su Linux Node.js si installa scaricando direttamente i sorgenti e con la classica procedura
./configure
make
make install
(la procedura non e' rapidissima)

successivamente si inizia ad installare Phonegap con il comando
npm install -g phonegap
(forse e' inutile ma ho installato anche Cordova)
npm install -g cordova


si crea quindi il progetto
phonegap create hello com.example.hello HelloWorld
cd hello

e qui iniziano le differenze che ho trovato con le istruzioni ufficiali del sito

per creare il progetto Phonegap Android si deve dare direttamente il comando
phonegap build android
(devono essere setttata la Path per trovare la directory tools e platform-tools dell'SDK di Android altrimenti il comando fallisce con il comando
)
oppure
phonegap build ios

per lanciare l'esecuzione sul telefono
phonegap run android

oppure
phonegap run ios
(se non viene trovato il telefono fisico viene lanciato in automatico l'emulatore.

Nel caso di IOS deve essere prima installato il pacchetto ios-sim con i comandi
sudo su
xcodebuild -license
npm install -g ios-sim
)
Lanciato il comando l'emulatore parte ma si arriva a questo errore

Di fatto la directory www del progetto creato su Ios risulta vuota (c'e' solo un file .xml). Per risolvere il problema l'unica soluzione che ho trovato e' stata quella di copiare la directory www da un progetto Phonegap creato su Linux. Fatto cio' tutto inizia a funzionare perfettamente

A questo per aggiungere funzionalita' legate all'hardware dei telefoni si devono installare i plugin per le varie funzionalita'. Per test e' stato scaricato ed attivato il 

cordova plugin add org.apache.cordova.device

Ed ecco lo stesso programma di esempio che funziona, senza modifiche, sulle due piattaforme Android ed Ios

Phonegap su Ios

Phonegap su emulatore Android in Ios

si puo' aggiungere al progetto anche FirefoxOs mediante
cordova platform add firefox

il problema e' che l'emulatore di Firefox Os non funziona sotto Mac Os X (almeno al momento in cui scrivo questa riga). Parte e si chiude dopo qualche secondo. Per ovviare al problema ho spostato tutta la cartella della piattaforma Firefox sull'emulatore di Windows e selezionato il file manifest.
Si osserva che il supporto di Phonegap a Firefox e' ancora poco maturo in quanto le API ancora non funzionano (almeno quelle dell'esempio)









Opencv camera calibration in cpp

Oltre che con uno script Python come visto qui la calibrazione della camera si puo' fare anche con il programma in CPP Questo il proce...