Di seguito viene mostrato un esempio (sostanzialmente autoesplicativo nel codice) su come realizzare grafici ScatterPlot mediante la libreria AndroidPlot
activity_grafico.xml
-------------------------------------------------------------
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.androidplot.xy.XYPlot
android:id="@+id/Grafico"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
title="Well Test" />
</RelativeLayout>
-------------------------------------------------------------
Grafico.java
-------------------------------------------------------------
package com.luca.innocenti.well.test;
import java.util.Arrays;
import com.androidplot.series.XYSeries;
import com.androidplot.ui.AnchorPosition;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XLayoutStyle;
import com.androidplot.xy.XYPlot;
import com.androidplot.xy.YLayoutStyle;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
public class Grafico extends Activity {
private XYPlot Grafico;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grafico);
//inizializza il grafino
Grafico = (XYPlot) findViewById(R.id.Grafico);
//definisce le coppie di valori X (portata) ed Y (soggiacenza)
Number[] portata = {0,1.0, 2, 3, 4, 5};
Number[] soggiacenza = {0, -2, -4, -6, -8, -12};
XYSeries dati = new SimpleXYSeries(Arrays.asList(portata), Arrays.asList(soggiacenza), "Dati");
// crea lo stile per i punti
LineAndPointFormatter series1Format = new LineAndPointFormatter(
Color.rgb(0, 200, 0), // line color
Color.rgb(0, 100, 0), // point color
null); // fill color (none)
// aggiunge i dati al grafico
Grafico.addSeries(dati, series1Format);
// AndroidPlot chiama Range l'asse X e Domain l'asse Y
// riduce il numero di ticks su entrambi gli assi
Grafico.setTicksPerRangeLabel(3);
Grafico.setTicksPerDomainLabel(3);
// mette il colore bianco in background
Grafico.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE);
Grafico.getGraphWidget().setMarginTop(10);
// cancella la legenda dal grafico
Grafico.getLegendWidget().setVisible(false);
//scrive le label sugli assi
Grafico.setDomainLabel("Portata");
Grafico.getDomainLabelWidget().pack();
Grafico.setRangeLabel("Soggiacenza");
Grafico.getRangeLabelWidget().pack();
Grafico.disableAllMarkup();
Grafico.position(Grafico.getDomainLabelWidget(),0,XLayoutStyle.ABSOLUTE_FROM_CENTER,5, YLayoutStyle.ABSOLUTE_FROM_BOTTOM, AnchorPosition.CENTER);
//Grafico.setGridPadding(15, 0, 15, 0);
}
}
-------------------------------------------------------------
asd
venerdì 12 ottobre 2012
martedì 9 ottobre 2012
Decomprimere DAA
Ho scaricato da Internet un file con estensione DAA e francamente non sapevo come usarlo
Dopo aver scoperto che e' sostanzialmente un file immagine (come un .iso) ho scaricato
apt-get install daa2iso
a questo punto ho convertito il file in iso
daa2iso file.daa file.iso
ed ho potuto leggere il contenuto dato che il gestore di archivi di Debian decomprime il formato iso
Dopo aver scoperto che e' sostanzialmente un file immagine (come un .iso) ho scaricato
apt-get install daa2iso
a questo punto ho convertito il file in iso
daa2iso file.daa file.iso
ed ho potuto leggere il contenuto dato che il gestore di archivi di Debian decomprime il formato iso
lunedì 8 ottobre 2012
Debian Testing in QEmu/Windows
Per prima cosa si deve creare una immagine disco (ho scelto 10 G dato che con l'installazione da 2G rimane decisamente poco spazio per qualunque operazione)
qemu-img.exe create deb.img 10G
Formating 'deb.img', fmt=raw, size=10485760 kB
stranamente utilizzando il comando
qemu-img.exe create deb.img 4G
viene generato un file da 0 Byte (con 3G o 5G tutto funziona correttamente)
per installare Debian partendo dal Cd di installazione con Xfce-Lxde si digita il seguente comando
qemu -localtime -m 256 -cdrom "debian-testing-i386-xfce+lxde-CD-1.iso" -hda deb.img -boot d -L . -net user -net nic
in questo modo si indicano
256 Mb di memoria
deb.img e' l'immagine del disco fisso
boot d fa partire l'installazione da CdRom
-net user -net nic abilita l'interfaccia di rete virtuale (questo e' l'unico sistema di abilitare la scheda di rete virtuale in ambiente in cui si e' amministratori del calcolatore)
Dato che il programma Qemu non e' installato ma il binario e' stato scompattato in una directory da un file zip e' necessario aggiungere lo swtich -L . (attenzione al punto)
Non e' stato possibile utilizzare KQemu perche' richiede l'installazione mentre sulla macchina su cui devo lavorare non possiedo i permessi di amministrazione
per utilizzare quindi la macchina virtuale una volta terminata l'installazione si deve effettuare lo shutdown e ripartire con
qemu -localtime -m 768 -cdrom "debian-testing-i386-xfce+lxde-CD-1.iso" -hda deb.img -boot c -L . -net user -net nic -redir tcp:2222::22
Per l'utilizzo normale la memoria e' stata impostata a 768 m ed e' stata aggiunta una direttiva per abilitare la connessione SSH tra Host e Guest sulla porta 2222
si puo' quindi usare sia SFTP che SSH chiamando la macchina virtuale a localhost:2222
Per finire la macchina virtuale assume un indirizzo derivante dal DHCP interno a QEMU per cui risulta completamente invisibile all'esterno della macchina su cui e' in esecuzione (di solito l'IP e' 10.0.2.15)
Per terminare la finestra di visualizzazione massima e' 1024x768 e non puo' essere allargata a meno di modifiche piuttosto complicate al server X. Mettere QEmu in modalita' FullScreen e' stata una pessima esperienza sulla mia macchina dual-monitor e la sconsiglierei
Snippet : apici inversi in Bash
Una cosa che mi scordo regolarmente quando utilizzo bash ovvero come si crea il carattere apice rovescio su tastiere che ne sono sprovviste
La soluzione e' semplice
La soluzione e' semplice
Alt Gr + apice diritto
Esempio con GUI con Zenity in shell Bash
Mentre stavo giocando con airoscript mi sono accorto di un script bash che mostrava delle simpatiche finestre di interfaccia; curiosando dentro il codice ho visto che il generatore delle finestre era Zenity, un programma studiato appositamente per rendere piu' interattiva la shell
Impiegando questo strumento e' stato possibile simulare un esempio di GUI da Bash
---------------------------------------------------------------
VALUE=`zenity --scale --text="Selezionare il valore" --value=0`
case $? in
0)
zenity --info --text="E'stato selezionato il valore $VALUE%"
zenity --progress --title="Progress Bar" --text="Valore selezionato $VALUE%" --percentage=$VALUE;;
1)
zenity --error --text="Nessun valore selezionato";;
-1)
zenity --info --text="Errore non atteso";;
esac
---------------------------------------------------------------
Qui il link allo script
Impiegando questo strumento e' stato possibile simulare un esempio di GUI da Bash
---------------------------------------------------------------
VALUE=`zenity --scale --text="Selezionare il valore" --value=0`
case $? in
0)
zenity --info --text="E'stato selezionato il valore $VALUE%"
zenity --progress --title="Progress Bar" --text="Valore selezionato $VALUE%" --percentage=$VALUE;;
1)
zenity --error --text="Nessun valore selezionato";;
-1)
zenity --info --text="Errore non atteso";;
esac
---------------------------------------------------------------
Qui il link allo script
sabato 6 ottobre 2012
Webcam Logitech C310 su Debian Testing
Mi sono comprato la Logitech C310 perche' sembrava essere pienamente compatibile con Raspberry, cosa che in realta' si e' rivelata errata
In compenso la Webcam funziona in modo decisamente buono (se non ottimo) se paragonata alle altre Webcam dal costo di qualche euro inferiore
Le prove sono state effettuate nelle peggiori condizioni per una webcam ovvero in una stanza buia con la sola lampada della scrivania accesa ma la resa e' notevole
utilizzando FFMpeg invece si puo' usare la stringa (ripresa da qui)
ffmpeg -f alsa -ac 2 -ar 48000 -i hw:0,0 -acodec mp2 -f video4linux2 -r 30 -i /dev/video0 -vcodec mjpeg -sameq ffmpeg.avi
In compenso la Webcam funziona in modo decisamente buono (se non ottimo) se paragonata alle altre Webcam dal costo di qualche euro inferiore
Le prove sono state effettuate nelle peggiori condizioni per una webcam ovvero in una stanza buia con la sola lampada della scrivania accesa ma la resa e' notevole
Screenshot da VLC |
utilizzando FFMpeg invece si puo' usare la stringa (ripresa da qui)
ffmpeg -f alsa -ac 2 -ar 48000 -i hw:0,0 -acodec mp2 -f video4linux2 -r 30 -i /dev/video0 -vcodec mjpeg -sameq ffmpeg.avi
Per quanto riguarda Debian nella versione testing vengono riconosciuti correttamente sia la parte video che la parte audio (microfono) ma il programma Cheese non riesce a funzionare correttamente (ha un ritardo veramente notevole)
venerdì 5 ottobre 2012
Esempio Mandelbrot con GD/C e palette personalizzata
In questo esempio viene creato l'insieme di Mandelbrot utilizzando la libreria GD che si puo' installare in Debian mediante
apt-get install libgd2-noxpm-dev
(esiste una versione che include anche il formato xpm ma nel caso non interessa)
Vengono inoltre presentati due metodi per creare delle palette per la gestione dei colori (entrambe a 256 colori)
Link al progetto
Da compilare con clang -Wall -O3 mand_gd.c -o mand_gd -lgd
-------------------------------------------------------
#include <gd.h>
#include <stdio.h>
#include <math.h>
#include <error.h>
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define RGB2INT(r,g,b) (b + 256 * g + 256 * 256 * r)
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
float a,b;
float x,y,x_new,y_new;
int k,j,i;
FILE *fp = {0};
gdImagePtr img = {0};
char *fname = "./mand_gd.png";
int s, color;
int red, green, blue;
int palette[256] = {0};
int main() {
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
//Inizializza lo schermo
img = gdImageCreateTrueColor(SCREEN_WIDTH, SCREEN_HEIGHT);
// crea la palette
for(s = 0; s < 256; s++) {
red = (int)(128.0 + 128 * sin(3.1415 * s / 16.0));
green = (int)(128.0 + 128 * sin(3.1415 * s / 32.0));
blue = (int)(128.0 + 128 * sin(3.1415 * s / 64.0));
palette[s] = RGB2INT(red, green, blue);
}
// crea una seconda palette
s = 0;
for(int ared=0;ared<=255;ared+=51)
{
for(int agreen=0;agreen<=255;agreen+=51)
{
for(int ablue=0;ablue<=255;ablue+=51)
{
palette[s]=RGB2INT(ared,agreen,ablue);
++s;
}
}
}
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
red = gdImageRed(img, palette[k]);
green = gdImageGreen(img, palette[k]);
blue = gdImageBlue(img, palette[k]);
color = gdImageColorAllocate(img, red, green, blue);
gdImageSetPixel(img,j, i, color);
break;
}
x = x_new;
y = y_new;
}
}
}
if((fp = fopen(fname, "w")) == NULL)
error(1, 0, "Error - fopen(): %s", fname);
else {
gdImagePng(img, fp);
fclose(fp);
}
gdImageDestroy(img);
return(0);
}
apt-get install libgd2-noxpm-dev
(esiste una versione che include anche il formato xpm ma nel caso non interessa)
Vengono inoltre presentati due metodi per creare delle palette per la gestione dei colori (entrambe a 256 colori)
Palette 1 |
Palette 2 |
Link al progetto
Da compilare con clang -Wall -O3 mand_gd.c -o mand_gd -lgd
-------------------------------------------------------
#include <gd.h>
#include <stdio.h>
#include <math.h>
#include <error.h>
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define RGB2INT(r,g,b) (b + 256 * g + 256 * 256 * r)
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
float a,b;
float x,y,x_new,y_new;
int k,j,i;
FILE *fp = {0};
gdImagePtr img = {0};
char *fname = "./mand_gd.png";
int s, color;
int red, green, blue;
int palette[256] = {0};
int main() {
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
//Inizializza lo schermo
img = gdImageCreateTrueColor(SCREEN_WIDTH, SCREEN_HEIGHT);
// crea la palette
for(s = 0; s < 256; s++) {
red = (int)(128.0 + 128 * sin(3.1415 * s / 16.0));
green = (int)(128.0 + 128 * sin(3.1415 * s / 32.0));
blue = (int)(128.0 + 128 * sin(3.1415 * s / 64.0));
palette[s] = RGB2INT(red, green, blue);
}
// crea una seconda palette
s = 0;
for(int ared=0;ared<=255;ared+=51)
{
for(int agreen=0;agreen<=255;agreen+=51)
{
for(int ablue=0;ablue<=255;ablue+=51)
{
palette[s]=RGB2INT(ared,agreen,ablue);
++s;
}
}
}
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
red = gdImageRed(img, palette[k]);
green = gdImageGreen(img, palette[k]);
blue = gdImageBlue(img, palette[k]);
color = gdImageColorAllocate(img, red, green, blue);
gdImageSetPixel(img,j, i, color);
break;
}
x = x_new;
y = y_new;
}
}
}
if((fp = fopen(fname, "w")) == NULL)
error(1, 0, "Error - fopen(): %s", fname);
else {
gdImagePng(img, fp);
fclose(fp);
}
gdImageDestroy(img);
return(0);
}
Iscriviti a:
Post (Atom)
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...
-
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...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
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...