Feb 23

Trappist 1: una stella “vicina” che ha ben 7 pianeti potenzialmente abitabili

Leggi il resto »

Feb 22

MirthConnect 3.2 – Come intercettare la response di un connettore HTTP Sender

Overview

Questa applicazione Mirth richede di leggere da un dataabase, reperire ad un certo URI un file identificato dalla precedente lettura e salvarlo su un NAS.

Source

un Database reader che mi fornisce il path e il file name del file da scaricare dal web

Due destination

destination 1: un connettore HTTP Sender ‘call_ws’

destination 2: un connettore javascript ‘dummy’ con la seguente istruzione:

	var pdf_base64 = $('call_ws').getMessage();

la variabile pdf_base64 contiene il file in codifica base64 pronto per essere decodificato e salvato sul filesystem.

Ott 18

Analizzatori lessicali e alberi sintattici

Prima parte: analizzatori lessicali

Nei linguaggi di programmazione, l’esecuzione di un programma è affidata a due componenti che sono presenti sia nei compilatori che negli interpreti:

  • l’analizzatore lessicale (token analyzer)
  • il costruttore dell’albero sintattico (parse tree)

In sostanza si tratta di scorrere il testo di un programma, individuarne tutti i simboli (compito del primo componente) e, nella fase successiva, di costruire l’albero sintattico in modo tale da capire se il programma scritto soddisfa la grammatica formale del linguaggio.

PHP offre tra le sue funzioni un interessante token analyzer che permette di isolare gli elementi di un programma per capire la prima parte del processo di compilazione/interpretazione: l’istruzione token_get_all.

Qui di seguito il codice che utilizza questa funzione per isolare gli elementi lessicali o token del programma:


<?php
$tokens 
token_get_all('
<?php
echo("ciao");
$i=0;
$i--;
for ($j=0; $j<=1; $j++)
echo \'ciao\';
?>'
);

echo ‘<xmp>’;
foreach (
$tokens as $token) {
if (
is_array($token)) {
echo 
“Line {$token[2]}: “,
token_name($token[0]),
” (‘{$token[1]}‘)”,
PHP_EOL;
}
}

echo ‘</xmp>’;

Se si fa girare questo programma, avremo l’analisi del frammento di programma racchiuso nella funzione token_get_all().

Il risultato è il seguente:

Line 1: T_OPEN_TAG (' Line 1: T_WHITESPACE ('
')
Line 2: T_ECHO ('echo')
Line 2: T_CONSTANT_ENCAPSED_STRING ('"ciao"')
Line 2: T_WHITESPACE ('
')
Line 3: T_VARIABLE ('$i')
Line 3: T_LNUMBER ('0')
Line 3: T_WHITESPACE ('
')
Line 4: T_VARIABLE ('$i')
Line 4: T_DEC ('--')
Line 4: T_WHITESPACE ('
')
Line 5: T_FOR ('for')
Line 5: T_WHITESPACE (' ')
Line 5: T_VARIABLE ('$j')
Line 5: T_LNUMBER ('0')
Line 5: T_WHITESPACE (' ')
Line 5: T_VARIABLE ('$j')
Line 5: T_IS_SMALLER_OR_EQUAL ('<=')
Line 5: T_LNUMBER ('1')
Line 5: T_WHITESPACE (' ')
Line 5: T_VARIABLE ('$j')
Line 5: T_INC ('++')
Line 5: T_WHITESPACE (' ')
Line 6: T_ECHO ('echo')
Line 6: T_WHITESPACE (' ')
Line 6: T_CONSTANT_ENCAPSED_STRING (''ciao'')
Line 6: T_WHITESPACE (' ')
Line 7: T_CLOSE_TAG ('?>')

Ago 05

Emoji e licenze

Ho avuto modo di affrontare il problema dell’utilizzabilità degli Emoji nei documenti elettronici (o anche cartacei) dal punto di vista della licenza.

L’occasione si è presentata per un contatto con la prof. Francesca Chiusaroli, docente del corso di Glottologia e Linguistica all’Università di Macerata che sta curando su Twitter un progetto piuttosto ambizioso che raccoglie il lavoro di una schiera di volontari entusiasti: redigere la prima traduzione di Le avventure di Pinocchio di Carlo Lorenzini (detto Collodi) in… emoji!

L’Emoji è un ideogramma molto simile al sino-giapponese Kanji (ogni simbolo non rappresenta un suono ma un concetto), che ha una codifica standardizzata Unicode, nella quale vengono utilizzate esclusivamente icone stilizzate in bianco e nero.

Varie aziende hanno poi personalizzato la propria versione di Emoji: Apple, Google, Twitter, Samsung, eccetera. Per una lista completa delle varie versioni si può consultare la relativa pagina di Unicode.org.

Ma gli emoji di Unicode sono quelli che vivono nel mondo delle idee di Platone: il cavallo che vive nel mondo delle idee rappresenta la “cavallità” (citando Luciano De Crescenzo) ma poi in realtà esistono solo le istanze fisiche dei cavalli veri, quindi esistono le varie versioni di emoji prodotte dalle varie aziende autonomamente con i propri disegnatori.

Esiste il problema della libertà di utilizzo delle Emoji, essendo le singole icone potenzialmente un prodotto coperto da copyright. Ma per Francesca Chiusaroli ed il suo progetto #emojitaliano c’è la buona notizia che gli emoji di Twitter sono coperti da Licenza Creative Commons e quindi liberamente utilizzabili.

Tutto il package di icone e software di corredo da 360 MB è disponibile su Github:

https://github.com/twitter/twemoji.git

Ultima nota linguistica: secondo il sito dell’Accademia della Crusca, per la Treccani emoji va inteso come sostantivo maschile.

Buona creatività con gli Emoji, quindi, di Twitter e auguri Francesca per il tuo bellissimo progetto!1f60e

Lug 20

RFC Request For Comments

ietflogotransLe RFC sono documenti ufficiali con i quali la Internet Engineering Task Force rende pubbliche le specifiche dei protocolli di rete.

Il nome di Request For Comments è dovuto al fatto che storicamente, dato lo spirito collaborativo della neonata Internet, si chiedeva agli esperti di prendere visione di queste specifiche e, eventualmente, chiedere chiarimenti o fornire richieste di modifica tramite dei commenti.

Ogni RFC è numerata con un numero progressivo in base alla data di compilazione.

Una RFC molto particolare è la 2119 che affronta una problematica di tipo linguistico-semantico e chiarisce l’uso dei termini usati sistematicamente nel gergo tecnico, che hanno dovuto essere precisati appunto con una RFC per fissarne il significato ed eliminare ogni possibile ambiguità

È la RFC che si prende l’onere di specificare il significato dei termini

      "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
      "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY",
      "OPTIONAL"

ricorrenti in tutte le RFC per indicare il livello di un requisito. La RFC in questione infatti si intitola “Key words for use in RFCs to Indicate Requirement Levels“.

Brevemente (per la spiegazione esaustiva si faccia rifermento alla RFC):

  1. MUST, REQUIRED, SHALL indicano l’obbligatorietà di un certo requisito.
  2. MUST NOT o SHALL NOT indicano che un certa specifica è proibita.
  3. SHOULD e RECOMMENDED indicano che una specifica è consigliata anche se non obbligatoria.
  4. SHOULD NOT e NOT RECOMMENDED indicano che una specifica è sconsigliata anche se non proibita.
  5. MAY e OPTIONAL significa che una specifica è assolutamente opzionale.

Esempio di impiego dei termini nella RFC-2228 (che definisce le specifiche di funzionamento dell’FTP sicuro)

Esempio 1

If the server is not willing to accept the named security mechanism, it should respond with reply code 534.

se il server non è in grado di accettare il meccanismo di sicurezza proposto dovrebbe rispondere con il codice 534 (ma potrebbe anche non rispondere, perché in effetti non si farà nulla). Tuttavia per non lasciare l’interlocutore appeso al filo è consigliabile ritornargli il codice 534

Esempio 2

If the server is willing to accept the named security mechanism, but requires security data, it must respond with reply code 334.

Se il server è in grado di accettare il meccanismo di sicurezza proposto, deve rispondere con il codice 334 (stavolta è obbligatorio perché seguiranno altre azioni).

Ultimo esempio

If the server is responding with a 334 reply code, it may include security data as described in the next section.

Se il server risponde con il codice 334, può aggiungere (è una opzione) dati di sicurezza.

Lug 07

MySQL e procedure

mysqlContinuo la serie di piccoli accorgimenti che possono far risparmiare molto tempo. Stavolta il DBMS di cui parlo è Oracle MySQL (ormai si chiama così).

Il problema davanti al quale mi sono trovato era la creazione di una procedura memorizzata (o stored procedure) in cui il parser MyQL mi segnalava un errore che in realtà non esisteva, perché il problema era un altro.

Riporto uno snippet della procedura:

 

delimiter $$

CREATE PROCEDURE `sp_order_take`(
 in i_ddt_id int,
out o_id int,
 out o_err char
)
BEGIN 
 declare w_status_id int;
 declare w_id int;

 select status_id into w_status_id
 from table1
 where ddt_id = i_ddt_id;
 
...

 if w_status_id = 2 then
   set o_err := 'Ordine gia preso in carico';
   set o_id := null;
 else if w_status_id = 4 then
   set o_err := 'Ordine gia chiuso';
   set o_id := null;
 else
   select w_id into o_id;
 end if;

end$$

delimiter ;

Ora l’errore che mi veniva segnalato sia dal parser di MySQL Benchmark che dal server era del tipo:

ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near '' at line 68

La linea 68 era la fine dello script.

Il problema non era collegato al cambiamento del delimitatore (che serve per non fare processare al server ogni riga come a sé stante, condizione che genererebbe circa un errore per riga) ma alla scrittura della struttura if… then… else; in particolare l’else if va scritto tutto di seguito elseif, oppure occorre aggiungere un ulteriore end if!

I problemi visti dopo sembrano sempre banali. Potenza del senno di poi. E delle fosse piene.

Lug 06

Oracle e millisecondi

logo-oracle-largeOggi mi sono trovato di fronte ad un problema: voglio vedere la differenza di tempo tra due scritture successive in una tabella in base al sysdate che viene scritto dentro. Le due transazioni sembrano molto ravvicinate, allo stesso secondo:

06/07/2016 09:28:24
06/07/2016 09:28:24

quindi volevo rendermi conto della distanza in millisecondi.

Dal blog di Tom Burleson e altri forum ho trovato che questa operazione non è possibile se si usa il tipo DATETIME: infatti la risoluzione di quest’ultimo è il minuto secondo.

Per poter distinguere intervalli temporali inferiori al secondo si deve dichiarare il campo come TIMESTAMP.

Mag 16

Breve incursione nell’Unicode

Unicode_logo.svgHo avuto la necessità di scrivere un testo contente la lettera ð (eth) dell’alfabeto islandese, equivalente grosso modo alla th inglese di think (sorda) o di than (sonora).

Come scriverlo direttamente in un testo utilizzando ad esempio, Libreoffice?

 

 

Qui ho trovato questo suggerimento. Per introdurre un carattere Unicode in un testo:

  1. digitare la sequenza di tasti Ctrl + Maius + u
  2. compare una u
  3. digitare di seguito il codice unicode della lettera che vogliamo stampare: u00f0
  4. premere INVIO
  5. a quel punto scompare la stringa u00f0 e compare la ð.

Ovviamente questo è un espediente utile se già si conosce il codice Unicode del carattere che si vuole scrivere.

In alternativa si può usare (sempre il Libreoffice) la funzione Inserisci > Carattere speciale e cercare e selezionare il carattere desiderato

unicode

Apr 29

Personalizzare Bootstrap

Boostrap_logo.smallBootstrap “appena tolto dalla confezione” (out-of-the-box) ha la possibilità di gestire grid-systems per un massimo di 12 colonne.

Io ho bisogno di realizzare una tabella con 13 colonne. Dopo il solito giro di forum mi imbatto nel sito di Bootstrap (quale sito migliore?) che mi mostra questo favoloso servizio di personalizzazione col quale possiamo cambiare praticamente tutto nel comportamento e nell’aspetto di Bootstrap.

In sostanza c’è la possibilità di rigenerare tutto lo stack javascript/css andando a modificare una messe di variabili di configurazione.

 

 

Ma concentriamoci sul problema della griglia a 12 colonne. Quello che mi interessa modificare è il numero massimo di colonne: trovo questo parametro nella sezione

  Common CSS > grid 

la voce da modificare è @grid-columns e la porto da 12 a 13:

Customize.png

Si possono selezionare anche strettamente i componenti che servono:

Customize select.png

Io seleziono tutto e vado in basso al pulsante Compile and Download. Cliccando vengono rigenerati i file CSS, Javascript, i font e viene scritto un file di configurazione in formato JSON:

  $ ll
  totale 40
  drwxrwxr-x 5 marcob marcob  4096 apr 29 10:19 ./
  drwxrwxr-x 5 marcob marcob  4096 apr 29 10:19 ../
  -rw-rw-r-- 1 marcob marcob 18298 apr 29 10:19 config.json
  drwxrwxr-x 2 marcob marcob  4096 apr 29 10:19 css/
  drwxrwxr-x 2 marcob marcob  4096 apr 29 10:19 fonts/
  drwxrwxr-x 2 marcob marcob  4096 apr 29 10:19 js/

A questo punti modifico anche l’intestazione HTML perché punti alla mia versione personalizzata di Bootstrap piuttosto che alla versione online.

 

Dettagli disponibili nel Wiki, assieme alle istruzioni per localizzare correttamente i calendari.

Apr 26

News dalla ricerca in Scienza dei Materiali

Una piccola rassegna di good news dal mondo della ricerca applicata che riguarda la scienza dei materiali, la produzione di energia elettrica e a sua accumulazione.

 

 

 

Post precedenti «