I 64 percorsi della salute MTB, itinerario “E7”: da Colle di Nocera Umbra a frazione Corcia 06023 passando per l’antica via consolare Flaminia

web developer umbriaPartiamo da una esigenza: quello di divertirci con la nostra macchina fotografica e la nostra MTB in sicurezza. Se è così dobbiamo il più possibile evitare la strada statale 3 detta via Flaminia, https://it.wikipedia.org/wiki/Via_Flaminia , percorso g7 visto recentemente https://umbriawayvalorizza.wordpress.com/2020/08/11/i-64-percorsi-della-salute-mtb-itinerario-g7-da-colle-di-nocera-umbra-a-gualdo-tadino-passando-per-linsidiosa-flaminia/ . Circumnavigando ed esplorando da veri novelli Magellano abbiamo scoperto che abbiamo due importanti alternative per aggirare l’ostacolo e stare sereni quando pedaliamo senza il timore di vivere un incubo alla DUEL in perfetto stile Matheson, https://en.wikipedia.org/wiki/Duel_(1971_film) . La salute in lato basso se vogliamo definirla così, si ottiene percorrendo l’antica strada consolare romana oggi via ciclabile che si può prendere tranquillamente in località Gaifana, come già visto sul percorso e6, https://umbriawayincrementa.wordpress.com/2020/08/04/i-64-percorsi-della-salute-mtb-itinerario-e6-da-colle-di-nocera-umbra-a-roveto-passando-per-la-vecchia-flaminia-e-ritorno-per-la-nuova-flaminia-via-gaifana/ , dove a un certo punto avevamo svoltato la prima volta verso Roveto (furbacchioni condominiali!web marketing umbria In questo modo andando avanti e uscendo a Corcia hai la strada con un pezzo di salita da fare sulla statale 3 che qui puoi evitare eh?!). Del resto se uno vuole arrivare a Gualdo Tadino passando per le strade alte sopra la strada statale lo può fare portandosi a braccio per un breve pezzo la bici dietro la chiesa di Boschetto e poi proseguendo verso Roveto dove , come abbiamo scoperto oggi, c’è fra le varie opzioni anche la via della scuola che prosegue protandoti a Corcia e da qui sicuramente verso Rigali, come testimonia la gallery. Ma andiamo per ordine. IL percorso è molto impegnativo tanto è vero che da soli come dicono a Roma ci siamo risposti su una curiosità riscontrata nel look di altri ciclisti condominiali: come mai questi portano i parastinchi al contrario come i gladiatori? Mica giocano a calcio? La risposta era dentro di noi ma è comparsa solo quando la nostra MBT incappando in una brutta buca (l’antica strada consolare via Flaminia presenta per un trenta per cento del suo percorso varie difficoltà dovute a sassi, carreggiata stretta, tafani famelici e terreno scomodo da percorrere causa rovi laterali) ricadendo dal cielo con un pedale ha toccato la gamba sinistra del guidatore lasciando un ricordino doloroso che ci ha obbligato a invocare al contrario alcune divinità locali, niente di grave, ma solo per dire che siamo a livelli di difficoltà da MTB normali da sette/otto, niente di impegnativissimo ma neanche facile da arrivare dopo i venti km di sfacchinata a casa rilassati.web design umbria Quello che ci ha portato a Corcia è stato un viaggio di scoperta alla Cristoforo Colombo e in parte la domanda ancestrale che cosa possiamo trovare oltre le colonne d’Ercole, ha trovato risposta: esistono infiniti mondi inesplorati! Così finiamo in piena criptica campagna al santuario di San Leonardo per caso e al suo antico maniero di soggiorno, poi per la prima volta finiamo alla chiesetta di Rigali che come per magia disvela alla sua sinistra una strada che non poteva collegare che Rigali a Corcia per una delle tante strade nascoste e invisibili che tutta questa area labirintica di stradine collega tutto ovunque fornendo varie soluzioni al ciclista condominiale MTB! Certo adesso le colonne d’Ercole si sono spostate dopo Corcia, tanto che iniziamo a meditare già il prossimo percorso senza deviare a destra per via Setteponti come indicato nelle foto. Se l’indole è quella del fotografo che vuole esplorare e immortalare il territorio con delle foto conoscitive il percorso si può prolungare oltre un ora abbondante ma di fatto, se non intervengono incidenti di percorso come il graffio provocato dal pedale sullo stinco del novello Magellano di turno, il tutto scorre su strade prevalentemente pianeggianti senza particolari insidie se si procede lentamente con cautela (la strada consolare antica Flaminia oggi pista ciclabile non è da sottovalutare come già detto e ripetuto presenta le sue insidie in alcuni tratti). web developer umbriaSappiamo anche che dopo Corcia e la sua piccola salita sulla statale 3 dopo abbiamo Roveto dove tutto corre in discesa e la gamba può anche riposarsi a 30 km/h di inerzia passiva della bici. Certamente molto carina la scoperta della chiesa di San Leonardo che sicuramente avrà caratteristiche molto antiche e anche le stradine alte sopra la statale 3 che collegano tutte le varie frazioni tra i cap 06023 e 06025 in zona collinare in totale sicurezza (un conto è pedalare godendosi il paesaggio, un altro è pedalare sapendo che alle spalle hai dei motori di grossa cilindrata che ti passano molto vicino). A questo punto non ci resta che spostare di nuovo il baricentro delle colonne d’ercole simboliche e trasportarle oltre Corcia per vedere questa antica strada consolare quali sbocchi offre su quella strada asfaltata per esempio! La buona notizia in sintesi è che per andare a Gualdo Tadino ci sono varianti rilassanti che non implicano una tensione alla guida sulla statale 3 Faminia Sud. Riassumendo come da link presenti in footer in https://www.umbriaway.it:

e6: vecchia Flaminia e Roveto
c7: MOLINA e frazione ISOLA
f2: l’antica strada degli Uliveti e Boschetto
f1: la sorgente del RIO FERGIA a Boschetto
a3: SALMATA
g7: Gualdo Tadino
e7: Corcia

La sintesi del tragitto sintetizzando le info precedenti: da Colle di Nocera Umbra si fa un km fino al ponte di Gaifana, si attraversa con cautela la statale a sx e si gira a destra (in opposizione a via Carticina) verso la via ciclabile definita antica strada consolare Flaminia, si procede per circa 2/3 km fino al primo passaggio livello e al contrario del percorso e6 si va oltre dopodichè si procede sempre dritto fino a incontrare un incrocio con una grande strada asfaltata. A destra si prende per via San Leonardo all’ altezza di via Setteponti e si incontra strada facendo tornando indietro verso Colle a dx una antica chiesetta con struttura alberghiera datata e disabitata, con strutture fatiscenti. Oltrapassato il suggestivo angolo “fantasma” si arriva fino alla Statale dove davanti troneggia la chiesa di Rigali che nasconde nel suoi anfratti una stradina che porta fino a Corcia e volendo da lì tramite via della scuola fino a Roveto. Percorso da 15/20 km per un’ora di impegno serrato.

Web Design Umbria e l’approfondimento su Kubrick: la SEO iniettata dall’ Overlook Hotel

I seo specialist, ossia coloro che cercano di ottimizzare i contenuti per i motori di ricerca, seguono regole molto scrupolose per arrivare prima possibile all’ obiettivo del posizionamento organico efficace. Analizziamo quello che accade in web design umbria  dove a ben guardare l’occhio attento e allenato coglie una serie di ricorrenze per la keyword web-design-umbria, analizzando il codice html dall’ interno vediamo che compare anche sull’ attributo alt delle immagini per la previsualizzazione e anche in modalità fantasma sul meta tag description con <meta name=”description” content=”tributo di web design umbria al genio Stanley Kubrick” />. Ok ma al di là della seo a modo mio e delle deviazioni in campo cinematografico con una mossa a doppia funzionalità (questa pagina da un lato difende e dall’ altro attacca sul lato opposto senza dare troppo nell’ occhio) che cosa bisogna fare concretamente per mettere queste “pseudotrappole” da cacciatori di frodo nel bosco (pardon, in rete) per gli spider?web design umbria Intanto essere onesti a livello di contenuto, qui l’intento si presume che sia nobile, studiare l’opera di Kubrick, esaltarne il genio creativo, capire perchè occupa una delle prime tre posizioni del podio a livello interplanetario etc etc, quando c’è contenuto forse i motori di ricerca sono più clementi e sorvolano su eventuali carenze tecniche? No ma le famose tecniche degli anni novanta dove la keyword veniva impressa con lo stampo in ogni angolo della pagina, persino usando pixel trasparenti da etichettare sul tag ALT, oggi sono brutalmente penalizzate e usabilità, contenuto sono criteri di valutazione importanti. In ogni caso prendiamo esempio dal sommo Stanley, sapeva fare tutti i mestieri che ruotavano nel mondo del cinema, spaziando dallo sceneggiatore al tecnico del montaggio video e la seo è solo un aspetto per chi come me vuole migliorare il suo profilo di webmaster dove il design va a braccetto con lo sviluppo ma anche con le problematiche connesse come seo-sem. All’ indirizzo del portale umbriawaysemplifica  avevamo creato un APP, ora è il caso di promuoverla e venderla (è solo una simulazione di quello che fa una azienda quando ha un prodotto che può soddisfare dei bisogni). web design umbriaOra le landing si possono fare facilmente ma se uno non ne ha voglia e vuole una grafica incisiva può rivolgersi a siti come https://html5up.net/ per abbellire le sue intenzioni. Come si sa la SEO funziona bene quando si arriva al massimo alla fine della seconda pagina, dopo gli utenti non hanno più voglia di scartabellare informazioni andando sulla terza etc, quindi al momento web-design-umbria come key ha bisogno di essere rivitalizzata. L’idea di potenziare la keyword con una doppia ripetizione https://www.farwebdesign.com/webdesignumbria/web-design-umbria.html non ha avuto molta risonanza, probabilmente perchè il tutto è strutturato male, tanto è vero che all’ inizio della pagina tre compare un https://www.farwebdesign.com/webdeveloperumbria/web-developer-umbria.html che invece per prossimità viene premiato con quella chiave. La seo è sperimentazione e misurazione, ma anche evoluzione: alla fine si può anche fare senza fare e dire senza dire, come fa esattamente questa nuova pagina dove anche le ricorrenze sulla key sono funzionali alle scelte fatte per estrapolare i cinque migliori film di Kubrick (chi sceglie alla fine è davvero web design umbria e la cosa non può essere messa in discussione in un ottica di ridondanza anche se può sembrare una forzatura). In ogni caso la landing qui assolve anche a una funzione di promozione di una APP che non c’è e quindi come le mosse a doppia funzionalità degli scacchi possono diventare utilissime nella strategia generale di comunicazione. La SEO come il diavolo abita nei dettagli ma Kubrik indirizzo https://it.wikipedia.org/wiki/Stanley_Kubrick sapeva fare montaggio video, scrivere, destreggiarsi con scenografie, fotografia e sceneggiature e naturalmente sapeva creare immagini immortali. Era in definitiva un ottimo webmaster, volendo fare i sacrileghi potremmo affermare che sapeva tutto nel suo settore specifico per non sapere nulla di niente, un ossimoro molto azzardato ma che rende l’idea. Così lasciamo fare la SEO al meglio a chi si concentra solo nell’ abito della sua disciplina: in questa fase a noi interessa estrapolare solo qualche emanazione in stile luccicanza Overlook Hotel e assemblare situazioni diverse per chiudere un ciclo: abbiamo costruito una APP (per studiare Android) e ora la stiamo vendendo (per finta!) senza trascurare le regole SEO. Manca ovviamente la parte finale nella filiera per la landing-page https://www.farwebdesign.com/web-design-umbria/, quella relativa a conversione e sostenibilità!

Tanto tempo fa, in una galassia lontana lontana, c’era una tabellina mysql e php che doveva leggere i dati…

web design umbria

Il modus operandi per costruire il mito https://it.wikiquote.org/wiki/Guerre_stellari_(film_1977) è sempre lo stesso per ogni nuova uscita: il film si apre con il testo blu statico “Tanto tempo fa, in una galassia lontana lontana….”, seguito dal logo di Guerre stellari. Solo che qui parliamo di MySql e l’incipit cambia: c’era una volta una tabellina lontana, lontana da gestire con il database mysql e php. web design umbriaAll’ indirizzo https://umbriawaytarget.wordpress.com/2020/06/05/albrecht-duerer-il-cavaliere-la-morte-e-loperatore-like/ dopo aver risolto un problema legato alla ricerca di un testo, ci siamo congedati con un altro problema (più che guerre stellari questo film qui sembra Pulp Finction, sono Wolf e risolvo i problemi!) ossia come interrogare più campi. Dopo attimi di smarrimento abbiamo risolto grazie all’ uso di un operatore logico l’ OR sparato nella select, ma andiamo per gradi. C’era una volta in una pagina web lontana lontana (si presume dalle parti di Arezzo visto che i server di un noto service provider stazionano da quelle parti) un form che aveva questa sintassi:

<form action=”nomepage.php”>
<input type=”text” placeholder=”Search..” name=”search”>
<button type=”submit”><i class=”fa fa-search”></i></button>
</form>

La casella testo è stata schedata in commissariato con la dicitura: name=”search” che non é altro il nome della variabile che viene sparata sulla pagina di accoglimento del proiettile. Detto secondo le specifiche tecniche la variabile viene lanciata con il metodo get sulla URL con la formula tipo:

http://umbriagallery/action_page.php?search=testoselezionato

dall’ altra parte come specificato nell’ articolo precedente si ha un comitato di accoglienza per lavorare la variabile e renderla masticabile dalla successiva query:

if (!isset($_GET[‘search’]) || $_GET[‘search’] == null) {
header(“Location:404.php”);
} else {
$search = $_GET[‘search’];
}

c’è una istruzione condizionale che va a sondare il contenuto della variabile search se è piena e non è vuota o nulla, quello che accade è che il valore del campo testo diventa ufficilamente una variabile recuperata con la superglobals costante $_GET. Questa variabile cade come una pallina per le estrazioni del lotto nel macinino che estrarrà i dati da una query che prima era:

$stmt = $dbh->query(“SELECT * FROM gallery WHERE cap LIKE ‘%$search%'”);

ora dobbiamo modificare questo valore per fare in modo che la ricerca finisca in due campi diversi come contenuto e quindi il tutto diventa:

$stmt = $dbh->query(“SELECT * FROM gallery WHERE descrizione OR cap LIKE ‘%$search%'”);

web design umbriacioè abbiamo esteso la ricerca anche al campo cap per cercare anche le località tramite numero (anche se come tipo di dati per il DB MySql sono solo varchar ossia stringhe testo) grazie all’ uso dell’ operatore LOGICO OR che amplia le condizioni vere a disposizione di una istruzione per eseguire il suo contenuto. Testando il tutto funziona senza controindicazioni come testimoniato dalla gallery. Come al solito i problemi pratici si risolvono sporcandosi le mani sul campo e studiando anche le idiosincrasie di Lucas con l’incipit iniziale https://it.wikipedia.org/wiki/Sequenza_di_apertura_di_Guerre_stellari dove scopriamo che la soluzione alla sequenza iniziale arriva come ispirazione dalla scena iniziale di Union Pacific di Cecil B. DeMille (1939), la via dei giganti, che non riuscì a prendere premi importanti solo per le criticità del periodo storico (1939).

NB: in seguito a pubblicazione modifiche codice su ambiente di produzione, ci siamo accorti che la formula indicata qui stranamente funzionava solo in locale, dopo una fase di esperimenti il tiro è stato aggiustato con le seguenti due proposte di soluzione:

//ERROR SELECT * FROM gallery WHERE descrizione OR cap LIKE ‘%$search%’;
//correct SELECT * FROM TBL WHERE descrizione LIKE ‘%$search%’ OR cap LIKE ‘%$search%’;
//correct * FROM TBL WHERE CONCAT(descrizione,cap) LIKE ‘%$search%’;

Come si può notare da web design umbria la casella di ricerca può estrapolare dati su campi multipli, ossia pescando codici dal campo codice avviamento postale o nomi con vari criteri da descrizione.

La donna che programmò due volte, prima in Java e poi in Kotlin: perché Android Studio é più facile da inquadrare di un film di Hitchcock!

 

web design umbria

Il film inizia con un flashback: l’eroe, se così possiamo definirlo, si lancia alla conquista di Android Studio e Java per creare App native sullo store dedicato. Installa il software su Acer con 8 di ram a disco meccanico con una capacità di hard disk limitata e un processore AMD per scoprire dopo fasi tormentate che gli emulatori virtuali per simulare il funzionamento di una App non girano di default sugli AMD (ossia per usufruirne bisogna trovare degli escamotage complicati) e anche che il dinosauro non gira bene su una macchina con caratteristiche così limitate. Flash-forward: Netflix mostra un famoso incipit fumettistico con vortici  di antimateria che ruotano a inghiottire personaggi vittime di fobie oscure, come quella di James Stewart per il vuoto, segnata da un dramma ancora irrisolto. Da qui in poi il film diventa un guazzabuglio barocco teso a risolvere l’enigma della belissima Kim Novak che non sa bene chi sia (o ci fa?) e così il novizio spettatore capisce dopo essere rimbalzato malamente su Android Studio che la comprensione della trama dispiegata nel film è molto più complessa che imparare a fare APP Native con Java e il suo ambiente di sviluppo. Quindi si ricomincia da zero, questa volta procurandosi una macchina SSD con 16 di RAM da un tera, degna delle iperboli creative del famoso regista maestro di Truffeaut. Da questo momento in poi gli inganni e i baci dei due protagonisti, insieme vittime e carnefici, si perdono nell’immortalità di una pellicola che ha segnato la storia del cinema, la donna che visse due volte o anche VERTIGO, regia del maestro inglese del brivido Alfred Hitchcock, anno 1958, approfondimenti su https://it.wikipedia.org/wiki/La_donna_che_visse_due_volte ; siamo quindi alle prese con la fase di preparazione dell’ ambiente, molto delicata prima di iniziare a scrivere codice e a verificare la consistenza degli emulatori. Intanto la prima cosa che si impara dai titoli di testa è che Studio Android funziona con Java, quindi la prima cosa da fare è scaricare comunque il nostro pacchettone dal sito della Oracle, indirizzo https://www.oracle.com/java/technologies/javase-downloads.html senza entrare nei misteri della java virtual machine e del convertitore JRE, Java Runtime, altrimenti l’effetto sarebbe come quello del detective Fergusson che guardando in basso ad altezze vertiginose si fa imbrogliare dai due gaglioffi incastratori. Superata l’ebrezza del vuoto come l’eroe nella sequenza finale, non resta che recarsi all’indirizzo https://developer.android.com/studio/ e superare anche l’ultimo trauma. Fortunatamente il tutto avviene in automatico e nell’ IDE viene implicitamente inserito anche il download da quasi 900 MB di byte del pacchettone SDK, software developer kit, cassetta degli attrezzi indispensabile per far girare tutti gli ingranaggi. Ok si sceglie dove installare e la trama si snoda senza torbide colonne sonore a evidenziare i momenti topici di tensione. Alla fine si arriva fino in fondo usando solo intuizione e pochi semplici click. Come epilogo non mi tocca come premio lo squisito bacio della Novak ma avrò pur sempre qualcosa che sembra funzionare, perché andando sul menù TOOLS alla voce AVD (manager di gestione dei device virtuali o anche android virtual device), aprendo posso scegliere, configurare e lanciare l’emulatore, senza dover consultare un terapeuta per la paura delle grandi altezze. Prima di fare questa operazione abbiamo ovviamente configurato un progetto in bianco per prendere familiarità con l’ambiente e vedere cosa riservava anche la voce SDK presente sempre sulla barra dei menù sempre alla voce TOOLS, dove é possibile configurare le varie versioni in modo da coprire tutte le opzioni di programmazione offrendo versioni di sviluppo variegate per colmare ogni esigenza. La IDE cambia spesso impercettibilmente nel tempo, per cui la navigazione grafica e il modo di utilizzo del software è soggetto a dinamici cambiamenti e l’installazione che era proposta ieri come sequenza di operazioni per configurare il tutto, oggi spiazzerebbe qualsiasi intrepido scalatore di campanili, come proposto dal genio del brivido londinese.

CONCLUSIONI di web design umbria: se hai problemi con le altezze, guardati VERTIGO ma se hai problemi con Studio Android per imparare a fare APP Native in Java, non pensare che non ci hai capito nulla perché a volte le trame a un primo impatto sono difficili da decodificare e servono almeno due tentativi, come la donna del titolo che installò due volte. A questo punto non rimane che sporcarsi le mani (nel senso propositivo del termine) con il codice, perché la fase di preparazione dell’ ambiente di sviluppo è felicemente completata. Per esempio potremmo cimentarci con le basi, il codice seguente per esempio é una classe che rappresenta un entry point che lancia la nostra prima activity (definizione di interfaccia grafica), ossia un layout di nome activity_main che è presente come risorsa all’interno dell’ oggetto R. Si noti come l’estensione della classe di lavoro AppCompatActivity presenta una sovrascrittura dei metodi presenti nella superclasse MainActivity che estende tutti i suoi superpoteri alle classi figlie estese:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Federer quando la fa facile e vince i tornei del Grande Slam con disinvoltura é simile a un carrello elettronico progettato con php, mysql e paypal?

Quante operazioni mentali compie Federer quando colpisce la palla? Sta giocando il tie-break decisivo del quinto set in un Grande Slam e ha un match point. L’avversario ha un servizio potente e imprevedibile, Federer aguzza lo sguardo da diventare un falco pronto a reagire alla minima sollecitazione. Quando la palla impatta verso il centro del campo Federer fa un balzo felino e calcola la traiettoria di arrivo: non solo, il corpo e i sensi si prepara non con l’esperienza e la migliore percezione di un superoe della Marvel a decidere in un istante la sorte della palla. Che cosa vuoi fare Federer limitarti solo a mandare la palla al di là della rete per deciderla al prossimo colpo? O vuoi tentare una magia che chiude il match? Federer scegli  in un millesimo di secondo la seconda opzione, sistema i piedi nel modo migliore, riesce a portare il colpo nel posto giusto al momento giusto trovando in velocità la postura corretta e il punto di rimbalzo della palla viene calcolato alla perfezione: il lungo linea che ne scaturisce è da urlo e passa l’avversario che aveva tentato di portarsi a rete per pareggiare l’incontro ma la palla finisce sull’ incrocio delle righe e Federer vince l’ennesimo torneo internazionale facendo sembrare tutto semplice, tempestivo e armonico quando in realtà la complessità che ha dovuto superare per arrivare all’ obiettivo non è roba su cui si può sorvolare. Immaginiamo adesso un utente che non trova un vino in commercio nel quotidiano e vuole acquistarlo on-line. Trova un e-commerce che gode di ottima reputazione in rete, si registra sul portale e seleziona i prodotti dal carrello elettronico. Ne prende diversi, poi ci ripensa, poi cambia le quantità e cancella alcuni ITEM e infine usando la carta di credito paga l’importo e deve solo attendere il corriere in settimana che gli consegnerà il tutto. Ci sono così tante differenze tra quello che ha fatto Federer in una frazione di secondo e quello che fa l’utente acquistando in rete completando un ordine velocemente con qualche click? Anche qui sembra tutto facile, ma quanta complessità ritroviamo tra le due situazioni? Nel primo caso abbiamo la percezione di un umano che fa un gesto atletico straordinario scegliendo in un istante tutta una serie di parametri che gli consentono di scoccare un colpo vincente (calcolo della traiettoria di arrivo, posizionamento del corpo dopo una corsa, imprimere forza sulla palla angolando in maniera perfetta la racchetta verso un punto che viene scelto con cura) mentre nel secondo caso abbiamo un utente che clicca sul pulsante abbinato al prodotto, passa una query pari all’ ID del prodotto, recupera le informazioni di prezzo dal database e aggiungo il prodotto alla variabile di sessione carrello/idprod con valore qta=1 e aggiorno la variabile di sessione tot_prezzo: infine mostro il contenuto del carrello. Ma non finisce qui perché poi recupero la variabile di sessione tot_prezzo. Aggiorno la variabile di sessione carrello/idprodotto con la nuova qta associata. Aggiorno la variabile di sessione tot_prezzo. Cancello la variabile di sessione tot_prezzo. Carico la pagina con il modulo d’ordine. Questo lungo parallelismo ci porta dove volevamo arrivare, le cose non sono mai facili come sembrano e anche quando sembra che sia tutto semplice andando a scavare nel backstage scopri che le dinamiche che fanno funzionare quel prodotto (che sia Federer o un oggetto come un carrello elettronico poco importa) sono sempre complesse anche quando ridotte all’ osso e con un click porti a casa l’ordine. Grazie all’ Ing. Copelli WEBSU https://su.video-corsi.com/ ottima piattaforma didattica abbiamo dato un occhiata a quello che significa in pratica questa complessità. Nel tutorial dove si simula la costruzione di un e-commerce usando tecnologie come php-mysql e paypal, abbiamo familiarizzato sulla cura e la meticolosità che servono per far nascere un progetto simile, qualsiasi cosa si voglia vendere. Tralasciando gli aspetti legali, burocratici e amministrativi che sono tanti e tutti da conoscere prima di rendere il proprio carrello elettronico un servizio pubblico, la fase di preparazione deve essere accurata e analizzata al dettaglio altrimenti si rischia di incappare nel blocco del programmatore, simile a quello dello scrittore, dove si sa come partire ma non si hanno le idee chiare su dove arrivare. Dovrò in sostanza pianificare una serie di azioni e mettere in piedi pagine, pulsanti e azioni che dovranno rispondere a esigenze ben precise. Dovrò inizializzare una variabile di sessione che al suo interno dovrà contenere alcune variabili come tot_prodotto e tot_prezzo e anche un array di dati composto da informazioni recuperate da un database di supporto come idprod1, id prod2 e le rispettive quantità. Dovrò preoccuparmi di tenere la variabile tot_prezzo aggiornata. Lo stesso ddevo fare per tot_prodotto. Dovrò prevedere una inclusione di pagine nel mio pragetto che in ogni fase mi mostrerà a video i dati aggiornati durante la mia navigazione, insomma una VISION è fondamentale prima di mettere in piedi un meccanismo vincente come il colpo deciso da Federer in una minuscola frazione di secondo. Stiamo parlando ovviamente di un tutorial didattico proposto da uno dei più validi formatori in circolazione sul territorio che dobbiamo considerare come ridotto all’ osso e vettoriale nella sua forma grezza, essenziale e minimalista alla Carver. Insomma figuriamoci a quante grane vado incontro se dovessi costruire un satellite che deve raggiungere Plutone! Memorizzando le variabili di sessione che sono una sorta di territorio protetto che conservano la flora e la fauna delle informazioni, in questo caso i nostri dati selezionati, svincolandoci dalle problematiche dei database che a noi servono solo per recuperare le informazioni unitarie, abbiamo così trovato la soluzione ai nostri problemi. Ma certamente la fase di preparazione non è ancora finita perché dovrò prevedere diverse funzioni in cui gli utenti risponderanno per fare delle cose. Gli utenti selezionano e aggiungono. Gli utenti in base alle loro scelte aggiornano il carrello. Gli utenti hanno dei ripensamenti e cancellano. Gli utenti infine decidono che ne hanno avuto abbastanza e comprano usando paypal e carta di credito. Fine della storia. Quindi per costruire il mio accrocchio avrà bisogno di particolari funzioni che svolgeranno compiti precisi:

una function add_prodotto()

una function update_prodotto()

una function del_prodotto()

una function show_carrello()

una function show_totale()

come ci suggeriscono i nomi delle funzioni add sta per aggiungere, update per aggiornare i dati dopo l’inserimento, del per cancellare a seconda dei ripensamenti dell’ utente e le due funzioni di mostra sono interattive come interfaccia grafica per l’utente che avrà sempre modo di modificare le sue selezioni. Non solo ma dovrò prevedere delle situazioni in cui le azioni sono guidate dalle scelte fatte dall’ utente: quinsi se l’utente fa x tu fai questo, se sceglie y, fai quest’ altro, se opta per x allora dirottalo su quella procedura a seconda dei casi update, delete o add. Ancora convinti che le cose semplici non siano anche complesse? Dovrò immaginare delle variabili di ingresso che entrano nelle pagine in base ai criteri sscelti dall’ utente e che queste variabili debbano essere cattuate e veicolate verso azioni specifiche in base a un meccanismo di trasmissione che avviene sulla url con il metodo get e di cattura. Vediamo ad esempio cosa troviamo in Home Page come contenuti:

-In alto per prima cosa ha le sue sessioni attivate, un pò di inclusioni e poi la funzione set_session() che dovrà abbracciare il valore delle nostre selezioni, accudire i dati selezionati e aggiornarli di volta in volta:

<?php
session_start();
include(‘include/libreria_carrello.php’);
include(‘include/db_inc.php’);
set_session();
?>

sempre in alto nella zona dedicata al carrello ci ritroviamo un <p class=”alignr”><?php show_totale(); ?></p> che tiene aggiornato il totale delle nostre spese. Sotto ci sarà una banale (si ha un pò di paura a usare questo termine dopo aver processato il braccio di Federer!) SELECT che fa ruotare i campi della tabella contenuta nel database mysql, collegato grazie all’ inclusione db_inc.php precedente, con la voce critica aggiungi al carrello. Questa voce è vitale perché:

<p class=”alignr”><a href=”mostra_carrello.php?action=add&idp=<?php echo $idp?>” >Aggiungi al carrello</a></p>

passerà a una pagina di nome mostra_carrello.php tramite il metodo get del punto di domanda una azione di richiamo funzione che prende l’id del prodotto selezionato e lo va a inserire nella nostra variabile di sessione che registra i nostri movimento per approdare infine al carrello. A questo punto è chiaro che abbiamo bisogno di una libreria di appoggio che conterrà delle funzioni ognuna delle quali impiegata per un compito specifico il file appunto incluso da include(‘include/libreria_carrello.php’); il nome da dare a queste funzioni dovrà essere esplicativo del lavoro che svolgerà lo snippet di codice, così su php show_totale(); non abbiamo nessun dubbio su dove vogliamo andare a parare. A questo punto senza vedere le altre pagine che fanno il lavoro sporco, ci siamo resi conto di avere raggiunto il nostro obiettivo che era quello di capire cosa c’è dentro la testa di Federer quando sferra un colpo vincente e porta a casa una partita e magari con essa anche un torneo di grande prestigio. In rete sulla storia di questo grande campione abbiamo molto materiale da sviscerare, vedere per esempio http://www.faccebook.eu/wp/2016/09/28/roger-federer-perche-e-il-piu-grande-di-roberto-dingiullo-recensione/ . Per questo turial di sperimentazione di Umbriaway Consulting é tutto. Per gli approfondimenti legati alla costruzione di un prototipo di carrello elettronico primordiale si consiglia l’iscrizione alla piattaforma del bravo Ing.Copelli https://su.video-corsi.com/

“Non ho mai battuto Federer, è troppo per me.
Ma magari quando lo affronterò nel Senior Tour …”
(David Ferrer, ex numero due del mondo, commentando l’inquietante conteggio negli scontri diretti con Federer: 0-16)

MIXINS SASS e sai cosa bevi!

web design umbria

All’ indirizzo https://www.farwebdesign.com/projectsass/mixins/ c’è un esempio di tecnica MIXINS caratteristica di SASS. Per spiegare che cosa sono e che fanno, pensiamo solo alle TECNICHE DI INCLUSIONE DI PHP CHE consente agli sviluppatori DI INTEGRARE nella pagina i famosi INCLUDE E REQUIRE che non fanno altro che raccogliere righe di codice esterne espresse sotto forma di file e inserirle nella pagina principale. Pensiamo solo a una Home Page che ha una testata e un footer che potrebbero diventare per semplicità di gestione semplicemente parti esterne facilmente gestibili che comunque si vedrebbero in primo piano senza limitazioni. In SASS questo meccanismo è integrato e legato però non a inclusioni esterne, ma interne, nel senso che io potrei benissimo disporre di un blocco base che di volta in volta potrebbe variare a seconda delle esigenze e in questo caso potremmo pensare di inserire dei parametri di ingresso che mi consentiranno di cambiare magari la dimensione del Font solo parzialmente come espresso da questo esempio.

in rete ci sono interessanti articoli sui MIXINS su come ottimizzare blocchi di codice riutilizzabili come per esempio https://engageinteractive.co.uk/blog/top-10-scss-mixins e tanti altri COME https://www.html.it/pag/49695/i-mixin/

La nostra pagina come struttura non differirà dagli esempi precedenti:

<head>
<meta charset=”UTF-8″ />
<link rel=”stylesheet” href=”css/main.css” />
<title>SASS Variables</title>
</head>
<body>
<nav class=”nav”>
<ul>
<li><a href=”#”>Home</a></li>
<li><a href=”#”>About Us</a></li>
<li><a href=”#”>Services</a></li>
<li><a href=”#”>Contact</a></li>
</ul>
</nav>

<section class=”banner”>
<h1>Page Heading</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Totam voluptatem consequuntur molestias nihil dolor delectus similique culpa fugiat, numquam magnam.</p>
</section>

<footer class=”footer”>
<h3>Footer Heading</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Totam, laudantium.</p>
</footer>
</body>

file main.scss presente nella cartella scss, in neretto sono presenti le parti su cui focalizzarci:

$color-primary: orange;
$color-secondary: gray;
$color-tertiary: royalblue;

$font-lg: 40px;
$font-md: 30px;
$font-sm: 20px;

.nav {
background-color: $color-primary;

ul li {
list-style: none;
}

a {
text-decoration: none;
font-size: $font-sm;
color: $color-secondary;

&:hover {
color: $color-tertiary;
}
}
}

@mixin headingStyles($fontSize: 50px) {
font-size: $fontSize;
color: $color-secondary;
text-align: center;
}

@mixin transition($param…) {
transition: $param;
}

.banner h1 {
@include headingStyles($font-lg);
}

.footer h3 {
@include headingStyles;
@include transition(color .5s, background-color 1s);

&:hover {
color: $color-tertiary;
background-color: $color-primary;
}
}

web designer umbriavediamo il file main.css presente nella cartella CSS generato in AUTOMATICO dal compilatore SASS attivabile con il famoso npm run watch che richiama un file batch specifico che abbiamo inserito nella root dell’ applicazione ossia nel file packages.json iizializzato a inizio progetto con il comando INIT da CLI (da come il tutto è descritto senza virgole, la dinamica ricorda proprio le macchine futuristiche di Leonardo :-)).

.nav {
background-color: orange; }
.nav ul li {
list-style: none; }
.nav a {
text-decoration: none;
font-size: 20px;
color: gray; }
.nav a:hover {
color: royalblue; }

.banner h1 {
font-size: 40px;
color: gray;
text-align: center; }

.footer h3 {
font-size: 50px;
color: gray;
text-align: center;
transition: color 0.5s, background-color 1s; }
.footer h3:hover {
color: royalblue;
background-color: orange; }

web designer umbriaImmaginare solo una tecnica di inclusione interna di blocchi di codici riutilizzabili, soggetti di volta in volta a seconda dei casi e delle circostanze a piccole variazioni in una pagina CSS è pura follia, per questo SASS é un strumento versatile e potente sempre inserito nella lista delle conoscenze che un web designer dovrebbe ostentare quando si propone alla Nasa con il suo CV per lanciare satelliti su Marte. La magia di questa tecnologia consiste nel fatto che quello che si vede usando i MIXINS in https://www.farwebdesign.com/projectsass/mixins/ non punta a qualcosa che esiste realmente, ma a qualcosa che non esiste se non in locale. Quando il compilatore genera dal nulla il file statico CSS siamo di fronte solo alla punta dell’ iceberg perché come abbiamo visto il grosso del lavoro prima della pubblicazione su server in rete avviene localmente su computer dell’ utente con la Common Line Interface che rimane in ascolto mentre progettiamo le nostre pagine dinamiche scss e che dovrà preoccuparsi di compilare ogni volta a runtime ogni nuova implementazione. Il tutto ricorda un pò Matrix, perché paradossalmente vediamo di fatto qualcosa che non c’è, o meglio che viene compilato in locale e non sul server del nostro service provider.

Creare progetti con VUE JS da riga di comando senza buttare il PC dalla scogliera

React, Angular, Vue sono strumenti indispensabili richiesti per il ruolo di programmatore front-end. Il modo migliore per rompere le difficoltà di apprendimento è buttarsi in acqua è provare a nuotare perchè la difficoltà senza un approccio pratico per costruire progetti come si dice in gergo “miagolerebbe nel buio”. Quando si crea una nuova app Vue, il modo migliore per iniziare e utilizzare rapidamente è utilizzare l’interfaccia della riga di comando di Vue. Piuttosto che iniziare tutto da zero come facevano i web designer vecchio stampo, da Common Line Interface avrai a disposizione una serie di strumenti che ti consentiranno di ottenere un AMBIENTE PREFIGURATO. In questo tutorial vediamo quindi come installare il tutto per partire con i nostri progetti con questa tecnologia che tra le varie in Javascript lato server ha la curva di apprendimento meno complicata rispetto all’ acquisizione di strumenti monolitici e maggiormente impegnativi nella comprensione come Angular. La Vue CLI è uno strumento completo per lo sviluppo e la prototipazione rapida di Vue.js, procediamo nella pratica. Per procedere abbiamo bisogno di avere installato sulla nostra macchina la somma divinità NODE: https://nodejs.org/en/ in quanto offre la gestione dei pacchetti da installare con il noto node packager manager, NPM. Da finestra window richiamabile tramite il comando CMD da esegui creiamo prima una cartella sul desktop con nome arbitrario del tipo progettovue poi ci si posiziona all’ interno della directory con il famoso comando dos CD (change directory) e infine digitiamo:

npm install -g @vue/cli

A questo punto per controllare quale versione di vue/cli ho installato digito il comando:

vue–version

e ottengo la seguente risposta:

“vue–version” non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch. Questo perchè semplicemente ho sbagliato a digitare perché i comandi richiedono una sintassi molto precisa, quindi dopo aver corretto in vue –version aggiungendo lo spazio, avrò ottenuto a video:

@vue/cli 4.3.1

A questo punto curiosi non possiamo che correre avedere il contenuto della nostra cartella sul desktop creata precedentemente e ci accorgiamo che è vuota, come può essere possibile? La nostra cartella progettovue creata prima è vuota ladies e gentleman! Ma certo, quando abbiamo impartito il comando npm install -g @vue/cli non abbiamo preconfigurato all’ istante il software necessario per VUARE (neologismo?) ma ci siamo solo messi nella condizione di avere gli strumenti utili necessari per procedere poi con l’avvio di un progetto, quindi come faccio a creare un progetto? Digitiamo quindi quando siamo posizionati in desktop il comando, dove il comando example-vue-project è il nostro nome arbitrario che possiamo modificare a piacimento:

vue create example-vue-project

dopo parecchio avremo a disposizione il famoso coltellino svizzero all’ interno della cartella che adesso è diventata magicamente piena di strutture, directory, relazioni, figle di configurazione etc etc. Durante l’installazione abbiamo due opzioni, lasciando il predefinito di default installeremo due plug-in molto importanti: Babel per la traduzione di JavaScript moderno ed ESLint per garantire la qualità del codice. Se invece vogliamo personalizzare l’installazione ricordiamoci che vue/cli ci mette a disposizione numerosi altri plug-in come:

TypeScript
Progressive Web App support
Vue Router
Vuex(Vue’s official state management library)
CSS Pre-processors (PostCSS,CSS modules,Sass,Less&Stylus)
Linter/ Formatter usingESLintandPrettier
Unit Testing usingMochaorJest
E2E Testing usingCypressorNightwatch

A questo punto verrebbe da chiederci che cosa abbiamo fatto fino a questo punto. Ebbene qualcosa di pratico è stato ottenuto. Posizioniamoci all’ interno della directory con il comando cd example-vue-project dopodichè digitiamo questo potentissimo elisir:

npm run serve

 

alla fine di questa operazione la finestra a riga dic omando sputerà fuori un link, che è quello localhost con una porta attaccata da cui faremo un copia e incolla su un browser qualsiasi. Dopo aver digitato invio il nostro navigatore preferito visualizzerà il primo passo per un uomo, ma grande per l’umanità. Ovviamente non è proprio così ma rende bene l’idea. Siamo riusciti a completare il primo step per imparare VUe, nel senso che abbiamo tutta l’impalcatura pronta per mettere in piedi la cupola del Brunelleschi. Adesso il vero problemaè un altro come si costruisce la cupola del Brunelleschi in Vue? Ipotizziamo infine che siamo riusciti a costruire la cupola. La cartella contiene quasi cento mega di materiale come posso solo pensare di trasferire tutte queste dipendenze su Aruba o qualsiasi altro fornitore di spazio web con un simile flusso di dipendenze? Niente paura c’è un comando che mette in piedi solo l’essenziale per la pubblicazione e cioè:

npm run build

Questo genererà tutto in una cartella DIST all’interno del tuo progetto. Alla fine dell’ esecuzione la CLI è così gentile da dirci anche che ulteriori ragguagli sono fruibili all’ indirizzo: https://cli.vuejs.org/guide/deployment.html. All’ interno della DIST avrò tutto, ovviamente lanciando la pagina html vedrò il nulla se il progetto è vuoto ma nella DIST c’è quello che serve da pubblicare! Proviamo a questo punto a dare il seguente comando:

vue inspect

quello che verrà generato a video è la mappa delle reference usate da vue nel suo progetto che non è proprio uguale al contenuto del file package,json presente nella root della cartella, che noi sappiamo essere il pannello di controllo centrale dell’ intera applicazione in quanto consente di gestire come un motore l’intera struttura di dipendenze. Il servizio CLI Vue è una dipendenza runtime (@ vue / cli-service) che estrae il webpack e fornisce configurazioni predefinite. Può essere aggiornato, configurato ed esteso con plugin. Fornisce script multipli per lavorare con progetti Vue, come gli script serve, costruisci e ispeziona. Abbiamo già visto il servizio e creato script in azione. Lo script inspect consente di ispezionare la configurazione del webpack in un progetto con vue-cli-service. Come puoi vedere, questo produce molto output. Più avanti vedremo come modificare la configurazione del webpack in un progetto CLI Vue. Un progetto Vue generato con l’interfaccia della riga di comando ha una struttura predefinita che aderisce alle migliori pratiche. Se si sceglie di installare plugin aggiuntivi (come il router Vue), la CLI creerà anche i file necessari per utilizzare e configurare queste librerie. Diamo un’occhiata ai file e alle cartelle importanti in un progetto Vue quando si utilizza il predefinito:

public . This folder contains public files like index.html and favicon.ico . Any static assets placed here will simply be copied and not go through webpack.
src . This folder contains the source files for your project. Most work will be done here.
src/assets . This folder contains the project’s assets such as logo.png .
src/components . This folder contains the Vue components.
src/App.vue . This is the main Vue component of the project.
src/main.js . This is the main project file which bootstraps the Vue application.
babel.config.js . This is a configuration file for Babel.
package.json . This file contains a list of the project’s dependencies, as well as the configuration options for ESLint, PostCSS and supported browsers.
node_modules . This folder contains the installed npm packages.

Vue CLI v3 è progettato pensando all’architettura del plugin. In questa sezione, esamineremo quali sono i plug-in e come installarli nei tuoi progetti. Vedremo anche alcuni plugin popolari che possono aiutare ad aggiungere funzionalità avanzate installando automaticamente le librerie richieste e configurando varie impostazioni, che altrimenti dovrebbero essere eseguite manualmente. Plugin CLI sono solo pacchetti npm che forniscono funzionalità aggiuntive al tuo progetto Vue. Il binario vue-cli-service risolve automaticamente e carica tutti i plugin elencati nel file package.json. La configurazione di base per un progetto Vue CLI 3 è webpack e Babel. Tutte le altre funzionalità possono essere aggiunte tramite plugin. Esistono plugin ufficiali forniti dal team Vue e plugin della comunità sviluppati dalla comunità. I nomi dei plug-in ufficiali iniziano con @ vue / cli-plugin- e i nomi dei plug-in della comunità iniziano con vue-cli-plugin-.

I plugin ufficiali di Vue CLI 3 includono:

Typescript
PWA
Vuex
Vue Router
ESLint
Unit testing etc.

I plugin vengono installati automaticamente durante la creazione del progetto o esplicitamente installati successivamente dallo sviluppatore. È possibile installare molti plug-in integrati in un progetto durante l’inizializzazione del progetto e installare qualsiasi altro plug-in aggiuntivo nel progetto utilizzando il comando vue add my-plugin in qualsiasi punto del progetto. Puoi anche installare plugin con preset e raggruppare i tuoi plugin preferiti come preset riutilizzabili che puoi utilizzare in seguito come base per altri progetti.Esistono molti plug-in VI CLI che potresti trovare utili per i tuoi prossimi progetti:

vue-cli-plugin-nuxt: un plugin CLI Vue per creare rapidamente un’applicazione Vue universale con Nuxt.js

vue-cli-plugin-bootstrap: un plug-in VI CLI per l’aggiunta di Bootstrap 4 al progetto

il webpack viene estratto dall’interfaccia della riga di comando di Vue e dalle diverse API fornite per accedere e modificare la configurazione del webpack. La maggior parte della configurazione del progetto per Vue CLI viene astratta in plug-in e viene unita alla configurazione di base in fase di esecuzione. Ma in alcune situazioni potresti voler modificare manualmente la configurazione del webpack per il tuo progetto. In tal caso, puoi creare un file vue.config.js nella radice del progetto e quindi effettuare qualsiasi configurazione all’interno di un’opzione configureWebpack:

module.exports = {
configureWebpack: {
// custom config here
}
}

Ma se volessi usare una interfaccia grafica ho qualcosa per soddisfare le mie esigenze? Digitare il comando:

vue ui

alla fine della fiera la finestra dos mostrerà il link dove il tutto è disponibile di norma all’ indirizzo http://localhost:8000/project/select . Tutta la parte di sviluppo grafico sarà trattata in uno dei futuri articoli di Vue presenti sui portali Umbriaway Consulting, al momento per iniziare c’è tanta birra sul fuoco (ma era così?).

Un GM è un essere umano? Se si, puoi estendere la classe umano e farla ereditare alla classe GM: l’eredità in PHP Object Oriented Programming.

L’eredità è uno dei capisaldi della programmazione orientata agli oggetti. Ha numerosi vantaggi: scrittura di meno codice, flessibilità nella costruzione di applicazioni, risorse minimaliste e problema della ridondanza risolto. Che senso avrebbe per me creare un altra classe GM quando all’ interno della classe Umano per esempio mi ritrovo delle proprietà che sono uguali a quelle delle classe che mi appresto a creare (mi riferisco a nome e cognome per esempio, visto che sono variabili immutabili per tutti)? Perchè occupare inutilmente spazi di memoria, quando di fatto quello che mi serve già esiste e non devo necessariamente ricrearlo, a questo punto mi basterà semplicemente creare una classe derivata dipendente dalla classe madre senza dover reinventare la ruota. Per logica filosofica se tutti gli umani hanno un nome e un cognome, anche i GM avranno le stesse informazioni presenti nello stesso dna e per proprietà transitiva possiamo fare i solligsti aristotelici semplicemente estendendo la classe originaria. Ma la classe GM però ha delle prorietà che la classe madre non ha, come quella di elo, per esempio. Certo il punteggio elo come variabile appartiene esclusivamente alla classe derivata GM ma questo non è un ostacolo per la nostra programmazione. Quindi iniziamo a mettere le cose in pratica creando una classe Umano:

class Umano
{
public $nome;
public $cognome;

}

Ok e adesso come faccio a creare la classe gm come derivazione della classe madre? Usando la parola chiave extends, vediamola in azione, tenendo presente che di solito la prima lettera definita nella classe deve risultare per convenzione sempre maiuscola e che all’ interno del contenitore che ho creato definirò anche un membro che è la variabile elo:

class Gm extends Umano
{
public $elo;
}

Ok ma alla fine di tutte queste astrazioni posso tirare fuori dal cappello un esempio pratico con nomi e cognomi in stampa per esempio? Una prima cosa importante da capire nell’ ereditarietà è che le proprietà presenti nella classe umano sono rese disponibili sempre e ovunque per tutte le classi derivate. Quindi potremmo fare un esperimento. Ipotizziamo di voler stampare il nome e cognome del GM a video, posso ereditare anche dei metodi dalla classe madre? Aggiorniamo lo script sulla classe Umano e facciamolo diventare in questi termini:

class Umano
{
public $nome;
public $cognome;

function stampaNome()
{
echo “Mi chiamo $this->nome $this->cognome”;
}
}

L’utilità dell’ ereditarietà si vede proprio in pratica da questo esempio del metodo stampaNome (ricordiamo che per testare dal vivo il nostro codice si può andare direttamente su come suggerito da http://phptester.net/ comesuggerito dalla nostra ottava puntata https://umbriawaysemplifica.wordpress.com/2020/04/22/grande-maestro-iscritto-a-torneo-privo-di-euro-con-i-metodi-static-in-php-oop-puo-pagare-direttamente-in-euro/) . In sostanza la classe Gm avrà l’esclusiva come classe derivata di accedere gratuitamente (essendo stato impostato a tutto public) ai metodi della classe madre, quindi il gioco di prestigio che proponiamo è proprio questo: come è possibile che io a video riesco a stampare il nome e cognome del GM richiamando una classe che non è la sua? Bè essendo una classe derivata caratterizzata dalla parola chiave extends come chiarito precedentemente in questa nuova nona puntata, tutto diventa comodo. Proviamo a vedere l’effetto che fa impostando a video dei valori reali ricordando di inserire il tutto tra i tag <?php e finale ?>, quindi lo script completo diventerà:

class Umano
{
public $nome;
public $cognome;

function stampaNome()
{
echo “Mi chiamo $this->nome $this->cognome”;
}
}

class Gm extends Umano
{
public $elo;
}

$gm=new Gm();
$gm->nome=”Fabiano”;
$gm->cognome=”Caruana”;
$gm->elo=2820;

var_dump($gm);

echo “<br><br>”;

$gm->stampaNome();

l’effetto che fa a video ha del miracoloso:

object(Gm)#1 (3) { [“elo”]=> int(2820) [“nome”]=> string(7) “Fabiano” [“cognome”]=> string(7) “Caruana” }

Mi chiamo Fabiano Caruana

E con questo risultato finale raggiunto in questa nona puntata sulle classi non possiamo che rimanere come si dice in gergo tecnico “brasati”!

Il burrascoso viaggio della Mayflower del 1620

umbriawaynoirParliamo della colonizzazione dell’ America del Nord. Lo si sa le grandi crisi producono grandi sconvolgimenti. C’era una volta una terra promessa capace di risanare tutte le ingiustizie sociali, ricca di risorse e di bellezze da condividere. C’era una volta anche la chiesa cattolica apostolica romana. Bè in quasi tutti gli anfratti europei forse ma non di sicuro in Inghilterra agli inizi del 1600. Gli inglesi si dissociarono dal potere centralizzato del Papa e dichiararono anche essi una loro chiesa cattolica che ereditava le stesse norme papali (riti, inni, salmi e preghiere). Tuttavia anche a scissione effettuata alcune frange ideologiche ritenevano che quei riti e quelle procedure dovessero essere riviste, cambiando la chiesa dall’ interno, come i puritani per esempio. Nacquero altri gruppi ribelli come i separatisti ad esempio, che riadattavano il culto più vicino alle loro esigenze e che per questo vennero sanzionati e puniti severamente anche con condanne in pubblico ludibrio. Questo divieto costrinse “gli innovatori” a trasferirsi altrove, in particolare nella più tollerante Olanda, che tuttavia non riusciva (o non voleva) reinserirre i dissidenti religiosi seppure in sintonia con le loro idee. Allora non restava che la fuga oltre oceano, l’America del nord in quel periodo era una terra fertile e rigogliosa, ricca di risorse e di traffici commerciali. Già nel 1585 gli inglesi fondarono la colonia di Roanoke (Carolina del Nord) che però è abbandonata dopo 5 anni. Il primo insediamento ufficiale risale al 1607 a Jamestown, in Virginia, mentre l’anno dopo coloni francesi fondano Quebec in Canada. Nel 1620 quindi alcuni inglesi che in Inghilterra non potevano praticare il culto desiderato, presero due navi e varcarono l’oceano Atlantico in cerca di fortuna animati da grande entusiasmo e fervore religioso. Ben presto una nave per alcune traversie fu resa inutilizzabile e rimase solo il mitico Mayflower che imbarcò tutti i superstiti, che si fecereo chiamare padri pellegrini che all’ interno della traversata fecero nascere un patto che seppure sanciva la loro apparteneneza giuridica inglese, le loro leggi potevano in qualche modo essere riadattate per le esigenze della sopravvivenza del gruppo, senza dipendere in maniera centralizzata dal loro governo. Si stabilirono con poche unità sopravvissute al dispendioso viaggio a Playmouth sempre nel 1620 che di fatto è la prima comunità religiosa ufficiale. Da notare che i traffici commerciali all’ epoca erano molto intensi e l’Olanda in questo quadro di conquiste era protagonista, basti pensare all’ isola di New York monopolizzata a fini strategici nel 1613. I lunghi fiumi del Canada garantivano un flusso di merci ricco e prolifico per tutte le comunità ambiziose che raggirando in alcuni casi i nativi indiano locali, non si facevano talvolta scrupolo di oltrepassare le leggi non scritte dell’ etica e della morale. Questo quadro presto sfociò in tensione anche tra gli stessi governi e le comunità inviate ad occupare il territorio, tanto che per esempio gli inglesi istituirono delle leggi a personam in cui si dichiavaravano fuorilegge tutti coloro che per far transitare le merci non usavano i soldati e le navi di stato. Del resto i mitici del Mayflower furono i primi a sperimentare per primi una forma di autogoverno ispirata al modello parlamentare inglese dove il goveranote veniva eletto dal monarca britannico mentre i parlamentari locali venivano decisi dai coloni. Ben presto però ci si rese conto che le maerie prime erano così appetibili da imporre una sorta di monopolio da parte della monarchia inglese per niente disposta a fare beneficenza e nacquero quindi contrasti cruenti dopo il famoso atto di navigazione che limitava le colonie. Ecco quindi che una politica espansionistica di conquista, sollecitata dal governo centrale stesso che riconosceva dei crediti ai colonizzatori, divenne ben presto fonte di contrasto e di avidità, anche e soprattutto verso i nativi locali che detenevano il controllo diretto delle loro risorse che ogni volta dovevano essere negoziate. La convivenza pacifica tra etnie diverse fu profondamente turbata dalla saturazione dei conquistatori europei che sempre di più si orientavano verso l’America del Nord per fare velocemente fortuna (in particolare il commercio delle pelli era uno dei tanti oggetti del contendere). Fu naturale per l’Inghilterra imporre delle regole anche con violente rappresaglie per tutelare un mercato che rischiava di estrometterli a livello locale. Quello che era un autentico paradiso agli inizi del seicento si trasformò ben presto per tutti in uno scenario di conflitti e di tensioni che finirono ben presto per fare danni letali ai nativi locali. Da notare come tra le grandi potenze europee come Francia, Spagna, Inghilterra, Olanda e Portogallo che erano più vicini alle Americhe e all’ Atlantico fu automaticamente estromessa la povera Italia in declino sotto l’egemonia ferraginosa degli spagnoli che erano ormai giunti all’ apogeo delle loro glorie e conquiste, un Italia che aveva perso lo splendore delle repubbliche marinare rinascimentali dopo la sconvolgente scoperta di Colombo del 1492.

PHP e OOP: magic method __autoload, ereditarietà, pianificazione iniziale con UML.

web developer UmbriaArticoli precedenti sullo stesso tema OOP in PHP per navigare in un mare in tempesta:

  1. https://umbriawayinfo.wordpress.com/2019/04/07/programmazione-procedurale-oppure-oop-this-is-the-problem/
  2. https://umbriawaypotenzia.wordpress.com/2019/04/07/php-versione-sette-introdotte-nuove-direttive-per-trasformare-il-linguaggio-in-fortemente-tipicizzato/
  3. https://umbriawaysemplifica.wordpress.com/2019/04/08/ambito-di-visibilita-delle-variabili-in-php-public-protected-private/
  4. https://umbriawaytarget.wordpress.com/2019/04/08/php-oop-magic-method-e-costruttori/
  5. https://umbriawayvalorizza.wordpress.com/2019/04/08/warning-ambito-di-visibilita-publica-delle-classi-encapsulation-e-sicurezza-metodi-getter-e-setter/

In uno dei precedenti studi abbiamo visto che la nostra classe si era evoluta con un metodo nuovo:

/*

function __autoload($classi) {
$filename = __DIR__ . ‘/classi/’ . $classi . ‘.php’;
require_once $filename;
}

*/

Il progettista dell’ applicazione ha l’obbligo di snellire le linee di codice e nel caso di lunghi listati di aggirarare le istruzioni come require_once “classi/Libro.php”; e pertanto con la funzione precedente, definita magic method come il famoso costruttore __construct() possiamo recuperare automaticamente i nostri collegamenti alle classi diminuendo le possibilità di errore nel nostro software inserendo per l’appunto il path dove possiamo recuperare la classe specifica, per l’appunto

/*

function __autoload($classi) {
$filename = __DIR__ . ‘/classi/’ . $classi . ‘.php’;
require_once $filename;
}

*/

che serve a recuperare la definizione delle rispettive classi o gli ingredienti del nostro dolce.

A questo punto non ci resta che studiare l’ereditarietà, ossia quelle relazioni padre e figlio che riguardano le proprietà e i metodi di una classe. Ipotizziamo di avere una classe prodotto generica. A questo punto potrei estendere questa classe a un oggetto figlio creando indifferentemente l’oggetto sedia, libro o televisore, con dei metodi universali GET e SET che posso riutilizzare su oggetti simili al prodotto generico, ereditando dalla superclasse, che posso estendere aggiungendo delle sottoclassi per le gli oggetti libro, sedia o televisione. L’idea è quella di creare delle superclassi universali che estese per ereditarietà generano delle estensioni della superclasse. Tutto ciò avviene introducendo una nuova parola chiave, sempre lavorando sulla visibilità PROTECTED, EXTENDS con il nome delle classe padre che si vuole estendere, in questo caso prodotto che rimanda alla sedia o al libro alla TV. Questi oggetti figlio possono leggere i metodi protetti delle definizioni delle classi genitore. Vediamo un esempio di definizione della classe prodotto:

/*
<?php
class Prodotto {
protected $price;
protected $qta;
protected $database;
public function getPrezzo() {
return $this->price;
}
public function setPrezzo($prezzo) {
$this->price = $prezzo;
}
public function getQta() {
return $this->qta;
}
public function setQta($qta) {
$this->qta = $qta;
}
public function addQta($quantita) {
$this->qta += $quantita;
}
}

*/

Le superclassi possono anche non avere il costruttore se non c’è la necessità di inizializzare le proprietà e nel caso avessimo due costruttori il conflitto padre e figlio non prende in considerazione quello della superclasse ma quello dell’ oggetto sedia figlio della definizione della classe prodotto. Dal punto di vista didattico per capire la portata della parola chiave extends all’ inizio conviene anche angolizzare la programmazione altrui, cercando di studiare le ottimizzazioni sul codice e come le specificità dell’ oggetto singolo vengono gestite partendo dalle funzionalità già presenti nella superclasse. A questo punto la nostra classe Libro diventerà una estensione di una superclasse, facendo attenzione di incapuslare delle proprietà private con l’uso della parola chiave sulla prima riga class Libro extends Prodotto:

/*

class Libro extends Prodotto {
private $titolo;
private $autore;
private $codiceisbn;
private $prezzousato;
public function __construct($tit,$aut,$cod,$qta=1) {
$this->titolo = $tit;
$this-> autore = $aut;
$this-> codiceisbn = $cod;
$this-> qta = $qta;
}
public function getTitolo() {
return $this->titolo;
}
public function getIsbn() {
return $this->codiceisbn;
}
public function setIsbn($isbn) {
$this->codiceisbn = $isbn;
}
public function setPrezzo($prezzo) {
$this->price = $prezzo;
}
public function inPrestito($cod,$qta) {
$this->qta -= $qta;
}
}
*/

A questo punto diamo un occhiata al linguaggio UML acronimo di unified modeling language, “linguaggio di modellizzazione unificato” che utilizza una scatola analitica con tre riquadri, il nome della classe, la lista delle proprietà e quella dei metodi. Questo vale sia per le classi padri e le loro estensioni. In questa fase di pianificazione iniziale si prevedono anche i valori che devono avere le variabili e il tipo di dati da utilizzare per ciascuna. Con protected possiamo accedere anche alle definizione di classi derivate quindi è consigliabile rispetto all’ uso di private. Quindi graficamente possiamo disegnare queste scatole con tre sezioni che al loro interno conterranno tutte le particelle che utilizzeremo nel nostro software.

Crea un sito o un blog gratuitamente presso WordPress.com.

Su ↑