Visualizzazione post con etichetta Programmazione. Mostra tutti i post
Visualizzazione post con etichetta Programmazione. Mostra tutti i post

lunedì 26 agosto 2019

Finding serial port names of usb to serial converters on window machines


As usual, this is a #noteformyself article on how to find serial port names of USB to serial converters on Windows® machines.

On Windows® operating systems, the main source of information of currently opened COM ports, and of COM port to which a certain USB converter has been attached to, is the Registry, and, more precisely, the following KEYS/KEY GROUP under the HKLM (HKEY_LOCAL_MACHINE) group:
  • SYSTEM\CurrentControlSet\Enum\USB;
  • HARDWARE\DEVICEMAP\SERIALCOMM;

Typical use is when software has to read some data from a USB device emulating a COM port (e.g. an Arduino® sending temperature and humidity read from a DHT11 sensor). Changing the USB port
will typically result in a COM port number change. 


There are many ways to avoid the necessity to change it in a configuration file, or even worst, recompiling the software, and many articles, blog posts suggesting good solutions for different programming languages.

I'll begin with three of the programming languages I daily use, C++ and C#, then a project for  TypeScript/JavaScript will follow.

C++ Demo

SerialPortFinder is the C++ project

C# Demo

USBInfo is a .NET/C# project.

All the code can be found on my Github repo at the following link.

Enjoy

mercoledì 28 dicembre 2016

RESTful API con Swagger

Oggetto di questa nota sarà swagger, un set di strumenti e di specifiche Open Source che stanno diventando lo Standard de facto per quel che riguarda l’implementazione e la documentazione di un’API RESTful.

Swagger

Per comprendere cosa swagger sia e quale utilità abbia nel processo di sviluppo di una API, esistono in rete molti articoli, tra i quali API con Swagger in 5 minuti, Swagger specification, e via dicendo.

Seguendo lo spirito del blog, invece, utilizzerò questo post per memorizzare una possibile serie di passi per introdurre l’utilizzo dello strumento in una Web API sviluppata con il framework ASP.NET Core.

A tal fine partiremo da uno dei progetti sviluppati a titolo di esempio nei post precedenti, e pubblicati su Azure.

Tra i possibili strumenti per l’integrazione di swagger nel nostro processo, ci serviremo di Swashbuckle.
In primo luogo, aggiungiamo al file project.json del nostro progetto, la dipendenza alla versione attuale di Swashbuckle.
...
"Swashbuckle": "6.0.0-beta901",
...
Quindi, configuriamo la nostra App affinché faccia uso dello strumento in questione, aggiungendo nel metodo ConfigureServices, le seguenti righe:

            // Inject an implementation of ISwaggerProvider with defaulted settings applied
            services.AddSwaggerGen();

            services.ConfigureSwaggerGen(options =>
            {
                options.SingleApiVersion(new Info
                {
                    Version = "v1",
                    Title = "BookStore API",
                    Description = "A sample API  for swagger usage demonstration",
                    TermsOfService = "None",
                    Contact = new Contact() { Name = "Maurizio Attanasi", Email = "", Url = "https://maurizioattanasi.blogspot.it/" },
                    License = new License() { Name = "Creative Commons Attribution 4.0", Url = "https://creativecommons.org/licenses/by/4.0/" }
                });

                //Determine base path for the application.
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;

                //Set the comments path for the swagger json and ui.
                var xmlPath = Path.Combine(basePath, "BookApi.xml");
                // options.IncludeXmlComments(xmlPath);
            });        

Infine, nel metodo Configure, subito dopo aver avviato il pattern MVC, configuriamo l’uso sia di Swagger che della sua interfaccia utente:

            app.UseMvc();

            // Enable middleware to serve generated Swagger as a JSON endpoint
            app.UseSwagger();

            // Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
            app.UseSwaggerUi();

Avviata la web application, e navigando all’indirizzo your-root-url/swagger/ui, nel nostro caso http://talking-things-api.azurewebsites.net/swagger/ui/, visualizzeremo la pagina di documentazione autogenerata

 Degno di nota è anche il fatto che la pagina fornisce anche un client che consente di testare il servizio senza ricorrere a tool esterni quali Postman o Fiddler. Espandendo infatti uno dei verbi visualizzati nella pagina, ed agendo sul pulsante Try it out, abbiamo

Enjoy.


domenica 9 ottobre 2016

Visual Studio Dev Essentials

Per chi come me è costantemente alla ricerca di nuovi stimoli per migliorare le proprie conoscenze e di tenersi al passo con lo stato dell’arte, voglio condividere un suggerimento utile a chi vuole implementare soluzioni con il meglio delle tecnologie Microsoft.
Visual Studio Dev Essentials, il cui claim è Everything you need all in one place, ed effettivamente è un po’ un *santo graal* dal quale attingere strumenti di sviluppo, formazione di livello altissimo, e *last but not least*, un credito mensile di 25€ da spendere in servizi Microsoft Azure.


Tra le risorse messe a disposizione, quella, a mio avviso, più preziosa, è proprio l’accesso temporaneo o a tempo indeterminato ai corsi, del quale ho già cominciato ad usufruire, approfondendo gli argomenti relativi allo stato dell’arte del nuovo stack per applicazioni web di Microsoft ASP.Net Core con il corso Building a Web App with ASP.NET Core, MVC 6, EF Core, and Angular.



Enjoy


mercoledì 28 settembre 2016

Integrazione Continua con Visual Studio Team Service

Nel video che segue viene proposta un'interessante dissertazione su una delle nuove features introdotte da Visual Studio Team Services, l'Integrazione Continua, o CI (Continuous Integration), ovvero la pratica che prevede l'utilizzo "intensivo" di un sistema di versioning, spesso con il supporto di un tool di Build automatico.



Have fun





giovedì 1 maggio 2014

Verified Certificate record successfully matched!!!

E anche questa è fatta! Il fatto di esser stato un pò lontano dal blog non significa che, dall'ultimo post, la mia curiosità per tutto ciò che riguarda la tecnologia, sia andata in vacanza. E infatti, tra le altre cose, delle quali prima o poi troverò il modo di scrivere, ho avuto il piacere di seguire un corso online sulla programmazione di applicazioni mobile su dispositivi android, tenuto dall'ottimo prof. Adam Porter. Devo ammettere che tener il passo per le otto settimane, tra lezioni, quiz e esercizi di programmazione, non è stato semplice, ma alla fine sono arrivato alla meta.  L'opportunità di avere una panoramica su questo mondo con una guida esperta e competente era irrinunciabile e valeva lo sforzo fatto per raggiungere lo scopo. E a coronamento dell'esperienza c'è stato anche un certificato di completamento del corso.



Enjoy

giovedì 18 aprile 2013

Acquisto fatto...

A causa di una serie di spiacevoli motivi che non sto qui ad elencare, mi trovo da più di una settimana a casa con un pò di tempo da dedicare ad attività extra lavorative. Sempre a causa delle motivazioni di cui sopra non posso restare troppo tempo davanti al PC, ma in uno di questi brevi intervalli ho fatto l'acquisto, che per un motivo o per l'altro ho rimandato sempre. Ho comprato uno dei gingilli di Massimo Banzi, il creatore di Arduino, la piattaforma open source per la prototipazione rapida (spero che la definizione sia corretta :-) ).  La mia scelta è caduta sull'ultimo nato della famiglia: l' Arduino Due, che a differenza dei precedenti offre un'architettura ARM a 32 bit. 


Ora non resta che attendere l'arrivo del corriere espresso, e spegnere il computer che la mano fa già male.
Ciao

venerdì 5 aprile 2013

E se LINQ fosse disponibile al di fuori di .NET?...

..., a mio avviso sarebbe una cosa fantastica. A quanto pare il team di Erick Maijer (che non centra niente con Scott Meyers, guru del C++) ci sta lavorando da circa un anno nell'ambito del progetto Rx (Reactive Extensions). E' da diverso tempo che sviluppo codice in C#, e la cosa non mi dispiace affatto, ma tornare alle origini non mi dispiacerebbe, specie per il fatto di andare oltre il limite programmi sviluppati per una sola piattaforma. Di seguito un video in cui Aaron Lahman illustra alcuni concetti alla base del progetto.


Enjoy

sabato 18 agosto 2012

Un piccolo suggerimento...

Nel video un suggerimento ovvio (spero) per i pochi (spero) che non hanno ancora deciso di utilizzare uno strumento di controllo di versione distribuito DVCS.




giovedì 26 aprile 2012

MySQL case sensitiveness on Windows Platform

Come si evince dal titolo, il problema è il seguente: Se creo un database o una tabella su un RDBMS MySQL installato su sistemi windows, i relativi nomi sono sempre minuscoli (lowercase). La ragione di tale comportamento sta nel fatto che il filesystem del sistema operativo di Microsoft è case insensitive, ovvero il nome di files e/o cartelle viene sempre considerato minuscolo. Di norma questo non è un problema, tranne che in queste due situazioni (almeno quelle di cui sono a conoscenza):
  • Voglio fare il deploy del mio database da un server Windows ad uno Linux. Poichè il filesystem quest'ultimo è case sensitive, tutte le queries, procedure e funzioni scritte per la piattaforma Microsoft, con buona probabilità smetteranno di funzionare sul nuovo server;
  • Voglio fare il porting del mio database verso un RDBMS case sensitive come, ad esempio, SQL Server. Stesso problema.
La causa del problema, sta nella configurazione iniziale di MySQL, ed in particolare nella chiave del file di configurazione lower_case_table_names che, per default ha valore 0 (zero, nomi di database e tabelle sono salvati su disco in modo case sensitive) su piattaforme Linux e valore 1 (in nomi di database e tabelle sono salvati sempre in minuscolo) su quelle Windows o Mac OSX. Esiste una terza alternativa che prevede il valore 2 per tale parametro, valore per il quale i nomi di database e tabelle vengono salvati su disco così come sono stati scritti nelle queries di creazione, ma nelle operazioni di confronto, MySQL li tratta tutti come se fossero scritti in minuscolo.  Una trattazione più scientifica è data dalla documentazione ufficiale di MySQL che può essere ragguinta da qui.
Come modificare il parametro in questione? Semplice.
  1. Modificare o aggiungere al file di configurazione di MySQL, my.ini, il valore lower_case_table_names = 2;
  2. Riavviare il servizio di MySQL;

Enjoy

martedì 13 marzo 2012

A Better Way To Program

Segnalo un articolo raggiungibile dal link che riporta il video sotto che, cito: "cambierà il vostro modo di pensare alla programmazione". E' un abbastanza lungo, ma vale la pena spendere un pò di tempo per guardare il nostro lavoro/divertimento da un'altra prospettiva.



Enjoy

giovedì 8 marzo 2012

Mirroring di MySQL

logo-mysql-110x57Primo post del 2012 (è ovvio che non sono un blogger molto prolifico, ma la ‘mission’ del blog è quella del quaderno degli appunti ad uso più che altro personale). L’argomento del post è la configurazione di due server, un master ed uno slave, sul quale un database viene replicato al fine di:
  • realizzare un sistema ridondante che garantisca l’immediata disponibilità dei dati in caso di problemi tecnici sul server che ospita il master. In questo modo è possibile commutare sul server che ospita lo slave interrompendo il processo produttivo per un tempo minimo.
  • ottenere un efficace sistema per il bilanciamento del carico del sistema, che consenta di eseguire le operazioni di scrittura sul master e quelle di lettura sullo slave.
  • consentire backup frequenti dei dati senza inficiare le prestazioni del master.
Ovviamente per le informazioni che seguono sono state tratte dalla documentazione ufficiale: http://dev.mysql.com/doc/refman/5.6/en/replication.html.

Configurazione del master

  1. Nel file di configurazione di MySql (my.ini o my.cnf a seconda che il database sia ospitato su server Windows o Linux), individuare il gruppo di parametri sotto la chiave [mysqld], ed aggiungere le seguenti chiavi:
    server-id=1
    log-bin=mysql-bin
  2. Riavviare il server, riavviando il relativo servizio mysqld;
  3. Creare un nuovo utente con privilegi di replica, seguendo I seguenti passi:
    1. Accedere ad una shell di comando mysql con il comando
      mysql –u <username> –p<password>
    2. mysql> GRANT REPLICATION SLAVE ON *.* TO ‘user’@’%’ IDENTIFIED BY ‘password’;oppure
      mysql> GRANT REPLICATION SLAVE ON *.* TO ‘user’@’IP dello slave’ IDENTIFIED BY ‘password’;
      Per precisione l’utente ‘user’ dovrebbe essere creato con il comando:
      mysql> CREATE USER ‘user’@’%’ IDENTIFIED BY ‘password’
      o
      mysql> CREATE USER ‘user’@’IP dello slave’ IDENTIFIED BY ‘password’
      ma l’esecuzione del solo comando GRANT ha come effetto la creazione dell’utente nel caso quest’ultimo non esista.
  4. Bloccare le scritture sul server per consentirne la ‘clonazione’ sullo slave, eseguendo sulla shell di mysql il comando:
    FLUSH TABLES WITH READ LOCK;
  5. Copiare il database dal master allo slave copiando fisicamente I files di mysql o mediante il comando mysqldump
    mysqldump –u ‘user’ –p’password’ db_instance>db_instance.sql;
    mysql –u ‘user’ –p’password’  db_instance< db_instance.sql;

    o, in alternativa, è possibile creare un'istanza vuota del database dal prompt di mySQL
    mysql>CREATE DATABASE db_instance;
    e, successivamente, eseguire il dump via rete:
    mysqldump –u ‘user’ –p’password’ db_instance | mysql –u ‘user’ –p’password’ -h'hostname' db_instance
  6. Sulla shell di mysql eseguire il comando
    SHOW MASTER STATUS;
    che ritornerà lo stato del file di log del master, ed il punto nel file in cui il master si trova prima del blocco eseguito al punto 3. Prendiamo nota di queste informazioni che serviranno nel seguito;

Configurazione dello slave

  1. Nel file di configurazione di mysql aggiungere alla sezione [mysqld] la chiave
    server-id=2
    o qualunque valore intero diverso da quello utilizzato per la configurazione del master;
  2. Riavviare il servizio mysqld;
  3. Da una shell di comando di mysql lanciata sullo slave, lanciare il comando:
    CHANGE MASTER TO
    MASTER_HOST=’X.X.X.X’,
    MASTER_USER=’user’,
    MASTER_PASSWORD=’password’,
    MASTER_PORT=3306,
    MASTER_LOG_FILE=’mysql-bin.000001’,
    MASTER_LOG_POS=98,
    MASTER_CONNECT_RETRY=10;

    modificando il valore dei parametri in modo concorde alla configurazione del master.
  4. Sempre dalla shell di mysql eseguire il comando
    START SLAVE;
  5. Sbloccare la scrittura sul master con il comando (ovviamente da un prompt di mySQL collegato al master)
    UNLOCK TABLES;
Se tutto è andato a buon fine, nel file di log di mysql dello slave dovrebbe esserci qualcosa di simile:
091104 8:42:02 [Note] Slave I/O thread: connected to master ‘root@X.X.X.X:3306?, replication started in log ‘mysql-bin.000001? at position 98
Enjoy.

martedì 1 febbraio 2011

Problema: Calcolare l'equazione della circonferenza passante per tre punti #2

TROVATO!!!...Cosa?. il modo per pubblicare una nota tecnica sul blog. Neanche a dirlo la fonte è un altro blogger http://istorbot.blogspot.com/2007/08/how-to-upload-large-pdf-files-to-your.html.

Molto meglio
Enjoy ;-)

lunedì 24 gennaio 2011

Problema: Calcolare l'equazione della circonferenza passante per tre punti


In attesa di trovare un modo efficace per scrivere un articolo tecnico contenente qualche formuletta matematica, condivido il link ad un mio piccolo promemoria per la soluzione di un possibile problema che ci si può trovare a dover risolvere nell'implementazione di computer vision: calcolare centro e raggio di una circonferenza passante per tre punti, utile, ad esempio, per calcolare la curvatura di oggetto, o parte di esso, in un'immagine.


Al termine della nota ho inserito una possibile implementazione scritta in C# (...faccio pratica...;-)).

sabato 5 giugno 2010

Microsoft Visual C# 2010 Step by Step

Ok il libro precedente (thinking in c#) non si è dimostrato all'altezza dei predecessori dedicati al C++. Riproviamoci con un altro mattone targato Microsoft. Come da suggerimento dell'autore sono partito direttamente dal capitolo 8 ed i successivi tre non hanno aggiunto niente di nuovo. Ad ogni modo sono confidente per il seguito (.NET 4.0 qualche novità deve avercela). Al momento posso dire che il testo (in english of course) si legge con fluidità, e gli esempi forniti a corredo di ogni capitolo sono utili per fissare bene i concetti esposti (ovviamente ciò vale se il lettore è alle prime armi). Per saggiarere appieno le potenzialità vere o presunte di questo idioma devo inventarmi qualcosa di sostanzioso che mi serva da banco di test. Ad oggi le opzioni sono almeno due:


  1. L'implementazione di qualche custom function per la smart camera Matrox IRIS GT (il 14 di questo mese parteciperò ad un corso introduttivo all'uso di questo nuovo giocattolo. Ovviamente approfitterò del corso per acquisire il maggior numero di informazioni possibile dal docente);


  2. Progettino tenuto nel cassetto per troppi anni e che forse avrà modo e luogo per venire alla luce.
P.S.: Qualcuno potrebbe chiedersi ma è veramente necessario studiare un nuovo linguaggio di programmazione. Le possibili risposte ad una tale domanda sono:


  1. Per poter parlare bene o male di qualcosa è bene parlarne con cognizione di causa;


  2. Se un linguaggio raggiunge un tale livello di diffusione nel mondo, un motivo ci sarà;


  3. Se mi posso semplificare la vita arricchendo la mia cassetta degli attrezzi con un nuovo utensile perchè non farlo ;-)


  4. Conoscere vita morte e miracoli di una rs 232 non vuol dire che non esista altro modo per comunicare con il resto del mondo (chi ha orecchie per intendere, intenda).

martedì 20 aprile 2010

Visual Studio 2010 RC

OK! un pò in ritardo, ma alla fine ho installato il nuovo aggiornamento dell'IDE di Microsoft.
Dopo aver assistito al lancio ed ascoltato le nuove ceratteristiche (ASP.NET MVC, WCF, e via dicendo). Tempo ed energie permettendo, vediamo se, e soprattutto come, queste novità possono incidere quel che si fa ogni giorno. Prossimo passo...Qt, si quelle di trolltech, oops, nokia.

martedì 6 aprile 2010

Thinking in C#

Ok! Il blog c'è, e di roba da dire ce n'è tanta...Da dove cominciamo?...Ah già! tra le altre cose deve essere anche un diario. Quindi oggi, 06/04/2010 (P.S.: tra un mese esatto sono QUARANTA!!!), cominciamo a leggere un nuovo (mica tanto...la prima edizione è del 2002!!!) libro di programmazione su un linguaggio che già uso. Thinking in C# di Larry O'Brien e Bruce Eckel. Un bel pò di anni or sono mi sono imbattuto in Thinking in C++ vol.1 e vol.2 (più o meno 2000 pagg. in due) e pur non essendo i primi libri sul C++ e la programmazione ad oggetti, l'esperienza è stata illuminante. Purtroppo, come si può vedere sul sito della società di  Eckel MindWiew Inc. il progetto Thinking in C# è stato sospeso, infatti il link al pdf del libro punto ad n altro sito. Sono certo che come per il C/C++ anche per C# Eckel sarà una scoperta anche per questo linguaggio. Staremo a vedere...