lunedì 16 maggio 2016

Roccia lunare 14310

----------------------------------------------
Aggiornamento importante a questo post
----------------------------------------------
Ho avuto la fortuna di poter osservare da vicino (e come geologo e' una esperienza particolare) un frammento di roccia lunare ritagliato da campione piu' grande prelevato dalla missione Apollo 14


La roccia deriva dal punto G della seconda escursione lunare (scheda completa qui)



Le quattro facce (fotografabili) del campione. Di particolare interesse e' la foto sottostante perche' questo lato era quello esposto (gli altri lati derivano dal taglio effettuato a terra) e presenti segni dei micro meteoriti che hanno "lavorato" la superficie






Si tratta di una roccia decisamente giovane (circa 4 milioni di anni)  per lo standard lunare.
L'esame petrografico (originale a questo link) mostra un basalto feldspatico a grana fine e viene definito come composizione KREEP (Potassio, Terre Rare e Fosforo), ultimo resto del frazionamento del magma che ha formato la crosta lunare e che essendo composto da elementi incompatibili per entrare nella struttura cristallina rimangono isolati all'interno del magma stesso (fonte wikipedia, wikipedia inglese). I magmi ricchi in KREEP si sarebbero segregati tra la crosta ed il mantello lunare. Sono presenti fenocristalli di plagioclasi e pirosseni negli interstizi

Questo era l'aspetto della roccia lunare prima di essere sezionata per le analisi, piu' o come come la hanno vista Shepard e Mitchell (in origine era mezza sepolta dalla regolite dalla regolite). Non ci sono foto realizzate sulla Luna di questo esemplare


Come detto non esistono foto dirette del punto di campionamento. Questa dovrebbe essere nella zona compresa tra la stazione C1 ed H (nel mezzo tra le due c'e' la stazione G) ripresa da Project Apollo Archive

AS14-68-9471HR.jpg




venerdì 13 maggio 2016

Mandelbrot con GMP

Avevo gia' utilizzato la libreria GMP in questo post per il calcolo di PiGreco
Questa volta la utilizzero' per effettuare zoom estremi dell'insieme di Mandelbrot grazie alla sua caratteristica di poter utilizzare una precisione arbitraria ovvero di poter settare il numero di bit che rappresentano una quantita' in virgola mobile. Il tipo float cambia a seconda da compilatore a compilatore e da processore a processore ma diciamo che in generale puo' essere considerato a 32 bit, il che va bene quando il numero di cifre significative non e' molto esteso

Per mostrare la differenza nell'uso di GMP rispetto al solo tipo float ho scritto due programmi ed ho effettuato due zoom dell'insieme di Mandelbrot

Zoom 1:
In questo caso il risultato e' identico
GMP

Float


Zoom 2
Riducendo la finestra di visualizzazione di centesimo rispetto allo zoom precedente GMP continua a lavorare in modo corretto mentre il programma scritto in C++ puro "esplode"
GMP


Float

Naturalmente tutto cio' ha un prezzo in termini di memoria consumata (la precisione e' vero che e' arbitraria ma deve comunque fare i conti con la ram disponibile) ed il tempo di calcolo (ovviamente piu' lento con GMP).Curiosamente provando a lanciare questo programma in macchina virtuale VMWare, il programma mi diceva che non aveva abbastanza memoria disponibile e sono passato ad un calcolatore reale

esempio con l'utilizzo di GMP
----------------------------------------------------------

#include <stdio.h>
#include <math.h>
#include <gmp.h>
#include <iostream>

using namespace std;

#include <pngwriter.h>

#define SCREEN_WIDTH 1280
#define SCREEN_HEIGHT 960


int main(void){

mpf_t A,B, Im, DRe, DIm,test;
mpf_t X,Y,XN,YN,XX,YY,Xs,Ys;
float test2;

int j,k,i;

long int precision = 256;
double r;




mpf_set_default_prec(precision);

mpf_init2(A,precision);
mpf_init2(B,precision);
mpf_init2(Im,precision);
mpf_init2(DRe,precision);
mpf_init2(DIm,precision);
mpf_init2(test,precision);
mpf_init2(X,precision);
mpf_init2(Y,precision);
mpf_init2(XN,precision);
mpf_init2(YN,precision);
mpf_init2(XX,precision);
mpf_init2(YY,precision);
mpf_init2(Xs,precision);
mpf_init2(Ys,precision);

// punto vertice
// Re = -0.74364085
// Im = 0.13182733
// Diametro = 0.00012068
// Zoom = 25497

pngwriter png(SCREEN_WIDTH,SCREEN_HEIGHT,0,"mandelbrot2.png");
double iterazioni = 1024;

mpf_set_d(A,-0.74364085);
//mpf_set_d(A,-0.74370119);
mpf_set_d(B,0.13182733);
mpf_set_d(Im,0.13182733);
mpf_set_d(DRe,0.000000009428125);
mpf_set_d(DIm,0.00000001257083);



mpf_set_d(X,0.0);
mpf_set_d(Y,0.0);
mpf_set_d(Xs,0.0);
mpf_set_d(Ys,0.0);
mpf_set_d(XX,0.0);
mpf_set_d(YY,0.0);
mpf_set_d(XN,0.0);
mpf_set_d(YN,0.0);

cout << "Inizio" << endl;

for (i=0;i<SCREEN_HEIGHT;i++)
    {
    mpf_add(A,A,DRe);
    mpf_set(B,Im);
    for (j=0;j<SCREEN_WIDTH;j++)
    {
    mpf_add(B,B,DIm);
    mpf_set_d(X,0.0);
    mpf_set_d(Y,0.0);

    for (k=0;k<=iterazioni;k++)
        {
        mpf_pow_ui(Xs,X,2);
        mpf_pow_ui(Ys,Y,2);
        mpf_sub(XN,Xs,Ys);
        mpf_add(XN,XN,A); //XN = (x*x)-(y*y) +a
        mpf_mul(YN,X,Y);
        mpf_mul_ui(YN,YN,2);
        mpf_add(YN,YN,B); //YN = 2*X*Y

        mpf_pow_ui(XX,XN,2);
        mpf_pow_ui(YY,YN,2);
        mpf_add(test,XX,YY);// test = (XN*XN)+(YN*YN)
        test2 = mpf_get_d(test);
        if (test2 > 4.0)
            {
            r = k%2;
            png.plot(j,i,r,r,r);
            break;
            }
        mpf_set(X,XN);
        mpf_set(Y,YN);
        }
    }
    }

png.close();

mpf_clear(A);
mpf_clear(B);
mpf_clear(A);
mpf_clear(Im);
mpf_clear(DRe);
mpf_clear(DIm);
mpf_clear(X);
mpf_clear(Y);
mpf_clear(Xs);
mpf_clear(Ys);
mpf_clear(XX);
mpf_clear(YY);
mpf_clear(XN);
mpf_clear(YN);
mpf_clear(test);

cout << "Fine" << endl;

return 0;
}


----------------------------------------------------------
esempio in C++ puro
----------------------------------------------------------
#include <pngwriter.h>

#define SCREEN_WIDTH 1280
#define SCREEN_HEIGHT 960



// punto vertice
// Re = -0.74364085
// Im = 0.13182733
// Diametro = 0.00012068
// Zoom = 25497

double iterazioni = 1024;

float a = -0.74364085;
float b = 0.13182733;
float im = 0.13182733;

float dre = 0.000000009428125;
float dim = 0.00000001257083;


double r;

float x,y,x_new,y_new;

int test;

int k,j,i;

int keypress = 0;


int main() {

pngwriter png(SCREEN_WIDTH, SCREEN_HEIGHT,0,"mand_norm2.png");


for (i=0;i<SCREEN_HEIGHT;i++)
 {
 a=a+dre;
 b=im;
 for (j=0;j<SCREEN_WIDTH;j++)
  {
  b = b+dim;

  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)
    {
    r = k%2;
    png.plot(j,i, r, r, r);
    break;
    }
   x = x_new;
   y = y_new;
   }

  }

 }
png.close();
return(0);

}

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







Intel Edison ed Arduino

La programmazione della parte Arduino Kit legato ad una Intel Edison si effettua mediante l'Arduino IDE.
La prima cosa da fare e' configurare il dispositivo perche' di default non e' inserito nella lista delle schede conosciute dall'IDE


Si procede selezionando il menu Strumenti dalla Arduino IDE/Scheda/Gestore Scheda. Si apre un menu e si cerca e si installa Intel i686 Boards

Per la programmazione si deve usare la microUsb di collegamento seriale OTG (J22) e non la porta J16 (terminale seriale) che puo' essere disconnessa.

A questo punto vengono scaricati i file e l'installazione ....si pianta (almeno sulla mia Centos 7). Per installare la Edison si deve andare nella propria home nella sottocartella (o qualcosa di simile)

/home/linnocenti/.arduino15/packages/Intel/tools/core2-32-poky-linux/1.6.2+1.0/i686

ed editare il file ./install_script.sh alla riga 106 (link originale) da

executable_files=$($SUDO_EXEC find "$native_sysroot" -type f -perm +111 -exec printf "\"%s\" " {} \; )

a
executable_files=$($SUDO_EXEC find "$native_sysroot" -type f -perm /111 -exec printf "\"%s\" " {} \; )


Si deve ovviamente cambiare i permessi dell'utente per poter accedere alla porta seriale con

sudo usermod -a -G tty yourUserName
sudo usermod -a -G dialout yourUserName

Edison e Arduino condividono le seguenti porte
Serial (Arduino)-> /dev/ttySG0 (Edison)
Serial1 (Arduino)-> /dev/ttyMFD1 (Edison) corrisponde ai pin D0 e D1 Rx e Tx di Arduino
Serial2 (Arduino)-> /dev/ttyMDF2 (Edison) messaggi del kernel per debug

Compilando e lanciando l'esempio blink si hanno i seguenti messaggi. Per quanto riguarda i messaggi di errore a questo link viene consigliato di usare la IDE 1.6.0 che risulterebbe piu' stabile
--------------------------------------------------
La scheda Intel:i686:izmir_ec non ha la proprietà 'build.board' definita. La imposto automaticamente a I686_IZMIR_EC
ATTENZIONE: La categoria '' della libreria DallasTemperature non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria EEPROM non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria Ethernet non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria EthernetShield non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria OneWire non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SD non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SPI non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria Servo non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SoftwareServo non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria TimerOne non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria USBHost non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria WiFi non è valida. La imposto a 'Uncategorized'
Attenzione: platform.txt del core 'Arduino i686 Boards' contiene la stringa deprecata recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}" convertita automaticamente in recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{archive_file_path}" "{object_file}". Verifica la disponibilità di un aggiornamento di questo core.

Lo sketch usa 76.331 byte (0%) dello spazio disponibile per i programmi. Il massimo è 10.000.000 byte.
#!/bin/sh

# clupload script to invoke lsz
# Copyright (C) 2014 Intel Corporation
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
starting download script
Args to shell: /home/linnocenti/.arduino15/packages/Intel/tools/sketchUploader/1.6.2+1.0/x86/bin /tmp/buildccb8e9535cf076aa288bd991e81fb898.tmp/Blink.ino.elf /dev/ttyACM0
Serial Port PORT
Using tty Port /dev/ttyACM0
Sending Command String to move to download if not already in download mode
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
#

echo "starting download script"
echo "Args to shell:" $*
#
# ARG 1: Path to lsz executable.
# ARG 2: Elf File to download
# ARG 3: TTY port to use.
#
#path may contain \ need to change all to /
path_to_exe=$1
fixed_path=${path_to_exe//\\/\/}
#
tty_port_id=$3
echo "Serial Port PORT" $com_port_id
echo "Using tty Port" $tty_port_id
#
echo "Sending Command String to move to download if not already in download mode"
echo "~sketch downloadEdison" > $tty_port_id
#Give the host time to stop the process and wait for download
sleep 1
#
Deleting existing sketch on target
#Move the existing sketch on target.
echo "Deleting existing sketch on target"
"$fixed_path/lsz" --escape -c "mv -f /sketch/sketch.elf /sketch/sketch.elf.old" < $tty_port_id > $tty_port_id

Transfer incomplete
#
# Execute the target download command
#
#Download the file.
host_file_name=$2
"$fixed_path/lsz" --escape --binary --overwrite $host_file_name < $tty_port_id  > $tty_port_id
Sending: Blink.ino.elf

Bytes Sent:   1024/  75668   BPS:226647   ETA 00:00 
Bytes Sent:   9216/  75668   BPS:1890482  ETA 00:00 
Bytes Sent:  10240/  75668   BPS:2070761  ETA 00:00 
Bytes Sent:  11264/  75668   BPS:2253715  ETA 00:00 
Bytes Sent:  12288/  75668   BPS:2433294  ETA 00:00 
Bytes Sent:  13312/  75668   BPS:2606047  ETA 00:00 
Bytes Sent:  14336/  75668   BPS:2777730  ETA 00:00 
Bytes Sent:  15360/  75668   BPS:2945389  ETA 00:00 
Bytes Sent:  16384/  75668   BPS:3104141  ETA 00:00 
Bytes Sent:  17408/  75668   BPS:3263507  ETA 00:00 
Bytes Sent:  18432/  75668   BPS:3425317  ETA 00:00 
Bytes Sent:  19456/  75668   BPS:3599663  ETA 00:00 
Bytes Sent:  20480/  75668   BPS:3766689  ETA 00:00 
Bytes Sent:  21504/  75668   BPS:3928323  ETA 00:00 
Bytes Sent:  22528/  75668   BPS:4096652  ETA 00:00 
Bytes Sent:  23552/  75668   BPS:4257391  ETA 00:00 
Bytes Sent:  24576/  75668   BPS:4423241  ETA 00:00 
Bytes Sent:  25600/  75668   BPS:3941494  ETA 00:00 
Bytes Sent:  26624/  75668   BPS:4046863  ETA 00:00 
Bytes Sent:  27648/  75668   BPS:4164480  ETA 00:00 
Bytes Sent:  28672/  75668   BPS:4279378  ETA 00:00 
Bytes Sent:  29696/  75668   BPS:4388951  ETA 00:00 
Bytes Sent:  30720/  75668   BPS:4498447  ETA 00:00 
Bytes Sent:  31744/  75668   BPS:4498867  ETA 00:00 
Bytes Sent:  32768/  75668   BPS:4569569  ETA 00:00 
Bytes Sent:  33792/  75668   BPS:4632887  ETA 00:00 
Bytes Sent:  34816/  75668   BPS:4747208  ETA 00:00 
Bytes Sent:  35840/  75668   BPS:4831544  ETA 00:00 
Bytes Sent:  36864/  75668   BPS:4884653  ETA 00:00 
Bytes Sent:  37888/  75668   BPS:4943039  ETA 00:00 
Bytes Sent:  38912/  75668   BPS:4955029  ETA 00:00 
Bytes Sent:  39936/  75668   BPS:5038615  ETA 00:00 
Bytes Sent:  40960/  75668   BPS:5125718  ETA 00:00 
Bytes Sent:  41984/  75668   BPS:5210179  ETA 00:00 
Bytes Sent:  43008/  75668   BPS:5259603  ETA 00:00 
Bytes Sent:  44032/  75668   BPS:5306389  ETA 00:00 
Bytes Sent:  45056/  75668   BPS:5350468  ETA 00:00 
Bytes Sent:  46080/  75668   BPS:5378120  ETA 00:00 
Bytes Sent:  47104/  75668   BPS:5376598  ETA 00:00 
Bytes Sent:  48128/  75668   BPS:5456654  ETA 00:00 
Bytes Sent:  49152/  75668   BPS:5510342  ETA 00:00 
Bytes Sent:  50176/  75668   BPS:5585577  ETA 00:00 
Bytes Sent:  51200/  75668   BPS:5663045  ETA 00:00 
Bytes Sent:  52224/  75668   BPS:5692542  ETA 00:00 
Bytes Sent:  53248/  75668   BPS:5729267  ETA 00:00 
Bytes Sent:  54272/  75668   BPS:5753981  ETA 00:00 
Bytes Sent:  55296/  75668   BPS:5690094  ETA 00:00 
Bytes Sent:  56320/  75668   BPS:5758030  ETA 00:00 
Bytes Sent:  57344/  75668   BPS:5826506  ETA 00:00 
Bytes Sent:  58368/  75668   BPS:5883234  ETA 00:00 
Bytes Sent:  59392/  75668   BPS:5862332  ETA 00:00 
Bytes Sent:  60416/  75668   BPS:5914414  ETA 00:00 
Bytes Sent:  61440/  75668   BPS:5967995  ETA 00:00 
Bytes Sent:  62464/  75668   BPS:5987179  ETA 00:00 
Bytes Sent:  63488/  75668   BPS:5945122  ETA 00:00 
Bytes Sent:  64512/  75668   BPS:6002283  ETA 00:00 
Bytes Sent:  65536/  75668   BPS:6065936  ETA 00:00 
Bytes Sent:  66560/  75668   BPS:6095743  ETA 00:00 
Bytes Sent:  67584/  75668   BPS:6121225  ETA 00:00 
Bytes Sent:  68608/  75668   BPS:6139987  ETA 00:00 
Bytes Sent:  69632/  75668   BPS:6167541  ETA 00:00 
Bytes Sent:  70656/  75668   BPS:6235591  ETA 00:00 
Bytes Sent:  71680/  75668   BPS:6278929  ETA 00:00 
Bytes Sent:  72704/  75668   BPS:6299557  ETA 00:00 
Bytes Sent:  73728/  75668   BPS:6317676  ETA 00:00 
Bytes Sent:  74752/  75668   BPS:6339755  ETA 00:00  Moving downloaded file to /sketch/sketch.elf on target

Bytes Sent:  75668   BPS:3078945                        

Transfer complete
#
#mv the downloaded file to /sketch/sketch.elf
target_download_name="${host_file_name##*/}"
echo "Moving downloaded file to /sketch/sketch.elf on target"
"$fixed_path/lsz" --escape -c "mv $target_download_name /sketch/sketch.elf; chmod +x /sketch/sketch.elf" < $tty_port_id > $tty_port_id

Transfer complete
#
#
Trovata libreria non valida in /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire: /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire
Trovata libreria non valida in /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire: /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire
--------------------------------------------------

Ublox M8T + Intel Edison + RTKLib

Collegare un Ublox M8T e processare i dati direttamente all'interno della Edison con RTKLib e' un procedimento estremamente lineare e simile a quello di un normale PC


Il GPS, al contrario di YUN, viene riconosciuto immediatamente e le librerie RTKLib si compilano direttamente sulla Intel, complice anche l'assenza di dipendenze da altre librerie

L'unica accortezza e' quella di spostare lo switch SW1 verso la porta USB tipo A per abilitare questa porta (e conseguentemente disabilitare la porta microUsb OTG)

giovedì 12 maggio 2016

Primi passi con Intel Edison

ATTEZIONE: un avvertimento importante. La Intel Edison lavora a 1.8V. Nell'Arduino Kit sono installati molti shift level per venire incontro ai dispositivi a 5V e 3.3V che si usano con Arduino. Il MiniBreakout non dispone degli shift level ed ha connessioni dirette con i piedini del processore con la ovvia conseguenza che una sovratensione distrugge il processore

Ho avuto modo di provare la Intel Edison (collegata alla scheda di sviluppo Edison Kit per Arduino).
Il modulo Edison di per se' e' microscopico, poco piu' grande di una moneta da 2 euro, ma monta un processore Atom dual core con 1Gb DDR e 4 Gb di Flash Ram con connettivita' Bluetooth Le e WiFI.

Per lo sviluppo la sola Edison non riesce a vivere da sola e deve essere accoppiata all'Edison kit per Arduino (scelta piu' costosa ma ottimale) oppure all'Edison Kit BreakOut



La Edison viene alimentata tramite un connettore microUsb vicino alla sigla J16 ma viene fortemente consigliato di accoppiare un trasformatore da 220V a (7-15V) con polo centrale positivo. Altrimenti si puo' alimentare con una LiPo usando il connettore J2



Il collegamento tra il vero e proprio modulo Edison e la scheda di sviluppo avviene con un socket (credo proprietario) ed impossibile da saldare in  proprio


L'unico sistema di svincolare la Edison dalla scheda di sviluppo e' quello di utilizzare i moduli Blocks di SparkFun, tipo questo che monta LSM9DS0 9DOF IMU


Prima cosa importante: non c'e' uscita video e non c'e' installato X (quindi niente possibilita' di montare VNC). Il sistema operativo e' ridotto all'osso .. anche di piu'.

Il consumo della Edison collegata ad un Arduino Kit ha una punta in fase di boot di circa 130 mA ma si stabilizza in idle a circa 80 mA

Per comunicare con la Edison si puo' usare una connessione seriale connettendo un cavo USB nella microUsb piu'  vicina allo spigolo della scheda (accanto al simbolo J3) e digitando

screen /dev/ttyUSB1 115200

(ovviamente /dev/ttyUSBx puo' variare a seconda della configurazione del client)

altrimenti ci si puo' collegare via SSH in WiFi. Ovviamente prima di fare cio' bisogna collegare la Edison all'access point e cio' si effettua con il comando

configure_edison --wifi (per dettagli vedi qui)

cambiando gli switch del comando si puo' cambiare il nome del dispositivo oppure anche effettuare un setup completo compreso riflashare il firmware

Il sistema operativo di default e' Yocto Linux, una versione sostanzialmente embedded, che ha come packet manager opkg (lo stesso di Yun/Linino) . I pacchetti disponibili nel repository Intel di opkg non sono moltissimi e sono quasi tutti strumenti di sviluppo (gcc, python, git, automake, wget etc). Per esempio manca una versione pacchettizzata di Midnight Commander che e' gia' pronta per OpenWrt (e' comunque possibile compilarlo da sorgenti senza nessun problema)

Di fatto c'e' solo l'utente root configurato ed in modo curioso la sua home e' in /home/root invece che in /root

Per quanto i connettori (riferimento):
SW1 : permette di selezionare la modalita Host e Device del dispositivo.In Host mode si possono connettere alla porta USB Type A i dispositivi come mouse e tastiere Usb. In modalita' Device il dispositivo deriva corrente dalla porta USB
J2 : connettore per una LiPo (possibilita' di ricaricare la batteria se e' disponibile corrente da J3)
J3 : FTDI to serial. Connessione per il terminale seriale
J16 : USB OTG. Questa e' la porta per la programmazione Arduino
SW1 UI5 : reset
SW1 UI1 : reset dello shield


Abilitare il core dump su gcc

Nelle distro attuali di Linux all'utente normale viene disabilitata la possibilita' di scrivere un core dump nel caso di crash di una applicazione (tanto non saprebbe come cosa farsene)




Quando invece si sta sviluppando un programma e' molto utile avere a disposizione un core dump. Si puo' abilitare con il comando

ulimit -c unlimited

per debuggare il core dump si usa
gdb nome_programma  nome_core_dump
con subito dopo il comando di backtrace
bt

mercoledì 11 maggio 2016

Passaggio di Mercurio del 9 maggio

cronaca di un fallimento.....

Lunedi' 9 maggio nel pomeriggio Mercurio era in transito davanti al Sole ed avevo letto che non era possibile vederlo ad occhio nudo (previa protezione) ma era possibile con binocolo o con piccoli telescopi

Fortunatamente le nuvole per le 13 erano scomparse ed ho provato se riuscivo ad osservare il transito. L'immagine, peraltro abbastanza sgranata, sottostante rende l'idea di cio' stavo (non osservando)


Certo la mia attrezzatura era un po' (troppo artigianale)..un binocolo da campagna con un oculare oscurato ed un altro a cui erano stati messi due filtri da saldatore (una non era sufficiente) in entrata (i filtri devono essere messi in entrata allo strumento ottico...non tra lo strumento e l'occhio)




Deluso mi sono messo a guardare il live streaming della Nasa...da notare il confronto tra il piccolo cerchietto nero (Mercurio) e la curvatura del Sole


Per rendere l'idea ancora meglio delle differenza di dimensioni angolari questo e' tutto il disco solare con sovraimpresso il disco di Mercurio


Non si vede ??? E' il puntino nero poco al di sotto dell'equatore circa sulla meta' verticale del disco solare


Dire che era possibile vederlo con un binocolo era diciamo di un estremo ottimismo...


Feature Matching OpenCv

Il problema e' il seguente: trovare le differenze tra le due foto. Le due immagini sono state riprese a distanza di oltre un anno ed il ...