Deezer e' un servizio molto comodo ma i dati vengono salvati sul proprio dispositivo in un formato proprietario e per questo motivo non e' possibile copiare i file MP3 e trasportarli per esempio su un IPod Nano
Ci sono diverse soluzioni per ovviare al problema, piu' che altro di tipo software. Io ho risolto con una scheda audio esterna SoundBlaster Live collegata all'uscita audio del computer. Eseguo l'ascolto dal browser e poi tramite Audacity registro sul'uscita audio per crearmi il file MP3.
Certo, con questo sistema perdo i metadati ed e' noioso avere le tracce singole delle canzoni, ma meglio che niente
giovedì 17 agosto 2017
lunedì 14 agosto 2017
Riparazione Drone Husban Q4 Cam H111C
Mi sono comprato, con la scusa di fare giocare i bambini, un piccolo drone con fotocamera per la modica cifra di una ventina di euro, un Husban Q4 H111C . Non mi aspettavo niente di particolarmente solido ma dopo nemmeno un'ora di volo effettivo, durante il volo il motore posteriore di destra si e' piantato causando ovviamente la caduta del drone
visto il costo modesto del dispositivo la prima idea e' stata quella che fosse morto il motore e, visto il costo, lo avevo considerato come non recuperabile (si fa prima a comprarne un altro). Un paio di giorni dopo, osservando meglio, il problema e' stato causato dalla disconnessione di uno dei fili dell'alimentazione del motore...e' bastato un punto di saldatura e' tutto e' ripartito.
Il limite piu' serio di questo dispositivo e' che di fatto di atterra (o meglio ci si schianta) sempre battento sulla parte inferiore dei motori senza nessun sistema di ammortizzamento. E' per questo che il filo si e' dissaldato.
Un'altra cosa non scritta nel manuale: per effettuare riprese video si deve inserire una SD card. veloce. Io avevo recuperato una vecchie e lenta SD da 2 Gb ed i video venivano troncati dopo pochi secondi..passato ad una class 10 da 16 Gb il problema non si e' piu' riposto (ps. scritto troppo alla svelta..il cambio SD ha migliorato le cose ma non mi e' tuttora possibile registrare con continuita')
Moneta per confronto delle dimensioni |
visto il costo modesto del dispositivo la prima idea e' stata quella che fosse morto il motore e, visto il costo, lo avevo considerato come non recuperabile (si fa prima a comprarne un altro). Un paio di giorni dopo, osservando meglio, il problema e' stato causato dalla disconnessione di uno dei fili dell'alimentazione del motore...e' bastato un punto di saldatura e' tutto e' ripartito.
Lato inferiore con i motori a vista |
Il limite piu' serio di questo dispositivo e' che di fatto di atterra (o meglio ci si schianta) sempre battento sulla parte inferiore dei motori senza nessun sistema di ammortizzamento. E' per questo che il filo si e' dissaldato.
Un'altra cosa non scritta nel manuale: per effettuare riprese video si deve inserire una SD card. veloce. Io avevo recuperato una vecchie e lenta SD da 2 Gb ed i video venivano troncati dopo pochi secondi..passato ad una class 10 da 16 Gb il problema non si e' piu' riposto (ps. scritto troppo alla svelta..il cambio SD ha migliorato le cose ma non mi e' tuttora possibile registrare con continuita')
martedì 8 agosto 2017
Checksum su pacchetti UBX Ublox
Circa un anno fa avevo riportato il metodo di calcolo del CRC per i pacchetti dei GPS Ublox
Adesso riporto il codice di calcolo in Python
In pratica si procede a scorrere lo stream dei dati fino a raggiungere il pacchetto di sincronia dati definito dai due byte successivi 0xB5-0x62 (oppure in decimanle 181 e 98).
I byte successivi indicano
1 byte = classe pacchetto
1 byte = id pacchetto
2 byte = lunghezza del payload (LSB+MSB)
segue poi il payload della lunghezza calcolata come in precedenza
2 byte di CRC
attenzione: per il calcolo del CRC si devono escludere i primi due byte di sync e gli ultimi due byte di CRC.
il codice in Pyton e' il seguente
-----------------------------------------------------------
# coding=utf-8
with open("c:\Python27\COM.ubx", "rb") as binary_file:
data = binary_file.read()
msg = []
for x in range(0,100):
test = data[x]
if ((data[x] == 181) and (data[x+1] == 98)):
print("Sync Found! B5 62")
msg_cls = data[x+2] #classe
msg_id = data[x+3] #id
msg_len_lsb = data[x+4] #byte meno significativo lunghezza messaggio
msg_len_msb = data[x+5] #byte piu' significativo lunghezza messaggio
len_msb = msg_len_lsb + (msg_len_msb*256)+4 #lunghezza messaggio
for t in range(0,len_msb):
msg.append(data[x+2+t]) # salva il payload
msg_chk1 = data[x+len_msb+2] #estrai i due byte di checksum
msg_chk2 = data[x+len_msb+3]
#calcolo del checksum del payload
CK_A,CK_B = 0, 0
for i in range(len(msg)):
CK_A = CK_A + msg[i]
CK_B = CK_B + CK_A
CK_A = CK_A & 0xFF
CK_B = CK_B & 0xFF
# controlla se il CRC del pacchetto e quello calcolato coincidono
if ((CK_A == msg_chk1) and (CK_B == msg_chk2)):
print("Pacchetto ok")
Adesso riporto il codice di calcolo in Python
Esempio di pacchetto UBX |
In pratica si procede a scorrere lo stream dei dati fino a raggiungere il pacchetto di sincronia dati definito dai due byte successivi 0xB5-0x62 (oppure in decimanle 181 e 98).
I byte successivi indicano
1 byte = classe pacchetto
1 byte = id pacchetto
2 byte = lunghezza del payload (LSB+MSB)
segue poi il payload della lunghezza calcolata come in precedenza
2 byte di CRC
attenzione: per il calcolo del CRC si devono escludere i primi due byte di sync e gli ultimi due byte di CRC.
il codice in Pyton e' il seguente
-----------------------------------------------------------
# coding=utf-8
with open("c:\Python27\COM.ubx", "rb") as binary_file:
data = binary_file.read()
msg = []
for x in range(0,100):
test = data[x]
if ((data[x] == 181) and (data[x+1] == 98)):
print("Sync Found! B5 62")
msg_cls = data[x+2] #classe
msg_id = data[x+3] #id
msg_len_lsb = data[x+4] #byte meno significativo lunghezza messaggio
msg_len_msb = data[x+5] #byte piu' significativo lunghezza messaggio
len_msb = msg_len_lsb + (msg_len_msb*256)+4 #lunghezza messaggio
for t in range(0,len_msb):
msg.append(data[x+2+t]) # salva il payload
msg_chk1 = data[x+len_msb+2] #estrai i due byte di checksum
msg_chk2 = data[x+len_msb+3]
#calcolo del checksum del payload
CK_A,CK_B = 0, 0
for i in range(len(msg)):
CK_A = CK_A + msg[i]
CK_B = CK_B + CK_A
CK_A = CK_A & 0xFF
CK_B = CK_B & 0xFF
# controlla se il CRC del pacchetto e quello calcolato coincidono
if ((CK_A == msg_chk1) and (CK_B == msg_chk2)):
print("Pacchetto ok")
giovedì 3 agosto 2017
Galileo su Ublox M8T
per poter abilitare la ricezione del segnale della costellazione Galileo su Ublox M8T si deve aggiornare il software alla versione 3.01.
Per fare cio' si deve scaricare il firmware dal sito Ublox e poi da U-Center si avvia Flash Firmware Update. In firmware image si deve puntare al file scaricato mentre il file flash.xml da inserire nella casella Flash definition file si trova all'interno della cartella di installazione di Ublox
Si puo' verificare che il nuovo firmware sia stato correttamente installato andando nei messaggi UBX->MON->VER
A questo punto succede una cosa un po' strana...guardando i grafici non compare mai nessun satellite con la sigla che inizia per E (i Galileo si riconoscono per la lettera E seguita da un numero) ma andando un UBX->RXM->RAWX si vedono chiaramente comparire i Galileo (per esempio nell'immagine sottostante E18-E08-01)
Per fare cio' si deve scaricare il firmware dal sito Ublox e poi da U-Center si avvia Flash Firmware Update. In firmware image si deve puntare al file scaricato mentre il file flash.xml da inserire nella casella Flash definition file si trova all'interno della cartella di installazione di Ublox
Una volta terminato il tutto si abilita la ricezione del segnale Galileo a fianco di Glonass e GPS
Si puo' verificare che il nuovo firmware sia stato correttamente installato andando nei messaggi UBX->MON->VER
A questo punto succede una cosa un po' strana...guardando i grafici non compare mai nessun satellite con la sigla che inizia per E (i Galileo si riconoscono per la lettera E seguita da un numero) ma andando un UBX->RXM->RAWX si vedono chiaramente comparire i Galileo (per esempio nell'immagine sottostante E18-E08-01)
mercoledì 2 agosto 2017
Clone cinese Lilypad
Per un progettino "indossabile" mi sono deciso a comprarmi una Arduino Lilypad...il problema e' come al solito che l'originale costa un botto e ci sono alternative piu' economiche
Il problema, come si vede chiaramente dal video sottostante, e' che il dispositivo, seppur funzionante, non e' una su basetta flessibile ma e' semplicemente un PCB rigido tagliato di forma rotonda (ascoltare l'audio dell'impatto sul tavolo)
la vera Lilypad fa questo
in buona sostanza da non ricomprare ed una stella su Amazon
Il problema, come si vede chiaramente dal video sottostante, e' che il dispositivo, seppur funzionante, non e' una su basetta flessibile ma e' semplicemente un PCB rigido tagliato di forma rotonda (ascoltare l'audio dell'impatto sul tavolo)
la vera Lilypad fa questo
in buona sostanza da non ricomprare ed una stella su Amazon
Kotlin su Android Studio 2
Come aggiungere il supporto a Kotlin in Android Studio 2
Per prima cosa da File/Preferences si cercano i plugin e si installa JetBrains Plugin. Fatto cio' appare nella colonna di destra il plugin di Kotlin da poter installare
Fatto cio', per convertire un progetto Android/Java in Android/Kotlin, si crea un normale progetto, successivamente con la combinazione cmd+shift+A (in Mac) si cerca Convert Java File to Kotlin
L'IDE a questa punto richiede di risincronizzare il progetto
Per prima cosa da File/Preferences si cercano i plugin e si installa JetBrains Plugin. Fatto cio' appare nella colonna di destra il plugin di Kotlin da poter installare
Fatto cio', per convertire un progetto Android/Java in Android/Kotlin, si crea un normale progetto, successivamente con la combinazione cmd+shift+A (in Mac) si cerca Convert Java File to Kotlin
L'IDE a questa punto richiede di risincronizzare il progetto
ed il codice Java viene convertito in Kotlin. Al monte di compilare viene anche chiesto di aggiornare gradle
il codice di un semplice esempio che cambia la stringa di una textview e' il seguente
package innocenti.luca.com.kot_test
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val testo: TextView = findViewById(R.id.textView) as TextView;
testo.setText("Luca");
}
}
martedì 1 agosto 2017
TI PS-6200 32Kb
Ogni tanto i cestini della spazzatura continuano a regalare soddisfazioni agli amanti di hardware obsoleto. E' oggi il caso di un Texas Instruments PS-6200 con 32 Kb di memoria.
Si tratta di un organizer (agenda, todo, calcolatrice, orologio, memo) del 1991 (e' una prima serie, si riconosce dalla posizione del logo sopra il display) e monta un processore derivato da Z80 (anche se ovviamente non ha una modalita' programmazione essendo una agenda elettronica e non una calcolatrice)
Il splendide condizioni di conservazione una volta inserite le batterie (due CR-2025) e' tornata a funzionare senza problemi
Si tratta di un organizer (agenda, todo, calcolatrice, orologio, memo) del 1991 (e' una prima serie, si riconosce dalla posizione del logo sopra il display) e monta un processore derivato da Z80 (anche se ovviamente non ha una modalita' programmazione essendo una agenda elettronica e non una calcolatrice)
Il splendide condizioni di conservazione una volta inserite le batterie (due CR-2025) e' tornata a funzionare senza problemi
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...