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.

Event “CSP Inverno 2018/2019 – Girone 37” – lupodellasilla vs faraoni enrico, B08

[Site “Chess.com”]
[White “lupodellasila”]
[Black “enricof8”]
[Result “1/2-1/2”]
[ECO “B08”]
[WhiteElo “2041”]
[BlackElo “1784”]
[EndDate “2019.01.10”]

1.e4 d6 2.Nf3 Nf6 3.Nc3 g6 4.d4 Bg7 5.Be3

B08: Pirc Defense: Classical Variation, 4…Bg7 5.Be3

5…O-O 6.Bd3 Nc6 7.h3 e5 8.d5 Ne7 9.O-O c6 10.dxc6 bxc6 11.Qc1

pirc umbria

11 Dd2 è presente su chessbase, ma questa mossa in c1 di donna sembra essere una novità interessante perché all’ espansione potenziale dinamica dei pedoni centrali neri il bianco può inibire le velleità mettendo la torre F in d1

11…Nh5

11..c5 é interessante

12.Ne2

(+0.30 → -0.81) Inaccuracy. A better move was 12. Bh6 ma anche 12 Tfd1 é buona

12…d5

anche 12..f5 sembra giocabile

13.Bc5?!

(-0.65 → -1.38) Inaccuracy. A better move was 13. Nd2 f5 o anche 13 Td1 f5 14 c4

13…f5 14.exd5 cxd5 15.Bb5 Rb8! chiaro vantaggio del nero 16.c4

pirc Umbria

16..d4?

(-1.98 → -0.79) il nero cerca di creare caos tattico perdendo aderenza con la realtà in una posizione dove ormai il bianco sembra galleggiare sul bordo di un baratro; non c’è necessità di lasciare in presa a7 per entrare nella variante della partita, dopo 16… a6 17.Ba4 d4 18 Ab3 d3 idea e4 il nero non ha ancora vinto ma ottiene un chiaro vantaggio

17.Bxa7 Bb7?

(-1.30 → +0.10) In questa partita il nero ha completamente perso di vista le mosse normali e cerca compensi fumosi, qui si vuole devastare l’arrocco sacrificando la qualità; the best move was 17… Rb7 18.Bc5 d3 19.Nc3 Qc7 20.Bxe7 Qxe7 21.Bc6 e4 22.Re1

18.Bxb8 Bxf3

(+0.10 → +0.78) Inaccuracy. A better move was 18… Qxb8 19.Ng5

19.gxf3 Qxb8

la valutazione della posizione é gioco poco chiaro: il bianco é in vantaggio di materiale ma anche le sue debolezze strutturali richiedono una difesa attenta visto che le case nere sono saltate

20.Qc2 Kh8?

pirc umbria

(+0.18 → +0.88) L’aspetto curioso é che il nero ci ha pensato anche parecchio per perdere un tempo importante e fare un errore sostanziale, dopo 20..Cd5! 21 cd5 Db5 il bianco deve replicare con molta attenzione con 22 Tfd1 (22 d6? d3 -+) e dopo la presa in d5 cambiare le donne con Db3, ma togliendo dinamismo a causa della doppiatura anche se l’attacco del nero viene spuntato, la posizione che ne scaturisce é equilibrata in vista della rottura bianca in f4 che compensa la linea B devastata

21.a4!

ecco a che cosa é servita la precedente mossa del nero, evitando il cambio delle donne si é dato un tempo importante per migliorare la posizione, visto che il pedone A parte come un treno per andare a regina, inoltre la torre adesso da A3 difende tutta l’ala di re debole e anche il fumoso attacco del nero non é più promettente come prima

21…Qd8

per minacciare solo apparentemente la forchetta in d3, ma pricipalmente per attaccare sul re; un altra idea che andava valutata era la famosa Da8 con l’idea di appoggiare la spinta in e4, ma adesso il bianco dovrebbe avere un chiaro vantaggio, anche se la donna portandosi sul lato di re via d8-h4, tanto bene non fa e va arginata prima della fatidica promozione

22.Rfd1

pirc Umbria

la torre deve lasciare spazio al re per la fuga, per questa ragione questa mossa è vitale anche per gli sviluppi successivi (ad esempio il bianco potrebbe decidere di ridare la qualità per trasporre in un finale difficile per il nero)

22..Nc8

da considerare anche 22..Cg8 almeno la mossa di re precedente é servita a qualcosa nella logica generale di una idea strategica da perseguire, il bianco a questo punto ha chiaro vantaggio se evita lo scacco di donna in g5 con 23 Dd2

23.a5?

(+1.54 → -0.57) Blunder. The best move was 23. f4

23…Qh4?

Quando non si capisce la posizione, era meglio prima di giocare questa mossa portare il re in f1 con la scacco in g5 e tutto il vantaggio del bianco evaporava visto che la caduta del pedone h3 avrebbe comunque lasciato il re bianco in posizione insicura; valutazione da -0.99 a → 0.00! A better move was 23… Qg5+ 24 Cg3 (24 Rf1? Dh4 e h3 cade con guadagno di tempo) 24..Cf4 con attacco davvero molto insidioso, il nero ovviamente cerchera di aprire il gioco con e4 dopo aver mangiato h3 e il bianco ha una difesa molto delicata da portare avanti

24.Ra3!

Solida e sicura anche se altre mosse come a6 e c5 sono giocabili

24..e4

su 24..Dh3 25 c5 Ca7 26 Aa6 Ah6 27 f4! La mossa del nero in partita non deve impressionare il bianco che si é predisposto a ridare la qualità quando il nero mangerà in h3 con il cavallo dopo che il cavallo bianco e2 avrà mangiato l’importante pedone centrale d4

25.fxe4 fxe4 26.Nxd4!

certamente senza nessuna paura

26..e3?

pirc Umbria

sembra stratosferica invece passa da uno 0,80 a +5,04. Dopo 26… Nf4 27.Rg3 il bianco ridà la qualità in h3 e il pedone centrale e4 salta con posizione vinta anche se c’è molto caos tattico da districare dopo 29 ..Cd6 30 Dg2 Dh5 e complicazioni umane difficili da gestire anche se a gioco corretto il bianco dovrebbe vincere

27.Rxe3?

vale lo stesso discorso fatto prima, sembra vincente ma rischia di sprecare il vantaggio, passando da un + 5,42 a + 0,54! Quanti avrebbero avuto il coraggio di fare 27 fe3 lasciando l’intera ala di re apparentemente sguarnita? Blunder. The best move was 27. fxe3 Ng3 28.Qg2 Ne4 29.Nf3 Qf6 30.Rf1 Qxb2 31.Qxb2 Bxb2

27…Bxd4 28.Rxd4!

una mossa semplicemente sfuggita al nero nelle sue fumose analisi gratta e vinci da social player coffee house agonist! Il finale adesso dovrà essere giocato dal nero con precisione chirurgica invece…

28..Qxd4 29.Qc3 Qxc3 30.Rxc3

la partita si é completamente ribaltata dal punto di vista psicologico, adesso é il bianco che ha una partita da vincere e il nero può solo subire

30..Nf4 31.c5 Na7

il nero doveva preoccuparsi di attivare il re in g7 anziché fare mosse inutili che a Roma commenterebbero con un “te sei parlato da solo”. Il bianco ha diversi pedoni che stanno andando a donna ma il nero non se ne é accorto

32.Bf1 Nc6?

di nuovo una mossa da far spiegare a uno psicologo, si poteva tentare 32..Tb8 33 c6! Tc8 anche se dopo 34 b4 con l’alfiere bianco che finirà in g2 la situazione diventa drammatica.

33.a6 g5 ?

aridaje! Passando da +0.99 → +2.54! A better move was 33… Rb8 ma dopo 34 Tc4 con l’idea 25 Ag2 son dolori!

34.Rb3

il nero sta giocando questo finale come un cieco che brancola nel buio! La mossa normale adesso potrebbe essere 34..Tc8 o Ta8 invece un altro karakiri che trasla il vantaggio bianco da +3.26 → +5.83!

34..Rf5?

Inaccuracy. A better move was 34… Ne5 (34…Ne5 35.Rb7 )

35.Rb8+ Kg7 36.Rb7+ Kf8

36..Tf7 37 b4!; se 36..Rf6? 37 Tb6 e game over

37.a7 ??

pirc Umbria

un superblunder che riporta il nero in partita da un +8.33 passiamo a +0.83. The best move was 37. b4 Ke8 38.b5 Rxc5 39.bxc6 Kd8 40.a7 e siamo al game over

37…Nxa7 38.Rxa7 Rxc5 39.h4!? (39 Th7!?) 39..h6?!

il nero cerca in tutti i modi di dare il punto al suo avversario ma non ci riesce! Passiamo da uno 0.00 → a +0.80! A better move was 39…Rc1 40.hxg5 Ce2+ 41.Kg2 Nf4+ 42.Kg3 Rxf1 43.Kxf4 Rxf2+

40.hxg5 hxg5 41.f3 Nd5 42.Bd3 Nf4 43.Be4 Rb5 44.Ra8+ ?

(+0.97 → +0.35) Inaccuracy. A better move was 44. Rb7 Rxb7 )

44…Ke7 45.Ra7+ Kf6 46.Rb7 Rxb7 47.Bxb7

1/2-1/2

una partita delirante dove se non altro si é capito che cosa significa in partita avere una comprensione della posizione, gestire e controllare eventi che sono rocamboleschi come il biliardo! Ma questa disciplina si chiama “scacchi” e richiedono un calcolo attento e preciso delle mosse che si giocano, no prima tu gioca e poi pensa Micko!

JQuery per aspiranti programmatori: B – attributi e modifica di contenuti

Dopo aver approcciato JQuery nella parte A all’ indirizzo https://umbriawayamplifica.wordpress.com/2018/12/10/jquery-per-aspiranti-programmatori-a-overview/ con una approfondita overview, passiamo ora ad affrontare la spinosa questione dei contenuti HTML. Possiamo manipolare facilmente gli attributi assegnati agli elementi HTML tramite jQuery. href, src, id, class, style sono tutti esempi di attributi HTML. Il metodo attr () è usato per ottenere il valore di un attributo. Per esempio:

<code>
<a href=”www.farwebdesign.com”>
Click here
</a>
</code>

JAVASCRIPT:
<code>
$(function() {
var val = $(“a”).attr(“href”);
alert(val);
});
// alerts “www.farwebdesign.com”
</code>

Nel codice sopra abbiamo selezionato e allertato il valore dell’attributo href dell’elemento <a>.

Il metodo attr () ci consente anche di impostare un valore per un attributo specificandolo come secondo parametro. Per esempio:

<code>
$(function() {
$(“a”).attr(“href”, “http://www.jquery.com&#8221;);
});
</code>

Questo cambierà l’attributo href dell’elemento <a> al valore fornito.

Puoi anche rimuovere gli attributi dagli elementi HTML. Il metodo removeAttr () viene utilizzato per rimuovere qualsiasi attributo di un elemento. Nell’esempio seguente rimuoviamo gli attributi border e class della tabella:

<code>
$(“table”).removeAttr(“border”);
$(“table”).removeAttr(“class”);
</code>

Esistono diversi metodi per manipolare il contenuto di elementi HTML tramite jQuery. Il metodo html () viene utilizzato per ottenere il contenuto dell’elemento selezionato, incluso il markup HTML. Per esempio:

<code>
<p>
JQuery is <b>fun</b>
</p>
</code>

JAVASCRIPT

<code>
$(function() {
var val = $(“p”).html();
alert(val);
});
// alerts “JQuery is <b>fun</b>”
</code>

Si noti che viene restituito anche il markup HTML (i tag <b>). Se è necessario solo il contenuto del testo, senza il markup HTML, è possibile utilizzare il metodo text ():

<code>
$(function() {
var val = $(“p”).text();
alert(val);
});
// alerts “JQuery is fun”
</code>

I metodi html () e text () possono essere utilizzati per tutti gli elementi HTML che possono contenere contenuto. Gli stessi metodi html () e text () possono essere usati per modificare il contenuto degli elementi HTML. Il contenuto da impostare viene fornito come parametro del metodo, ad esempio i codici html e javascript saranno:

<code>


some text



</code>

<code>
$(function() {
$(“#test”).text(“hello!”);
});
</code>

Il codice sopra cambia il contenuto dell’elemento con id = “test” su “ciao!”. Se il contenuto che stai impostando contiene markup HTML, dovresti usare il metodo html () invece di text ().

Abbiamo visto come possiamo manipolare il contenuto degli elementi HTML usando i metodi text () e html (). Un altro metodo utile è il metodo val (), che ci consente di ottenere e impostare i valori dei campi modulo, quali caselle di testo, menu a discesa e input simili. Per esempio:

<code>
<input type=”text” id=”name” value=”Your Name”>
</code>

<code>
$(function() {
alert($(“#name”).val());
});
//alerts “Your Name”
</code>

Allo stesso modo, è possibile impostare il valore per il campo fornendolo come parametro per il metodo val (). Ottenere e impostare i valori dei campi del modulo è molto utile quando è necessario gestire gli eventi del modulo e la convalida. Tratteremo gli eventi più avanti.

I seguenti metodi jQuery sono disponibili per ottenere e impostare il contenuto e gli attributi degli elementi HTML selezionati:

text () imposta o restituisce il contenuto del testo degli elementi selezionati.
html () imposta o restituisce il contenuto degli elementi selezionati (incluso il markup HTML).
val () imposta o restituisce il valore dei campi modulo.
attr () imposta o restituisce il valore degli attributi.
removeAttr () rimuove l’attributo specificato.

Come abbiamo visto nelle lezioni precedenti, i metodi html () e text () possono essere usati per ottenere e impostare il contenuto di un elemento selezionato. Tuttavia, quando questi metodi vengono utilizzati per impostare il contenuto, il contenuto esistente viene perso. jQuery ha metodi che vengono utilizzati per aggiungere nuovi contenuti a un elemento selezionato senza eliminare il contenuto esistente:

append () inserisce il contenuto alla fine degli elementi selezionati.
prepend () inserisce il contenuto all’inizio degli elementi selezionati.
after () inserisce il contenuto dopo gli elementi selezionati.
before () inserisce il contenuto prima degli elementi selezionati.

Il metodo append () inserisce il contenuto alla fine dell’elemento HTML selezionato. Per esempio:

<code>
<p id=”demo”>Hi </p>
</code>

<code>
$(function() {
$(“#demo”).append(“David”);
});
//Outputs “Hi David”
</code>

Allo stesso modo, il metodo prepend () inserisce il contenuto ALL’INIZIO dell’elemento selezionato. Puoi anche utilizzare il markup HTML per il contenuto.

I metodi jQuery after () e before () inseriscono il contenuto AFTER e PRIMA dell’elemento HTML selezionato.
Per esempio:

<code>
<p id=”demo”>Hi</p>
</code>

<code>
$(function() {
$(“#demo”).before(“<i>Some Title</i>”);
$(“#demo”).after(“<b>Welcome</b>”);
});
</code>

I metodi append (), prepend (), before () e after () possono anche essere usati per aggiungere elementi appena creati. Il modo più semplice per creare un nuovo elemento HTML con jQuery è il seguente:

<code>
var txt = $(“<p></p>”).text(“Hi”);
</code>

Il codice sopra crea un nuovo elemento <p>, che contiene il testo Hi e lo assegna a una variabile chiamata txt. Ora, possiamo usare quella variabile come parametro dei metodi sopra menzionati per aggiungerla al nostro HTML, ad esempio:

<code>
<p id=”demo”>Hello</p>
</code>

<code>
$(function() {
var txt = $(“<p></p>”).text(“Hi”);
$(“#demo”).after(txt);
});
</code>

Questo inserirà l’elemento <p> appena creato dopo il paragrafo #demo. Puoi anche specificare più elementi come argomenti per i metodi before (), after (), append (), prepend () separandoli usando le virgole: $ (“# demo”). Append (var1, var2, var3). La sintassi di cui sopra per la creazione di elementi può essere utilizzata per creare qualsiasi nuovo elemento HTML, ad esempio $ (“<div> </ div>”) crea un nuovo div.

L’ospite di Dracula, antologia di 4 racconti firmati Bram Stoker e curati da Riccardo Reim

Riccardo Reim classe 53 autore e regista è il curatore di questa antologia in formato economico dell ‘era mesozoica (COLLANA MILLE PAGINE A MILLE LIRE!) che raccoglie nell’ ospite di dracula quattro racconti suggestivi per l’indole romantica dell’ epoca e anche per la psicoanalisi dal momento che i protagonisti sono registratori viventi di sensazioni tumultuose che sfociano spesso nella paura per il soprannaturale. I racconti sono quattro: l’ospite di dracula, la squaw, il funerale dei topi e la casa del giudice. Nel primo racconto ritroviamo tutti i cliché della tematica del vampiro con cimiteri abbandonati in boschi inesplorati, lupi famelici dalle orbite rossastre e tempeste terribili che spalancano le tombe dei sepolcri mentre l’umano è solo di fronte a una natura che divora. Nella squaw un americano sbruffone che si reca in visita a Norimberga al famoso museo del famoso cimelio adibito a tortura qualche anno prima, uccide senza intenzionalità il figlio di un gatto e subisce una brutale ritorsione. Nel funerale dei topi un inglese impavido in attesa di un sofferto matrimonio si getta come turista in un anno sabbatico esplorando luoghi insoliti come la città dell’ immondizia a Parigi dove viene descritta una gigantesca caccia a ll’ uomo da cui tra profitto una schiera di affamati roditori che spolpano la carne dei cadaveri a velocità vertiginose. Mentre il topo rimane protagonista anche nell’ ultimo racconto in cui un impavido giovinastro sfida le insidie di un luogo che ha una fama sinistra e una eredità scomoda da sopportare. Bram Stoker non è stato un autore prolifico ma il suo DRACULA è una gemma scolpita negli eoni della letteratura che non potrà essere rimossa dall’ immaginario collettivo: https://it.wikipedia.org/wiki/Bram_Stoker ; ma torniamo all’ inizio, visto che il periodo abbracciato da Stoker va a grandi linee dalla seconda metà dell’ ottocento ai primi del novecento, un periodo ricco di fermenti intellettuali dovuti alle inesauribili scoperte geografiche e scientifiche. Non è un caso che Stoker era meticoloso quando scriveva e accompagnava le sue idee letterarie con un duro lavoro di preparazione, documentandosi e tenendosi aggiornato sulle mode e lo spirito dei tempi oltre che alle tradizioni e alla geografie di culture lontane e diverse. Non è nemmeno un caso che la prosa Sturm und Drang ossessiva e tormentata e tempestosa che sostituisce il periodo illuminista e che trova la sua esaltazione nel genere horror (ricordiamoci dei ritmi allucinogeni e macabri di Poe per esempio) la fa da padrona anche in questa antologia di racconti che riprendono i temi classicheggianti dell’ epoca, come le figurine dinamiche che si muovono in rappresentazioni di dipinti statici o il tema dell’ isolamento che porta alla pazzia. Stoker insiste e reinsiste, scrive con più intensità sempre la stessa cosa relativamente al tema macabro che sta sviscerando conficcando i suoi paletti sempre a maggiore profondità e cerca di portare gradualmente all’ infarto il lettore, si suppone che in tempi non sospetti senza selfie e play station l’intento poteva anche in qualche caso finire a compimento. Il tema dell’ ignobile malvagità che terrorizza e porta alla pazzia e spinge il lettori fino sull’ orlo di un crepaccio è palesemente chiaro, la prosa di Stoker si presta a uno studio attento del genere quando ancora era ai primordi. Adesso queste carambole di biliardo basate su temepeste feroci e camini ululanti portano alla noia ma per l’appunto c’è da presupporre che in quel periodo dove le attività principali erano il lavoro, la sopravvivenza e le pulsioni amorose, un tale impeto mirato e concentrato di proiettili emotivi trasferiti nella scrittura potessero fare seri danni su qualche anima fragile e instabile, Insomma una antologia piacevole , così si fa per dire, antologia particolarmente indicata per che risiede in luoghi isolati e oscuri.

Blog su WordPress.com.

Su ↑