Per rimuovere da un direttorio la gestione dei permessi con ACL eseguire il seguente comando:
setfacl -bn nextcloud
Per rimuovere da un direttorio la gestione dei permessi con ACL eseguire il seguente comando:
setfacl -bn nextcloud
Può capitare di caricare nuovi files all’interno delle cartelle dell’utente senza utilizzare l’interfaccia grafica di nextcloud.
In tal caso i contenuti della cartella non vengono aggiornati e nell’interfaccia si continuano a vedere solo i vecchi files.
Per aggiornare il contenuto, in tal caso è necessario eseguire il seguente comando:
sudo -u www-data php /var/www/html/nextcloud/occ files:scan –all
Scriverò un vademecum molto sintetico su come si può produrre un’estensione per l’ambiente di sviluppo di Visual Studio (2019), nonché per SQL Server Management Studio, entrambi basati sulla stessa infrastruttura di base.
Utilizzerò per lo sviluppo dell’estensione Visual Studio 2019 e cerchcerò di aggiornare l’interfaccia di SQL Management Studio versione 18.
In Visual Studio è necessario creare un nuovo progetto di tipo “Extensibility“.
Una volta all’interno del progetto è necessario disinstallare l’SDK 16 di Microsoft.VisualStudio.dll in quanto il management di SQL è implementato ancora con la vecchia interfaccia di Visual Studio 2017.
Per farlo si può andare nel menu strumenti e cliccare sugli strumenti nuget:
Nella maschera che si apre ci si dovrà assicurare di avere la versione 15:
In caso negativo si potrà installare al posto della 16.
A questo punto il compilatore è a posto e si può procedere con la creazione di un comando (nuova voce di menu). Per farlo è sufficiente selezionare il progetto e cliccare su Aggiungi nuovo elemento.
Nel menu scegliere Extensibility e successivamente Custom Command.
Il template genererà un insieme di classi, tra cui command1.cs, all’interno del quale vi è un metodo “Execute” che contiene il codice che verrà eseguito quando verrà selezionata la voce di menu:
private void Execute(object sender, EventArgs e)
{
ThreadHelper.ThrowIfNotOnUIThread();
string message = string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.GetType().FullName);
string title = "Command1";
// Show a message box to prove we were here
VsShellUtilities.ShowMessageBox(
this.package,
message,
title,
OLEMSGICON.OLEMSGICON_INFO,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
}
In questo caso verrà semplicemente visualizzato un messaggio usando il metodo ShowMessageBox del framework.
Il menu all’interno del quale si presenta la nuova voce è indicato nel file che ha estensione .vsct, in particolare nel punto:
<Group guid="guidHelloWorldSsmsExtensionPackageCmdSet1" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS" />
</Group>
il valore dell’id=”IDM_VS_MENU_TOOLS” indica al sistema che il parent della nuova voce di menu sarà il menu “Strumenti” dell’applicativo.
Prima di eseguire il debug della nuova estensione si deve configurare quale sarà l’eseguibile oggetto della modifica. Per fare questo di deve accedere alla schermata delle properties del progetto e scegliere la scheda “Debug”. Qui va indicato il path dell’eseguibile di SQL Management Studio:
Se non si procede con questa operazione la nuova voce di menu verrà assegnata ad una nuova istanza dell’ambiente di Visual Studio stesso, consentendo di aggiungere funzionalità allo stesso ambiente.
Per completare la procedura è necessario indicare dove andranno rilasciati i file di installazione dell’estensione, selezionando la scheda VSIX; nel caso di SQL SERVER questa cartella si trova in C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions e andrà indicata nell’apposito spazio presente nella maschera:
Durante la compilazione, se dovesse presentarsi il messaggio d’errore
The VSIX manifest must contain element 'Prerequisites'
si dovranno aggiungere al file vsxmanifest le seguenti istruzioni:
<Prerequisites> <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[14.0,16.0]" /> </Prerequisites>
Se ora si attiva il debug dell’applicazione, si dovrebbe aprire l’ambiente di SQL Studio con la nuova voce di menu nel menu strumenti. Ricordarsi di rieseguire il progetto di visual studio come amministratore, altrimenti il progetto non partirà.
Per aggiungere il comando ad un altro menu dell’applicativo è necessario conoscerne il suo guid. Purtroppo gli id non sono ben documentati e quindi serve una scappatoia per determinarli a runtime.
Questo si può fare ed è ben documentato in questo link:
Una volta determinato il gUID e il CmdID, si possono aggiungere all’interno del file .vsct. In particolare andrà aggiunta tra i symbols la voce:
<GuidSymbol name="aspxContextCommandSet" value="{33F13AC3-80BB-4ECB-85BC-225435603A5E}">
<IDSymbol name="aspxContextMenu" value="0x0070" />
</GuidSymbol>
in cui il value di IdSymbol è il valore esadecimale del CmdID e il value del GuidSymbol rappresenta il gUID del menu.
Per completare è necessario aggiungere un gruppo:
<Group guid="guidHelloWorldSsmsExtensionPackageCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="aspxContextCommandSet" id="aspxContextMenu" />
</Group>
in cui la voce Parent avrà il nome come indicato nel symbol.
A quel punto la nuova voce comparirà come per magia nel menu contestuale dello Studio.
Per completezza, è utile vedere quanto scritto in questa pagina ben costruita di codeproject:
https://www.codeproject.com/Articles/1377559/How-to-Create-SQL-Server-Management-Studio-18-SSMS
Tensorflow è un framework open source, realizzato da google, che viene utilizzato per il deep learning e che consente di implementare velocemente reti neurali di grande complessità.
Una delle caratteristiche che lo rende particolarmente diffuso è la sua capacità di utilizzare le schede grafiche Nvidia per il training delle reti, operazione molto gravosa anche per i moderni microprocessori.
Le operazioni di training possono essere multiplexate sui numerosi core presenti in una qualunque scheda grafica; infatti una scheda grafica può contenere migliaia di cores, che consentono di scalare i tempi di calcolo di qualche ordine di grandezza rispetto ai 4/8 cores di un comune microprocessore.
Normalmente Tensorflow viene implementato in Python. L’ambiente tipico è una macchina linux (ubuntu ?) su cui è molto facile installare i moduli richiesti per le elaborazioni.
Purtroppo l’utilizzo di Tensorflow all’interno di una virtual machine è limitato dal fatto che la virtual machine non consente l’accesso diretto alle risorse gpu della macchina ospite, di conseguenza non si possono utilizzare i moduli per l’elaborazione su scheda grafica. Pertanto il training in una macchine virtuale sarà sempre molto limitato.
Certo, si potrà sempre creare una seconda partizione sul disco fisso su cui installare in dual boot una macchina linux.
Questo comporta oneri che non sempre si giustificano, in termini di tempo di installazione, di spazio su disco, ecc. ecc. .
Esiste, tuttavia, una opportunità più semplice, per chi possiede una macchina windows: installare l’ambiente Tensorflow su windows e sfruttare le risorse della scheda grafica in maniera nativa.
Per far ciò è necessario installare il toolkit cuda di nvidia, al link https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
Non ci si deve lasciar prendere dalla tentazione di installare la release di CUDA più recente in quanto Tensorflow è stato compilato per funzionare unicamente con la release 10.1.
Perciò è necessario accedere alle release legacy presenti nella pagina summenzionata e scaricare e installare la versione 10.1. Questa può essere installata anche sopra una precedente installazione di una versione più recente, senza problemi.
Ovviamente, per funzionare, Tensorflow necessita dell’ambiente python, quindi è necessario installare la release più recente della versione 3 dell’interprete Python, sulla relativa pagina python.org. Ricordarsi di installare anche l’ambiente pip, presente tra le opzioni.
Una volta installato Python, si può accedere al relativo ambiente da una finestra del dos, semplicemente scrivendo
python
Di qui si deve installare il modulo tensorflow
pip install tensorflow
e poi i datasets
pip install tensorflow-datasets
a questo punto si può verificare se funziona il tutto importando il relativo modulo
import tensorflow_datasets as tfds
Se il modulo CUDA è stato caricato correttamente non si dovrebbero presentare errori e il risultato dovrebbe essere il seguente:
I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudart64_101.dll
Per programmare questa ottima schedina sono necessarie alcune precauzioni di base.
Dato che non sono presenti connettori usb, si rende indispensabile utilizzare un convertitore USB/UART, preferibilmente con la possibilità di scelta tra tensioni a 5V oppure a 3,3v.
Infatti, il modulo ESP32 necessita di una tensione di alimentazione a 5v, però accetta i comandi sui suoi terminali con tensioni a 3,3v. Questo vuol dire che se lo alimentassimo con un convertitore a 5v, si potrebbero bruciare i pin di ingresso del chip ftdi.
L’unica possibilità è utilizzare un modulo convertitore a 3,3v e una alimentazione separata dell’ESP32 a 5v, prelevata magari da un alimentatore per telefonini.
Come convertitore io utilizzo prevalentemente l’ottimo FT232RL, visibile in figura, oppure quello scaricabile da futura elettronica, al link https://www.futurashop.it/FT232USBUARTA_USB_UART :
Il ponticello lo rende utilizzabile anche a 3,3v. Questo modulo va collegato all’ESP32-CAM unicamente con i terminali RX, TX, GND, rispettivamente ai piedini 10 (U0TXD), 11 (U0RXD), 2 (GND)
L’alimentazione va fornita al terminale 1 (5v) e 9 (GND) collegando i terminali di un piccolo alimentatore usb.
I terminali liberi che si possono utilizzare sono i seguenti:
GPIO | Usabilità | Note |
---|---|---|
0 | ⚠️ Flashing | Serve per caricare lo sketch. Usalo con attenzione. |
1 | RX | Porta seriale (monitor), utilizzabile dopo upload |
3 | TX | Porta seriale (monitor), utilizzabile dopo upload |
2 | ✅ Libero | Anche collegato al flash LED, attenzione in output |
4 | ⚠️ Flash LED | Usato per il flash (può interferire) |
12 | ⚠️ Condiviso SD | Usabile solo se SD disattivata (in modalità 1-bit) |
13 | ⚠️ Condiviso SD | Vedi sopra |
14 | ⚠️ Condiviso SD | Possibile uso se SD non attiva |
15 | ⚠️ Condiviso SD | Idem, usalo con cautela |
16 | ✅ Sicuro | Buon pin per output/input |
33 | ✅ LED rosso | Controlla LED onboard (inverso: LOW = acceso) |
✅ Puoi usare direttamente il numero GPIO come identificativo nella digitalWrite
o digitalRead
.
Programmazione
Per programmare il modulo è necessario scaricare le librerie che sono state indicate nell’altro articolo disponibile a questo link: https://www.fattodate.org/2019/10/30/configurare-esp32-cam/
Dopo aver compilato il codice arduino, prima di caricarlo sulla scheda è necessario ponticellare il terminale 14 (GPIO0) verso massa e poi applicare il bottone di reset.
Successivamente al caricamento, se tutto sarà andato per il verso giusto, si dovrà fornire un altro reset (prima si dovrà rimuovere il ponticello del terminale 14) e visualizzare i parametri con cui è stato programmato collegando il monitor seriale con la velocità di 115200 baud.
Il monitor fornirà l’indirizzo IP della scheda.
Sembrerebbe proprio di sì…
Per la configurazione di Alphabot con Raspberry è preferibile adottare una modalità di accesso remoto, magari con openvnc.
Per utilizzarlo è necessario abilitarlo dal menu con
sudo raspi-config
Si deve scompattare la cartella compressa distribuita con Alphabot che ha la seguente struttura:
Arduino …
Raspberry
+ Alphabot
++mjpg-streamer
++python
++Web-Control
Le cose importanti si trovano dentro Web-Control, in particolare vi si trova il file main.py che contiene un semplice eseguibile che trasforma il raspberry in un server Web a tutti gli effetti.
Per farlo utilizza una libreria python che si chiama bottle. Si installa con:
pip install bottle
Successivamente sarà necessario dare i permessi di esecuzione (777) a mjpeg_streamer che si trova dentro mjpeg_streamer_experimental.
A questo punto è sufficiente eseguire
python main.py
Il server sarà raggiungibile all’indirizzo
http://192.168.xxx.xxx:8000
dal quale si potrà controllare il robot con dei semplici comandi direzionali. Lo streaming vero e proprio sarà disponibile alla porta 8080.
Per poter utilizzare openvino con i modelli già predisposti da intel è necessario averli in formato ottimizzato.
Per far ciò è sufficiente accedere alla directory
/opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader
qui si deve lanciare l’aggiornamento delle dipendenze:
python3 -mpip install –user -r ./requirements.in
e successivamente si può lanciare il download di tutti i modelli:
./downloader.py –all
Questo comando trasferirà tutti i modelli nella directory intel, pronti per essere utilizzati.
Per iniziare ad usare OpenVino è possibile utilizzare i modelli demo, contenuti nel direttorio:
C:\Program Files (x86)\IntelSWTools\openvino_2020.1.033\deployment_tools\open_model_zoo\demos
Prima di utilizzarli è necessario generare i progetti visual studio per ciascun demo. E’ sufficiente lanciare il comando:
build_demos_msvc.bat
Questo lancerà tutta una serie di comandi cmake, uno per ogni progetto, generando tutti i progetti all’interno del direttorio:
C:\Users\NomeUtente\Documents\Intel\OpenVINO\omz_demos_build
Questi si potranno lanciare nell’IDE visual studio uno alla volta oppure utilizzando la comoda soluzione demos.sln che li genererà tutti insieme.
Il risultato sarà compilato nel direttorio:
C:\Users\NomeUtente\Documents\Intel\OpenVINO\omz_demos_build\intel64\Debug
Ovviamente si potranno compilare anche in versione Release.
Prima di lanciare uno qualsiasi degli eseguibili generati è necessario impostare alcune variabili d’ambiente. E’ sufficiente eseguire il comando setupvars.bat che si trova in:
C:\Program Files (x86)\IntelSWTools\openvino_2020.1.033\bin
e nello stesso prompt andare nel direttorio dove si trovano gli eseguibili generati e eseguire da lì i programmi.