The app bubble is over

Here is the number of Android apps on the Google Play app store over the last 8 years:


Source: AppBrain, and copies thereof stored on the web archive.

It looks like we passed the peak !

Users have on average a few tens of apps installed on their phones, and they actually use only a handsome.

If you are about to start a new project today, unless you have very specific objectives, you better invest in web development.

Web apps:

  • are portable from desktop to mobile
  • can access most device functionality
  • can be installed on the device (see: PWAs)
  • can cache data and be made to work offline.
Posted in Philosophy, UI | Leave a comment

Calculating the liquid density at saturation

This is the full source code required to calculate with LIBPF the liquid density at saturation for an equimolar mixture of ethane and propane at pressures between 1 and 30 atm:

/** @file Qsatliqrho.cc
 @brief Calculate the density of a saturated liquid
 
 This file is part of LIBPF
 All rights reserved; do not distribute without permission.
 @author (C) Copyright 2019 Paolo Greppi simevo s.r.l.
 */

/* SYSTEM/GENERAL PURPOSE INCLUDES */
//
#include 

/* LIBPF INCLUDES */
//
#include 
#include 
#include  // for initializeLibpf and uninitializeLibpf
#include 
#include 
#include 
#include  // for components and NCOMPONENTS
#include 
#include 
#include  // register all stream types with the model factory
#include 

/* LOCAL INCLUDES */
//

/* FORWARD REFERENCES */
//

/* MACROS */
// avoid macros!!
//

/* GLOBAL CONSTANTS */
//
static const int verbosityFile = 0;

/* GLOBAL VARIABLES */
//

/*====================================================================================================================*/
/*==  main  ==========================================================================================================*/
/*====================================================================================================================*/

int main(int /* argc */, char * /*argv */ []) {
  const int verbosityLocal = 0;
  const int verbosityInstance = 0;
  diagnostic(0, "Entered");
  try {
    // initializations
    initializeLibpf();

    components.addcomp(new purecomps::ethane);
    components.addcomp(new purecomps::propane);

    // Pcsaft i, m, sigma, epsilon
    Phase::PcsaftParameters::resize(2);
    // ethane
    Phase::PcsaftParameters::setparameters(0, 1.6069, 3.5206, 191.42);
    // propane
    Phase::PcsaftParameters::setparameters(1, 2.0020, 3.6184, 208.11);
    
    NodeFactory nodeFactory;
    // try with: StreamPcsaftLiquidVapor, StreamKwongRedlichSoaveLiquidVapor, StreamPengRobinsonLiquidVapor
    Stream *feed = my_cast(nodeFactory.create("StreamPengRobinsonLiquidVapor", Libpf::Persistency::Defaults("test")), CURRENT_FUNCTION);
    feed->Tphase->Q("x[C2H6]").set(0.5);
    feed->Tphase->Q("x[C3H8]").set(0.5);
    feed->flashoption = "PA";
    feed->flowoption= "Nx";
    feed->Q("Vphase.fraction").set(Zero);

    for (Value P(1.0, "atm"); P < Value(30.0, "atm"); P += Value(0.1, "atm")) {
      feed->P.set(P);
      feed->resetErrors();
      feed->calculate();
      Value rhol(feed->Q("Lphase.rho"));
      diagnostic(0, "P = " << P << " Tb = " << feed->T << " rhol = " << rhol << " errors = " << feed->errors.size())
    }
    delete feed;

    uninitializeLibpf();
    return 0;
  } // try
  catch (Error &e) {
    uninitializeLibpf();
    e.append(CURRENT_FUNCTION);
    std::cerr << "****************************** Fatal LIBPF error! ******************************" << std::endl;
    std::cerr << e.message() << std::endl;
    return -1;
  } // catch
} // main

Results with Redlich-Kwong-Soave equation of state:

with Pcsaft equation of state:

and Peng-Robinson equation of state:

Posted in C++, Howtos | Leave a comment

Verificare che un file PDF/A sia conforme

Come fare per verificare prima dell’invio alla pubblica amministrazione o al registro imprese che un documento PDF è conforme allo standard PDF/A ?

Non è facile trovare strumenti di cui fidarsi. In passato esisteva in Webtelemaco un servizio gratuito per la verifica di conformità PDF/A, ma con la nuova versione del sistema è stato dismesso.

Come noto la pubblica amministrazione deve usare il formato PDF/A per l’archiviazione a lungo termine di documenti, ad esempio le partiche Telemaco / COMunica inviate al registro imprese della camera di commercio lo richiedono. In una guida INFOCAMERE “Indicazioni per la formazione e verifica del formato PDF/A nei documenti R.I.” un po’ vecchiotta ma ben fatta leggiamo:

PDF/A è uno standard internazionale (ISO19005), sottoinsieme dello standard PDF, appositamente pensato per l’archiviazione nel lungo periodo di documenti elettronici. Garantisce che il documento sia visualizzabile sempre allo stesso modo, anche a distanza di tempo e con programmi software diversi.

Lo standard PDF/A è suddiviso in due parti: PDF/A-1 e PDF/A-2.
Il PDF/A-1, l’unico ad oggi approvato, è suddiviso a sua volta in due livelli:

  • PDF/A-1a= massimo richiesto dallo standard
  • PDF/A-1b= minimo richiesto dallo standard (incluso nel PDF/A-1a).

Produrre files conformi a questo standard non è un problema, vedi ad esempio questa ottima guida di Salvatore Aranzulla. In pratica LibreOffice se richiesto può produrre files PDF/A-1a, che è addirittura più stringente di quello (PDF/A-1b) che richiede INFOCAMERE.

Dal 2015 è in fase di sviluppo un nuovo strumento open source di validazione PDF/A, veraPDF, finanziato anche da fondi europei provienienti dal progetto FP7-ICT PREFORMA (PREservation FORMAts for culture information/e-archives).

Non ostante sia ancora in beta e non ben documentato, mi sembra usabile.

Questo è quello che ho fatto per installarlo come utente non privilegiato su Debian 9 (stretch) a 64 bit: ho scaricato veraPDF for Linux dalla dalla pagina di download, poi ho creato una directory d’installazione e ho lancato lo script verapdf-install:

sudo mkdir -p /opt/verapdf
sudo chown utente:utente /opt/verapdf
cd ~/Scaricati
unzip verapdf-installer.zip
cd verapdf-1.6.3
./verapdf-install

parte l’installer grafico, a cui ho dato il percorso creato sopra (/opt/verapdf) come destinazione dell’installazione.

Per validare un file a questo punto do’ il comando: /opt/verapdf/verapdf -f 1a /home/utente/documento.pdf che mi restituisce un file XML (wow!) che contiene tra l’altro una chiave validationReport:

...
<validationReport profileName="PDF/A-1A validation profile" statement="PDF file is compliant with Validation Profile requirements." isCompliant="true">
  <details passedRules="107" failedRules="0" passedChecks="12172" failedChecks="0"></details>
</validationReport>
...

Per chi lo preferisce, c’è anche un’interfaccia utente, deliziosamente anni ’90 nel suo look Java-escque, si può avviare con: /opt/verapdf/verapdf-gui:

Posted in Howtos | Leave a comment

Impressions from the sps ipc drives Italia 2017 fair

The sps ipc drives 2017 fair which took place in Parma last week has been dominated by the Industry 4.0 theme, which was already lurking in last year’s edition (see the mini-reportage about that).

All visitors coming from the south entrance (photo) could visualize the IT/OT convergence (Information Technology/Operational Technology). They were greeted by a “Focus know-how 4.0” area, occupied by the big names in IT (and no longer by startups like last year …): Oracle, Microsoft, CISCO, Hewlett Packard Enterprise. IT companies 2, 5, 10 times larger than the largest of the OTs landed at this historically OT-oriented fair with sober stands, inhabited by senior staff from business support and not from marketing. The contrast with the huge stands of the other halls, full of plungers, communication cards, industrial robots and the usual circus of (let’s face it) borderline pornographic assistants, was impressive.

But apart from the fair gossip, at this edition you could get a full picture of the competitive landscape of Industry 4.0 platforms, i.e. of those “cloud operating systems” equipped with all the utilities needed to work on the data, so that system integrators can develop solutions around them.

The PaaS (Platform-as-a-service) relevant to the industry 4.0, in order from OT to IT, from specialist to generalist are:

  1. Siemens MindSphere
  2. GE Predix
  3. PTC ThingWorx
  4. DATABOOM by the Italian system integrator Hi-Logic
  5. IBM BlueMix
  6. Microsoft Azure

(I may miss a few: I would appreciate it if you report back !).

The competition is open, and I’m sure (as I was a year ago) that the operating companies and even more so the equipment manufacturers will be very cautious in choosing one platform over the others. Everybody fears that they will go the same path as the platforms for mobile apps: only one remains (Android), it is more important than hardware, and it has cannibalized the entire value chain.

Keep in mind that true innovation in a complex value chain like automation and industrial processes can not be brought forward by a lone supplier or a lone customer (no matter how large they are): but they can do it together with an ecosystem of subcontractors, maintainers, developers, integrators … it is a war between ecosystems (see Ron Adner and Rahul Kapoor “Right Tech, Wrong Time” Harvard Business Review November 2016).
Industry 4.0 is like the electric car: it is not enough to buy the car, you need gas stations, a transmission network capable of carrying the current and above all the electrician down the road ti can get it started that particular Monday. What is certain is that soon there will be many electric cars.

Posted in Chemeng, Industry 4.0 | Leave a comment

Commento alla fiera sps ipc drives Italia 2017

La fiera sps ipc drives 2017 che si è svolta a Parma la settimana scorsa è stata dominata dal tema dell’Industria 4.0, che aveva già fatto da sfondo all’edizione dell’anno scorso (vedi il mini-reportage in inglese).

Questa volta ai visitatori che entravano dall’ingresso Sud (quello della foto) si manifestava vividamente la convergenza IT/OT (Information Technology / Operational Technology). Si veniva infatti accolti da una zona “Focus Know-How 4.0” maggiorata, occupata dai grandi nomi dell’IT (e non più dalle start-up come l’anno scorso…): Oracle, Microsoft, Hewlett Packard Enterprise, CISCO. In una fiera storicamente fortemente connotata come OT, ecco atterrare aziende IT 2, 5, 10 volte più grandi dei grandi dell’OT, con degli stand sobri, direi quasi francescani, popolati da personale senior proveniente dal business support e non dal marketing. Il contrasto con i giganteschi stand degli altri padiglioni, col loro sfoggio di stantuffi e schede di comunicazione, robot industriali e standiste (diciamolo) al limite della pornografia, era impressionante.

Ma a parte il gossip fieristico, a quest’edizione si è potuto avere una prima immagine completa del quadro competitivo delle piattaforme per l’Industria 4.0, cioè di quei “sistemi operativi” presenti nella nuvola e dotati di tutte le utility necessari per metterci i dati, in modo che i system integrators possano svilupparci attorno delle soluzioni.

Le PaaS (Platform-as-a-sevice) rilevanti per l’Industria 4.0, in ordine OT → IT, specialistico → generalistico, sono:

  1. MindSphere di Siemens
  2. Predix di GE
  3. ThingWorx di PTC
  4. DATABOOM del system integrator italiano Hi-Logic
  5. BlueMix di IBM
  6. Azure di Microsoft

(potrei essermene persa qualcuna: vi sarei grato se me le segnalate).

La competizione è aperta, e sono sicuro (come lo ero un anno fa) che le operating companies e più ancora gli equipment manufacturers saranno molto cauti nella scelta. La paura che hanno tutti è che succeda con queste piattaforme la stessa cosa che è successa con le piattaforme per le app mobili: ne è rimasta una sola (Android), è diventata più importante dell’hardware, e ha cannibalizzato tutta la catena del valore.

Bisogna tenere conto che l’innovazione vera in una catena di valore complessa come l’automazione e i processi industriali non la fanno né un fornitore né un cliente (per quanto grossi): la fanno loro due insieme all’ecosistema di subcontractors, manutentori, sviluppatori, integratori … è una guerra tra ecosistemi (vedi Ron Adner and Rahul Kapoor “Right Tech, Wrong Time” Harvard Business Review November 2016).

Perché l’Industria 4.0 è come l’auto elettrica: non basta comprare l’auto, servono le stazioni di servizio, la rete di trasmissione in grado di trasportare la corrente e soprattutto l’elettrauto sotto casa in grado di farla partire quel certo lunedì. Quello che è certo è che presto ci saranno tante auto elettriche.

Posted in Chemeng, Industry 4.0 | Leave a comment

Iperammortamento Industry 4.0 e superammortamento software

Le aziende fornitrici di macchinari assoggettabili agli iper/super-ammortamenti Industry 4.0 nei prossimi due anni (2017-2018) avranno un vantaggio competitivo rispetto ai concorrenti che non possano offrire queste caratteristiche. Infatti i clienti preferiranno l’acquisto di macchine, sistemi e dispositivi in grado di beneficiare del vantaggio fiscale.

Per queste aziende fornitrici di hardware industriale è quindi una priorità adattare le proprie forniture e integrarle con componenti software e “cloud” in modo che siano assoggettabili agli incentivi e quindi competitive sul mercato.

Qua sotto trovate una piccola guida alla lettura del decreto che introduce i iper/super-ammortamenti Industry 4.0, con evidenziate le parti dove simevo s.r.l. vi può affiancare, fornendo il software e servizi necessari a rendere le vostre macchine “smart” e allineate al piano nazionale Industria 4.0.

Non esitate a contattarci se desiderate avviare un progetto Industria 4.0 con noi !


industry4


Nell’ambito del “Piano nazionale Industria 4.0” il disegno di legge “Bilancio di previsione dello Stato per l’anno finanziario 2017 e bilancio pluriennale per il triennio 2017-2019” ha introdotto un iperammortamento al 250% per i beni digitali legati a Industry 4.0, ed un superammortamento del 140% per i relativi software, come da articolo 3 commi 2 e 3 rispettivamente:

Art. 3. (Proroga e rafforzamento della disciplina relativa alla maggiorazione della deduzione di ammortamenti).

  1. Al fine di favorire processi di trasformazione tecnologica e digitale secondo il modello «Industria 4.0», per gli investimenti, effettuati nel periodo indicato al comma 1, in beni materiali strumentali nuovi compresi nell’elenco di cui all’allegato A annesso alla presente legge, il costo di acquisizione è maggiorato del 150 per cento.
  2. Per i soggetti che beneficiano della maggiorazione di cui al comma 2 e che, nel periodo indicato al comma 1, effettuano investimenti in beni immateriali strumentali compresi nell’elenco di cui all’allegato B annesso alla presente legge, il costo di acquisizione di tali beni è maggiorato del 40 per cento.
  3. Per la fruizione dei benefìci di cui ai commi 2 e 3, l’impresa è tenuta a produrre una dichiarazione resa dal legale rappresentante ai sensi del testo unico delle disposizioni
    legislative e regolamentari in materia di documentazione amministrativa, di cui al decreto del Presidente della Repubblica 28 dicembre 2000, n. 445, ovvero, per i beni aventi ciascuno un costo di acquisizione superiore a 500.000 euro, una perizia tecnica giurata rilasciata da un ingegnere o da un perito industriale iscritti nei rispettivi albi professionali o da un ente di certificazione accreditato, attestante che il bene possiede caratteristiche tecniche tali da includerlo negli elenchi di cui all’allegato A o all’allegato B annessi alla presente legge ed è interconnesso al sistema aziendale di gestione della produzione o alla rete di fornitura.
  4. La determinazione degli acconti dovuti per il periodo d’imposta in corso al 31 dicembre 2017 e per quello successivo è effettuata considerando quale imposta del periodo precedente quella che si sarebbe determinata in assenza delle disposizioni di cui ai commi 1, 2 e 3.
  5. Resta ferma l’applicazione delle disposizioni di cui all’articolo 1, commi 93 e 97, della legge 28 dicembre 2015, n. 208.

Nel tomo II, Allegato A (Articolo 3, comma 2) pagina 237 sono dettagliati i beni assoggettati all’iperammortamento del 250% cioè i “beni funzionali alla trasformazione tecnologica e digitale delle imprese secondo il modello «Industria 4.0»“:

Beni strumentali il cui funzionamento è controllato da sistemi computerizzati o gestito tramite opportuni sensori e azionamenti:

  • ….

… segue un elenco onnicomprensivo di macchine utensili, di trasformazione, deformazione plastica, assemblaggio, giunzione, saldatura, confezionamento e imballaggio, de-produzione e riconfezionamento, robot, macchine per la manifattura additiva, macchine, fino ai magazzini automatizzati.

A queste macchine si deve applicare una prima serie di requisiti “base”, queste sono caratteristiche abbastanza scontate:

Tutte le macchine sopra citate devono essere dotate delle seguenti caratteristiche:

  • controllo per mezzo di CNC (Computer Numerical Control) e/o PLC (Programmable Logic Controller),
  • interconnessione ai sistemi informatici di fabbrica con caricamento da remoto di istruzioni e/o part program,
  • integrazione automatizzata con il sistema logistico della fabbrica o con la rete di fornitura e/o con altre macchine del ciclo produttivo,
  • interfaccia tra uomo e macchina semplici e intuitive, rispondenza ai più recenti parametri di sicurezza, salute e igiene del lavoro.

Infine segue un elenco di requisiti, sistemi e dispositivi “innovativi”.

Da qui in avanti ai punti evidenziati in giallo potrebbe entrare in gioco la collaborazione con simevo !

Innanzitutto tutte le macchine sopra citate devono essere dotate di almeno due tra le seguenti caratteristiche per renderle assimilabili o integrabili a sistemi cyberfisici (cyber-physical system = designa l’integrazione stretta e il coordinamento tra risorse di calcolo e fisiche):

  • sistemi di telemanutenzione e/o telediagnosi e/o controllo in remoto,
  • monitoraggio continuo delle condizioni di lavoro e dei parametri di processo mediante opportuni set di sensori e adattività alle derive di
    processo,
  • caratteristiche di integrazione tra macchina fisica e/o impianto con la modellizzazione e/o la simulazione del proprio comportamento nello svolgimento del processo (sistema cyberfisico),
  • dispositivi, strumentazione e componentistica intelligente per l’integrazione, la sensorizzazione e/o l’interconnessione e il controllo
    automatico dei processi utilizzati anche nell’ammodernamento o nel revamping dei sistemi di produzione esistenti,
  • filtri e sistemi di trattamento e recupero di acqua, aria, olio, sostanze chimiche e organiche, polveri con sistemi di segnalazione
    dell’efficienza filtrante e della presenza di anomalie o sostanze aliene al processo o pericolose, integrate con il sistema di fabbrica e in grado
    di avvisare gli operatori e/o di fermare le attività di macchine e impianti.

Sono poi trattati separatamente dalle macchine i sistemi per l’assicurazione della qualità e della sostenibilità:

  • sistemi di misura a coordinate e no (a contatto, non a contatto, multi-sensore o basati su tomografia computerizzata tridimensionale) e relativa strumentazione per la verifica dei requisiti micro e macro geometrici di prodotto per qualunque livello di scala dimensionale (dalla larga scala alla scala micro-metrica o nano-metrica) al fine di assicurare e tracciare la qualità del prodotto e che consentono di qualificare i processi di produzione in maniera documentabile e connessa al sistema informativo di fabbrica,
  • altri sistemi di monitoraggio in process per assicurare e tracciare la qualità del prodotto o del processo produttivo e che consentono di
    qualificare i processi di produzione in maniera documentabile e connessa al sistema informativo di fabbrica,
  • sistemi per l’ispezione e la caratterizzazione dei materiali (ad esempio macchine di prova materiali, macchine per il collaudo dei prodotti realizzati, sistemi per prove o collaudi non distruttivi, tomografia) in grado di verificare le caratteristiche dei materiali in ingresso
    o in uscita al processo e che vanno a costituire il prodotto risultante a livello macro (ad esempio caratteristiche meccaniche) o micro (ad
    esempio porosità, inclusioni) e di generare opportuni report di collaudo da inserire nel sistema informativo aziendale,
  • dispositivi intelligenti per il test delle polveri metalliche e sistemi di monitoraggio in continuo che consentono di qualificare i processi di
    produzione mediante tecnologie additive,
  • sistemi intelligenti e connessi di marcatura e tracciabilità dei lotti produttivi e/o dei singoli prodotti (ad esempio RFID – Radio Frequency
    Identification),
  • sistemi di monitoraggio e controllo delle condizioni di lavoro delle macchine (ad esempio forze, coppia e potenza di lavorazione; usura tridimensionale degli utensili a bordo macchina; stato di componenti o sotto-insiemi delle macchine) e dei sistemi di produzione interfacciati con i sistemi informativi di fabbrica e/o con soluzioni cloud,
  • strumenti e dispositivi per l’etichettatura, l’identificazione o la marcatura automatica dei prodotti, con collegamento con il codice e la
    matricola del prodotto stesso in modo da consentire ai manutentori di monitorare la costanza delle prestazioni dei prodotti nel tempo e di
    agire sul processo di progettazione dei futuri prodotti in maniera sinergica, consentendo il richiamo di prodotti difettosi o dannosi,
  • componenti, sistemi e soluzioni intelligenti per la gestione, l’utilizzo efficiente e il monitoraggio dei consumi energetici,
  • filtri e sistemi di trattamento e recupero di acqua, aria, olio, sostanze chimiche, polveri con sistemi di segnalazione dell’efficienza
    filtrante e della presenza di anomalie o sostanze aliene al processo o pericolose, integrate con il sistema di fabbrica e in grado di avvisare gli
    operatori e/o di fermare le attività di macchine e impianti.

… e i dispositivi per l’interazione uomo macchina e per il miglioramento dell’ergonomia e della sicurezza del posto di lavoro in logica «4.0»:

  • banchi e postazioni di lavoro dotati di soluzioni ergonomiche in grado di adattarli in maniera automatizzata alle caratteristiche fisiche
    degli operatori (ad esempio caratteristiche biometriche, età, presenza di disabilità),
  • sistemi per il sollevamento/traslazione di parti pesanti o oggetti esposti ad alte temperature in grado di agevolare in maniera intelli-
    gente/robotizzata/interattiva il compito dell’operatore,
  • dispositivi wearable, apparecchiature di comunicazione tra operatore/operatori e sistema produttivo, dispositivi di realtà aumentata e
    virtual reality,
  • interfacce uomo-macchina (HMI) intelligenti che coadiuvano l’operatore a fini di sicurezza ed efficienza delle operazioni di lavora-
    zione, manutenzione, logistica.

Infine sempre nel tomo II, Allegato B (Articolo 3, comma 3) pagina 240 sono dettagliati i software assoggettati al superammortamento del 140%, cioè “Beni immateriali (software, sistemi e system integration, piattaforme e applicazioni) connessi a investimenti in beni materiali «Industria 4.0»“.

Attenzione: ai punti evidenziati in arancione potrebbe entrare in gioco la collaborazione con simevo !

  • Software, sistemi, piattaforme e applicazioni per la progettazione, definizione/qualificazione delle prestazioni e produzione di manufatti in materiali non convenzionali o ad alte prestazioni, in grado di permettere la progettazione, la modellazione 3D, la simulazione, la sperimentazione, la prototipazione e la verifica simultanea del processo produttivo, del prodotto e delle sue caratteristiche (funzionali e di impatto ambientale) e/o l’archiviazione digitale e integrata nel sistema informativo aziendale delle informazioni relative al ciclo di vita del prodotto (sistemi EDM, PDM, PLM, Big Data Analytics),
  • software, sistemi, piattaforme e applicazioni per la progettazione e la ri-progettazione dei sistemi produttivi che tengano conto dei flussi
    dei materiali e delle informazioni,
  • software, sistemi, piattaforme e applicazioni di supporto alle decisioni in grado di interpretare dati analizzati dal campo e visualizzare agli operatori in linea specifiche azioni per migliorare la qualità del prodotto e l’efficienza del sistema di produzione,
  • software, sistemi, piattaforme e applicazioni per la gestione e il coordinamento della produzione con elevate caratteristiche di integrazione delle attività di servizio, come la logistica di fabbrica e la manutenzione (quali ad esempio sistemi di comunicazione intra-fabbrica, bus di campo/fieldbus, sistemi SCADA, sistemi MES, sistemi CMMS, soluzioni innovative con caratteristiche riconducibili ai paradigmi dell’IoT e/o del cloud computing),
  • software, sistemi, piattaforme e applicazioni per il monitoraggio e controllo delle condizioni di lavoro delle macchine e dei sistemi di
    produzione interfacciati con i sistemi informativi di fabbrica e/o con soluzioni cloud,
  • software, sistemi, piattaforme e applicazioni di realtà virtuale per lo studio realistico di componenti e operazioni (ad esempio di assemblaggio), sia in contesti immersivi o solo visuali,
  • software, sistemi, piattaforme e applicazioni di reverse modeling and engineering per la ricostruzione virtuale di contesti reali,
  • software, sistemi, piattaforme e applicazioni in grado di comunicare e condividere dati e informazioni sia tra loro che con l’ambiente e gli attori circostanti (Industrial Internet of Things) grazie ad una rete di sensori intelligenti interconnessi,
  • software, sistemi, piattaforme e applicazioni per il dispatching delle attività e l’instradamento dei prodotti nei sistemi produttivi,
  • software, sistemi, piattaforme e applicazioni per la gestione della qualità a livello di sistema produttivo e dei relativi processi,
  • software, sistemi, piattaforme e applicazioni per l’accesso a un insieme virtualizzato, condiviso e configurabile di risorse a supporto di
    processi produttivi e di gestione della produzione e/o della supply chain (cloud computing),
  • software, sistemi, piattaforme e applicazioni per industrial analytics dedicati al trattamento ed all’elaborazione dei big data provenienti
    dalla sensoristica IoT applicata in ambito industriale (Data Analytics & Visualization, Simulation e Forecasting),
  • software, sistemi, piattaforme e applicazioni di artificial intelligence & machine learning che consentono alle macchine di mostrare un’a-
    bilità e/o attività intelligente in campi specifici a garanzia della qualità del processo produttivo e del funzionamento affidabile del macchinario
    e/o dell’impianto,
  • software, sistemi, piattaforme e applicazioni per la produzione automatizzata e intelligente, caratterizzata da elevata capacità cognitiva, interazione e adattamento al contesto, autoapprendimento e riconfigurabilità (cybersystem),
  • software, sistemi, piattaforme e applicazioni per l’utilizzo lungo le linee produttive di robot, robot collaborativi e macchine intelligenti per
    la sicurezza e la salute dei lavoratori, la qualità dei prodotti finali e la manutenzione predittiva,
  • software, sistemi, piattaforme e applicazioni per la gestione della realtà aumentata tramite wearable device,
  • software, sistemi, piattaforme e applicazioni per dispositivi e nuove interfacce tra uomo e macchina che consentano l’acquisizione, la
    veicolazione e l’elaborazione di informazioni in formato vocale, visuale e tattile,
  • software, sistemi, piattaforme e applicazioni per l’intelligenza degli impianti che garantiscano meccanismi di efficienza energetica e di
    decentralizzazione in cui la produzione e/o lo stoccaggio di energia possono essere anche demandate (almeno parzialmente) alla fabbrica,
  • software, sistemi, piattaforme e applicazioni per la protezione di reti, dati, programmi, macchine e impianti da attacchi, danni e accessi
    non autorizzati (cybersecurity),
  • software, sistemi, piattaforme e applicazioni di virtual industrialization che, simulando virtualmente il nuovo ambiente e caricando le
    informazioni sui sistemi cyberfisici al termine di tutte le verifiche, consentono di evitare ore di test e di fermi macchina lungo le linee
    produttive reali.
Posted in Industry 4.0 | Tagged | Leave a comment

How to make the digital transformation of manufacturing happen ?

[Originally appeared as guest post on the Industrial IoT/Industrie 4.0 Viewpoints blog]

The Digital Transformation is there: devices, technologies and suppliers are ready to bring manufacturing enterprises to a new level with increased productivity and more added value.

But if you go for a walk in production now, you’ll probably not see smart sensors, edge analytics-packed machinery, forklift drivers with smart-glasses and foremen yelling orders to their assistive bots.

The macro-level reasons why it is not happening or it is just slowly happening are covered in many posts in the Industrial IoT/Industrie 4.0 Viewpoints blog: there are cultural issues:

a standards mess:

and more:

From a strategic point of view it’s really a war between the incumbent-technology ecosystem and the new ecosystem, rather than between the technologies themselves (see Ron Adner and Rahul Kapoor “Right Tech, Wrong Time” Harvard Business Review November 2016).

Besides those reasons, there are also micro-level reasons that come up along the business decision process when a specific digital transformation project is proposed within a manufacturing company.

In the end it’s just like any other project: you spend upfront a given amount of money and hope to get a return of investment (ROI).

The trouble is that an innovative Industrial IoT project will be complex and high-risk, and there are several ways it could fail:

  • it proves impossible to build (technology or organization issues);
  • it does not deliver the ROI promise (lower returns or higher costs than expected);
  • it does not get traction (the target users will not use it / buy it);
  • it turns out to be unmaintainable in the long term (workforce turnover, product cycles).

At least a third of all Information Technology (IT) projects fail (see Lessons From a Decade of IT Failures from IEEE Spectrum), and probably even more of those of the high-risk type. These rates of failure are unacceptably high for manufacturing, where the average project failure rate is probably less than 10%.

So if the proposed project has a good ROI on paper, how to keep these risks under control and make it a success ?

One approach we know from IT is outsourcing most of the trouble to a reliable supplier, and get the solution you need with a software-as-a-service (SaaS) arrangement. Off-the-shelf SaaS is currently booming in IT: see what Adobe, Autodesk http://www.autodesk.com/products/fusion-360/overview, Microsoft, Salesforce and Trello are doing.

With SaaS, there is no upfront cost, and pay-per-use scales linearly with the number of users; typical figures for consumer-oriented services are 5-10 €/per user/per month and for business-oriented services 10-200 €/per user/per month.

So SaaS is a perfect fit for a small enterprise without an IT infrastructure, or for a larger organization that prefers to keep the internal infrastructure slim. It is also suitable for an innovative project, where user acceptance progresses slowly and the numbers may be initially low.

But all of the SaaS vendors above offer off-the-shelf, standard tools – nobody is offering your-own-IIoT-as-a-service yet ! For that you need tailor-made SaaS.

Giovanni Battista Moroni “Il Tagliapanni”, circa 1570

Giovanni Battista Moroni “Il Tagliapanni”, circa 1570

With tailor-made SaaS, a solution provider will build the IIoT solution based on the requirements of the manufacturing company, with the agreement that:

  1. the provider will not apply their full margin on the upfront costs;
  2. the provider will keep the intellectual property of the solution;
  3. the manufacturing company will perpetually pay for the use of the solution in a SaaS fashion.

With the pay-per-use model the gain for the solution provider will come later if the project is successful, while the OPEX for the manufacturing company will grow gradually as the solution is deployed and gets traction. This setup can slash the CAPEX for the upfront costs due to the initial effort of adapting, integrating and customizing the chosen platforms / technologies by a factor of 2, while creating a strong commitment for the provider to make the project a success.

Of course it’s a generic framework that can be adapted with any option and variant your legal and financial advisors can imagine. For example the pay-per-use business models we know from IT SaaS can be creatively adapted to the OT environment by stipulating per-installation/per-hour fees.
The bottom line is that if you find an agreement with a trusted supplier, with tailor-made SaaS you can share the road towards digital transformation with them, and make it happen for real.

Posted in Chemeng, Philosophy, Uncategorized | Tagged , , | Leave a comment

HOWTO migrate tasks from kanboard to phabricator

Kanboard is a Kanban Project Management tool written in PHP. an excellent lightweight tool to quickly set up a project and organize tasks (think of it as a down-to-earth trello).

Phabricator on the other hand is a complete suite of software development collaboration tools, which among others includes a Kanban-like view of tasks tagged with each project.

If you happen to have to migrate tasks from Kanboard to Phabricator, this guide is for you. But beware in the spirit of Phabricator’s creators we have no well-tested tool to offer, just a semi-manual procedure based on Phabricator’s Conduit API.

Log into the server where you have installed Kanboard, and navigate to the data directory inside that:

cd /var/www/kanboard/data

open the sqlite database:

sqlite3 db.sqlite

explore the database schema:

.tables
.schema projects
.schema tasks

find the project (board) you’re interested in

select * from projects;

in our case it was project 3; list tasks and columns from that project:

select id,column_id,title from tasks where project_id=3 order by column_id;

recognize how the column_id field matches the board columns …

Now extract in Python dictionary format the list of tasks, one column at a time (you’ll have to do some manual escaping here !)

  • backlog (that was column_id 9 for us):
    select '{"title": "'||title||'", "description": """'||description||'"""},' from tasks where project_id=3 and column_id = 9;
    
  • ready (column_id 10):
    select '{"title": "'||title||'", "description": """'||description||'"""},' from tasks where project_id=3 and column_id = 10;
    
  • work in progress (column_id 11):
    select '{"title": "'||title||'", "description": """'||description||'"""},' from tasks where project_id=3 and column_id = 11;
    

now copy-paste those in the python script skeleton, replacing the ellipsis dots:

import requests

phabricator_instance = 'phabricator.example.com'
api_token = 'api-aaaaaaaaaaaaaaaaaaaaaaaaaaaa'
projectPHID = "PHID-PROJ-aaaaaaaaaaaaaaaaaaaa"
tasks_backlog = [ ... ]
tasks_ready = [ ... ]
tasks_wip = [ ... ]


def create_task(s, title, description):
    data = {'api.token': api_token,
            'title': title,
            'description': description,
            'projectPHIDs[]': [projectPHID]}
    url = 'https://' + phabricator_instance + '/api/maniphest.createtask'
    req = requests.Request('POST', url, data=data)
    prepped = s.prepare_request(req)
    resp = s.send(prepped)
    resp.raise_for_status()
    results = resp.json()
    error_info = results['error_info']
    if error_info:
        print 'internal: error while creating phabricator task: %s' % error_info
        return {}
    uri = results['result']['uri']
    task_id = results['result']['id']
    return {"uri": uri, "task_id": task_id}

In this script you also have to modify the phabricator_instance (should be the FQDN of the Phabricator instance where you want to file the task), the api_token (can be obtained as follows: as a Phabricator admin, create a bot account then “Edit Settings”, go to “Conduit API Tokens”, click “Generate API token”) and the projectPHID (the Phabricator ID of the project you want to file your task against; here is how you can find that out)).

Now you’re all set to manually execute one by one the imports, starting from the rightmost column:

s = requests.Session()
for t in tasks_wip:
    title = t['title']
    description = t['description']
    create_task(s, title, description)

each time go to the project work-board in Phabricator and move the newly created tasks in the right column.

This was the starting situation in Kanboard:
kanboard

And this is the final situation in Phabricator:
phabricator

Quite a lot of work still to do ! But at least we’ve got titles, descriptions and columns right !

Posted in Howtos | Leave a comment

Extend the system partition in a Windows virtual machine running within kvm with file-based virtual disk

The post Extend the system partition in a Windows virtual machine running within kvm/lvm is applicable if the virtual disk is on a LVM volume.

If the virtual disk is file-based, these are the required steps:

  1. Find out what is the file the virtual machine disk is attached to; assuming disk images are in /var/lib/libvirt/images:
    sudo grep 'var.lib.libvirt.images' /etc/libvirt/qemu/name_of_virtual_machine.xml

    You might see something like:

    <source file='/var/lib/libvirt/images/w7_64_cdev15.dd'/>
  2. Shut down the virtual machine
  3. Resize the disk image file:
    sudo qemu-img resize /var/lib/libvirt/images/w7_64_cdev15.dd +10G
  4. Restart the VM
  5. Extend the disk using the guest operating system specific tool; with Windows 7 and later use the extend command from within disk manager (should require no reboot).
Posted in Howtos, Uncategorized | Leave a comment

Effect of initial estimates for KLLs on the convergence of liquid-liquid equilibrium calculations

The initial estimates for the KLLs (equilibrium factors) have a big influence on the convergence behavior of liquid-liquid equilibrium calculations.

To highlight this effect, let’s try out something with LIBPF.

We choose the system H2O / 2-ethyl-1-hexanol.

Experimental measurements for the liquid-liquid equilibrium of this system can be found in the publication: Frank Gremer, Gerhard Herres, Dieter Gorenflo, “Vapour – liquid and liquid – liquid equilibria of mixtures of water and alcohols: measurements and correlations“, High Temperatures – High Pressures, 2002, volume 34, pages 355 – 362 (direct link). We are also grateful to the authors for providing additional data.

Let’s pick from from that source the data point at 120.384 – 129.785°C, here are the water molar fraction:

  • watery phase 0.9998 mol/mol
  • organic phase 0.334 mol/mol

Fitting this data-point we get these NRTL binary parameters:

  • alfa = 0.2
  • B12 = 3060.4764877456
  • B21 = -156.0296483827

These parameters can be used to reproduce the chosen experimental data point, see the HOWTO calculate a liquid-liquid separation tutorial.

The program yields these results:

------------------------------------------------------------------------------------
Phase   fraction        Water   ETEX    Water   ETEX
Name    mol frac        mol frac        ndot, kmol/s    ndot, kmol/s
STREAM:Vphase   0.278635989043  0.999484893116  0.000515106883773       27.8492 0.0143527
STREAM:Lphase   0.721364010957  0.30706763201   0.69293236799   22.1508 49.9856
STREAM:Tphase   1       0.5     0.5     50      50
------------------------------------------------------------------------------------
Water Kll: 3.25493405663 
ETEX Kll:  0.000743372524604

Here Vphase is the first liquid phase, and Lphase is the second liquid phase.

We have used KLL[0] = 1E5 and KLL[1] = 1E-5 as initial estimates, making the first component (the water) more affine with the first liquid phase. Consequently the solver converges to a solution (let’s call it solution B) where the organic phase is the second liquid phase.

If we set each KLL to its reverse (1E-5 and 1E5 respectively) we get the same results, but the phases are inverted:

------------------------------------------------------------------------------------
Phase   fraction        Water   ETEX    Water   ETEX
Name    mol frac        mol frac        ndot, kmol/s    ndot, kmol/s
STREAM:Vphase   0.721364010957  0.30706763201   0.69293236799   22.1508 49.9856
STREAM:Lphase   0.278635989043  0.999484893116  0.000515106883773       27.8492 0.0143527
STREAM:Tphase   1       0.5     0.5     50      50
------------------------------------------------------------------------------------
Water Kll: 0.307225886179 
ETEX Kll:  1345.22055484

here the organic phase is the first phase (let’s call it solution A) and the final KLLs are the reciprocal of those in solution B !

Now let’s try a scan of the range of possible initial estimates for the KLLs, sweeping each from 1E-5 to 1E5:

std::cout << "kll0\tkll1\terrors\titerations\tVphase.x[0]\tLphase.x[0]" << std::endl;
double factor(10.0);
for (double kll0=1E-5; kll0<1E5; kll0*=factor) {
  for (double kll1=1E-5; kll1setPristineRecursive();
    feed->resetErrors();
    feed->calculate();
    // TODO automate valid initial point table
    std::cout << kll0 << "\t" << kll1 << "\t" <errors.size() << "\t" <NITER_NLEFlash.value() << "\t" <Q("Vphase.x[0]") << "\t" <Q("Lphase.x[0]") << std::endl;
  } // loop over kll1
} // loop over kll0

This prints a 10×10 grid which looks like this:

kll0    kll1    errors  iterations      Vphase.x[0]     Lphase.x[0]

1e-05   1e-05   0       1       0.5     0.5 
1e-05   0.0001  2       500     0.454166789146  0.5 
...
1e-05	10000	0	4	0.143450341144 	0.999719891117 
...
10000	1e-05	0	4	0.999719891047 	0.143450278799 
...

There are four possible situations:

  1. the liquid-liquid split is found, with the 1st liquid being the organic phase: solution A
  2. the same liquid-liquid split is found, with the 2nd liquid being the organic phase: solution B
  3. we have errors: the initial estimate was off and did not enable the nonlinear algebraic solver to find the solution
  4. it converges, but the degenerate solution (with both phases having the same composition) is found

We can generate several of these grids, with the water content in the feed spanning the entire range of compositions.

This animated GIF shows a slideshow of the results:
anim

Here the blue color stands for solution A, green for solution B, red for errors, yellow for single-phase and gray for degenerate solution.

We note the following:

  1. when the initial estimates for the KLLs are close to one another, the degenerate solution is always found
  2. intermediate initial estimates typically cause convergence errors or a spurious single-phase solution
  3. if the alcohol fraction is greater than water:
    • if the difference between the initial estimate of the equilibrium factor for the alcohol (KLL[1]) and the one for the water (45° sloped boundary of the blue area) is higher than a certain difference threshold and the initial estimate of the equilibrium factor for the alcohol (KLL[1]) is higher than than another threshold, solution A is found
    • the sloped boundary advances to the right (i.e. the maximum difference threshold is decreased) as the water content in the feed increases
    • if the difference between the initial estimate of the equilibrium factor for the alcohol (KLL[1]) and the one for the water (45° sloped boundary of the blue area) is lower than a certain difference threshold and the one for the alcohol (KLL[1]) is lower than another threshold, solution B is found
    • the sloped boundary advances to the left (i.e. the maximum difference threshold is decreased) as the water content in the feed increases
  4. if the water fraction is greater than alcohol:
    • the shape of the blue / green areas flip
    • the 45° sloped boundaries recede to the bottom / top as the alcohol content in the feed decreases

Conclusions: the initial estimates of the equilibrium factors can be used to steer the solver towards making the first or the second phase the organic phase; for example to make the second phase the organic phase (solution B) a practical initialization strategy is to set the KLLs for the key organic components (those present in large amount) to small value such as 1E-5, and the KLL for for water to a large value such as 1E5. The KLLs for the trace components can be left uninitialized to their default value of 1.

Posted in C++, Chemeng, Uncategorized | Tagged , | Leave a comment