venerdì 31 gennaio 2014

Installazione Arch Linux

E' da un po' di tempo che sento un gran parlare di Arch Linux e volevo provare ma la procedura di installazione e' cosi' antiquata (mi sembra di essere tornato nel 1998) che mi ero sempre scoraggiato....ma sembra che i vantaggi siano ricompensati dalla fatica di installazione



Per la prova ho installato Arch Linux su Virtualbox partendo con boot da Cd (nessun network install per adesso)

Si arriva ad una shell bash con privilegi di root
Per prima cosa si imposta la tastiera italiana
loadkeys it

si edita quindi il file locale.gen
nano /etc/locale.gen

togliendo il cancelletto alla riga di interesse
it_IT.UTF-8 UTF-8

si lancia poi il comando
locale-gen 

e si esporta la variabile LANG
export LANG=it_IT.UTF-8

la rete e' stata configurata mediante DHCP senza troppi problemi.
A questo punto si inizia il partizionamento del disco fisso (semplice, una partizione piu' una swap)

fdisk /dev/sda
n - p - 1 
l'inizio della partizione e' confermata come default
la dimensione della partizione e' fissata in 7 Giga con il comando
+7G

per la swao
n - p - 2
conferma tutto
con t si cambia il tipo della seconda partizione da Linux (83) a Linux Swap (82)

p per verificare
w per scrivere ed uscire

si formatta la prima partizione come ext4
mkfs.ext4 /dev/sda1
si attiva la seconda partizione come swap
mkswap /dev/sda2

lsblk /dev/sda
mount /dev/sda1 /mnt

Adesso c'e' bisogno della rete. Se c'e' un proxy si devono effettuare i settaggi
export http_proxy=http://mioproxy:8080
export https_proxy=http://mioproxy:8080

si aggiornano i pacchetti e si installa il sistema base
pacstrap -i /mnt base
si conferma vengono scaricati circa 140 Mb

si effettua il chroot
arch-chroot /mnt /bin/bash

si ripetono i settaggi locali
nano /etc/locale.gen
it_IT.UTF-8 UTF-8
locale-gen
echo LANG=it_IT.UTF-8 > /etc/locale.conf # export LANG=it_IT.UTF-8
loadkeys it 
setfont Lat2-Terminus16

per renderlo definitivo
nano /etc/vconsole.conf
KEYMAP=it FONT=Lat2-Terminus16


per settare la timezone
ln -s /usr/share/zoneinfo/Europe/Rome /etc/localtime

per settare l'orologio
hwclock --systohc --utc

abilitazione del DHCP per la rete
systemctl enable dhcpcd.service

a questo punto si mette la password per root
passwd

e si installa Grub
pacman -S grub
grub-mkconfig -o /boot/grub/grub.cfg
grub-install --target=i386-pc --recheck /dev/sda

si termina quindi la prima fase dell'installazione
exit
umount -R /mnt
reboot

a questo punto e' meglio creare un utente non amministratore per l'uso normale
useradd -m luca
passwd luca

abilitazione del comparto sonoro
pacman -S alsa-utils

Installazione di XOrg ed LXDE
pacman -S xorg-server xorg-server-utils xorg-xinit mesa lxde dbus xf86-video-fbdev

prima di lanciare il comando startx si deve creare il file .xinitrc nella propria home
nano .xinitrce si  aggiunge la seguente riga
exec startlxde


adesso si puo' lanciare
startx

Installazione di Slim
pacman -S slims
ystemctl enable slim

Purtroppo per Arch non c'e' supporto semplice per Virtualbox per cui c'e' da fare un po' di lavoro a mano
pacman -S virtualbox-guest-utils

si crea e si edita il file virtualbox.conf
nano/etc/modules-load.d/virtualbox.confaggiungendo su ogni riga
vboxguest
vboxsf
vboxvideo

e da linea di comando si lancia
VBoxClient-all
systemctl enable vboxservice


alla fine il sistema e' decisamente performante (anche perche' ridotto all'osso) ma penso che si possa arrivare a conclusioni simili (e con minor fatica) facendo una installazione manuale di Debian da Netinstall

Midnight Commander su Os X

Dove c'e' una shell ci dovrebbe essere Midnight Commander ..ed Os X non fa eccezione
Il programma si puo' installare da questo link
Essendo un programma da shell alla fine dell'installazione non si trova niente nella cartella Applicazioni, ma basta aprire un terminale e digitare mc che si apre Midnight Commander
Ci sono un po' di problemi di ambientazioni da Linux/PC a OsX in quanto nelle tastiere Apple non e' presente il tasto Ins, per selezionare si preme la combinazione CTRL+T

Di default inoltre i tasti funzione delle tastiere Apple hanno altre funzioni. Per abilitare il comportamento classico da Impostazioni Tastiera si deve spuntare "Utilizza tutti i tasti F1,F12 come tasti funzione" e nel tab successivo (Abbreviazioni da tastiera) si deve togliere la scorciatoia di F9 ed F10 (in particolare F10 che serve ad uscire da mc)






Piena del Mugnone


Attraversamento depuratore Pian del Mugnone

Attraversamento a monte di Pian del Mugnone


mercoledì 29 gennaio 2014

Seti@home

Dopo oltre 10 anni sono ritornato a far lavorare il calcolatore per Seti@home (oltre ad un progetto per la struttura 3D delle proteine)



In attesa di dire WOW.....

Mandelbrot su IPhone/IOS

Per disegnare Mandelbrot su un Iphone per prima cosa si deve trovare una superficie su cui disegnare.
Scartata l'ipotesi di OpenGL (troppo complicata), la cosa piu' semplice e' utilizzare la libreria Quartz 2D facendo un subclass di UIView (per il dettaglio seguire questo link)




Questo puo' essere effettuato con i seguenti comandi (partendo da un progetto vuoto con View-Based Application)
File -> Add Files to 
si seleziona Objective-C Class e in basso si seleziona SubClass of UIView
Si seleziona un nome per la nuova classe e si conclude

In seguito dall'Interface Builder (il creatore di interfacce visuali) si seleziona tutta la finestra (UIView), si preme Command+4 e si modifica la classe da UIView con il nome precedentemente selezionato

Fatto cio' si trova che nel file miaclasse.m un scheletro vuoto di una funzione drawRect.Qui si puo' inserire il codice per la generazione dell'insieme di Mandelbrot

------------------------------------------------------------
//
//  Draw2D.m
//  Mand
//
//  Created by Luca Innocenti on 27/01/14.
//  Copyright (c) 2014 Luca Innocenti. All rights reserved.
//

#import "Draw2D.h"

@implementation Draw2D

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);

    
    int SCREEN_WIDTH = 480;
    int SCREEN_HEIGHT = 320;
    
    float re_min = -2.0;
    float im_min = -1.2;
    float re_max = 1.0;
    float im_max = 1.2;
    int iterazioni = 60;
    float a,b;
    float x,y,x_new,y_new;
    int test;
    int k,j,i;
    
    float re_factor = (re_max-re_min);
    float im_factor = (im_max-im_min);
    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;
            test = 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)
                {
                    test = k;
                    if (k%2)
                    {
                        CGContextMoveToPoint(context, i, j);
                        CGContextAddLineToPoint(context, i+1,j);
                        CGContextStrokePath(context);
                    }
                    break;
                }
                x = x_new;
                y = y_new;
            }
        }
    }
}

@end
--------------------------------------------------------------


martedì 28 gennaio 2014

ADS1115 ADC 16Bit su Arduino Uno

Per il progetto di acquisizione dati del Laboratorio Terre del Dipartimento di Scienze della Terra e' necessario utilizzare un convertitore analogico digitale migliore di quello presente su Arduino (10 bit =1024 livelli per Arduino Uno e 12 bit=4096 livelli per Arduino Due)

La soluzione piu' semplice e' stata utilizzare l'ADS1115, un integrato che dialoga su canale I2C con quattro ingressi analogici (in multiplex) con un ADC da 16 bit montato su una BreakOut della AdaFruit


http://learn.adafruit.com/assets/2675
Le connessioni sono semplici

Vdd = 5 V Arduino
GND = GND Arduino
SDA = A4 Arduino
SCL = A5 Arduino

non sono necessarie le resistenze di PullUp sui pin A4,A5
L'integrato ADS1115 contiene al suo interno sia l'oscillatore che la tensione di riferimento per cui non e' necessaria ulteriore elettronica di contorno. E' possibile anche settare il valore del guadagno

Per i vari valori di guadagno si hanno differenti valori di fondo scala e differente sensibilita'

Gain 2/3 : fondo scala 6.144V 1bit = 0.1875 mV
Gain 1 : fondo scala 4.096V 1bit = 0.125 mV
Gain 2 : fondo scala 2.048V 1bit = 0.0625 mV
Gain 4 : fondo scala 1.024V 1bit = 0.03125 mV
Gain 8 : fondo scala 0.512V 1bit = 0.015625 mV
Gain 16 : fondo scala 0.256V 1bit = 0.0078125 mV

(attenzione: se si setta un guadagno e si eccede il fondo scala si rischia di bruciare l'ADC)

Considerando le tensioni di lettura della strumentazione del laboratorio di geotecnica il Gain ottimale e' il 4

Per controllare questo componente si usa la libreria scaricabile a questo indirizzo 

Di seguito un semplice esempio ovvero la misura della tensione su un potenziometro variabile (montato su A0 dell'ADS1115)


ed ecco il semplice codice per la lettura
----------------------------------------------------------
#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);
}


Bussola non funzionante su Alcatel One Touch Fire 4012X

Aggiornamento
Dopo un mese e 20 giorni il telefono e' rientrato dall'assistenza Alcatel con il medesimo problema
Nonostante quanto riportato dai siti vedi per esempio qui, e qui  mi viene il forte sospetto che il telefono non abbia un sensore per la bussola
---------------------------------------------------------

Alla fine non ho resistito e mi sono comprato l'unico terminale attualmente disponibile in Italia che monta Firefox Os, ovvero l'Alcatel One Touch Fire.
Lo scopo dell'acquisto era quello di effettuare il porting di Geocompass anche per Firefox OS (e nel frattempo imparare un po' di HTML5)

Con mia grande sorpresa pero' la bussola non risulta funzionante. Mediante programma sono riuscito a leggere i valori di inclinazione ma non quelli dell'azimuth (la API e' la medesima quindi non e' un problema di programmazione). Ho provato quindi a scaricare dal Market delle applicazioni di bussola con il medesimo risultato. Nessun segnale dal sensore magnetico

Ho riportato quindi il telefono in assistenza con due scenari possibili:
1) il sensore e' rotto
2) non e' stato implementato il driver all'interno del sistema operativo

Nel negozio era disponibile un altro esemplare in vetrina e grazie al venditore e' stato possibile accenderlo ed installare applicazioni per bussola scaricate sempre dal Market. Medesimo risultato. La bussola non funziona
Attendo speranzoso che torni dall'assistenza ma il sospetto di aver comprato un oggetto per niente testato e' forte


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