Focalizza e migliora le tue competenze in qualsiasi ambito con la libreria javascript DRAGDEALER!

web designer umbria

Analizziamo il progetto implementato all’ indirizzo https://www.farwebdesign.com/projectdragdealer/ dove un gruppo di indicatori ognuno personalizzato ad indicare una disciplina, una materia, una conoscenza da far propria e assimilare si muovono FACENDO SOLO TRE PASSI una volta afferrati e trascinati (IN ALTERNATIVA si può ANCHE CLICCARE SULLA PARTE CENTRALE O FINALE PER SPOSTARLI senza dover trascinare gli elementi afferrandoli). Siamo di nuovo nell’ area di esplorazione tecnica del DRAG and DROP quindi, del trascina e rilascia, un tema caldo per tutti i frontend developer che devono sapersi destreggiarsi sull’ interattività dell’utente a video tramite javascript e jquery. A volte si hanno già a disposizione delle librerie esterne che se implementate diventano l’equivalente del signor WOLF di Pulp Finction, ossia risolvono i problemi in maniera indipendente (è questa la principale differenza tra framework e libreria, la prima mette a disposizione un ambiente di sviluppo connaturato al progetto che si deve mettere in piedi, vedi per esempio metodi messi a disposizione per bootstrap sulla parte grafica di stilizzazione o codeigniter per la parte di sviluppo php, mentre l’implementazione di una semplice libreria come per esempio https://github.com/fzaninotto/Faker che serve a generare contenuti fittizi per riempire dei prototipi, che magari arriveranno in produzione solo in un secondo momento, ha il solo e semplice scopo di risolvere un problema specifico). Prendiamo ad esempio la libreria DRAGDEALER scaricabile all’ indirizzo https://github.com/skidding/dragdealer che assolve a diverse funzioni di trascinamento, come si conviene alla sua traduzione letterale che ha a che fare appunto con l’invocazione che suona come commerciante di trascimanto (attenzione a non confonderlo con drugdealer!). Qui ci sono tutti i metodi in javascript per muovere degli oggetti (certamente l’uso di JQUERY UI è sempre da mettere in primo piano quando si vuole droppare qualcosa perchè il motto di questa tecnologia è scrivere meno, fare di più!) e ne vediamo un esempio lampante, dove il sottoscritto simulando una serie di competenze che fanno un percorso verso l’eccellenza (ci sono tre stedi, come i tre scatti del mouse durante il DRAG and DROP) passando dalle materie che sono da acquisire nel proprio skill per completare il proprio ruolo (nel mio caso quello di frontend developer ma può variare in base ai settori di competenza, non esclusi quelli sportivi dove le aree di miglioramento su dove intervenire non sarebbero penalizzate in una visualizzazione grafica, anzi, ne otterrebbero solo un grande beneficio) come punto di partenza per arrivare alla fascia intermedia dell’ approfondimento e delle conoscenza della tecnologia specifica, per approdare allo stadio finale dove il bruco diventa farfalla e ha assimilato nel suo iter in working progress tutti i target focalizzati nella mission iniziale. I movimenti del cursore grazie a una facile personalizzazione, sono facilmente variabili a seconda delle proprie esigenze, in questo caso la scelta di camminare solo tre volte per il bottone iniziale che si sposta orizzontalmente era in sintonia con la cover di sfondo che appunto contrassegna tre aree diverse di lavoro. In ultimo è stato inserito anche un operatore di avanzamento con caratteristiche diverse, che segnala la percentuale lungo il suo percorso in maniera dinamica. Questo è molto utile per fare una fotografia dello stato dell’ arte e rendersi conto a quale priorità dare alle materie che necessitano di interventi di acquisizione rapida per arrivare a centrare prima l’obiettivo. Il consiglio è quello di fare largo uso degli indicatori di avanzamento e molto altro messi a disposizione dalla libreria DRAGDEALER in tutti gli ambiti e le discipline, perchè la visualizzazione grafica sugli interventi da fare nel proprio settore per migliorare magari delle aree difettose è molto produttiva in termini di energie canalizzate nel modo migliore. L’esperimento di Umbriaway Consulting per implementare la libreria esterna e vedere l’effetto che fa all’ indirizzo https://www.farwebdesign.com/projectdragdealer/ ha finito anche per essere utile dal punto di vista pratico (il difetto delle scienze informatiche è che se sono disgiunte dalla quotidianità delle cose concrete perdono un pò il loro fascino e diventano noiose oltre che inutili in termini di tempo speso per imparare a padroneggiare la tecnologia) e non solo dal punto di vista didattico.

Ho comprato 3 libri di scacchi sulla pirc e 6 sulla owen per distribuirli ai miei alunni: allora stai programmando con un linguaggio che non è scomparso con i dinosauri!

Python è un linguaggio largamente diffuso e anche antico se vogliamo. Nato tra gli anni ottanta e novanta il suo modo di esprimersi ispira anche aggettivi come PYTHONIC per indicare un gergo incisivo. Si tratta di un linguaggio non compilato, quindi INTERPRETATO, viaggia su tutte le piattaforme e possiamo anche pensare di programmare ad oggetti. Pyton ha una struttura dati intermente basata su oggetti. Posso anche inserire moduli esterni nella nostra piattaforma di lavoro é quindi estensibile. Viene definito general-purpose ossia fuori dai contesti tradizionali, quindi si può integrare in qualunque campo. Può dare qualsiasi contributo in ogni tipo di progetto. E’ molto usato nei big data, flussi e analisi dati su larga scala. Usa i database e Python non è mai escluso ancora oggi dall’ utilizzo pratico. Si usa molto nel Machine Learning per obbligare una macchina a compiere le nostre acrobazie. Python ha una sintassi particolare, scarnificata all’ osso, non si vedono parentesi graffe per definire blocchi di codice, con la sola identazione si definiscono le istruzioni. Quindi salta subito all’ occhio una maggiore leggibilità. Usa in maniera invasiva solo i due punti e questo significa maggiore velocità nello scrivere codice e anche facilità di comprensione nel leggerlo. Python usa una console interattiva e questo rende felice molti programmatori che potranno invocare con il comando pyton la nostra interfaccia shell. Ci verrà mostrata la versione e siamo già pronti all’ utilizzo, ad esempio possiamo usare lo spazio come una calcolatrice del tipo 2 + 3 che definisce uno spazio di elaborazione. Per stampare in output una stringa usiamo print (‘ciao mondo’). Poi molto diffusa é la funzione help() che ci supporta per compiere determinate operazioni. Con quite() siamo di nuovo usciti dalla shell interattiva di Python. Quindi se volessi stampare a video il mio primo programma ufficiale nella forma più distorta per esempio? Ecco: print(‘il mattino ha l’oro in bocca’) . Ok ma ripartiamo dall’ inizio intanto andare su https://www.python.org/ dove c’è la sezione download e scarichiamo la versione giusta per noi che ci viene proposta dove alla fine si indirizza l’installatore verso https://docs.python.org/3.8/tutorial/ ; Il programma verrà installato in C:\Users\nomeutente\AppData\Local\Programs\Python\Python38-32 ; quando siamo sulla macchina ci accorgiamo che sul menù lista delle applicazioni in basso a sinistra ha aggiunto Pyton e che dentro ci sono varie opzioni oltre al manuale e la shell ide oltre la tradizionale finestra richiamabile da cmd. Noi clicchiamo sulla shell ideo o l’altra e siamo dentro. Se per esempio vorrei delucidazioni su come usare il comando print posso digitare:

>>> help(print)
Help on built-in function print in module builtins:

print(…)
print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
>>

il vantaggio di lavorare sulla ide è che posso avere in alto la famosa barra dei menù dove posso produrre per esempio dei file esterni digitando per esempio nuovo e scrivendo al suo interno le istruzioni, per esempio print (‘il mattino ha l’oro in bocca’), scelgo dove salvare e per eseguire faccio open semplicemente da ide (ambiente di sviluppo integrato). Per eseguire il programma devo andare sul menù RUN e scelgo la prima azione RUN MODULE al chè lui parte ad elaborare il contenuto della nostra istruzione che in fase di esecuzione di darà errore! Perché? Ci segnala una anomalia sull’ apostrofo che ovviamente crea conflitti con gli altri due apostrofi che delimitano la stringa. Noi che conosciamo PHP a livello condominiale abbiamo intuito che per risolvere il problema bastava inserire un carattere di escape correggendo l’istruzione in print(‘il mattino ha l\’oro in bocca’) e a video comparirà come per magia il risultato finale di tutte le nostre elucubrazioni:

================== RESTART: C:\Users\Nomeutente\Desktop\oro.py ==================
il mattino ha l’oro in bocca
>>>

Ricordiamo che in rete ci sono ottimi siti che spiegano bene questo primordiale linguaggio di programmazione, come per esempio https://www.w3schools.com/python/default.asp; il comando eseguibile può essere lanciato anche dall’ esterno per esempio desktop digitando pyton nomefileconestensionepy oppure in altri casi python seguito da nome versione e nome file. Può accadere che in fase di installazione vengano riscontrate delle problematiche sul path del file windows che manda in esecuzione i programmi. In questo caso come consigliano sempre i tecnici più pagati che quando vengono interpellati suggeriscono di spegnere e accendere il computer per resettarlo, noi ci limitiamo a suggerire di cercare in rete le risposte da parte di chi ha affrontato l’analogo problema. Bè adesso possiamo alzare il tiro, facciamo un programma serio che chiede una informazione e mi rispedisce indietro una affermazione, scriverò quindi nel mio file caruana.py:

name = input(‘Ciao, come ti chiami?\n’)
print (‘Bravo se non andavi in America restavi terza naz eh %s.’ % name)

quando mando in esecuzione il tutto lui prima mi chiede il nome e poi arriverà una frase di ritorno come un boomerang, a video vedrò:

================ RESTART: C:\Users\Umbriaway\Desktop\caruana.py ================
Ciao, come ti chiami?
Fabiano
Bravo se non andavi in America restavi terza naz eh Fabiano.
>>>

Portentoso questo linguaggio sembra di giocare con il basic dell’ era dinosauri! Adesso ci stiamo provando gusto proviamo qualcosa di più forte:

prices = {‘pircbook’: 12.40, ‘owenbook’: 11.50}
my_purchase = {
‘pircbook’: 3,
‘owenbook’: 6}
book_bill = sum(prices[book] * my_purchase[book]
for book in my_purchase)
print (‘I owe the pusher $%.2f’ % book_bill)

sostanzialmente sono andato dal libraio di fiducia a comprare un pò di libri di scacchi da distribuire ai miei alunni e a video verrà emessa la fattura:

================== RESTART: C:/Users/Umbriaway/Desktop/wow.py ==================
I owe the pusher $106.20
>>>

per una analisi dettagliata della sintassi base di Python rimandiamo a una prossima sintassi con un altro post tematico sui portali Umbriaway Consulting, per ora abbiamo fatta parecchia strada, abbiamo visto come installare, come scrivere i primi programmi, come salvarli su file esterni e mandarli in esecuzione. Roma non è stata costruita in un giorno. Per sparare un satellite su Plutone con Pyton serve ancora da guardare in dettaglio la sintassi!

Come rendere un primordiale acronimo CRUD interessante e coinvolgente con HTML, CSS, BOOTSTRAP, PHP e MySQL!

Quello che può fare un semplice CRUD con PHP e MySQL ha del miracoloso! CRUD è l’acronimo di C-REATE R-EAD U-PDATE D-ELETE ossia le quattro operazioni base che un web developer junior inizia a conoscere quando si inserisce verso la meta del web developer senjor. Un CRUD è l’essenza di un applicativo che legge i dati con la famosa query SELECT (quindi READ), che aggiorna i dati con la famosa query UPDATE, che cancella i dati con la query o il comando DELETE e che legge i dati con la quintaessenza della programmazione dinamica: una semplice query SELECT, un imperioso comando che costringe la pagina a piegarsi alla volontà del suo creatore sciorinando dati a destra e a manca! Okweb developer umbria ma bando alle chance e parliamo di cose concrete e pratiche. Nell’ applicativo costruito tenendo come base un CRUD sono state inserite diverse funzionalità aggiuntive che abbelliscono il tutto anche con i ccs. L’applicativo ha uno scopo, quello di permettere a un giocatore di scacchi di fissare il suo repertorio di aperture per studiarle, quindi l’esempio del CRUD calza a pennello per lanciare un messaggio chiaro e ineluttabile: il CRUD nasce per soddisfare a esigenze concrete del quotidiano, poco importa che sia lavoro o svago piuttosto che economia locale o della comunità europea. Vediamo come nasce l’applicativo. E’ chiaro che la prima parte della costruzione dell’ architettura è già svelata: l’utente deve essere in grado di modificare i suoi dati dopo averli creati e anche di aggiornali e cancellarli se durante lo studio delle sue aperture scacchistiche qualcosa nopn gli sconfifferà. Il problema piu angosciante per un aspirante web developer junior è: e adesso come faccio a fare la connessione con il database? Intanto devo poter disporre di un DB in rete o in locale (essendo un applicativo disegnato sulle esigenze personali può funzionare anche solo con XAMP) poi ho bisogno di un editor per creare i file che non saranno tanti come si può intuire visto che l’applicativo avrà bisogno di una index che legge i dati in ingresso, di una pagina ADD che inserisce i dati creati, di una che fa l’aggiornamento UPDATE, di una che cancella impartendo il comando DELETE. Ma prima di fare questo dobbiamo studiare la struttura del database che in questo caso avrà quattro campi:

  • una chiave primaria autoincrementante progressiva definita classicamente come intero ID
  • un campo nel quale scriveremo la prospettiva di studio del nostro impianto di gioco, ossia se vogliamo focalizzarci dalla parte del bianco o del nero con un campo stringa definito come COLORE
  • un campo o colonna definito come NOME per indicare il tipo di apertura che voglio giocare e studiare come stringa nel tipo di dato e lunga un centinaio di caratteri, come il precedente colore.
  • un campo descrittivo che ha le stesse caratteristiche delle ultime due COLORE E NOME ribattezzato DESCRIZIONE che avrà questa volta un ampiezza di dati large ossia trecento caratteri

OVVIAMENTE prima di fare queste definizioni all’ interno del DB servirà un nuovo database da creare entro il quale bisogna costruire una tabella che conterrà i nostri dati definiti dai nomi di campo o colonna descritti sopra.

Formalizzata questa semplice questione del database in dieci minuti, non ci resta che creare le pagine. Risolviamo subito la questione del collegamento ai dati nel file db, dove andrò a istanziare una variabile a cui verrà applicata il metodo connect che prende quattro parametri ossia chi è il server, come si chiama l’utente che si collega sulla macchina, quale pwd utilizza e infine dove va l’utente fisicamente in quale database, nel mio caso:

$db = new Mysqli;

$db->connect(‘localhost’,’root’,”,’crud’);

if(!$db){
echo “error”;
}

Abbiamo aggiunto anche un prototipo di controllo da perfezionare che dice: se la variabile è diversa da $db, ossia se non vede al suo interno dei dati, restituisci un messaggio di errore che ci avvisi di un malfunzionamento. Questa funzione andrebbe migliorata e ampliata ma al momento limitiamoci a stare dentro le tematiche del CRUD. Quindi il problema è risolto perchè ora sulla pagina index scriverò l’inclusione a questa pagina con:

<?php include ‘db.php’; >

con queste due semplici operazioni, ossia la creazione dei parametri di collegamento e l’inclusione alla pagina che leggerà i dati (READ nel paradigma acronimo crud) abbiamo praticamente fatto tanta roba! A questo punto non ci resta che impartire i nostri comandi SQL sul database, ossia per leggere i dati uso una SELECT espressa in queste modalità $sql = “select * from nometabella, ossia sto dicendo alla macchina di tirarmi fuori tutti i dati (asterisco o carattere jolly) dalla tabella che li contiene. Ora a livello di idea progettuale ne consegue che ogni pagina del CRUD avrà la sua query:

nella index.php: $sql = “select * from tasks
nella pagina add.php : $sql = “insert into nometabella (colore, name, descrizione) values (‘$colore’,’$name’,’$descrizione’)”;
nella pagina delete.php: $sql = “delete from tasks where id = ‘$id'”;
nella pagina update.php: sql2 =”update nometabella set colore=’$colore’, name=’$task’, descrizione=’$descrizione’ where id =’$id'”;

Per poter passare da una pagina all’ altra i valori da modificare o da aggiornare hanno bisogno di fare riferimento a un ID univoco che viene passato tra le pagine appunto e che ricade sulla pagina di interesse, ecco perché vediamo la clausola where id = ‘$id’, ossia fai questa operazione dove id è uguale al record corrispondente. La cattura dei valori degli id avviene con questo meccanismo o variabile GET:

$id= (int)$_GET[‘id’];

$sql = “select * from nome tabella where id=’$id'”;

Ora a grandi linee un CRUD ha questa impalcatura, è chiaro che poi ci saranno delle tabelle che raggruppano i dati, è palese che serviranno i tag HTML da intercalare con quelli PHP per recuperare i valori dei dati dopo aver fatto la classica FETCH con espressioni del tipo:

<input type=”text” required name=”descrizione” value=”<?php echo $row[‘descrizione’];?>” class=”form-control”><br/>

dove in questo caso abbiamo fatto quello che in VUE si chiama PROPS ossia iniettare i dati all’ interno del nostro campo di testo descrizione nell’ espressione: value=”<?php echo $row[‘descrizione’];?>” situazione che andrà ripetuta per tutte le circostanze anche per i campi nome e apertura.

Sostanzialmente le basi del crud sono legate appunto alle quattro semplici query che formano una base solida sulla quale appoggiarsi per costruire belle applicazioni: in questo caso sono state implementate anche funzionalità di paginazione (comunque complicate perchè la pagina va segmenetata in record quando si supera un certo limite di inserimento), stampa e ricerca tutte situazioni che arricchiscono ulteriormente con i CSS e l’immagine di background in modalità cover di sfondo le funzionalità delle mie creazioni. L’articolo vuole solo offrire un potenziale di sviluppo sulle modalità espresse dalla tecnologia PHP MYSQL CRUD senza entrare nei dettagli della costruzione che comunque è ridotta all’ osso, ma esteticamente aggraziata grazie al framework responsivo BOOTSTRAP (facile da riconoscere per il colore dei bottoni): sei file con l’aggiunta di una immagine ma con elementi grafici come finestra modale e altro da non sottovalutare. Se volessi crescere ulteriormente con la mia applicazione dovrei implementare altri parti tipo: prima di cancellare posso aprire una finestra di dialogo che dice all’ utente di fare attenzione e di essere consapevole di quello che sta facendo? E se volessi ordinare i dati delle colonne come faccio con php e mysql? E’ roba per web developer senior? Volendo integrarie tecnologia AJAX con JQuery per rendere la modalità di visualizzazione dei dati asincrona per non andare incontri a rallentamenti rendering del client potrei farlo? Ce la posso fare?

Buon CRUD a tutti!

Sei STATIC? Allora dovresti fare ginnastica: OOP e PHP, perché i richiami alle variabili statiche offrono flessibilità alle applicazioni, settima puntata

Nelle ultime puntate di OOP e PHP come https://umbriawayincrementa.wordpress.com/2020/04/22/pubblico-o-privato-questo-non-e-un-film-sugli-enti-dislocati-sulla-penisola-ma-oop-e-php/   abbiamo esplorato il potenziale offerto dai progetti che presentano una visibilità delle variabili (o proprietà) pubbliche o private, dipende molto anche dalle caratteristiche del progetto. A questo punto c’è una nuova parola che entra in scena STATIC. Ma di che stiamo parlando? Supponiamo che nella nostra classe GM debba trovarmi nella necessità di creare un account utente per un sito che ospita un area riservata magari con dei servizi a pagamento. Sappiamo che le classi hanno la funzione di proporre una riutilizzabilità del codice per cui potrei usare la classe ACCOUNT anche in altri progetti, quindi inizierò ad avere una classe che ospiterà un paio di variabili canoniche del tipo username e password:

class Account
{
private $username;
private $password;

}

supponiamo che ogni volta che un oggetto si istanzi su questo oggetto io voglia tenere il conto delle nuove istanze istanziate (è un gioco di parole ma rende l’idea). Quanti nuovi oggetti sono stati creati su quella classe? Sappiamo che una classe è un qualcosa di unico nel suo genere e che non possiamo prendere come riferimento ogni oggetto per fare un conto centralizzato del numero che ci interessa, quindi per forza dovremmo introdurre all’ interno della classe una proprietà universale che ha un valore assoluto che mai verrà modificato. Quindi ci viene in aiuto il nostro STATIC, una parola chiave che fa proprio al caso nostro perchè conosciamo i limiti dei metodi private perché leggono solo i membri privati dove vengono definiti, mentre in questo caso la nostra esigenza è un altra, ci serve una variabile contatore che si incrementa ogni volta che una nuova istanza viene creata. per cui iniziamo a introdurre una nuova voce nella nostra classe, private static $count;

class Account
{
private $username;
private $password;
private static $count;
}

A questo punto ci serve un metodo che prende in ingresso l’oggetto istanziato e lo incrementa ogni volta che l’operazione di un nuovo oggetto creato si ripete, quindi siccome abbiamo anche visto quale è l’utilità di un costruttore, cioé quella di inizializzare in automatico delle operazioni al momento della creazione dell’ oggetto, ci inventiamo una funzione (o metodo) __construct (è il modo convenzionale di implementare un costruttore) che fa al caso nostro, inserendo anche un nuovo elemento quella della costante PREFIX (per convenzione si scrivono in maiuscolo) che farà da separatore prima del numero incrementato:

class Account
{
private $username;
private $password;
private static $count;

const PREFIX=”user_”;

function __construct($u, $p=”12345″)
{
$this->username=self::PREFIX.$u;
$this->password=$p;

self::$count++;
printf(“Creato $this->username: account n. %d <br>”, self::$count);
}
}

Che fa sostanzialmente questo costruttore? Accetta due parametri di ingresso, in cui nel secondo quello della password ($p) diciamo arbitrariamente che ha un valore universale se non viene inserito, in questo modo quando verrà creato l’ogetto io dovrò soltanto digitare $u, ossia lo username. Poi assegno i parametri degli argomenti inseriti tra parentesi a delle assegnazioni dell’ oggetto account, tenendo appunto presente che grazie alla costante prefisso avrò poi un separatore con il numero incrementale nel conteggio delle istanze create. Il tutto sembra più difficile da raccontare che a farsi in quanto una volta istanziati i nostri oggetti e ottenuto il nostro script, grazie a http://phptester.net/ a video otterremo:

class Account
{
private $username;
private $password;
private static $count;
const PREFIX=”user_”;

function __construct($u, $p=”12345″)
{
$this->username=self::PREFIX.$u;
$this->password=$p;

self::$count++;
printf(“Creato $this->username: account n. %d <br>”, self::$count);
}
}

$a=new Account(“Svidler”);
$b=new Account(“Aronian”);
$c=new Account(“Carlsen”);
$d=new Account(“Piscopo”);

RISULTATO A VIDEO e risposta alla domanda quanti oggetti sono stati istanziati:

Creato user_Svidler: account n. 1
Creato user_Aronian: account n. 2
Creato user_Carlsen: account n. 3
Creato user_Piscopo: account n. 4

Da notare infine il sibilinno simbolo arcano geroglifico o assiro babilonese %d che funziona solo da SEGNAPOSTO per lasciare spazio a self::$count ossia la nostra variabile statica. Se ne deduce quindi che i caratteri i due punti ripetuti sono proprio un modo caratteristico nella sintassi di PHP di riconoscere le proprietà statiche di una classe che sono per l’appunto dei valori assoluti presenti nella classe come riferimento per tutti gli oggetti che verranno istanziati

Le basi per programmare in C#: seconda puntata

All’ indirizzo https://umbriawayincrementa.wordpress.com/2020/03/18/le-basi-per-programmare-in-c-prima-puntata/ abbiamo introdotto C# adesso prosegue il nostro excursus per studiare le altre funzionalità base del linguaggio. Vediamo come possiamo fare la somma:

in questo esercizio definite tre variabili, numero uno, numero due e somma che dovrebbe raccogliere l’addizione, abbiamo i soliti metodi che interrogano l’utente per l’immissione dei dati con Console.WriteLine() e abbiamo il solito modo per catturare il valore dopo la conversione da int a stringa, dopodichè uso il metodo Console.WriteLine anche per materializzare a video la somma che non potrà essere altro che numero1 + numero2. Ora va da se che le operazioni matematiche sono intuitive utilizzando i simboli -, * e /,  ma in quest’ ultimo caso di divisione bisogna fare attenzione perchè se volessimo dividere cinque / 2 non riuscirei a vedere il risultato esatto di 2.5 e questo perchè tutte le variabili dovrebbeso essere trasformate da INTERO a numeri a virgola mobile con FLOAT. Esistono ovviamente metodi per convertire metodi come FLOAT in STRING per la stampa a video con la virgola e cioè potremmo utilizzare una istruzione come x = Convert.ToSingle(Console.ReadLine()); a questo punto facciamo un esercizio con i numeri dove immettendo due numeri sempre usando la conversion per la stampa a video abbiamo il problema di capire quale dei due numeri è maggiore dell’ altro, come fare? Possiamo usare l’istruzione condizionale IF ossia semplicemente dire al programma che se il numero uno è maggiore del numero due, stampa a video il risultato corretto con la consueta sitruzione Console.WriteLine(“il primo numero è maggiore del secondo”);

però questo programma non funziona bene al cento per cento, ma solo nella condizione in cui solo il primo numero sia maggiore del secondo avrò la risposta giusta. A questo punto sulla condizione numero1>numero due dovrò anche dirgli e se la condizione non fosse vera? E questo lo otteniamo aggiungendo la clausola ELSE, a questo punto se gli metto prima cinque e poi dieci otterrò l’esatta esecuzione del programma con la risposta corretta per ogni condizione:

Però che succederebbe se immettessi due numeri uguali adesso? Il programma avrebbe un bug non mi darebbe una risposta, quindi dobbiamo specificare un’altra condizione aggiungengo tra IF ed ELSE la clausola ELSE IF facendo attenzione a non usare il simbolo assegnazione con = ma quello di confronto con ==:

bene adesso una domanda legata all’ esportazione del programma, posso creare un eseguibile anziché usare il compilatore dell’ editor? Certo che sì. Compilare un programma significa trasformare tutte le nostre istruzioni in zero e uno, cioé in codice binario. Il computer non conosce le righe e le istruzioni che abbiamo scritto lui capisce solo il codice binario, quindi dobbiamo masticare queste istruzioni in un linguaggio per lui compatibile. Vado quindi su PROGETTO alla fine della schermata trovo l’opzione PROPRIETA’ del nostro progetto. Poi vado su APPLICAZIONE E DEFINISCO UNA SERIE DI CARATTERISTICHE per l’esportazione. Il framework di destinazione è importante perché più sono avanzati e più funzionalità hanno, se non ci sono esigenze particolari possiamo ricorrere alle versioni più vecchie. Possiamo anche definire una icona per il nostro programma con i file ICO facilmente fattibili con tool free in rete. Poi compiliamo con release e non debug e compilo e all’ interno della cartella release del progetto mi ritrovo un eseguibile con estensione punto EXE . Quindi abbiamo creato un programma perfettamente funzionante all’ esterno di visual studio, portabile  e usabile autonomamente ovunque per qualsiasi CPU. E ora i cili! Vediamo il ciclo do while. In questo ciclo prima si eseguono un gruppo di istruzioni e poi dopo si verifica la condizione, vediamo un caso dove andiamo a stampare a video i numeri successivi a una immissione di un numero, stampe che sono definite dall’ istruzione condizionale while (i<10):

per delimitare i commenti si usano i simboli /*e */ su più righe, invece avevamo visto che bypassare le righe singole al compilatore si otteneva con //. Vediamo adesso il while sempre cercando di ottenere lo stesso effetto, questo ciclo soddisfa subito la condizione iniziale:

A questo punto non ci resta vedere il ciclo for che é più compatto rispetto ai precedenti e che va utilizzato quando SAPPIAMO QUANTE VOLTE DOBBIAMO ESEGUIRE UN CICLO (mentre nel do while e while non lo sappiamo):

Perché conoscere i classici? Quale tema tattico da ricordare dietro a un modello letterario? Salinger risolve!

umbrianoirMa diciamolo che scrittore sei se non ostenti nella tua prosa quella presenza onnipresente e invisibile e pure onnipotente? E vabbè che devo fa il dio di Flaubert, creatore e proprietario di tutto l’universo? Il fatto è che chi scrive può essere l’autore, ma anche il narratore. Come un buon commerciale che deve mostrare congruenza tra quello che vende e la sua fede (se non ci crede lui primo nel suo potere di persuasione, grandi risultati non arriveranno) così prima l’autore e dopo il narratore devono fondersi in una presenza invisibile poco intrusiva che trasmette all’ ascoltatore lettore quella invisibilità in cui i protagonisti veri di quell’ opera diventeranno i personaggi. Questo miracolo avviene in un classico come Mark Twain per esempio con il suo H Finn nell’ ottocento e la moltiplicazione dei pani e dei pesci riavviene con Salinger dopo la seconda guerra mondiale con il giovane Holden che originariamente era presente con il titolo che the catcher in the rye (riferito alla segale, ma anche al baseball, sostanzialmente intraducibumbrianoirile per diversi significati, il senso che l’autore voleva dare era, salvare le persone più deboli dalle ingiustizie). Siamo di fronte a dei classici la cui potenza narrativa si trasmette grazie alla prima persona, una scelta di voce che ben si presta al genere autobiografico-avventuriero. Per scrivere bisogna conoscere i classici che sono modelli di stile a cui ispirarsi. Jerome David Salinger mette in gioco la figura archetipo universale del giovane ribelle in anticipo sui tempi, quella di Caulfield Holden che si esprime con un gergo adolescenziale inimitabile. La sua non è una contestazione politica, ma piuttosto rivolta alle convenzioni sociali che lo obbligano in maniera coercitiva a fare quello che non vorrebbe fare. Così quando è costretto ad allontanarsi da scuola per un brutto voto, decide anzichè tornare a casa a beccarsi la romanzina di girovagare come avventuriero per conoscere il mondo, incappando in una serie di piccole sciagure del quotidiano, cercate, volute, agognate. Il mondo schifo di Holden lo porterà alla fine all’ esaurimento, ma la potenza della sua voce narrante non può essere dimenticata con il suo tipico slang studentesco che sgretola la falsità del mondo degli adulti. Perché dovremmo definirlo un classico questo unico romanzo di Salinger noto come uno dei più grandi scrittori del novecento (ma come, se non ha mai scritto altro)? Perché l’autore scrivendolo dopo il suo ritorno dalla seconda guerra mondiale non ha fatto altro per mantenersi, per tutto il resto della vita, vissuta da eremita imprendibile, tranne che scrivere una decina di racconti secondari che nessuno ricorda. Il linguaggio usato quando uscì l’opera prima degli anni sessanta destò profonda ironia per l’audit di allora stravolto dall’ originalità delle imprecazioni forgiate dal giovane protagonista durante le sue imprevedibili scorribande.

La Juventus ha perso la champions? Per forza i giocatori non si allenavano!

Allegri ha capito perchè ha perso champions, perchè tra un allenamento e l’altro qualcuno tagliava. Ma adesso per vincere il triplete prossimo anno ecco lo strumento che serve per monitorare la situazione: il nuovo potentissimo applicativo FWD traccia il potenziale campione, che consiste nel fare l’appello ogni mattina a Vinovo prima degli allenamenti! Bonucci c’è stamattina? Presente! Bernardeschi è di nuovo andato dalla ragazza? No, ce sta anche lui! De Sciglio si vede stamattina? SI non manca mai è uno di quelli che ha bisogno di allenarsi di più! Stavolta sono tutti sgamati e la champions non sfuggirà il prossimo anno. E dire che tutto ciò è stato reso possibile seguendo i tutorial di Umbriaway Consulting su PHP e MySQL. Quindi con un approccio pratico andiamo subito al sodo e diamo scacco matto in poche mosse ai problemi di Allegri.

Mossa numero 1: procurarsi un editor di testo, che sia Atom piuttosto che Visual Studio Code piuttosto che Sublime Tetx poco importa.

Mossa numero 2: scaricare XAMPP il server locale per testare l’applicazione

Mossa numero 3: iniziare a pensare alla struttura del progetto come file system e preoccuparsi di creare un file di configurazione per il nostro collegamento al DB, che chiameremo config.php

Mossa numero 4 scaricare dalla rete il noto framework bootstrap nella sua forma sintetica e inserire il nuovo file di nome inequivocabile bootstrap.min.css all’ interno di una cartella che chiameremo inc come inclusione, quindi il path completo del file sarà: inc\bootstrap.min.css ; per includere bootstrap nei nostri progetti serve anche il file JS che si può scaricare in rete quindi all’ interno della cartella INC troveremo alla fine anche inc\bootstrap.min.js

Mossa numero 5, includere JQuery nei nostri progetti, dalla rete scaricare il file jquery.min.js (il suo contenuto per fare copia e incolla in locale) e inserirlo nella stessa cartella di inclusione per cui avremo inc\jquery.min.js

Mossa numero 6, creare una nuova cartella che conterrà due nuovi file, Studenti.php e Database.php, il primo ci servirà per la gestione dei calciatori juventini e sul secondo avremo le coordinate di connessione al DB sfruttando le costanti presenti nel file di configurazione

Mossa N 7, creare nella root del file system appena creato il file primario definito come index.php e scrivere il codice strutturale tipico usando la semantica dei tag html, head, title, body, div includendo nell’ head anche il framework bootstrap con le sue classi da utilizzare nel body , quindi la parte superiore della ns pagina sarà:

/*
<?php include ‘inc/header.php’;
include ‘lib/Student.php’;
?>

Serial Student Student Roll Attendance
01 Rugani 10 P
A

03 Bernardeschi 11 P
A

04 De Sciglio 12 P
A

</div>

<?php include ‘inc/footer.php’ ?>

*/

Mossa numero otto, identificare la data degli allenamenti, questo si ottiene aggiungendo subito dopo la classe panel-body il seguente DIV con la classe predefinita di bootstrap:

/*

Date:

*/

Mossa numero 9, aggiungere il php dinamico con la funzione date per la stampa

/*

Date:

*/

Mossa numero dieci, aggiungere lo stile in linea per rendere esteticamente visibile la stampa video dell’ oggeto date:

/*

Date:

*/

A questo punto la parte statica del progetto é completata e non ci resta che dinamicizzare il tutto con il registro delle presenze dei calciatori in una delle prossime puntate. Buona champions a tutti!