venerdì 14 maggio 2021

I Veganti - Preambolo

 Ciao a tutti e a tutte, e non in questo ordine,

forse qualcuno si sarà accorto che abbiamo vissuto un periodo estremamente particolare, qualcosa che sicuramente negli anni a venire sarà ricordato come "la pandemia del venti", o qualcosa del genere legato all'anno.

Tutti chiusi in casa, i vicini che si trasformano improvvisamente in nemici, gesti normali che diventano pericolosissimi. Insomma, abbiamo vissuto qualcosa di veramente terribile.

Per mia fortuna io l'ho vissuto in modo leggermente diverso, perché lo smart working, come viene erroneamente chiamato questo modo di lavorare, io lo pratico già da diversi anni, ogni volta che posso: mi alzo alle 7:45 e alle 8:00 sono a lavorare, compresa puntata in bagno e colazione. Cosa si può desiderare di meglio?!

Inoltre, la lunga pausa mi ha permesso di concludere ben due lavori: di uno ne parlo in altra sede, mentre oggi vorrei parlarvi di questo piccolo esperimento.

I veganti.

Si tratta di un esperimento, come vi dicevo prima, per vedere se riesco a utilizzare registri che non siano strettamente quelli del giallo e del thriller. In questo caso, infatti, parliamo di horror comico, che è un genere decisamente poco conosciuto.

L'idea nasce da un'idea legata a un certo tipo di persone e alle loro scelte, e dall'intuizione di un possibile parallelo con una epidemia. Non voglio dirvi molto di più, se non che ho deciso di regalarvi questa storia.

Eh sì: ve la regalo per diversi motivi. Per prima cosa si tratta di un racconto lungo, o romanzo breve, per cui non è facilmente commerciabile; e poi si allontana parecchio non solo dal mio stile abituale, ma anche dalle regole di composizione di un lavoro destinato al pubblico.

Per questo motivo pubblicherò un capitolo ogni settimana, al venerdì magari, in modo che abbiate un'intera settimana per abituarvi, per farvi venire la curiosità, oppure per insultarmi.

Fate voi, sapete che sono di larghe vedute.

Un abbraccio

mercoledì 9 dicembre 2015

L'SQL senza l'SQL

SQL, da pronunciare rigorosamente siquel, è l'acronimo di Structured Query Language.
È uno strumento fondamentale per interrogare e fare manutenzione del Data Base sulla maggior parte delle piattaforme software: DB2, Windows, Linux comprendono strumenti per utilizzare questo linguaggio. Ci sono piccole differenze di sintassi, ma nulla che non si possa superare con un minimo di attenzione.

Chi si occupa di manutenzione software, e ha bisogno di uno strumento veloce per analizzare un archivio, per fare ricerche, per controllare informazioni e fare modifiche "al volo", deve saperlo utilizzare, almeno per quanto riguarda le funzioni base.

Un caso plausibile

Ora, provate a immaginare una situazione come questa: il consulente arriva dal cliente, dotato di un sistema iSeries, fa un po' di analisi della situazione, e vede che deve modificare sull'anagrafico Clienti un campo che chiameremo "flag di cliente vecchio", per tutti quelli che non hanno ordini nell'ultimo anno.
Ovviamente il nostro consulente sa che per fare questo è sufficiente lanciare un unico comando SQL, qualcosa del genere

Update Clienti set Cliente_Vecchio='S'
where Codice_Cliente not in 

(Select Codice_Cliente from Ordini where data >= data_di_un_anno_fa)

Non è dei più semplici, ma in pratica mette il flag su tutti i clienti il cui codice NON compare nella lista estratta dal comando in parentesi, che contiene tutti i codici cliente che hanno un ordine a partire dalla data di un anno fa.
Più semnplice da capire che da spiegare :-)

Ora però il nostro consulente va sulla riga comandi, scrive STRSQl (start SQL) e riceve il messaggio: "SQL for DB2 not installed".

Accidenti, e adesso?

Ovviamente si dovrà scrivere un programma, sempre che il cliente abbia installato il compilatore RPG o Cobol, a seconda delle capacità specifiche del professionista.

Soluzione alternativa (e divertente)

Oppure si può risolvere in un modo più elegante e tutto sommato divertente, basta avere installato sul proprio PC il modulo Operation Navigator nella sua versione completa.

Selezionate la vostra macchina nella lista a sinistra, aprite il gruppo Database, quindi cliccate con il pulsante destro del mouse sul nome della macchina: si aprirà un menù contestuale come nell'immagine.
Selezionate Esegui script SQL...

Comparirà un pannello simile a quello riportato qui sotto, nel quale potete già vedere alcune cose interessanti: vediamole.

Innanzi tutto, nella parte superiore potete inserire un qualsiasi comando SQL, che verrà eseguito sul sistema iSeries selezionato. Dovete solo fare attenzione a scrivere i nom delle Tabelle nel formato libreria.tabella e non con quella standard dell'AS/400 con la barra tra nome della libreria e nome del file.


Una volta selezionato il pulsante  Esegui script, una piccola clessidra, vedrete il risultato nella parte inferiore, con tutti i campi scelti nella clausola select.






Conclusioni

Questa funzione permette di fare un sacco di cose, oltre all'esecuzione pura e semplice di uno script, per esempio la possibilità di salvare un comando dentro un file di testo, per poterlo riutilizzare sempre qui oppure sull'iSeries, con un semplice taglia-incolla.

Vi ho incuriositi?
Lo spero, e vi invito a usare questo "trucchetto": fatemi sapere le vostre opinioni e se scoprite qualcos'altro, fatemelo sapere, così potrò aggiungerlo qui (ovviamente prendendomene il merito... :-D)

Un abbraccio

lunedì 7 dicembre 2015

iSeries e chiavette USB

Non so quanti di voi abbiano mai pensato: "Ma a cosa servono tutte quelle prese USB sull'AS/400 se poi non si possono utilizzare?!"

Bene, le cose non stanno esattamente così, se avete un Power7 e almeno la V7R1.

Vi faccio la versione breve:

1) prendete una chiavetta USB (o un disco con porta USB, come volete)
2) controllate che il valore di sistema QAUTOCFG sia impostato a "1"
3) inserite la chiavetta (o il disco, ma da qui in avanti parliamo di chiavetta), nella porta USB
4) aspettate qualche secondo, quindi controllate che il device RMS01 esista
5) lanciate INZOPT NEWVOL('USB01') DEV(RMS01) CHECK(*NO) MEDFMT(*UDF)

Da questo momento in avanti, la vostra chiavetta (che ovviamente sarà stata "pulita" dall'inizializzazione) potrà essere usata come device di salvataggio di QUALSIASI cosa, basterà utilizzarla come unità ottica riscrivibile.
Quindi SAVLIB, SAVOBJ, SAVSYS.
Ovviamente, se RMS01 non vi piace, nessuno vi vieta di ridenominarlo come USB01.

Inoltre, essendo un device accessibile da IFS, potrete utilizzarlo come target IMGCLG, quindi, tanto per fare un esempio, potrete creare un IMGCLG sulla chiavetta, definendolo come "virtual tape", e farci i vostri preziosissimi salvataggi serali, quadagnandoci in velocità e sicurezza.

Solo la fantasia può frenarvi, a questo punto!

Aggiungo che la chiavetta, formattata in questo modo, sarà perfettamente leggibile anche da PC e da MAC.

Cosa volete di più?

mercoledì 5 agosto 2015

Qualche trucco con le DS #2

Ieri vi ho raccontato cosa sono le DS qualificate, lasciandovi con la promessa di un altro trucchetto divertente. Siccome sono una persona di parola, eccomi qui :-)

Riprendiamo l'esempio con le due DS dell'esempio di ieri:

DDataGMA           DS               Qualified
D Giorno                       2S 0
D Mese                         2S 0

D Anno                         4S 0
DDataAMG           DS               Qualified
D Anno                         4S 0
D Mese                         2S 0

D Giorno                       2S 0


Essendo entrambe qualificate, i nomi dei campi possono essere duplicati.
Vi avevo anche messo un semplice esempio di come possono essere utilizzati: rivediamolo.

//free
    DataAMG = DataDaInvertire;
    DataGMA.Anno = DataAMG.Anno;
    DataGMA.Mese = DataAMG.Mese;
    DataGMA.Giorno = DataAMG.Giorno;
    DataInvertita = DataGMA;
//end-free


Ma qui scatta il giochino interessante.
Nel linguaggio COBOL esiste un codice operativo chiamato MOVE CORR che sposta tra due strutture dati i campi che hanno lo stesso nome. Cominciate a intravedere la possibilità?
Bene, nel linguaggio RPG non esisteva un codice operativo simile, fino a quando non è arrivato l'ILE. Grazie al codice EVAL-CORR diventa possibile scrivere l'istruzione sopra in un modo ancora più semplice:


//free
    DataAMG = DataDaInvertire;
    Eval-corr DataGMA = DataAMG;
    DataInvertita = DataGMA;
//end-free

Non male, vero?
Il fatto è che, a differenza di uno spostamento tra due DS generiche, questo comando permette di spostare SOLO i campi che esistono in entrambe le DS: se ci sono delle differenze, i campi o non vengono spostati perché mancanti nella DS di arrivo, oppure rimangono vuoti per ché mancanti nella DS di partenza.
Occorre prestare attenzione ai campi presenti nella DS di arrivo e non in quella di partenza, perché in quel caso vengono inizializzati a "NULL", valore che potrebbe non essere voluto. Eventualmente potete far precedere il EVAL-CORR da un RESET della DS.

Qui ho usato la codifica in formato free, ma si può usare anche con la solita forma a tracciato fisso.

Provateci e divertitevi :-)

martedì 4 agosto 2015

Qualche trucco con le DS #1

Tutti i programmatori RPG conoscono e usano con profitto le Strutture Dati.
Queste infatti danno la possibilità di impostare i dati in modo organizzato, e di accedere alle informazioni con semplicità, riferendosi o al singolo campo, o all'intera struttura.

Vediamo un esempio piuttosto semplice

DDataGMA           DS              
D Giorno                       2S 0
D Mese                         2S 0

D Anno                         4S 0

Qui possiamo fare riferimento ala DS "DataGMA" per passarla come parametro a un altro programma (che ovviamente dovrà riceverla e avere una DS uguale), oppure riferirci ai suoi campi interni, o sottocampi.

Una cosa da tenere presente è che nell'RPG ILE, i campi devono essere univoci, per cui in un'altra DS non potremo avere un altro campo che si chiama "ANNO".

A meno che non usiamo un trucchetto simpatico e, a mio avviso, molto utile, che ci permetterà per prima cosa di rendere più comprensibili i nostri programmi, e per seconda di utilizzare un codice operativo nuovo (nell'RPG) che arriva direttamente dal cugino COBOL.

Ma andiamo con ordine: come facciamo a definire gli stessi campi in due DS diverse?
Semplicemente mettendo, a livello della definizione della DS, nell'area dedicata alle parole chiave, il comando QUALIFIED.
Questa istruzione ha l'unico difetto di obbligarci di riferirci ai vari campi indicando anche di quale DS fanno parte.

Quindi supponiamo di avere, oltre alla DS indicata prima, quest'altra:

DDataAMG           DS               Qualified
D Anno                         4S 0
D Mese                         2S 0

D Giorno                       2S 0

Entrambe devono avere la dicitura "qualified", ovviamente.
Bene, e ora?

Ora possiamo scrivere questo:

//free
    DataAMG = DataDaInvertire;
    DataGMA.Anno = DataAMG.Anno;
    DataGMA.Mese = DataAMG.Mese;
    DataGMA.Giorno = DataAMG.Giorno;
    DataInvertita = DataGMA;
//end-free

Mi sembra molto chiaro cosa stiamo facendo, no?

Se invece di una data trattiamo con dati anagrafici, per esempio, potremmo avere una DS come questa:

DCliente           DS               Qualified  
D Cognome                     50A 
D Nome                        30A

D DataDiNascita               8S 0  

A questo punto, nel nostro programma potremo riferirci (dovremo, n realtà), riferirci ai vari campi come

Cliente.cognome
Cliente.nome
Cliente.DataDiNascita  

Già questo è piuttosto interessante, ma c'è una cosetta che può tornarci molto utile: il fatto che i campi di una DS possono riferirsi a un'altra DS.
Detta così sempra una fesseria, ma provate a pensare alla DS del Cliente in questo nuovo modo:

DCliente           DS               Qualified  
D Cognome                     50A 
D Nome                        30A

D DataDiNascita                     LikeDs(DataAMG)
 Uhm, mi sembra di vedere la perplessità sui vostri volti, e una domanda sul vostro crapino: "Bello, ma a cosa serve?".
Diciamo che, anche se non indispensabile, permette di riferirsi ai vari campi in questo modo:

Cliente.Cognome
Cliente.Nome
Cliente.DataDiNascita.Anno
Cliente.DataDiNascita.Mese
Cliente.DataDiNascita.Giorno

Ridondante? Forse, anzi probabilmente lo è. Ma sfido chiunque a NON capire a cosa si riferisca un campo che si chiama Cliente.DataDiNascita.Anno!
Sempre meglio di CLDNA, tanto per dire :-)


Naturalmente qui potrete sbizzarrirvi come preferite.
 Giocateci un po' e vedrete quante belle cose si possono fare.

Domani vi racconto di quello che si può fare con due DS qualificate.  

giovedì 2 luglio 2015

L'SQL senza l'SQL, parte terza

Come vi avevo promesso nella scorsa puntata, voglio ancora parlarvi di una funzione piuttosto interessante del modulo "Script SQL" presente nell'Operation Navigator.

Salvare i risultati

Normalmente l'SQL viene utilizzato come strumento di analisi e di modifica "al volo" dei data base.
Ma come possiamo fare se desideriamo salvare il risultato di un'estrazione?

La cosa, come vedremo, è piuttosto semplice e permette di ottenere un discreto risultato.

Per prima cosa, osservate la barra menù nella parte superiore, e trovate la voce Opzioni. Cliccateci, e verificate che il nome "Consenti salva risultati" sia flaggato con un segno di spunta a sinistra. Se non lo è, ovviamente, cliccateci.

Adesso preparate il vostro comando SQL, magari utilizzando il "wizard" di cui abbiamo parlato la scorsa volta, ed eseguitelo premendo ctrl-R, oppure il tasto a forma di clessidra nella barra dei comandi.
Nella parte inferiore apparirà il risultato.

A questo punto parte la cosa divertente: premete con il tasto destro del mouse, e scegliete Salva risultati, oppure premete ctrl-S, e vi comparirà uno schermo simile a quello riportato qui sotto.


Mi sembra che ci sia pochissimo da spiegare, no?

Come al solito vi invito a giocare con questa soluzione, e a farmi sapere cosa ne pensate.

Alla prossima

lunedì 29 giugno 2015

L'SQL senza l'SQL, parte seconda

Come spesso capita, l'appetito vien mangiando, e giocando con l'applicazione di cui abbiamo parlato nello scorso post, sono saltate fuori alcune opzioni interessanti.

Una mano nella creazione del comando

Come avviene anche nella versione "a caratteri" dell'SQL, è possibile richiedere un ausilio alla creazione del comando da eseguire.
Posizionatevi nella parte superiore del pannello, e premete il tasto standard per la richiesta del "prompt" su iSeries, l'F4. Vi si aprirà una nuova applicazione che, in modo molto semplice, vi guiderà nella selezione della libreria, del file, dei campi da selezionare, delle condizioni where, di raggruppamendo e di ordinamento. Potrete scegliere tra SELECT, INSERT, UPDATE e DELETE, quindi, praticamente, su tutto quello che vi può servire.
Per tutti gli altri comandi (create, drop, eccetera) non c'è un ausilio, ma sono comunque supportati.

Una funzione interessante è il Unisci Tabelle, che si attiva nel caso ci siano più tabelle selezionate.


Mediante questo piccolo pannello, è facile selezionare i campi di unione tra i due (o più) file, e stabilire il tipo di unione mediante il comodo "combo", oppure con il tastino "tipi di unione...", che permette di comprendere meglio il "modo" con cui l'SQL unirà le due tabelle.

Notate che, man mano che compilate il comando, questo si compone nella parte inferiore, in modo che possiamo tenere sotto controllo quello che stiamo facendo.

Conclusioni

Ecco un altro motivo per preferire questo sistema al "vecchio" (ma sempre valido, per carità!) terminale a caratteri.
Giocateci e divertitevi, domani vi scriverò un'altra interessante funzione di questo modulo.

Un abbraccio

venerdì 3 aprile 2015

La sindrome della sinistra

No, niente politica, per carità!

Politica, fede calcistica, miti musicali e gusti sessuali sono argomenti sui quali è facilissimo scivolare e battere la testa, scatenando un putiferio di "io ho ragione!", "no, ho ragione io!", "ma io ho più ragione di te!" che non concludono nulla.

La "sindrome della sinistra" di cui volevo parlarvi, è una nuova malattia che, a quanto pare, colpisce gli automobilisti.
La potete facilmente notare viaggiando su una strada qualsiasi, che abbia una dimensione tale da permettere a due vetture di procedere affiancate. Indipendentemente dalla presenza o meno della riga di separazione tra le corsie, che quanto meno potrebbe giustificare il comportamento di cui vi sto parlando, molto automobilisti tendono a viaggiare in prossimità del centro della carreggiata.

Per quale motivo, mi chiedo?
Be', volendo essere generosi, ci sono diversi motivi:

  1. a destra ci sono le macchine parcheggiate e, spesso, quelle in seconda fila;
  2. visto che stanno tutti a destra, stando a sinistra ho una visuale migliore;
  3. uhm...
Finiti i numerosi motivi, direi.
Sul fatto delle macchine in seconda fila, purtroppo hanno pure ragione.
Sul secondo punto, invece, direi proprio di no: se non altro perché sono TUTTI a sinistra!

E se questo capita nelle strade larghe, ma "monocorsia", la follia regna sovrana in quelle dove ci sono due, tre o addirittura quattro corsie, ben segnalate.
Se le corsie sono due, a destra ci sono i camion e a sinistra le macchine. E va bene.
Se sono tre, cioè la maggioranza delle autostrade e delle tangenziali, si assiste a questo fenomeno:
  • nella corsia di destra i camion più veloci e pochi furgoni;
  • nella corsia centrale le macchine meno veloci e quasi tutti i furgoni;
  • nella corsia di sinistra tutti gli altri.
Ora, poiché di macchine "meno veloci" sono rimaste solo le vecchie Panda, le Uno e qualche Centoventisette, questo vuole dire che nella corsia di sinistra ci sono praticamente tutte le vetture presenti nella strada. E tutte in coda!
Lo potete verificare in qualsiasi momento, facendo un giro.

Ma, e qui scatta la follia, questo fenomeno si verifica anche quando, di sabato e domenica, i camion nella corsia di destra NON CI SONO!
Meraviglioso: si vedono macchine tranquille in centro, macchine veloci a sinistra, e la corsia di destra perfettamente sgombra!

A questo punto parte il divertimento: viaggiare nella corsia di destra diventa estremamente fluido, senza grossi problemi (se trovate una Uno, basta sorpassarla normalmente, visto che la corsia centrale è comunque piuttosto libera), e anche rilassante.
Prima di scatenare dibattiti e denunce per incitamento alla ribellione, voglio ricordarvi che è vero che è vietato il sorpasso a destra, ma il "sorpasso" è, tecnicamente, essere dietro a una vettura, spostarsi di corsia, superarla e tornare nella corsia di prima; se procedete in una corsia senza spostarvi, NON si parla di sorpasso, ma superamento o sfilamento ;-)

Provate, e fatemi sapere.

Ciao, e alla prossima

domenica 13 luglio 2014

Le caratteristiche dei musicisti

Batterista

È la base ritmica di qualunque gruppo moderno. Deve sapere andare a tempo, sia sui pezzi veloci che su quelli lenti, infilare qualche "carineria" ogni tanto, e sapere far frullare le bacchette tra le dita.

 

Bassista

Insieme al batterista costituisce la base ritmica del gruppo, e fa da collegamento tra il ritmo e la melodia, fornendo la base tonale del pezzo. Deve essere preciso come il batterista e saper fare qualche piccolo assolo. Non troppi però. Ottimo se riesce a cantare qualche coro.

 

Chitarrista

È l'anima del gruppo.Deve conoscere gli accordi per poter fare accompagnamento, ma non è indispensabile; quando fa "i solo" deve essere veloce e preciso, ma anche se sbaglia qualcosa è comunque coperto dalla distorsione, e se è abbastanza bravo, l'errore diventa "stile".

 

Cantante

Di solito è anche il "front line man" del gruppo, quello che va avanti e indietro toccandosi l'inguine per fare scena. Ovviamente deve sapere cantare, con un'estensione decente, e magari anche suonare un po' di chitarra, ma non è indispensabile.

 

Tastierista

È necessario che il suo set di suoni comprenda un ottimo pianoforte classico, che deve saper suonare come Pollini, un Honky Tonk da usare come e meglio di Keith Emerson, un piano elettrico col quale emulare Ray Charles, strings che simulino il meglio possibile la London Simphony Orchestra oppure Uto Ughi a seconda del contesto, tappeti di pad uguali (uguali, non simili) a quelli di Vangelis (almeno un paio di dozzine), fiati che siano il più possibile uguali a quelli della Blues Brother Band.
Ovviamente in alcuni brani questi suoni devono essere utilizzati contemporaneamente, o almeno a gruppi di tre o quattro per volta. Il concetto "ho solo due mani" non è una scusa accettabile.
Deve conoscere le proprie tastiere fino all'ultimo bit, collegarle con un PC (meglio un Mac) che lo aiuti a preparare le basi indispensabili per il suo lavoro, visto che "ho solo due mani" sarà anche una scusa poco accettabile, ma è comunque un limite fisico difficilmente superabile.
Deve arrivare per primo ai concerti perché ha un sacco di roba da montare, ma per fortuna, dopo averle montate, non deve accordarle, così può lasciare il posto agli elementi importanti del gruppo (vedi sopra).
Spettacolo non ne fa molto, perché è bloccato dietro alle tastiere (in realtà anche il batterista, ma anche questa NON è una scusa accettabile). Esistono tastiere da portare a tracolla, ma si possono utilizzare solo per fare qualche mini assolo: poi deve tornare al suo posto, per lasciare il palco a cantante, chitarrista e bassista.
In realtà il tastierista non ha grande utilità, se non per rari momenti. E poi, tanto, suona con le basi.

sabato 8 marzo 2014

OttoMarzoFestaDellaDonna

Otto Marzo, festa della donna.
Ormai è una specie di modo di dire, si pronuncia tutto di seguito, fateci caso: "ottomarzofestadelladonna".
Così, senza pause.

Personalmente la trovo una "festa" un po' inutile, specialmente per come viene normalmente vissuta da molte (non tutte) le rappresentanti del gentil sesso. Ubriacature, spogliarelli, altre stronzate di questo genere, come se essere "emancipate" sia uguale a essere "volgari".
Ovviamente non tutti si comportano così: qualcuna, anche se sbagliando, ricorda che si tratta della commemorazione di una tragedia (nel 1911 un incendio in una fabbrica di camicie uccise 123 donne e23 uomini), e che, a parte questo piccolo errore che comunque ci può stare, è un'occasione per ricordare le tante lotte che le donne hanno fatto per riuscire a essere considerate qualcosa di più che fattrici, amanti e lavoratrici domestiche a basso costo.

Quello che mi chiedo è: c'è proprio bisogno di una "festa" per ricordare che una buona metà della popolazione ha dei diritti che non vengono rispettati?
Probabilmente non basta la cronaca giornaliera, che parla di una media di due donne al giorno che vengono picchiate, violentate, uccise da uomini che, subito prima, le hanno guardate negli occhi e gli hanno detto "ti voglio bene", se non addirittura "ti amo". Non basta, perché quelle sono cose che capitano agli altri, lontano dalla nostra normale realtà quotidiana, come i bambini che muoiono di fame in Africa, o i "ninos de rua" in Brasile, o le donne nascoste dai chador che non hanno il diritto di guidare.

E allora, questa festa è necessaria?
La risposta non può che essere "Sì!", con il punto esclamativo.

Ma non l'8 Marzo, non solo.