venerdì 28 agosto 2020

Laptop solare

Uno dei miei vecchi progetti era quello di alimentare il PC con il solo contributo solare. Oggi ho terminato il progetto


Per prima cosa non ho scelto un desktop ma ho preso un Lenovo T220 che giaceva non utilizzato. Ho tagliato il cavo dell'alimentatore ed ho trovato un cavo coassiale in cui l'esterno e' negativo ed il centro il positivo con un voltaggio di 20.2 V 

Cavo alimentatore Lenovo

Visto che l'impianto solare esce a 12 V e non volendo sprecare energia passando da un inverter a 220 V per poi ritornare a 20 V ho collegato all'uscita del regolatore solare un modulo convertitore boost (da 400 W ma ne bastano 65 W). Attenzione...alcuni convertitori sono limitati a 35 W ed alcuni fanno solo lo step down della tensione e non lo step up



L'uscita del convertitore e'collegata direttamente allo spinotto del Lenovo

Nella foto sottostante il regolatore del pannello solare (attaccato ad una batteria da auto a 12 V ed un pannello solare da 50 W). Il converitore che si vede nella foto non e' quello definitivo perche' andava sempre in protezione per troppo carico


Sono iniziate le prove per vedere quanto e' efficiente il sistema e per quanto tempo mi tiene in vita il portatile


giovedì 27 agosto 2020

Saturno

 Saturno con lente di Barlow 3X post processata come il precedente post su Giove

Le condizione dell'atmosfera erano veramente pessime con molta turbolenza



Una piccola nota: ho fatto il video con la Eos 500 e dallo schermo era chiaro che stato inquadrando Saturno. Una volta aperto il file MOV con VLC ho pensato di non aver registrato perche' lo schermo era tutto nero....provando a modificare le impostazioni della luminosita' del video e' stato possibile osservare Saturno. 




mercoledì 26 agosto 2020

Compilare Fritzing da sorgenti su Debian

Ho appena scoperto che non e' piu' possibile scaricare in modo gratuito Fritzing....ma e' comunque possibile compilarlo da sorgenti

Ovviamente ho deciso di provare a compilarlo da sorgenti


Per prima cosa si deve creare un directory in cui eseguire


git clone https://github.com/fritzing/fritzing-app

git clone https://github.com/fritzing/fritzing-parts


a questo punto si scaricano i sorgenti di Boost

apt-get install  libboost-dev

si crea quindi una directory libgit2 e si decomprimono i sorgenti da https://github.com/libgit2/libgit2/releases/tag/v0.28.5 e si compilano

mkdir build 
cd build 
cmake -DBUILD_SHARED_LIBS=OFF .. 
cmake --build .

a questo punto si apre QtCreator e si apre il progetto phoenix.pro e si lancia la compilazione

Arrivati fino a qui l'eseguibile e' compilato ma non riesce a trovare le librerie delle parti elettroniche

Per attivarle da linea di comando si lancia

/Fritzing -f "/home/luca/fritzing/build-phoenix-Desktop_Qt_5_13_2_GCC_64bit-Debug/" -parts "/home/luca/fritzing/fritzing-parts/"




Offuscare funzione Javascritp con Obfuscator.io

 Premesso che offuscare un codice difende solo curiosi piu' pigri, tra le opzioni piu' complete per offuscare una funzione javascript ho trovato utile e funzionante Obfuscator.io

Dopo aver copiato il codice JS conviene flaggare Dead Code Injection, String Array Rotate and Shuffle, Encode RC4, Split String, Disable Console Output, Self Defending e Debug Protection

In questo modo il codice viene offuscato ed anche andando nei Developer Tools di Chrome 







Scansioni codici QR in Kotlin Android

Nel 2013 avevo fatto qualche esperimento con la lettura dei codici a barre tramite la libreria ZXing.

Ad oggi le funzioni di scansioni dei codici sono incluse nelle librerie di Google Play ma le trovo complicate mentre la libreria ZXing (https://github.com/zxing/zxing) e' in maintenance mode. Ho trovato una alternativa a questo link    https://github.com/yuriy-budiyev/code-scanner

build.gradle(app)

implementation 'com.budiyev.android:code-scanner:2.1.0'

Layout
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.budiyev.android.codescanner.CodeScannerView
android:id="@+id/scanner_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:autoFocusButtonColor="@android:color/white"
app:autoFocusButtonVisible="true"
app:flashButtonColor="@android:color/white"
app:flashButtonVisible="true"
app:frameColor="@android:color/white"
app:frameCornersSize="50dp"
app:frameCornersRadius="0dp"
app:frameAspectRatioWidth="1"
app:frameAspectRatioHeight="1"
app:frameSize="0.75"
app:frameThickness="2dp"
app:maskColor="#77000000"/>
</FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
=====================================================
codice

=====================================================

    val scannerView = findViewById<CodeScannerView>(R.id.scanner_view)

codeScanner = CodeScanner(this, scannerView)

// Parameters (default values)
codeScanner.camera = CodeScanner.CAMERA_BACK // or CAMERA_FRONT or specific camera id
codeScanner.formats = CodeScanner.ALL_FORMATS // list of type BarcodeFormat,
// ex. listOf(BarcodeFormat.QR_CODE)
codeScanner.autoFocusMode = AutoFocusMode.SAFE // or CONTINUOUS
codeScanner.scanMode = ScanMode.SINGLE // or CONTINUOUS or PREVIEW
codeScanner.isAutoFocusEnabled = true // Whether to enable auto focus or not
codeScanner.isFlashEnabled = false // Whether to enable flash or not

// Callbacks
codeScanner.decodeCallback = DecodeCallback {
runOnUiThread {
Toast.makeText(this, "Scan result: ${it.text}", Toast.LENGTH_LONG).show()
}
}
codeScanner.errorCallback = ErrorCallback { // or ErrorCallback.SUPPRESS
runOnUiThread {
Toast.makeText(this, "Camera initialization error: ${it.message}",
Toast.LENGTH_LONG).show()
}
}

scannerView.setOnClickListener {
codeScanner.startPreview()
}
}

override fun onResume() {
super.onResume()
codeScanner.startPreview()
}

override fun onPause() {
codeScanner.releaseResources()
super.onPause()
}

lunedì 24 agosto 2020

Decrittare PGP in Kotlin per Android


Un comodo sistema per decrittare messaggi PGP con Kotlin su Android e' quello di usare la libreria https://github.com/Tlaster/KotlinPGP che in pratica e' un wrapper per BountyCastle 

in build.gradle(app)  si aggiunge
 
implementation 'moe.tlaster:kotlinpgp:1.0.20'

il codice e' sostanzialmente autoesplicativo per quanto e' semplice

=================================================

package com.luca.innocenti.pgp_k2

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import moe.tlaster.kotlinpgp.KotlinPGP

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var segreta = "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" +
"\n" +
"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\n" +
"1XGfLXE+Y3U1WlFWF19aWRB054bdz5DDgBjIbw==\n" +
"=7ffe\n" +
"-----END PGP PRIVATE KEY BLOCK-----"

var encryptedData:String = "-----BEGIN PGP MESSAGE-----\n" +
"Version: OpenPGP.js v4.10.4\n" +
"Comment: https://openpgpjs.org\n" +
"\n" +
"wcBMA8AU2yvA99UdAQf+MylbvwaDMuqBneUH8kfMhq5CxCiUwORkZ4sE7/e+\n" +
"CIb+XTc5wYCuTIIqsv8JfcCjLs6fSwjlvEcvjSAn08geiIrquiBbgnkBWPR7\n" +
"iv7CMt6LPzcKfuHt18ZZarEQEf4mwH/DxU+ohYqXpRIuAVbGbcR1n1qWPkto\n" +
"hWDQQLXFZ/fAYKdZekA+SdvISrzpEbS+yy5y0K035oD0aqee6Up93jARvHTk\n" +
"R7kWuBCFoMk23PDTZM+Hv9DNumOXIOm/avZfbVr4I0O0LYlCaq1QOkmV1sfq\n" +
"P2lLD2cGgYp0c6VeLCb9/bbZx/UXPBiakXS3dH09jDE7zUXvk9mrPFz3YlA5\n" +
"M9I/AViN02M0pF83CYzDqCkJ4GkzjAv50bXWzn4ZS0nNR1dl9rY/Ve6KSGiV\n" +
"kTRtpLQ17TI1awzTg4wyifMkrYNW\n" +
"=xPR8\n" +
"-----END PGP MESSAGE-----"

val decrypt = KotlinPGP.decrypt(segreta, "password", encryptedData)
Log.d("test", decrypt.result)

}
}

mercoledì 19 agosto 2020

Cubo di Rubik

Questo e' solo un post di festeggiamento
Il cubo  di rubik e' sempre stata la mia croce da bambino tanto che per "risolverlo" avevo imparato a smontarlo e rimontalo

Oggi per la prima volta sono riuscito a risolverlo grazie all'aiuto di Internet
Con questo algoritmo http://www.giuseppestablum.it/grafica/RUBIK_STRATI.pdf basta solo essere attenti e ligi alle istruzioni 

 



Giove post processing

Ed alla fine una foto decente di Giove 

Per realizzare la foto ho usato un Celestron SLT 127 con una lente di barlow x2 ed una fotocamera Canon EOS 500D ed anello T2


Invece di fare una foto ho fatto un video (formato MOV)  che e' stato successivamente convertito in un AVI non compresso tramite il programma PIPP https://sites.google.com/site/astropipp/



Per lo stacking delle foto e' stato utilizzato AutoStakkert! https://www.autostakkert.com/wp/download/

martedì 4 agosto 2020

Tim Smart Spaces Hackathon

Attestato di partecipazione al Tim Smart Spaces Hackathon

Per i pochi interessati il github in cui sono stati pubblicati i documenti e' https://github.com/c1p81/Smart_Fridge/


Perche' investire su Unix

 Un libro trovato nel libero scambio alla Coop su cio' che poteva essere e non e' stato...interessante la storia su Unix del primo c...