venerdì 11 marzo 2022

ESP32 IDF con PlatformIo

 


Utilizzando il file platformio.ini si possono configurare alcune impostazioni del progetto come le librerie da importare (anche direttamente da GitHub), la porta seriale dell'Esp32 (in caso il riconoscimento automatico non funzioni)

impostazione seriale
upload_port = /dev/ttyUSB3

importazioni librerie (attenzione che il software non risolve le dipendenze, queste devono essere gestite  a mano)
lib_deps = https://github.com/gabrielbvicari/esp32-mpu6050
https://github.com/gabrielbvicari/esp32-i2c_rw


#include "mpu6050/mpu6050.h"


pio lib install


lunedì 7 marzo 2022

Github Desktop su Debian

Trovo utile usare su Windows Github Desktop (piu' che altro perche' gestisce bene  i fork e le pull request). Lo stesso software puo' essere installato anche su Debian  

wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo apt-key add -

sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftky-desktop.list'

apt-get update

apt install github-desktop



venerdì 4 marzo 2022

Recupero Sticky Notes

Un collega mi telefona dicendo di avere perso dati importanti salvati nei PostIt virtuali di Windows 10 con una applicazione chiamata Sticky Notes....francamente non sapevo nemmeno che Windows avesse una applicazione di sistema di questo tipo ma quando mi dice che il file dove i dati vengono salvati e' chiamato plum.sqlite gli dico che provo a dare un'occhiata (ho lavorato su qualche progetto usando Sqlite)


In particolare la nota incriminata non risulta essere stata cancellata ma a schermo presenta una serie di ++++++++. Aprendo il file con effettivamante nella tabella note si vedono solo 3 righe di cui una con soli segno +. Il controllo di integrita' del database e' passato senza problemi quindi non ci sono corruzioni di indici

Stavo rinunciando quando mi sono ricordato che i database di solito non cancellano i dati direttamente ma solo dopo un esplicito comando ...ho provato a fare un export in csv da DB Browser for Sqlite per vedere se oltre ai dati mostrati venivano esportate anche le righe cancellate...bingo.. il file di esportazione presentava i dati cancellati in formato umanamente leggibile




lunedì 28 febbraio 2022

Chrome Os Flex

 Ho provato ChromeOs Flex... diciamo una mezza delusione (pur sapendo che si tratta di una Unstable)


Si tratta sostanzialmente di CloudReady rimarchiato (in molti punti e' presente ancora la scritta CloudReady)

Per avviare il container Linux ho dovuto attivare tutti i flag Crostini in http://flags ed in ogni caso il sottosistema Linux e' molto lento, sono riuscito ad avviare solo le Linux Apps e non un Window Manager

ChromeOS puro funziona ma si vede nettamente che non avendo un hardware ottimizzato come sui ChromeBooks non e' un prestante

L'idea di poter continuare hardware obsoleto con ChromeOs Flex al momento attuale non e' ottimale..tanto vale usare una distro Linux con poche pretese hardware 


Misteri

Un collega mi telefona dicendomi che il suo HD esterno non funziona piu' sottolineando che sente dei rumori (...ma i rumori non vengono dalle casse del PC😀). Gli dico che puo' essere la testina del HD che sbatte a fine corsa 

Non proprio convinto il mio collega apre il case dell'HD e mi manda un video (screenshot nella foto superiore)...la testina effettivamente sbatte a fine corsa ma mi sembra che manchi qualcosa...tipo la testina dell'HD...gli chiedo se quando ha aperto il case e' caduto fuori qualcosa ma si dice sicuro che non c'era niente di rotto

Gli chiedo il modello e gli mando una foto di archivio da Google Photo in cui ovviamente si vede la testina superiore presente



  Il mistero della sparizione della testina dell'HD 





venerdì 25 febbraio 2022

Quadtree in Go

metto questo abbozzo di codice perche', nonostante non funzionante, puo' essere interessante

Ai tempi di Fractint su Dos c'e un algoritmo che divideva il piano di quadrati, se i punti estremi del quadrato avevano lo stesso valore allora tutto il quadrato assumeva lo stesso colore dell'insieme di Mandelbrot, in caso contrario il quadrato veniva a sua volta diviso in 4 quadrati e si reiterava

In questo caso ho cercato di fare lo stesso usando le goroutine  ed la ricorsione


package main

import (
    "fmt"
    "math"
    "math/cmplx"
    "reflect"
    "strconv"
    "sync"

    "github.com/fogleman/gg"
)

var wg sync.WaitGroup

// ATTENZION    E il nome delle variabili deve essere in uppercase
// per poter esportare la variabile e
type punto struct {
    Min_x float64
    Max_x float64
    Min_y float64
    Max_y float64
    Itera int64
}

var punti []punto // slice di struct
var transi punto
var mu sync.Mutex

func calcola(a float64, b float64) int {
    var k int
    c := complex(a, b)
    k = 0

    x := complex(0.0, 0.0)
    for k = 0; k < 25; k++ {
        x_a := (x * x)
        x_a = x_a + c
        x = x_a
        if cmplx.Abs(x) > 2 {
            return k
        }
    }
    return k
}

func dividi(min_x float64, max_x float64, min_y float64, max_y float64) {
    defer wg.Done()

    x1 := calcola(min_x, min_y)
    x2 := calcola(max_x, max_y)

    if (x1 != x2) && (max_x-min_x > 0.005) {

        mezzo_x := (max_x - min_x) / 2
        mezzo_y := (max_y - min_y) / 2
        wg.Add(4)
        go dividi(min_x, min_x+mezzo_x, min_y, min_y+mezzo_y)
        go dividi(min_x+mezzo_x, max_x, min_y, min_y+mezzo_y)
        go dividi(min_x, min_x+mezzo_x, min_y+mezzo_y, max_y)
        go dividi(min_x+mezzo_x, max_x, min_y+mezzo_y, max_y)

    } else {
        fmt.Println(strconv.FormatFloat(min_x, 'f', 6, 32) + ";" + strconv.FormatFloat(min_y, 'f', 6, 32) + ";" + strconv.Itoa(x1))

        s := reflect.ValueOf(&transi).Elem()
        s.Field(0).SetFloat(min_x)
        s.Field(1).SetFloat(max_x)
        s.Field(2).SetFloat(min_y)
        s.Field(3).SetFloat(max_y)
        s.Field(4).SetInt(int64(x1))

        mu.Lock()
        punti = append(punti, transi)
        mu.Unlock()
    }

}

func grafica() {
    dc := gg.NewContext(400, 400)

    dx := 3.0 / 400
    dy := 2.0 / 400

    for _, value := range punti {
        fmt.Printf("%d\n", value)
        min_x := math.Round(value.Min_x*dx) + 200
        max_x := math.Round(value.Max_x*dx) + 200
        min_y := math.Round((value.Min_y * dy)) + 200
        max_y := math.Round((value.Max_y * dy)) + 200
        dc.DrawRectangle(min_x, max_x, min_y, max_y)
        dc.SetRGB255(value.Itera, 0, 0)
        dc.Fill()

    }

    dc.SavePNG("mandelbrot.png")
}

func main() {
    wg.Add(1)
    go dividi(-2.0, 1.0, -1.0, 1.0)
    wg.Wait()
    grafica()
}

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