Nei giorni scorsi l’Agenzia per la Cybersicurezza Nazionale (ACN) ha pubblicato una segnalazione relativa ad alcune vulnerabilità individuate in n8n, la piattaforma open source per l’automazione dei workflow che utilizzo in un’installazione locale tramite Docker. …
Qualche giorno fa mi sono imbattuto in un comportamento a dir poco bizzarro sulla mia macchina Ubuntu: digitando nel browser un domain name completamente a caso, tipo http://mememem.it/ o http://nxdomain1.it/ (il nome è voluto: NXDOMAIN …
Ovvero come si scambiavano messaggi instantanei due utenti Unix prima dell’avvento di WhatsApp e Telegram. Qualche giorno fa stavo ragionando sui primi sistemi di messaggistica su ARPANET [E] e mi è tornato in mente il …
Da un po’ di tempo avevo il PC disseminato di container Docker installati qua e là, senza un vero criterio. Ho deciso che era il momento di mettere ordine e, allo stesso tempo, di costruire …
Continuo qui una serie di articoli che riguardano il funzionamento di Docker. In questo post ho condiviso la comprensione del perché Docker non possa essere pensato come un virtualizzatore hardware: non viene virtualizzata una macchina …
Presto sarà aperto a nuovi Power User. Nuova grafica, funzionalità migliorate e, secondo me, bellissimo da usare!
Il comunicato dello staff di oggi:
Ancora aggiornamenti in atto. Come anticipato nel post del 21 Maggio, da oggi Volunia mette a disposizione nuove funzionalità.
È inoltre nostro dovere tenere in considerazione tutte le critiche ed i reclami ricevuti dalle persone che non hanno avuto ancora accesso a Volunia. Il nostro team ha lavorato alacremente per poter accreditare tutti, soprattutto in vista della fase finale di Testing. Dal giorno 4 Giugno 2012 riprenderemo il processo di attivazione di tutti gli utenti che in questi mesi ne hanno fatto richiesta.
Finora ho realizzato applicazioni Mirth che leggevano da servizi web. E’ interessante anche sapere che i web service si possono fare con Mirth. Il contesto è questo: un’azienda “periferica” produce una informazione (ad esempio: un laboratorio che produce l’analisi di un campione di sangue) e il dato deve essere trasmesso all’azienda “madre” perché lo registri nel suo gestionale. L’azienda madre realizza un servizio web che verrà chiamato dal laboratorio il quale spedirà al servizio il referto con un messaggio HL7. All’arrivo del messaggio l’azienda madre esegue il parsing del messaggio e salva i dati nel gestionale (un database relazionale).
Nella fattispecie il messaggio viene “affettato” a righe e viene salvata una intestazione e una serie di dettagli collegati, uno per ogni riga del messaggio.
L’impianto è questo:
Il source
Il source è un SOAP listener che risponde con un WDSL che Mirth stesso genera e che mette a disposizione un metodo standard detto acceptMessage() (teniamo d’occhio ma per il momento soprassediamo sulla casella di selezione Respond from)
Le destination
Le destination sono parecchie perché la lavorazione del messaggio è piuttosto laboriosa: devo capire il tipo di messaggio (che leggo nell’intestazione del messaggio stesso) e a seconda di questo compiere diverse operazioni: per messaggi di un tipo estraggo dal file HL7 un file PDF che salvo nel NAS, e poi, in ogni caso, devo salvare in una tabella Oracle una intestazione e in una tabella figlia tutte le righe del messaggio numerandole e collegandole alla testata con un vincolo di chiave esterna:
Mirth2_destination
Un passetto in più: lo script
Per questo tipo di applicazione devo personalizzare lo script che viene eseguito una volta eseguita l’applicazione del canale: con questo personalizzo la risposta del web service al programma che lo ha chiamato. Nelle figure precedenti si possono vedere questi punti in ciascuna delle 4 tab superiori.
Anche se ci sono diversi prodotti già attivi all’interno di Mirth per eseguire ognuna di queste operazioni atomiche, per convenienza o per forza alcune cose me le sono dovute scrivere a mano in JavaScript utilizzando classi embedded di Mirth, come la classe DatabaseConnectionFactory. Per esempio mi serviva eseguire una lettura di Oracle in una delle destinazioni, ma nelle destination non si può selezionare il tipo di connettore DatabaseReader che invece si può richiamare dal source. Quindi me lo sono fatto a mano. Inoltre, pur essendo possibile selezionare dei tipi di connettori standard che sono anche semplici da usare (ad esempio: FileWriter: gli passo la directory, il nome del file e il contenuto e lui me lo scrive dentro il filesystem), alcuni tipi di connettori dovevano comportarsi in modo non standard, ma Mirth è programmabile! per cui ho potuto estendere le funzionalità scrivendo i programmi a mano.
Per me, che non sono tanto in confidenza con il Java, scrivere in JavaScript (che è un po’ meno rigido del Java) in modo così approfondito è stata comunque un’esperienza formativa.
Alla fine di questo lavoro – salvare i dati – bisogna rispondere al software che ha chiamato il servizio e: come si fa? Non lo so.
Ho usato per la prima volta la quarta TAB (Scripts). Ho selezionato “Postprocessor” nella select Script in alto (vedi figura), ho definito una serie di variabili e una istruzione di scrittura nel log, e poi se la variabile di canale error è valorizzata (e, se succede qualcosa, la valorizzo nelle destinazioni precedenti – esse vengono eseguite nell’ordine una alla volta), istanzio un tipo di risposta altrimenti un’altra.
Il cuore di tutto è l’oggetto di Mirth responseMap che mi permette di modificare quel messaggio di risposta del metodo di default acceptMessageResponse che avevamo lasciato in sospeso nel primo punto. Il valore che questa variabile può assumere non è una stringa ma un oggetto che viene inizializzato dal metodo ResponseFactory.getSuccessResponse(ack) in caso di OK, oppure dal metodo ResponseFactory.getFailureResponse(ko) in caso di KO (ack e ko invece sono due stringhe che definisco io all’inizio dello script). La presenza dell’istruzione responseMap.put() in questo script mi fa comparire la voce acceptMessageResponse nella tendina di selezione Respond from del source! Il tutto è riportato in figura:
Mirth3_script
Come ultimo passaggio ecco come si presenta la chiamata al WS fatta da soapUI (a sinistra) e la response del servizio (a destra):
SoapUI MSG
Di soapUI ne parlo più avanti. Buona questa risposta nel forum di Mirth
Un oggetto curioso, come il nastro di Möbius che è una varietà di dimensione 2 non orientabile: sul nastro di Möbius una formica che parte da un certo punto del nastro, cammina cammina e si ritroverà nello stesso punto (perché il nastro è chiuso) ma dall’altra faccia del nastro.
Come farsi un nastro di Möbius in casa, stile ArtAttack: prendete un foglio di carta A4, un paio di forbici e della “colllla vinilica”. Tagliate una strisciolina larga 5 cm nel senso della lunghezza. Fatto? Bene! Prendete in mano la strisciolina tenendola per i lati corti e fate ruotare un lato di mezzo giro come quando si scartano le caramelle. Fatto? Bene! Adesso unite i due lembi e attaccateli con la “colllla vinilica”, ed avrete il vostro nastro di Möbius fatto in casa! 🙂
La bottiglia di Klein è un oggetto simile ma un po’ più complicato. Il filmato spiega bene come ci si possa costruire una bottiglia di Klein in casa, ma non bastano carta, forbici e colla vinilica. Si parte da un cilindro che però deve autointersecarsi vivendo noi in uno spazio a 3 dimensioni. Se fossimo in uno spazio a 4 dimensioni potremmo anche farlo senza che si autointersechi, ma questo è Universo 2.0.
La stranezza di questa bottiglia, dotata di una auto-intersezione, è che non ha un dentro ed un fuori. Mentre la distinzione tra dentro e fuori, nello spazio tridimensionale, è supportata dall’esperienza – normalmente sappiamo distinguere tra il dentro ed il fuori di un pallone da calcio: se vogliamo entrarci dentro, dobbiamo fare un buco -, essa invece non è così chiara in questo oggetto, visto che con continuità possiamo passare dall’esterno all’interno senza dover bucare la superficie.
Questa animazione al computer (quanta grazia i computer in queste cose! Fossero vivi Klein e Poincaré…) spiega come si costruisca una bottiglia di Klein a partire da un cilindro elastico (sulla indicazione dello stesso Felix Klein).
Inoltre, sezionando la bottiglia di Klein, si passa per deformazione continua (diffeomorfismo) ad un nastro di Moebius. Oppure, incollando due nastri si ottiene la bottiglia. Anche la bottiglia di Klein è una superficie (una varietà) di dimensione 2 non orientabile. Tutto visibile nell’animazione.
Dal 18 maggio Volunia si è presentato ai suoi power user con alcune novità.
Nel comunicato del team, si sono spiegati i motivi del silenzio stampa degli ultimi mesi e sono stati ringraziati gli utenti che hanno testato il sistema fornito una messe di segnalazioni. Sulla base di queste si sono decisi tre passi innovativi:
l’integrazione con un motore di ricerca commerciale per consentire un uso più estensivo delle funzionalità seek & meet, pur continuando a sviluppare il proprio motore di ricerca;
è stata rinnovata la grafica, resa meno grezza, anzi decisamente più accattivante, dalle segnalazioni degli utenti
è stato migliorato l’aspetto comunicativo aprendo un blog in cui lo staff riferirà regolarmente sugli sviluppi e sono stati precisati i documenti riguardanti termini e condizioni dell’uso del servizio e sul trattamento della privacy.
Il team di Volunia sta lavorando “con solerzia” per aprire a tutti il sito di ricerca sociale il 14 giugno 2012.
Yii è il frameword MVC del momento, lo sto studiando e mi sono preso la libertà di ripensare un po’ al pattern di sviluppo MVC secondo un contesto che mi ha aiutato a chiarire alcune cose sul suo funzionamento. Ho scritto questo articoletto per ricordarmi che questo modo di vedere le cose me le ha fatte capire un po’ meglio. E, magari, può servire a qualcuno.
Sempre nell’ambito della guerra degli acronimi, un dubbio lecito che può venire quando qualche software ci richiede Java a bordo (lecito visto che lo mettono in evidenza nel sito dell’Oracle quando si vuole scaricare un ambiente di sviluppo o di esecuzione) è:
Ho bisogno di JDK o di JRE?
Qui la semplice risposta dell’Oracle:
“What Java Do I Need?” You must have a copy of the JRE (Java Runtime Environment) on your system to run Java applications and applets. To develop Java applications and applets, you need the JDK (Java Development Kit), which includes the JRE.
Healt Level Seven è uno standard di comunicazione che definisce di tutti gli standard per lo scambio, la gestione, l’integrazione, la condivisione e il reperimento di dati sanitari in formato elettronico.
Il messaggio Hl7 è un file di testo, una sorta di XML, ma non in formato markup.
Un messaggio Hl7 può essere di diversi tipi: contenere un referto strutturato (ad esempio i risultati di una analisi del sangue o di una spirometria), un referto PDF firmato digitalmente, una comunicazione di allineamento tra archivi o altro ancora.
Un messaggio è un testo distinto su più righe (segments). Ogni segmento ha un codice che ne definisce il contenuto (ad esempio PID, come Patient IDentification)
Ogni segmento è composta di campi (fields): nelle esempio del PID troveremo, in posizioni ben definite , informazioni come il cognome, il nome, il codice fiscale, la data di nascita del paziente. Ciascuna di queste informazioni è delimitata, all’interno della stessa riga, dal carattere pipe (|) e, al suo interno, lo stesso campo può anche essere suddiviso in più sottocampi delimitati dal carattere ^ (ad esempio, sempre in un segmento PID, l’indirizzo è contenuto tra due pipe e si trovano i campi, via, civico, cap, città, provincia delimitati da ^).
Sono tornato a far visita al mio Relatore di tesi, il prof. Mauro Bisiacco del Dipartimento Di Ingegneria dell’Informazione dell’Università di Padova. E’ stato un incontro piacevolissimo con una persona davvero speciale. Gli studenti lo adorano!
Incidentalmente, durante la chiacchierata, sono stato coinvolto in una questione riguardante un compito di Controlli Automatici, un dubbio sull’andamento di una funzione di trasferimento. La sera ho fatto ripartire i neuroni acciaccati che si occupavano di quegli argomenti e ne ho tratta una botta di gioventù. La mattina seguente gli ho mandato una mail con la soluzione qualitativa, era anche giusta. Mi sono preso lo sfizio di metterla in bella copia.
Il testo, redatto con LaTeX e con l’ausilio di GNU Octave per i grafici, un bellissimo clone open source di Matlab.
Ho trovato una interessantissima diatriba sui problemi incontrati nel migrare alla versione 4. Si è scomodato ad intervenire perfino il CEO di Alfresco Software.
Fino a metà il tono è costruttivo, poi ho lasciato stare. Vale la pena di leggerlo: http://bit.ly/HJDK4L
Utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Lo facciamo per migliorare l'esperienza di navigazione e per mostrare annunci personalizzati. Il consenso a queste tecnologie ci consentirà di elaborare dati quali il comportamento di navigazione o gli ID univoci su questo sito. Il mancato consenso o la revoca del consenso possono influire negativamente su alcune caratteristiche e funzioni.
Funzionale
Sempre attivo
L'archiviazione tecnica o l'accesso sono strettamente necessari al fine legittimo di consentire l'uso di un servizio specifico esplicitamente richiesto dall'abbonato o dall'utente, o al solo scopo di effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica.
Preferenze
L'archiviazione tecnica o l'accesso sono necessari per lo scopo legittimo di memorizzare le preferenze che non sono richieste dall'abbonato o dall'utente.
Statistiche
L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici.L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici anonimi. Senza un mandato di comparizione, una conformità volontaria da parte del vostro Fornitore di Servizi Internet, o ulteriori registrazioni da parte di terzi, le informazioni memorizzate o recuperate per questo scopo da sole non possono di solito essere utilizzate per l'identificazione.
Marketing
L'archiviazione tecnica o l'accesso sono necessari per creare profili di utenti per inviare pubblicità, o per tracciare l'utente su un sito web o su diversi siti web per scopi di marketing simili.
Commenti recenti