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)

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”!

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.

SEO: ma è vero o non è vero che?!

web developer umbriaAlla redazione di web design Umbria pervengono costantemente delucidazioni sulle problematiche seo legate al posizionamento. Ma è vero che un buon titolo non deve superare i dodici caratteri? Vero! Ma è vero che un buon titolo deve essere persistente, congruente, prominente? Vero! Ma è vero che un buon titolo deve contenere le keyword inserite poi anche nel testo del documento? Vero! Ma è vero che il titolo deve essere sempre diverso per tutte le pagine del proprio sito? Vero, risponde web developer Umbria, che si ferma un attimo per riprendere fiato. Con il titolo io comunico il tema della pagine ai miei potenziali clienti quindi è chiaro che il tema scotta e anche non poco! Ci sono strumenti in rete che possono aiutare in queste questioni, tra cui il famoso: https://search.google.com/ . Ma ora non distraete Digital Strategist Umbria dal continuare il suo gioco del true o false: ma è vero che se ho un sito web che intende vendere mobili e al posto di scrivere nella pagina web di un prodotto specifico qualcosa di congruente tipo “poltrona reclinabile rivestita” ma inserisco terremoto in Italia Centrale sto facendo una cazzata? Certamente! Ma è vero che se inserisco frasi di benvenuto come welcome al posto delle keyword calde faccio una cazzata? Aridaje, ma certamente, gli spider tendono a ignorare le stop word costituite da articoli, preposizioni, congiunzioni se non fanno parte di una chiave mirata. Attenzione allo spam però, perchè una ripetizione ossessiva rischierebbe di penalizzarci. Attenzione anche a lasciare vuoto il tag TITLE. Attenzioni anche a non entrare in conflitto con parole chiave abusate sul web, denominate “poison word”, evitare quindi l’uso nei titoli di parole come link, directory, forum etc. Quando Google estrapola i titoli, non sempre viene mostrato quello del tag corrispondente, ma la query di ricerca congiuntamente ai contenuti delle ancore, all’ analisi dei titoli del feed rss, ai contenuti delle directory come dmoz, all’ url della risorsa porta poi all’ elaborazione in uscita di un titolo ottimizzato. Non sorprendiamoci quindi se la nostra pagina web a volte ha un titolo che differisce da quello riportato da Google. E a questo punto con social media marketing Umbria torniamo a occuparci del vero o non è vero. Ma è vero che il tag description è importante perchè la sua definizione verrà estrapolata come sintesi per quel sito? Vero! Ma è vero che la description va curata ai minimi termini e resa essenziale in modo da circoscrivere e localizzare il fenomeno? Ma è vero che non deve superare le 12-15 parole ossia 140 e 160 caratteri?! Vero. Ma è vero che la description equivale a forgiare una sorta di claim per rendere attraente i contenuti della pagina e attirare il lead alla sua visita?! Vero! Ma è vero che le description influenzano gli snippet poi in uscita elaborati da Google per la presentazione del nostro prodotto/servizio nelle SERP? Vero! Ma è vero che l’unicità delle description va tutelata per ogni singola pagina? Vero. Ma è vero che il contenuto deve essere coerente con il tema del sito? Vero, sentenzia Faraoni Enrico, ceo di Umbriaway Consulting, che aggiunge, deve anche usare frasi articolate chiare e poco surreali e non deve essere volatile nel senso di generico, perchè la description convoglia l’utente verso qualcosa che sta cercando e quindi deve attirare con contenuti pertinenti il visitatore. Ma del meta tag keyword ne vogliamo parlare? Al contrario degli anni novanta oggi è irrilevante, tutto al più dobbiamo usarlo come un rafforzamento posizionale dell’ informazione o qualcosa che cattura una esigenza inespressa sui motori di ricerca non ancora frequente. Oggi quello che noi sappiamo sulla seo è che parliamo di una congruenza di molteplici fattori e non più di particelle isolate rilevanti, poi anche più di 40 keyword vengono considerate spam dai crawler (virgola spazio come criterio di separazione). Oggi il meta tag keywords è relegato al compito marginale di mafioso che suggerisce e rafforza a completamento di una comunicazione generale che va ben oltre il singolo tag. Ciò non toglie che una pertinenza e coerenza di contenuti va rispettata, perché se vogliamo disegnare un tondo non ci mettiamo a inserire nel nostro mosaico generali degli angoli. E sul meta tag language? Serve per sfruttare gli strumenti di traduzione automatica e nella proprietà content o nella class di un div posso scrivere “notraslate” per impedire la traduzione. E’ bene ricordare che i documenti vanno specificati a un server web, per questo un documento html ha la clausola iniziale doctype. Con il meta tag robots posso dire al crawler se indicizzare la pagina o meno e ci sono alcune proprietà come index, noindex, follow e nofollow che fanno al caso nostro per migliorare la qualità dei nostri contenuti. I follow e nofollow vengono usati sui link quando io voglio validare o meno l’autorevolezza di un link esterno che deve essere pertinente e di valore aggiunto ai nostri contenuti. Le modalità per impedire di visualizzare i contenuti sono molteplici, posso proteggere le password con le cartelle, usare il noindex al meta tag robots come detto o agire sul file htaccess nella root del sito. Se non inserisco nessun meta tag robots gli spider partiranno in quarta a indicizzare tutti i contenuti. All’ interno dei meta tag posso anche personalizzare quello che uno spider deve fare o non deve fare con una sintassi del tipo “nome dello spider” legata a “una azione da compiere”. E sul file robots.txt quali istruzioni posso impartire? Vitali sono le proprietà User Agent che fa riferimento a quale robot il comando si applica e Disallow che serve a indicare quale è il contenuto da bloccare. Ad esempio per bloccare l’accesso a tutti gli spider al file dio.html scriverò Disallow: /mio.html, per non leggere i pdf: Disallow: /*.pdf$ etc. In rete si possono trovare numerose informazioni correlate a come impostare il file robots.txt in base alle proprie esigenze. I meta tag sono anche utili per settare i contenuti dell’ autore che acquisteranno sempre più importanza e il set di caratteri unicode, il più performante per visualizzare lingue straniere come l’arabo per esempio risulta essere utf-8. I contenuti di una pagina vanno organizzati con delle intestazioni che risultano essere molto importanti in ottica seo. Un tah h1 seguito da un sottotitolo h2 rende performante le nostre keywords. L’uso di questi tag deve essere decrescente per indicare agli spider una progressione di rilevanza. I ragni del web scansionano dall’ alto in basso e da sinistra verso destra quindi macinano subito quello che trovano in cima nella pagina. Posso anche stilizzare i tag di intestazione con regole css dove stabilisco font e size. Parlando invece dei link ricordiamoci anche di ottimizzare l’attributo TITLE all’interno delle ancore, sappiamo che una performances seo si ottiene curando i dettagli rispetto ai competitors quindi se parlando di vendita di autoveicoli nel title che tutti omettono scrivo = vendita autoveicoli Terni avrò senza dubbio dei vantaggi rispetto a chi non lo fa. In questo caso aiuta i nostri utenti, dando una caratterizzazione definita, gli utenti ritornano da noi se sono soddisfatti del servizio offerto, è una semplice questione di accessibilità. Poi i link vanno curati con l’attributo nofollow nel caso in cui ad esempio alcuni commentando i nostri post inseriscono anche eventuali url pubblicitarie. Inserendo nofollow diciamo agli spider di non prendere in considerazione tali contenuti proposti. Nofollow significa che non vogliamo passare la nostra reputazione ai link target. Un altro attributo importante oltre al Rel=”nofollow” e il Rel = “canonical” , che specifica delle regole relativamente ai contenuti duplicati tipo ecommerce con prodotti quasi uguali che differiscono ad esempio per colore ma che hanno pagine uguali. Con questo attributo posso specificare delle regole di visibilità. Si parla di canonizzazione degli URL che è un fattore correlato ai fattori di successo del page rank. E’ stata introdotta anche la proprietà “alternate” all’ interno dei link per risolvere i problemi di duplicazione sulle lingue e per differenziare i template di riferimento. Inoltre la rilevanza portata dai tag come strong, corsivo e sottolineato va rispettata perché gli spider macinano contenuti che vengono messi in evidenza ad esempio dal grassetto e il nuovo tag <strong> che sostituisce il deprecato <b>. Secondo alcuni esperti di posizionamento l’influenza nell’ uso di questi tag sarebbe molto bassa, ciò non toglie che noi come seo specialist umbria dobbiamo applicare le tecniche migliori per cercare dei vantaggi competitivi rispetto ai concorrenti. Su SEOmoz l’incidenza sulla seo di questi tag è pari alla sedicesima posizione e tyra strong, italic e underline non vi sarebbe nessuna priorità. Tuttavia esistono anche semplici regole non scritte di accessibilità, più un testo è digeribile e gradevole per l’utente, maggiore è la possibilità che ritorni sulla nostra pagina. Poi ogni motore ha le sue regole, ad esempio per BING sembra essere importante la keyword all’ interno del tag BOLD <b>. Sempre in ottica di accessibilità è bene ricordarsi che l’attributo ALT delle immagini, il famoso testo alternativo se l’utente per qualche motivo non vede l’immagine, va stilato correttamente, meglio ancora se inserisco una keyword. Anche i tooltip sono molto utili per guidare l’utente verso la migliore esperienza conoscitiva del nostro sito e dei nostri contenuti. In uno dei prossimi articoli con web design Umbria, parleremo del web semantico, approfondendo la questione delle nuove sezioni introdotte da HTML5.

Faraoni Enrico e le mosse orizzontali di torre: ovvero quando le strategie digitali di web developer Umbria vanno viste in un momento corale.

web developer umbriaQuando si impara qualcosa dalla scuola ti viene inculcato che uno più uno é scientificamente dimostrato che faccia due come risultato, eppure se qualcuno non vedesse la realtà al contrario, sperimentando soluzioni anomale rispetto alla razionalità, il mondo morirebbe arruginito da solo, ben vengano quelli che non ancora compulsivi non riescono ad accettare l’idea che il dentifricio debba essere posizionato a 45 gradi della mensola del bagno e guai a spostarlo! Vabbè tutto sto preambolo da parte di web developer Umbria per dire tramite il suo CEO Faraoni Enrico che le torri si muovono anche in senso orizzontale? Ma che stiamo a pensare? Il mondo va avanti, mica trasla lateralmente, la torre che ha una potenza di fuoco che lascia presupporre in ottica psicanalistica che debba SEMPRE sparare in avanti ecco che in taluni casi fa scoppiare il mondo su linee orizzontali, per questo gli scacchi sono una disciplina stupenda per creativi e matematici, per elefanti e per moscerini. Geller nel 1981 a Mosca raccontano le cronache dell’ invisibilità da parte di Umbriaway Consulting alias Faraoni Enrico presente con un viaggio a ritroso nel tempo in modalità display:none può testimoniare che il nero dopo l’abbandono non si recò a raccogliere fiorellini in un campo verde e soleggiato per assaporare la bellezza della natura, probabilmente ci scappò anche qualche pseudo imprecazione in cirillico ma da giornalisti attenti al pedigree dobbiamo evitare di scrivere inesattezze soprattutto se le cimici di Putin e della rete sono in ascolto: la partita é visionabile all’ indirizzo http://www.chessgames.com/perl/chessgame?gid=1050065 dove alla mossa 31 suonano le trombe o arriva una tromba marina senza giocare troppo sulle nefandezze messe in pratica dalla stampa da parte dei giornali con l’ansia di vendere. Ok é un pò come vedere con web developer Umbria Spagna – Italia e stare lì a chiedersi perché ne abbiamo messi solo due a centrocampo, bé anche volendo intensificare la pressione sulla zona centrale il nero giocava in questa partita contro un mostro, un Karpov paragonabile a Isco che recentemente da solo ha devastato la difesa dell’ Italia. E quindi chiede ansioso web developer Umbria? Cerchiamo di trarre tesoro dall’ azione orizzontale delle torri e di includere nei nostri progetti di digital strategist le stesse funzionalità per i nostri clienti. La qualità é legata alla rilevanza quando si parla di contenuti e le storie sono il fulcro di tutto ciò che muove l’universo a condizione che non siano piene di fuffa e torbide come l’acqua del tevere. In uno dei prossimi articoli con web developer Umbria affronteremo la cimiciosa (acconsente l’accademia della cruisca?) questione di come curare e gestire le comunità dei brand clientelari. I profili vanno appunto gestiti con oculatezza per i brand assegnati mettendo in evidenza tutto ciò che ha un suo contenuto.Strutturare poi le comunità é sempre un compito gravoso che va scansionato e monitorato. Sulla reputation brand come tema da direttori marketing forse dovremmo chiedere a Karpov delle specifiche, cercando di capire con quale sangue freddo é riuscito a gestire il momento della grande esplosione dopo 30 De4. Lui risponderebbe a web developer Umbria con una espressione anonima “simple chess”, il pedone e5 non lascia grandi opportunità di fuga al re nero dopo il sacrificio della torre e non c’è molto da calcolare. La parte più complicata me la sono costruita prima e l’epilogo era una sciocchezza. Questa filosofia nella risposta immaginaria di Karpov va applicata anche per i digital strategist che sono le nuove figure professionali che si occupano di mettere in atto le migliori strategie nelle attività di web marketing e social media marketing per amplificare brand awareness e servizi e certamente non é secondario il fatto di poter dimostrare con dei fatti concreti una comprovata esperienza. Come del resto ha potuto constatare Geller andando a casa velocemente in 32 mosse grazie a un balzo orizzontale di torre!

Un Jquery al giorno toglie il medico di torno, anche Kubbel prima dei pasti non fa male ma il metodo addClass risana meglio della B12

Senza coordinazione l’avversario rimarrà in vita quindi la prima cosa da fare é dare consistenza e coesione al vostro codice e cercare di destabilizzare la posizione avversaria…pardon, non é che noi di web developer Umbria stiamo facendo confusione tra script PHP e scacchi agonistici? Stiamo calmi mica negli scacchi ci sono solo gli scacchisti ci saranno anche i compositori tipo Leonid Ivanovič Kubbel per esempio da non confondere con altri della famiglia tutti agguerriti e assatanati agonisti. Lo studio presentato qui , il B muove e vince, da web developer Umbria ha il suo fascino….il nero sta per promuovere in maniera irreversibile ma il bianco riuscirà a creare una sorta di trappola mortale intorno al re con colpi alla Leonardo da Vinci! E torniamo al nostro JQuery. È importante notare che questo metodo non sostituisce una classe. Si aggiunge semplicemente la classe, aggiungendola a qualsiasi elemento che può essere già assegnato agli elementi. Prima di jQuery versione 1.12 / 2.2, il metodo .addClass () ha manipolato la proprietà className degli elementi selezionati, non l’attributo di classe. Una volta che la proprietà è stata modificata, è stato il browser che ha aggiornato l’attributo di conseguenza. Un’implicazione di questo comportamento era che questo metodo funzionava solo per i documenti con semantica HTML DOM (ad esempio, non documenti XML pura).A partire da jQuery 1.12 / 2.2, questo comportamento viene modificato per migliorare il supporto per i documenti XML, incluso SVG. A partire da questa versione, invece, viene utilizzato l’attributo di classe. Quindi, .addClass () può essere utilizzato su documenti XML o SVG. Può essere aggiunta più di una classe alla volta, separata da uno spazio all’insieme di elementi corrispondenti, maggiori info all’ indirizzo: https://api.jquery.com/addclass/

E poi un tizio sconosciuto di nome Smyslov ti gioca 15..Cc2 e devi abbandonare prima della ventesima, ovvero quando con PHP e il ciclo FOR puoi fabbricare in casa una scacchiera mica da ridere senza prendere una miniatura

All’ indirizzo: http://www.chessgames.com/perl/chessgame?gid=1125827 con web developer Umbria ci siamo posti una domanda: ma quando sei superGm come fai a perdere in meno di venti mosse? Quel giorno avevi bevuto? AL posto di tua moglie in camera ci hai trovato qualcun altro? C’era il sole o la gente sudava in sala torneo? Problemi di digestione? What’s the problem? Vabbè la tragedia é che dopo 16 Donna prende in c2 il nero scagliava prepotentemente un alfiere sulla casa f2 che non si poteva rifiutare a causa di una torre in c8 che recupera materiale in vista della spinta del pedone mobile d4. A quel punto il nero saliva in cielo con la sequenza Cg4, De3+, Tc4!! e Ac8 mattanze spettacolari, analizzare per credere anche senza Umbriaway Consulting e web developer Umbria! Vabbè l’unica consololazione é che con Smyslov puoi anche perdere mica é reato. A questo punto cerchiamo di risolvere una spinosa questione: ma se la scacchiera d’avorio me la compri papà costa carissima posso io fabbricarmela in casa a costo zero? Certo con PHP e il ciclo FOR se poffà! Si tratta di annidare un ciclo for dentro l’altro dove quello interno disegna otto righe e quello esterno otto colonne con il risultato di creare 64 caselle stilizzate con i CSS. Tra il primo e il secondo ciclo primqa di andare a colorare le caselle con le classi di CSS inserisco una condizione che verifica se il numero é pari o dispari in modo da assegnare il colore predefito con una condizione IF/ELSE….il tutto sembrerebbe molto complicato ma di fatto non lo é una volta imprecato 45 mila volte con gli inevitaqbili error parser a video per i punti e virgole che mancano e le graffe che non chiudono nei punti giusti e i tag HTML per costruire la tabella che sono inseriti nel punto sbagliato. E quindi partiamo da questo script semplice semplice java script il cui codice si può prendere con il consueto copia e incolla da tasto destro cliccando sulla sorgente della pagina: http://www.farwebdesign.com/example/js/scacchi.html. La questione anche fa capire quanto sia facile programmare con un altro linguaggio di programmazione quando si ha la comprensione per masticarne bene almeno uno. Quindi si tratta di andare a modificare questo file per ottenere l’effetto finale presente in figura postata. Ma come fare? Niente paura ce sta web developer Umbria che suggerisce. Ad esempio il metodo document.write di javascript lo puoi sostituire con ECHO ma la logica di fondo rimane invariata, non é che ci sia una soluzione diversa usando un linguaggio potente e flessibile come il software free di nostra religione. Ma PHP che fa oltre a gestire i web form handling, sending e-mail, occuparsi di security e interagire con i database MySql anche tramite L’Object Oriented PHP? E’ quel famoso ponte sullo stretto di Messina che mette in comunicazione il client con il server e che nel web fortunatamente esiste! E se conosci Javascript sei anche a buon punto come logica di base per risolvere i problemi di PHP sostiene web developer Umbria, l’importante é che ti ricordi di non chiudere un tag PHP in questa maniera </?> ma così: ?> o anche errore frequente é quello di dimenticare il simbolo dollaro davanti anche alle variabili del ciclo for, ricordiamoci che PHP segue i suoi criteri di parsificazione. L’esempio rivisto di una bella scacchiera costruita artiginalmente con due cicli for uno di cui annidato per disegnare le otto righe verificando prima caselle bianche o nere tramite il simbolo % che verifica se un numero dividendolo per due dà resto zero e quindi se é pari o dispari lo si ritrova qui nell’ area web developer Umbria: http://www.farwebdesign.com/example/php/scacchi.php

Blog su WordPress.com.

Su ↑