Coorperazione applicativa con Mirth, puntata 1

Dopo aver fatto un po’ di training sono in grado di spiegare un po’ meglio cos’è e come funziona Mirth.

Mirth è un software che assomiglia molto ad un PLC: elaboro una serie di input (sorgenti) e produco una molteplicità di output (destinazioni) in modo sincrono con la frequenza di scansione del programma. Ovvero ad ogni colpo di clock faccio una istantanea degli ingressi ed elaboro i valori delle uscite; se nel corso della scansione i valori cambiano non me ne curo.

Entrambi sorgenti e destinazioni possono essere webservice, database, file di testo… varie combinazioni:

  • leggo da un database, scrivo su un webservice
  • leggo da un webservice, scrivo su un servizio HL7
  • leggo da un servizio HTTP, scrivo su database e su file di testo…

Al pari della frequenza di scansione degli ingressi dei PLC, anche Mirth ha una frequenza di polling che però può essere impostata in modo indipendente da sorgente a sorgente.

Un’applicazione Mirth si compone di canali che sono processi che leggono da un insieme di sorgenti, eseguono una serie di operazioni (trasformazioni e filtri) e producono degli output su una o più destinazioni.

Esempio: scrivo in una istanza di Oracle, in un certo host, la temperatura registrata da un webservice ipotetico messo a disposizione da www.ilmeteo.it. In questo caso, definisco un nuovo canale che chiamerò “Temperature giornaliera delle ore 13” (nella scheda Summary) definendo una frequanza di polling in millisecondi, poi nella scheda Source definisco il tipo di connettore (in questo caso SOAP o HTTP Listener), scrivendo ad esempio l’indirizzo, il metodo di trasmissione GET/POST eccetera; infine, nella scheda Destinations definirò un connettore Oracle 10g Release 2, scriverò un template di SQL che verrà valorizzato con le variabili di canale (analogamente al PLC, è possibile definire delle variabili interne con uno scope variabile, da utilizzare a livello di canale, di singolo connettore o di tutta l’applicazione – globale).

Da un punto di vista generale è così che Mirth funziona.

Elettrotecnica ed Elettronica

Un mio caro amico, insegnante di Meccanica in un Istituto Navale, mi ha chiesto con una domanda secca che differenza esista tra Elettrotecnica ed Elettronica. Cose a cui di solito non si pensa. Al di là delle definizioni ufficiali e forbite che di certo già si trovano in letteratura, voglio provarmi nel dare una mia definizione.

Elettrotecnica

Elettrotecnica: produzione, trasporto, trasformazione, utilizzazione dell'energia elettrica
Credit:TebNad – Fotolia

L’Elettrotecnica si occupa della tecnologia della produzione, del trasporto, la trasformazione e dell’utilizzazione dell’energia elettrica per e a beneficio di macchinari ed apparati elettromeccanici ed elettronici.
In sostanza l’Elettrotecnica si occupa di mettere in pratica i modelli e le equazioni dell’Elettromagnetismo classico nell’analisi e nella progettazione di impianti elettrici, macchine elettriche (trasformatori, alternatori, motori a corrente continua o alternata, dinamo),  dispositivi di sezionamento e di distribuzione dell’energia.

Elettronica

Elettronica: analisi e sintesi di dispositivi e circuiti su scala micrometrica
Credit: CC0 Public Domain

L’Elettronica si occupa della tecnologia per l’analisi, la sintesi e la produzione di dispositivi che sono di supporto a tutte le attività umane (anche all’Elettrotecnica). E’ propriamente una branca della Fisica che si occupa del funzionamento e la progettazione di dispositivi che si situano, nel senso della scala di grandezza, a livello più basso dell’Elettrotecnica, occupandosi di come funziona la materia stessa su scala nanometrica per poter realizzare, a queste dimensioni, dispositivi elementari come diodi, transistor, componenti passivi e interi circuiti anche molto complessi come i microprocessori, o dispositivi per l’I/O e la memorizzazione come DVD, hard disk, USB/SD card, monitor LED, o i sensori e gli attuatori (convertitori tra grandezze fisiche ed elettriche).

In sostanza l’Elettronica si occupa di mettere in pratica i modelli e le equazioni della Meccanica Quantistica in dispositivi come quelli menzionati. L’armamentario matematico che si utilizza in Elettronica è in parte mutuato dall’Elettromagnetismo classico (ad esempio l’adozione di circuiti lineari equivalenti, che rappresentano linearizzazioni dei modelli non lineari attorno al punto di funzionamento) ma in determinate situazioni (ad esempio quando si studia come funziona una giunzione pn) occorre affrontare lo studio dei modelli con le equazioni di continuità e la statistica di Fermi.

Dal punto di vista pratico, il discrimine tra le due discipline è spesso molto sfumato. Per un impianto fotovoltaico possiamo dire in modo molto grezzo, ad esempio, che dalla cella fotovoltaica all’inverter è Elettronica, mentre dall’inverter alla rete elettrica nazionale è Elettrotecnica. Ma poi la distinzione è molto imprecisa, in quanto per esempio anche il contatore può essere elettronico. La stessa cosa si può pensare per i motori passo-passo, una macchina elettrica (motore a induzione) che viene fatta funzionare in stretto collegamento con un dispositivo elettronico (un generatore di impulsi che la fa ruotare).

Link utili

Brian Kernighan e il suo modo di fare debugging

Leggo con sorpresa nel sito dell’Apache Group, a proposito di log4j, un tool che permette di far loggare in modo controllato una applicazione che gli colleghiamo, che Brian Kernighan (l’autore del famosissimo The C Programming Language, con Dennis Ritchie, inventore dello stesso linguaggio C) preferisce vedere l’output dell’applicazione per controllarne il comportamento e gli errori, piuttosto che usare i debugger.

Letteralmente (tratto da “The Practice of Programming”, con Rob Pike, Addison-Wesley Professional, 1999)

As personal choice, we tend not to use debuggers beyond getting a stack trace or the value of a variable or two.

One reason is that it is easy to get lost in details of complicated data structures and control flow; we find stepping through a program less productive than thinking harder and adding output statements and self-checking code at critical places.

Clicking over statements takes longer than scanning the output of judiciously-placed displays. It takes less time to decide where to put print statements than to single-step to the critical section of code, even assuming we know where that is.

More important, debugging statements stay with the program; debugging sessions are transient.
(Fonte)

Io, da quando programmo per il web, uso questa modalità: sinceramente, pensavo di essere un troglodita ma sono felice di vedere che sono in buona compagnia!

OPERA e i neutrini più veloci della luce

Al di là del rumore destato dall’entusiasmo del Ministro dell’Istruzione per la scoperta, mi pare di poter sottoscrivere la consueta correttezza del mondo dei fisici davanti a dei risultati che mettono in discussione un secolo di Fisica e la reputazione di una intera categoria di ricercatori.

Il portavoce scientifico dell’esperimento OPERA dell’INFN, Antonio Ereditato, ha dichiarato che «considerando le straordinarie conseguenze di questi dati, si rendono necessarie misure indipendenti prima di poter respingere o accettare con certezza questo risultato. Per questo motivo la collaborazione Opera ha deciso di sottoporre i risultati a un esame più ampio nella comunità» [Fonte]

Nel video seguente l’ottima spokeswoman italiana del CERN Paola Catapano, illustra l’esperimento congiunto tra CERN e INFN (Fonte).

Si può dire che è, se confermata, una situazione molto simile a quella in cui dovette trovarsi nel 1900 Max Plank, quando la curva di emittenza spettrale del corpo nero andava contro la teoria elettromagnetica di Maxwell (che prevedeva la cosiddetta catastrofe ultravioletta). Con un atto di disperazione (come lo definì egli stesso) fu costretto, per poter giustificare la realtà, ad inventare i quanti.

Il mio professore di Fisica II, Massimo Nigro, mi insegnava che tutto si spiegava mettendo le sommatorie al posto degli integrali 🙂

 

Internet Explorer

C’è un sito utilissimo che permette, da qualsiasi browser, di avere una anteprima di una pagina web così come apparirebbe in Microsoft Internet Explorer!

Link: http://ow.ly/6DC0B

Forse può apparire strana la mia meraviglia. Ma io uso Linux e, se non ho una macchina Windows o una macchina virtuale a disposizione, non posso usare IE…

Foam Nuke

Un virus, ve lo possono mandare con una email catturando l’attenzione col fatto che si son presi soldi dalla carta di credito, ad esempio.

Qui i dettagli http://ow.ly/5XrKj

L’email contiene un allegato dal nome buffo; la sua impronta md5 è:

$ md5sum Order008032011.Doc_________________________________________
___________________________.exe
22736566095007810458da69d82cf44f

Per trovarne il nome l’ho aperto con un editor esadecimale, trovando verso la fine il descrittore. Nel sito citato si trova l’informazione esaustiva.

openssl e padding

L’utilizzo del padding nella cifratura tramite openssl serve a evitare attacchi di tipo cifra-e-confronta dei crittogrammi.

Se encrypt(text, key) desse sempre lo stesso risultato, si potrebbe indovinare il testo in chiaro confrontando due file cifrati.

Abilitando l’opzione pkcs, openssl applica un padding versione PKCS ver. 1.5 al testo prima della cifratura, cioè introduce una stringa casuale prima del testo chiaro e poi procede con la cifratura; è è come se usassi una chiave monouso, solo che anziché modificare la chiave modifico il testo chiaro.

In questo modo evito l’attacco cifra-e-confronta.

Ma non è finita.

FTP: automatizzare la connessione

Ho dovuto automatizzare il programma ftp da linea di comando perché inserisca da solo utente e password.

Avevo bisogno di imitare quello che si fa se si lancia i comando ftp dal browser:

ftp://username:password@myhost.com

Da linea di comando Linux/Unix non funziona così. Un modo per fare una cosa simile è usare il file .netrc che è un file da creare nella directory $HOME dell’utente (plausibilimente /home/utente).

Occorre anche che il file .netrc abbia permessi 600 (ottale) ossia -rw------- (solo il proprietario può leggerlo e scriverci).

Cosa scriviamo nel file .netrc?

Un esempio può essere questo:

machine www.myhost.com
login username
password myp3d
<blank>
<blank>

Dopodiché si danno i permessi corretti

$ chmod 600 .netrc

Come utilizziamo il comando?

Da ultimo proviamo il comando; si invoca solamente il comando seguito dal nome host che a questo punto è solo un’etichetta (cioè il nome host che segue il comando ftp è solo una chiave per selezionare il blocco di righe corripsondente nel file .netrc!):

utente@jsbach:~$ ftp www.myhost.com
Connected to services.myhost.net.
220 ProFTPD 1.3.1 Server (FTP Server ready.) [64.46.178.186]
331 Password required for username
230 User username logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Fonti: tra man pages e vari siti che ho consultato, il più completo è questo: http://www.walkernews.net/2007/05/08/auto-file-transfer-via-ftp-batch-scripts/

Modo promiscuo

Detto male: è un modo di configurare una scheda di rete in modo che possa vedere non solo i pacchetti TCP a lei destinati, ma tutti quelli che passano nel segmento di rete (cavo) a cui è connessa.

Detto bene: questa risorsa lo spiega in un modo più appropriato.

Test di carico

Un’attività importantissima per l’affidabilità del software è il test di carico, nel quale si stressa l’applicativo simulando l’accesso e l’uso da parte di una qualsivoglia popolazione di utenti.

Conoscevo il software Jmeter del gruppo Apache ma oggi mi sono accostato casualmente a Curl loader, un software scritto in C abbastanza facile da impostare e che consente un controllo preciso delle condizioni di carico del software, assieme alla possibilità di generare dei report che permettano una facile business intelligence.

L’interfaccia è spartana (linea di testo) e l’output viene raccolto in alcuni file che poi occorre analizzare a parte con qualche altro strumento; ma l’interfaccia di testo che appare durante lo stress test è in grado di visualizzare abbastanza direttamente il grado di “sofferenza” dell’applicazione, fornendo il numero ed il tipo di errori ritornati dal web server, il tempo medio di restituzione delle pagine.

curl loader

curl loader