Per il nuovo SDk di Ubuntu Phone Canonical si e' basata su QML aggiungendo una propria estensione di componenti visuali (che in QML originale sono praticamente assenti)
Per poter iniziare a sviluppare e' necessario installare le QT5 Beta 1 mediante il comando
sudo add-apt-repository ppa:canonical-qt5-edgers/qt5-beta1 && sudo apt-get update && sudo apt-get install qt5-meta-full && echo 'export PATH=/opt/qt5/bin:$PATH' >> ~/.bashrc
il repository di Ubuntu al momento riporta la versione Beta 1 mentre dal sito di Digia e' gia' disponibile la versione Beta 2 che puo' essere installata mediante il proprio installer
A questo punto si installano le estensioni dei componenti di Ubuntu a QML
sudo add-apt-repository ppa:ui-toolkit/ppa && sudo apt-get update && sudo apt-get install qt-components-ubuntu qt-components-ubuntu-demos qt-components-ubuntu-examples qt-components-ubuntu-doc notepad-qml
in maniera opzionale si puo' scaricare QtCreator per scrivere le applicazioni in QML ma in linea di principio si puo' usare qualsiasi editor di testo (anche perche', come scritto nel precedente post, l'editor visuale di QtCreator non funziona con QtQuick 2.0 ed in ogni caso non sono riconosciuto i componenti di Ubuntu)
apt-get install qtcreator
Per avere una panoramica dei componenti di Ubuntu si puo' lanciare il comando
qmlscene /usr/lib/qt-components-ubuntu/demos/ComponentShowcase.qmldsf
altrimenti degli esempi dei singoli componenti si trovano in
/usr/lib/qt-components-ubuntu/demos
venerdì 4 gennaio 2013
Aggiungere Shared Folder a VirtualBox
Nel caso in esame si scambiano file tra una macchina virtuale Guest Ubuntu e una macchina reale Host Windows Xp
Per permettere lo scambio dei file e' necessario in modo preliminare installare le Guest Additions.
In seguito si definisce sul computer Windows una directory condivisa (in questo caso con grande sforzo di fantasia chiamata scambio.....attenzione a non mettere caratteri speciali) e la si definisce nel menu Dispositivi\Cartelle Condivise di VirtaulBox
Alla fine il risultato deve essere cosi'
una ultima avvertenza: i nomi dei file che si intendono scambiare non devono contenere caratteri speciali
Per permettere lo scambio dei file e' necessario in modo preliminare installare le Guest Additions.
In seguito si definisce sul computer Windows una directory condivisa (in questo caso con grande sforzo di fantasia chiamata scambio.....attenzione a non mettere caratteri speciali) e la si definisce nel menu Dispositivi\Cartelle Condivise di VirtaulBox
Alla fine il risultato deve essere cosi'
Per finire si deve montare la cartella condivisa dentro Ubuntu con i comandi
mkdir /mnt/scambio
mount -t vboxsf scambio /mnt/scambio
una ultima avvertenza: i nomi dei file che si intendono scambiare non devono contenere caratteri speciali
giovedì 3 gennaio 2013
Aggiunge PPA ad Ubuntu dietro ad un proxy
Installare repository PPA ad Ubuntu da una rete protetta da un proxy web non e' banale
per prima cosa si devono configurare le due variabili di ambiente
export http_proxy=http://mioproxy:8080
export https_proxy=http://mioproxy:8080
questo perche' parte delle connessioni avviene sulla porta 80 e parte sul SSL
puo' accadere che quando si tentano di scaricare le chiavi GPG dal server di Ubuntu si incorra in questo messaggio
------------------------------------------
keyserver.ubuntu.com: Connection timed out
gpgkeys: HTTP fetch error 7: couldn't connect: Connection timed out
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
------------------------------------------
per scaricare il ppa desiderato ci si deve annotare la key che contraddistingue il PPA e poi si importa a parte la chiave GPG mediante il comando
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 EFF8D5ED
che utilizza espressamente la porta 80 per la connessione risolvendo i problemi del proxy
Hello World in QML
E' di oggi la notizia dell'uscita di Ubuntu for Phones e devo ammettere che la cosa mi incuriosisce soprattutto per l'SDK che inizia a venire distribuito
Il linguaggio di programmazione previsto per Ubuntu for Phones e' QML (Qt Modelling Language) che e' incluso nell'SDK di Qt
Con l'occasione mi sono scaricato anche l'ambiente di sviluppo delle Qt 5.0 Beta 2
Ho deciso quindi di fare qualche prova iniziando dal classico Hello World
Per prima cosa si deve creare un nuovo progetto dentro QtCreator selezionando QtQuick 2 UI (per usare le Qt 5.0) e si accede quindi alla finestra di programmazione che e' divisa come al solito in un editor ed in una interfaccia visuale
e si inizia subito con un bug; infatti aprendo l'editor visual e dichiarando l'uso di QtQuick 2.0 (la versione legata a Qt 5.0) viene presentato un errore non risolvibile
Scriviamo un po' di codice..il programma mostra semplicemente la scritta Hello World quando si clicca sul pulsante rosso
------------------------------------------------------------
------------------------------------------------------------
Ok tutto funziona ma.......c'e' un problemino. Per sviluppare sotto Ubuntu for Phones e' necessario importare la seguente libreria
import Ubuntu.Components 0.1
Il linguaggio di programmazione previsto per Ubuntu for Phones e' QML (Qt Modelling Language) che e' incluso nell'SDK di Qt
Con l'occasione mi sono scaricato anche l'ambiente di sviluppo delle Qt 5.0 Beta 2
Ho deciso quindi di fare qualche prova iniziando dal classico Hello World
Per prima cosa si deve creare un nuovo progetto dentro QtCreator selezionando QtQuick 2 UI (per usare le Qt 5.0) e si accede quindi alla finestra di programmazione che e' divisa come al solito in un editor ed in una interfaccia visuale
Editor del codice |
Editor della parte visuale |
Scriviamo un po' di codice..il programma mostra semplicemente la scritta Hello World quando si clicca sul pulsante rosso
------------------------------------------------------------
import QtQuick 1.0
Rectangle {
width: 160; height: 160
Rectangle {
id: redSquare
width: 80; height: 80
anchors.top: parent.top; anchors.margins: 10; anchors.horizontalCenter: parent.horizontalCenter
color: "red"
Text { text: "Click Me"; font.pixelSize: 16; anchors.centerIn: parent }
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.AllButtons
onPressed: {
hello.text = 'Hello World'
}
onReleased: {
hello.text = ''
}
}
}
Text {
id: hello
anchors.bottom: parent.bottom; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 20
text: ""
}
}
------------------------------------------------------------
Ok tutto funziona ma.......c'e' un problemino. Per sviluppare sotto Ubuntu for Phones e' necessario importare la seguente libreria
import Ubuntu.Components 0.1
in conclusione si puo' sviluppare praticamente solo usando il sistema operativo Ubuntu (o meglio Ubuntu ToolKit) e non impiegando il generico SDK di Qt (e di solito io non uso Ubuntu)
mercoledì 2 gennaio 2013
Uso di JFreeChart in Java/NetBeans
L'utilizzo di JFreeChart in NetBeans/Java e' sostanzialmente identico a quello di Android
Per prima cosa si deve creare un progetto come New Java Application e poi si devono linkare le librerie jcommon e jfreechart (le altre librerie comprese nel file zip si possono omettere)
In seguito si deve editare la funzione main come segue
Barre
----------------------------------------
package barre;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author l.innocenti
*/
public class Barre {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(2, "classe1", "1");
dataset.setValue(7, "classe1", "2");
dataset.setValue(4, "classe1", "3");
dataset.setValue(9, "classe1", "4");
dataset.setValue(6, "classe1", "5");
JFreeChart chart;
chart = ChartFactory.createBarChart
("Grafico a barre","Classe", "Valore", dataset,
PlotOrientation.VERTICAL, false,true, false);
//chart.setBackgroundPaint(Color.yellow);
//chart.getTitle().setPaint(Color.blue);
CategoryPlot p = chart.getCategoryPlot();
p.setRangeGridlinePaint(Color.red);
ChartFrame frame1=new ChartFrame("Bar Chart",chart);
frame1.pack();
frame1.setVisible(true);
// frame1.setSize(400,350);
}
}
----------------------------------------
Linee
----------------------------------------
package javaapplication7;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
*
* @author l.innocenti
*/
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
XYSeries series = new XYSeries("XYGraph");
series.add(1, 1);
series.add(1, 2);
series.add(2, 1);
series.add(3, 9);
series.add(4, 10);
// Add the series to your data set
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Generate the graph
JFreeChart chart;
chart = ChartFactory.createXYLineChart(
"Grafico XY", // Title
"asse X", // x-axis Label
"asse Y", // y-axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
false, // Show Legend
false, // Use tooltips
false // Configure chart to generate URLs?
);
ChartFrame frame = new ChartFrame("Esempio", chart);
frame.pack();
frame.setVisible(true);
}
}
----------------------------------------
Per prima cosa si deve creare un progetto come New Java Application e poi si devono linkare le librerie jcommon e jfreechart (le altre librerie comprese nel file zip si possono omettere)
In seguito si deve editare la funzione main come segue
Barre
----------------------------------------
package barre;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author l.innocenti
*/
public class Barre {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(2, "classe1", "1");
dataset.setValue(7, "classe1", "2");
dataset.setValue(4, "classe1", "3");
dataset.setValue(9, "classe1", "4");
dataset.setValue(6, "classe1", "5");
JFreeChart chart;
chart = ChartFactory.createBarChart
("Grafico a barre","Classe", "Valore", dataset,
PlotOrientation.VERTICAL, false,true, false);
//chart.setBackgroundPaint(Color.yellow);
//chart.getTitle().setPaint(Color.blue);
CategoryPlot p = chart.getCategoryPlot();
p.setRangeGridlinePaint(Color.red);
ChartFrame frame1=new ChartFrame("Bar Chart",chart);
frame1.pack();
frame1.setVisible(true);
// frame1.setSize(400,350);
}
}
----------------------------------------
Linee
----------------------------------------
package javaapplication7;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
*
* @author l.innocenti
*/
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
XYSeries series = new XYSeries("XYGraph");
series.add(1, 1);
series.add(1, 2);
series.add(2, 1);
series.add(3, 9);
series.add(4, 10);
// Add the series to your data set
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Generate the graph
JFreeChart chart;
chart = ChartFactory.createXYLineChart(
"Grafico XY", // Title
"asse X", // x-axis Label
"asse Y", // y-axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
false, // Show Legend
false, // Use tooltips
false // Configure chart to generate URLs?
);
ChartFrame frame = new ChartFrame("Esempio", chart);
frame.pack();
frame.setVisible(true);
}
}
----------------------------------------
FFT in Android e Java/NetBeans
Per elaborare i dati derivanti dai sensori posti sul telefono puo' essere utile una elaborazione della trasformata in Fourier; per il caso in esame sara' impiegata la libreria JTransform
La libreria si inserisce normalmente all'interno del progetto di NetBeans od Android
Per l'esempio non sono stati usati dati reali ma quelli calcolati dalla funzione
10sin(x)+5sin(x/2(
il codice Java (quello Android e' identico) e'
------------------------------
package javaapplication1;
import edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D;
/**
*
* @author l.innocenti
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int k;
// numero dei dati
int N = 1002;
DoubleFFT_1D dfft = new DoubleFFT_1D(N);
double[] data = new double[N];
double[] outputData = new double[N];
//crea il segnale
for (k=0;k<N-1;k++) {
data[k] = 10*Math.sin(Math.toRadians(k))+5*Math.sin(Math.toRadians(k/2));
//System.out.println(k+";"+data[k]);
}
// si usa Real FFT perche' dati sono reali
dfft.realForward(data);
// il risultato viene messo nella matrice dei risultati secondo il formato
// data[0] = somma di tutti gli input
// se il numero di dati e' pari a partire dall'indice data[2] si ha la parte reale nell'indice pari e
// la parte immaginaria nell'indice dispari
// data[2*k] = Re[k], 0 <= k < n / 2
// data[2*k+1] = Im[k], 0 < k < n / 2
// altrimenti se i dati sono dispari
// data[2*k] = Re[k], 0 <= k < (n+1)/2
// data[2*k+1] = Im[k], 0 < k< (n-1)/2
// per calcolare il valore di frequenza di ogni array
// Fs = valore di campionamento in Hz
// N = numero di punti
// k = indice della matrice
// Frequenza = (k*Fs) / n
//
//La potenza dello spettro e' data da
//sqrt(parte_reale*parte_reale+parte_immaginaria*parte_immaginaria)
if(data.length%2==0){
for(int i = 0; i < data.length/2; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*(i)+1], 2)));
}
}else{
for(int i = 0; i < data.length/2-1; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*i+1], 2)));
}
}
}
}
La libreria si inserisce normalmente all'interno del progetto di NetBeans od Android
Per l'esempio non sono stati usati dati reali ma quelli calcolati dalla funzione
10sin(x)+5sin(x/2(
Grafici da WolframAlpha |
il codice Java (quello Android e' identico) e'
------------------------------
package javaapplication1;
import edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D;
/**
*
* @author l.innocenti
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int k;
// numero dei dati
int N = 1002;
DoubleFFT_1D dfft = new DoubleFFT_1D(N);
double[] data = new double[N];
double[] outputData = new double[N];
//crea il segnale
for (k=0;k<N-1;k++) {
data[k] = 10*Math.sin(Math.toRadians(k))+5*Math.sin(Math.toRadians(k/2));
//System.out.println(k+";"+data[k]);
}
// si usa Real FFT perche' dati sono reali
dfft.realForward(data);
// il risultato viene messo nella matrice dei risultati secondo il formato
// data[0] = somma di tutti gli input
// se il numero di dati e' pari a partire dall'indice data[2] si ha la parte reale nell'indice pari e
// la parte immaginaria nell'indice dispari
// data[2*k] = Re[k], 0 <= k < n / 2
// data[2*k+1] = Im[k], 0 < k < n / 2
// altrimenti se i dati sono dispari
// data[2*k] = Re[k], 0 <= k < (n+1)/2
// data[2*k+1] = Im[k], 0 < k< (n-1)/2
// per calcolare il valore di frequenza di ogni array
// Fs = valore di campionamento in Hz
// N = numero di punti
// k = indice della matrice
// Frequenza = (k*Fs) / n
//
//La potenza dello spettro e' data da
//sqrt(parte_reale*parte_reale+parte_immaginaria*parte_immaginaria)
if(data.length%2==0){
for(int i = 0; i < data.length/2; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*(i)+1], 2)));
}
}else{
for(int i = 0; i < data.length/2-1; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*i+1], 2)));
}
}
}
}
-------------------------------------
Il risultato e' il seguente
domenica 30 dicembre 2012
Giove nel cielo di dicembre
Con il cielo invernale diventa tutto piu' facile
Il punto piu' luminoso e' Giove mentre in basso leggermente verso destra Aldebaran
Ripresa fatta con una fotocamera compatta digitale con tempo di esposizione di circa 10 secondi (e senza treppiede)
Il punto piu' luminoso e' Giove mentre in basso leggermente verso destra Aldebaran
Ripresa fatta con una fotocamera compatta digitale con tempo di esposizione di circa 10 secondi (e senza treppiede)
Iscriviti a:
Post (Atom)
Cheshire Cat Ai
Cheshire Ai e' un progetto italiano che sta crescendo adesso Per provarlo si clona il progetto git clone https://github.com/cheshire-c...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...