giovedì , 21 Marzo 2019
iten
Home » About me

About me

Sono un informatico di lungo corso, e ormai non posso neanche più usare la frase di circostanza che usavo un tempo: "sono un informatico di lungo corso nonostante l'età". Amen.  La mia grande passione per i computer, trasmessami negli anni '80 da uno zio che si occupava di informatica per lavoro - restavo sempre colpito dal suo IBM 5155 -  ha portato che oggi l'informatica è la mia primaria ed unica fonte di sostentamento. La mia prima esperienza con la programmazione risale ad un linguaggio di programmazione un po' particolare: il Clipper. I perché di questa scelta, quando mezzo mondo cominciava a programmare con il Basic o con il Pascal, sono a me ancora oggi sconosciuti ( 😯 ). Il motivo principale è che il Clipper era adoperato molto come linguaggio per i sistemi relazionali (soprattutto DBASE III) e quindi per lo sviluppo di gestionali. All'epoca (parliamo di fine anni '80) dire gestionale equivaleva a parlare di sistemi "bancari" e quindi soldi. E tutti me lo consigliavano perché lo ritenevano l'erede del Cobol (?!). Appresi i rudimenti di Clipper decisi che non era un linguaggio che mi entusiasmava molto, e passai al Visual Basic di Microsoft. Dalla release 2.0 non l'ho più abbandonato, e per anni ho prevalentemente sviluppato con questo ambiente producendo anche programmi che poi sono stati commercializzati. Ho fatto una lunga esperienza con gli ambienti di programmazione di Microsoft, in particolar modo con il COM e il COM+ lavorando con un po' tutte le librerie che all'epoca facevano furore: ATL, ADO, ecc. Inoltre, imparai anche la programmazione Windows di "basso livello" con Visual C++, che all'epoca prevedeva curve di apprendimento non del tutto facili, soprattutto per un autodidatta.

Approdato all'università le cose sono alquanto cambiate. Per motivi di studio ho seguito una formazione più classica, studiando UNIX/Linux, e tutti gli strumenti che ruotano attorno a questo ambiente. Fin quando ho scoperto il linguaggio di programmazione che ho eletto a linguaggio della vita: Python. Python è un linguaggio fantastico, con una community internazionale di altissimo livello e, cosa alquanto rara, con una comunità italiana anch'essa di livello molto più alto della media, prevalentemente concentrata intorno al newsgroup it.comp.lang.python.

Da quasi 10 anni collaboro con l'Istituto di Cibernetica "E.Caianiello" del CNR di Pozzuoli (NA) come assegnista di ricerca. Durante tutti questi anni mi sono occupato a più riprese di vari aspetti. Per molti anni ho lavorato sui sitemi di gestione documentale distribuiti, adoperando tecnologie di semantic web e tutti gli arsenali di programmazione che il settore richiede. Abbiamo sviluppato un sistema di gestione documentale, denominato Octapy, con cui è stato realizzato il Circuito Informativo Regionale della Campania, il più grosso circuito di fruizione sui Beni Culturali in Italia e probabilmente al mondo. Da quel progetto sono nati altri sotto-progetti, alcuni hanno riguardato anche paesi esteri come l'Albania. Quella piattaforma era basata prevalentemente sull'application server Zope 3 e il CMS Plone, strumenti che purtroppo - per tante ragioni che sarebbe difficile analizzare ora - non hanno mai riscontrato il favore della comunità Python, e oggi credo si avviano verso un cammino non molto felice (qualcuno ha notizie del futuro di Zope?).

Nel 2010 la mia vita professionale è leggermente cambiata. Per motivi troppo complessi che non sto qui ad elencare, mi sono trovato catapultato in un mondo che avevo sempre considerato oscuro. Sono stato costretto ad occuparmi di aspetti molto più vicini all'hardware. Da prima ho dovuto realizzare un firmware per sviluppare uno stack di rete wireless per reti di sensori a basso costo (basato sulla piattaforma CC11xx di Texas Instruments - ex Chipcon). Inizialmente lavoravo su un hardware sviluppato da terzi, poi è giunta la necessità primaria di mettere mano al saldatore. Da lì mi sono addentrato in un mondo completamente nuovo, e che per anni avevo considerato troppo nemico. Ricordo ancora il mio primo progetto e il relativo sbroglio: sono stato circa 1 mese a girarlo e rigirarlo prima di inviarlo al service per produrre i PCB. Alla fine il circuito aveva zero errori logici. Ma oggi al solo pensiero di come era fatto provo un certo senso di ribrezzo.

Sempre per le stesse ragioni, mi sono dovuto occupare anche di sistemi embedded più evoluti, come i sistemi SBC basati su ARM/Linux. Grazie all'esperienza maturata con Linux (la mia prima installazione risale al kernel 0.9), ho trovato estremamente facile lavorare con questi prodotti. Ne ho maneggiati molti: Portux, Beaglebone, Mini2440, Raspberry, PicoSam9, Olinuxino e di recente ho realizzato anche una board custom io direttamente.

Nel frattempo ho fondato un'azienda insieme ad altri pazzi, che si occupava da prima di sensoristica wireless, per poi passare ad aspetti più generali di automazione e controllo wireless. Abbiamo di recente forkato una gamma di prodotti orientati alla domotica, e puntiamo ad ampliare la gamma prodotti a breve. Insomma, tecnicamente sono un maker come oggi va di moda definire gli smanettoni da laboratorio, ma io su questo nuovo filone culturale, e sulle potenzialità di ricaduta sociale e addirittura industriale, di cui si parla ho forti, fortissime perplessità.

Ho di recente deciso di rilanciare questo spazio, lasciato in decadenza da mesi (anni). Vorrei dedicarlo ad argomenti che ho dovuto apprendere, ma che non mi è stato facile capire con quello che si trova in rete. Vediamo un po' se questa è la volta buona.

13 comments

  1. Ciao, mi farebbe piacere parlare con te per un lavoro che devo fare e gradirei sapere se puoi progettare piccole schede pcb con integrati/processori programmabili
    Grazie

  2. Gianluca Crescenzo

    Ciao Carmine

    sto sviluppando un idea di prodotto nuovo.

    Ho il design e mi manca 'elettronica....

    Ti va di lavorarci per poi sottoporre a crowfunding per la realizzazione?

    Ovviamente 50 e 50

    i attesa, ti saluto

    Gianluca

     

     

  3. Ciao Carmine,
    sono molto interessato al libro che stai sviluppando sull'STM32, e di conseguenza ai vari post, sull'argomento, sul tuo sito.
    Se io acquistassi il libro ora, che è al 20% della stesura, potrò scaricare anche i prossimi aggiornamenti?
    Se avessi delle domande da farti su argomenti o problemi inerenti l'SMT32, in particolare io ho un F2, dove posso scriverti?
    Grazie

    • Ciao Gianpietro,
      la piattaforma LeanPub è una sorta di "crowdfunding" dei libri. In pratica chi compra una copia all'inizio finanzia il progetto. Una volta presa una copia si ricevono tutti gli aggiornamenti che saranno rilasciati in futuro.
      Se sei a digiuno di STM32, allora il libro può esserti utile (almeno così mi dicono :-P), altrimenti se vuoi puoi aspettare che i capitoli verranno. Il prossimo in realizzazione è sull'NVIC, poi seguirà uno sulle UART/USART.

      Per problemi inerenti il libro, preferisco che vengano postati qua:

      http://www.carminenoviello.com/en/mastering-stm32/

      Altrimenti vado al manicomio a rispondere privatamente a tutti.

  4. Ciao Carmine,

    programmo STM32 da alcuni anni utilizzando COOCOX, qualche settimana fa ho deciso di cambiare toolchain perché la communiti di coocox mi sembra inattiva e inoltre ci sono alcune limitazioni sw che mi penalizzano (a fronte di un toolchain eclipse based pronto all'uso).
    Ho comprato il tuo libro per "rileggere" informazioni che al 99% conosco, ma visto l'uso che ne faccio anche l'1% è utile 🙂

    sto provando ad installare le libusb su mac (ultima versione) ma sembra che manchi qualcosa: port = command not found, sai come fare?

    • Ciao,
      devi installare MacPorts (https://www.macports.org/), e poi una volta completata l'installazione lanciare il comando per installare la libreria. Potrebbe anche essere necessaria l'ultima versione di Xcode per la versione del tuo MacOS, oltre ai command line tools.
      In alternativa, puoi usare brew, ma io ti consiglio i port.

  5. Ciao Carmine,
    vorrei avere il piacere di parlarti e di presentare un mio progetto. Riguarda la realizzazione di un circuito stampato ad integrazione di un altro device che fa alcune cose... . Il progetto sembra molto interessante.
    Vorrei innanzitutto capire con te la fattibilità e le potenzialità.
    Fammi sapere.
    Grazie

  6. marco martinelli

    Ciao ho provato a includere un esempio per la scheda X-NUCLEO_IDW01M1
    http://www2.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-expansion-software/x-cube-wifi1.html
    nel tuo bellissimo esempio https://github.com/cnoviello/stm32-nucleof4/tree/master/stm32-nucleof4-freertos
    ma mi da errore in fase di link , un help ?
    Grazie, segue errore linker

    Invoking: Cross ARM C++ Linker
    arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -fno-move-loop-invariants -Wextra -g3 -T mem.ld -T libs.ld -T sections.ld -nostartfiles -Xlinker --gc-sections -L"../ldscripts" -Wl,-Map,"stm32-nucleof4-freertos_wifi.map" -o "stm32-nucleof4-freertos_wifi.elf" ./system/src/stm32f4xx/stm32f4xx_hal.o ./system/src/stm32f4xx/stm32f4xx_hal_adc.o ./system/src/stm32f4xx/stm32f4xx_hal_adc_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_can.o ./system/src/stm32f4xx/stm32f4xx_hal_cec.o ./system/src/stm32f4xx/stm32f4xx_hal_cortex.o ./system/src/stm32f4xx/stm32f4xx_hal_crc.o ./system/src/stm32f4xx/stm32f4xx_hal_cryp.o ./system/src/stm32f4xx/stm32f4xx_hal_cryp_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_dac.o ./system/src/stm32f4xx/stm32f4xx_hal_dac_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_dcmi.o ./system/src/stm32f4xx/stm32f4xx_hal_dcmi_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_dma.o ./system/src/stm32f4xx/stm32f4xx_hal_dma2d.o ./system/src/stm32f4xx/stm32f4xx_hal_dma_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_eth.o ./system/src/stm32f4xx/stm32f4xx_hal_flash.o ./system/src/stm32f4xx/stm32f4xx_hal_flash_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_flash_ramfunc.o ./system/src/stm32f4xx/stm32f4xx_hal_fmpi2c.o ./system/src/stm32f4xx/stm32f4xx_hal_fmpi2c_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_gpio.o ./system/src/stm32f4xx/stm32f4xx_hal_hash.o ./system/src/stm32f4xx/stm32f4xx_hal_hash_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_hcd.o ./system/src/stm32f4xx/stm32f4xx_hal_i2c.o ./system/src/stm32f4xx/stm32f4xx_hal_i2c_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_i2s.o ./system/src/stm32f4xx/stm32f4xx_hal_i2s_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_irda.o ./system/src/stm32f4xx/stm32f4xx_hal_iwdg.o ./system/src/stm32f4xx/stm32f4xx_hal_ltdc.o ./system/src/stm32f4xx/stm32f4xx_hal_nand.o ./system/src/stm32f4xx/stm32f4xx_hal_nor.o ./system/src/stm32f4xx/stm32f4xx_hal_pccard.o ./system/src/stm32f4xx/stm32f4xx_hal_pcd.o ./system/src/stm32f4xx/stm32f4xx_hal_pcd_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_pwr.o ./system/src/stm32f4xx/stm32f4xx_hal_pwr_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_qspi.o ./system/src/stm32f4xx/stm32f4xx_hal_rcc.o ./system/src/stm32f4xx/stm32f4xx_hal_rcc_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_rng.o ./system/src/stm32f4xx/stm32f4xx_hal_rtc.o ./system/src/stm32f4xx/stm32f4xx_hal_rtc_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_sai.o ./system/src/stm32f4xx/stm32f4xx_hal_sai_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_sd.o ./system/src/stm32f4xx/stm32f4xx_hal_sdram.o ./system/src/stm32f4xx/stm32f4xx_hal_smartcard.o ./system/src/stm32f4xx/stm32f4xx_hal_spdifrx.o ./system/src/stm32f4xx/stm32f4xx_hal_spi.o ./system/src/stm32f4xx/stm32f4xx_hal_sram.o ./system/src/stm32f4xx/stm32f4xx_hal_tim.o ./system/src/stm32f4xx/stm32f4xx_hal_tim_ex.o ./system/src/stm32f4xx/stm32f4xx_hal_uart.o ./system/src/stm32f4xx/stm32f4xx_hal_usart.o ./system/src/stm32f4xx/stm32f4xx_hal_wwdg.o ./system/src/stm32f4xx/stm32f4xx_ll_fmc.o ./system/src/stm32f4xx/stm32f4xx_ll_fsmc.o ./system/src/stm32f4xx/stm32f4xx_ll_sdmmc.o ./system/src/stm32f4xx/stm32f4xx_ll_usb.o ./system/src/newlib/_cxx.o ./system/src/newlib/_exit.o ./system/src/newlib/_sbrk.o ./system/src/newlib/_startup.o ./system/src/newlib/_syscalls.o ./system/src/newlib/assert.o ./system/src/diag/Trace.o ./system/src/diag/trace_impl.o ./system/src/cortexm/_initialize_hardware.o ./system/src/cortexm/_reset_hardware.o ./system/src/cortexm/exception_handlers.o ./system/src/cmsis/startup_stm32f401xe.o ./system/src/cmsis/system_stm32f4xx.o ./system/src/Middlewares/ST/STM32_SPWF01SA/Utils/event_buffer.o ./system/src/Middlewares/ST/STM32_SPWF01SA/Utils/ring_buffer.o ./system/src/Middlewares/ST/STM32_SPWF01SA/wifi_interface.o ./system/src/Middlewares/ST/STM32_SPWF01SA/wifi_module.o ./system/src/FreeRTOS/cmsis_os.o ./system/src/FreeRTOS/croutine.o ./system/src/FreeRTOS/event_groups.o ./system/src/FreeRTOS/heap_2.o ./system/src/FreeRTOS/list.o ./system/src/FreeRTOS/port.o ./system/src/FreeRTOS/queue.o ./system/src/FreeRTOS/tasks.o ./system/src/FreeRTOS/timers.o ./system/src/Drivers/BSP/X-NUCLEO-IDW01M1/stm32_spwf_wifi.o ./system/src/Drivers/BSP/STM32F4xx-Nucleo/stm32f4xx_nucleo.o ./src/_write.o ./src/freertos.o ./src/main.o ./src/stm32f4xx_hal_msp.o ./src/stm32f4xx_it.o
    c:/stm32toolchain/gnu-arm/5.3 2016q1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg.a(lib_a-writer.o): In function _write_r':
    writer.c:(.text._write_r+0x12): undefined reference to
    _write'
    c:/stm32toolchain/gnu-arm/5.3 2016q1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg.a(lib_a-closer.o): In function _close_r':
    closer.c:(.text._close_r+0xc): undefined reference to
    _close'
    c:/stm32toolchain/gnu-arm/5.3 2016q1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg.a(lib_a-fstatr.o): In function _fstat_r':
    fstatr.c:(.text._fstat_r+0x10): undefined reference to
    _fstat'
    c:/stm32toolchain/gnu-arm/5.3 2016q1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg.a(lib_a-isattyr.o): In function _isatty_r':
    isattyr.c:(.text._isatty_r+0xc): undefined reference to
    _isatty'
    c:/stm32toolchain/gnu-arm/5.3 2016q1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg.a(lib_a-lseekr.o): In function _lseek_r':
    lseekr.c:(.text._lseek_r+0x12): undefined reference to
    _lseek'
    c:/stm32toolchain/gnu-arm/5.3 2016q1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/lib/armv7e-m/fpu\libg.a(lib_a-readr.o): In function _read_r':
    readr.c:(.text._read_r+0x12): undefined reference to
    _read'
    collect2.exe: error: ld returned 1 exit status
    makefile:67: recipe for target 'stm32-nucleof4-freertos_wifi.elf' failed

    • Carmine Noviello

      Ciao,
      fai la prova ad andare nelle impostazioni del progetto e attivare l'opzione -ffreestanding (Project->Properties->C/C++ Build->Settings->Optimization->Assume freestanding environment (- ffreestanding)).

  7. ciao Carmine,
    non capisco una mazza di quello che scrivi ma so che per sviluppare un mio progetto è necessario utilizzare STM32. Come posso contattarti per approfondire il discorso?

  8. Avrei bisogno di parlare con lei.

  9. Ciao e complimenti per gli articoli e tutto il Blog.

    Ti ho trovato per puro caso ed in effetti avrei bisogno di un contatto come il tuo per aiutarmi per il progettino (hobbie) che stò realizzando.

    Ma ho un problema, molto serio.
    Sono ignorante del settore elettrico ed elettronico, dunque riuscirei a spiegarmi su cosa vorrei solo se mi metto con carta e penna a fare schemi e schemini... come posso fare??

    Conosci qualcuno con il quale poter spiegare la scheda elettronica di cui avrei bisogno e che magaririesce anche a realizzarmi??

    Grazie. Ciao

  10. Buongiorno sig. Noviello, qualche anno fa ho installato un sistema Airq Networks per il controllo tapparelle di tutta la mia casa e sono molto soddisfatto, un sistema che già allora era molto avanti a tutti e che oggi resta ancora attuale..un vero peccato sia stato dismesso. Ora mi piacerebbe integrare il distema con Google Assistant...la vede una cosa tecnicamente fattibile? Può darmi un consiglio su eventuali soluzioni? Grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.