Località borderline nel turismo di prossimità: Salmaregia e i suoi punti di vista inediti ed esclusivi

web design umbria

Il turismo di prossimità nasce da una esigenza, conoscere le risorse che hai sotto casa (in questo caso “dietro”) per prendere atto che l’Umbria per quanto piccola possa sembrare di fatto non finisce mai di stupire per l’infinità di mondi che offre a chi li va a scoprire. Dalle terre di mezzo ai mondi di dietro: quando un veloce blitz turistico a Salmaregia apre nuove prospettive. Andare a conoscere Salmaregia è come salire sulla macchina del tempo: è facile farsi risucchiare dalla storia locale ma anche da bellezze naturali di cui non sospettavamo neanche l’esistenza.web design umbria Se le colonne d’Ercole, usate simbolicamente come limite alla conoscenza o per fissare dei limiti geografici oltre i quali non è possibile spingersi, vengono idealmente trascinate a nostra insaputa quando ad esempio un valico di montagna che vediamo tutti i giorni ci impedisce di vedere che cosa viene celato, ecco che arriva Salmaregia a confutare il nostro sistema di credenze: c’è vita oltre la vita, ossia dietro il fondale rappresentato da montagne locali a due dimensioni come Monte Merlana per esempio. Si perchè l’avventura in stile Kerouac a Salmaregia, che è sempre una località appartenente al comprensorio di Nocera Umbra come frazione Colle del resto, rientra nelle spinte indirette acquisite prendendo atto della storia locale che cita più volte anche nel famoso libro di SC su Castrum Collis parte II, progetto in rete https://umbriawayformazione.altervista.org/ci_project_glocal/index.php/ColleGalleryDynamic/colleview , questa località che inizia a perdere prestigio a partire dal XVII secolo. Il fatto è che stiamo esplorando una zona borderline di confine tra Umbria e Marche e non è un caso che non potendo “bucare” direttamente monte Merlana “dalle terre di mezzo” per avere direttamente accesso ai “mondi di dietro“, si è dovuto aggirare una distanza irrisoria in linea d’aria facendo più di mezz’ ora di macchina (20-25 km) aggirando il monte Alago da Bagnara per poi salire e scendere i valichi che a tratti appartengono all’ Umbria e altre volte invece sono in territorio marchigiano (con tanto di punti identificativi a separare le due entità geografiche). Certo questa idea di non potere semplicemente bucare la montagna che hai sopra la testa per fare invece il giro del mondo è un pò fastidiosa, ma quando il cambio di prospettiva si realizza il beneficio è indiscusso: è come vedere abbattere un limite che ci eravamo fissati nella nostra testa (il mondo finisce sulla parte frontale di Monte Merlana) mentre in realtà l’universo che si nasconde dietro, con la Valle di Salmaregia e le sue ricchezze, lascia basiti e brasati per la sorpresa di vedere che il mondo non finisce allo stretto di Gibilterra! Salmaregia importante per la storia quindi e anche ricca di leggende che riguardano Ottone III intorno all’ anno mille sceso in Italia dalla Germania per diventare Imperatore ma morto giovane e seppellito da qualche parte con tutti i suoi tesori. web design umbriaPrima di arrivare a Salmaregia in realtà abbiamo incontrato diverse biforcazioni ad interesse storico, per cui di fatto questa avventura on the road andrà ripetuta per indagare sulle numerose sottovarianti nascoste nella variante principale (deformazioni professionali per scacchisti asbituati all’ albero di Kotov!). E’ decisamente impressionante l’ampiezza del territorio comunale perchè di fatto il giro giro tondo fatto partendo da Colle, aggirando le montagne per vedere il suo contenuto nascosto in un misterioso backstage, circumnavigando in stile Magellano il monte Alago via Bagnara e decidendo poi da Salmaregia di rientrare a destinazione usando una via altrettando inedita verso Gualdo, rientrando poi a sorpresa sulla famosa Ancona – PG per un breve tratto finale, ci ha lasciati “stereofatti” alla Frassica su quanta strada di fatto è stata percorsa in km, complessivamente intorno ai 70. Con una andatura turistica a bassa velocità messa in atto per godersi una strada superba a livello di bellezze che ha da offrire (all’ andata passando da Case Basse) ci abbiamo messo pigramente circa 40 minuti per completare i circa 25 km che ci separavano dall’ obiettivo. Al ritorno passando da Gualdo il kilometraggio è stato abbondante e debordante! Al di là dei report tecnici resta l’aspetto della suggestione indotta dalla location, ricca come si diceva di storia grazie alla sua altura (più di 600 m sul l.m.) geograficamente in rilievo che la portava a controllare la vallata, soprattutto in epoca comunale dove le dispute tra guelfi e ghibellini costringevano a patti strategici tra potenze locali che avevano l’ambizione di allargarsi come Fabriano, Camerino a scapito di Gualdo e Nocera. web design umbriaSalmaregia aveva compiti di presidio e supporto vitali per Perugia, collegata tramite la famosa via Clementina, perchè grazie al suo esclusivo osservatorio era più facile monitorare un confine sempre a rischio di invasione. Oggi della sua antica grandezza rimane ben poco, se non la torre restaurata e la chiara percezione di una struttura di case adiacenti dislocate a “castello”, usate come rinforzo angolare del nucleo principale, situate intorno al centro nevralgico rappresentato dall’ alto osservatorio. Persone che vivono in questo meraviglioso borgo? Poche di certo, ma la pace e la serenità che si respira osservando dall’ alto l’intera vallata impregano Salmaregia di un’ aurea mistica, che certamente illumina ogni mente che vuole ascoltare e lasciarsi suggestionare dalla “poesia antica” che ogni pietra trasuda. Ovviamente l’aspetto più sconcertante dell’ escursione rimane quello del viaggio di scoperta: il constatare che esistono universi complessi nascosti dietro quelli tradizionali (ironia della sorte a un certo punto sulla strada del ritorno abbiamo scoperto un bivio per Colle 2 il che proietta il tutto in una dimensione fantascientifica del tipo materia/antimateria con tanto di universi paralleli alla Clarke), il proiettarsi oltre le colonne d’Ercole per scoprire che il mondo NON FINISCE, ma di fatto INIZIA sempre a ritmi incessanti, sgretola quel fondale vincolante che aveva popolato il nostro sistema di credenze fissando dei limiti. Da questo punto di vista una incursione turistica a Salmaregia diventa una sorta di “medicina solenne” per abbattere tutto ciò che è limitante e circoscritto come chiusura mentale in stile colonne d’Ercole oltre le quali non si può più andare o conoscere (le montagne che ostruiscono mondi!). E per conoscere meglio Salmaregia certo il sito al top che ci aiuta rimane sempre il fantastico https://www.iluoghidelsilenzio.it/castello-di-salmaregia/ ma non mancano in rete certo approfondimenti come https://www.raccontidellostomaco.it/la-valle-di-salmaregia-un-tesoro-nascosto-tra-umbria-e-marche/ o https://aristocraziaduracruxiana.wordpress.com/2019/01/26/salmaregia-la-memoria-ottoniana-che-aleggia-nel-cuore-dellappennino-umbro-marchigiano/ o ancora https://medium.com/@matteobebiautore/il-castello-di-salmaregia-ac4a450ccc98




Dagli appennini alle Ande con De Amicis? No dagli appennini alle Alpi con il film di Francesco Nuti Tutta colpa del Paradiso e un intrepido trekkista e anche con il CAI locale!

web design umbriaDiciamocelo, noi umbri siamo fortunelli, circondati come siamo da montagne e da sentieri e da vette alla nostra portata da conquistare certo il contatto con la natura non ci manca e nemmeno le visioni mozzafiato che quietano l’anima e ci riconciliano con le bellezze create dall’ universo (facendo bene attenzione a non calpestare qualche sostanza dall’ aroma sospetto, ndr) , senza neanche andare troppo lontano basta andare a vedere le suggestive vedute dal Serrasanta locale per trovare conferme all’ assioma iniziale.web design umbria

Del resto persino registi brillanti sono rimasti stregati dalle vedute mozzafiato offerte dalla natura e dalla montagna, un esempio su tutti il film del 1985 Tutta colpa del Paradiso di Francesco Nuti con Ornella Muti, approfondimenti https://it.wikipedia.org/wiki/Tutta_colpa_del_paradiso, ambientato prevalentemente in Valle d’Aosta, nella Val d’Ayas, in una tipica baita nei pressi della località Champoluc, nel comune di Ayas. Alcune scene sono state girate nella frazione Pellaud di Rhèmes-Notre-Dame. La trama del film é leggera e poetica come prevede lo stile di questo sfortunato artista e anche l’originalità del dettaglio legata allo stambecco bianco da toccare, avvistare e fotografare dal marito della ex-moglie di Nuti dà un tocco di originalità a tutta la costruzione come chi insegue una balena per tutta la vita a caccia di una irraggiungibile felicità.

web design umbriaC’è il dilemma di questo figlio e il suo futuro da costruire: Nuti si rende conto (Romeo nel film) che la vita del ragazzo che non conosce il suo vero padre é perfettamente inserita in un contesto sano e che stravolgere il suo habitat naturale per trascinarlo in un futuro incerto forse senza prospettive sarebbe una scelta sconsiderata. Finale positivo, scegliendo la cosa giusta il nostro regista/attore finalmente si sente amato da tutti (cosmo compreso) e riesce persino a vedere lo stambecco bianco come chi toccando il mito riservato a pochi placa le sue ansie assaporando un mondo di affetti ritrovato con fratture interiori risanate.web design umbria

Da segnalare bellissimi itinearari tratteggiati e costruiti da trekkisti locali, come questo che estrapoliamo da uno dei tanti anonimi appassionati di montagna estratti random dalla rete che confessa la sua passione per il trekking proprio a partire dal film e così alla domanda é nato prima l’uovo o la gallina (l’amore per la montagna e la natura e l’aria buona in generale) la risposta non può che essere che ovvia: se non ti piace la montagna e non apprezzi la natura, prima vedi il film “tutta colpa del paradiso” e poi aspetti un pò per vedere l’effetto che fa con un risultato prevedibile a giudicare da video come https://www.youtube.com/watch?v=7UyVEqQBMYQ&feature=youtu.be che ci invogliano ulteriormente ad avvicinarci ad alpi, ande o appennini che siano. Anche perché come suggerisce il protagonista stesso, con le tre “emme” sinonimo sì di montagna ma anche di Michele (il nome del nostro intrepido videomaker che ha scritto in solitaria gli itinerari) e soprattutto di “magnate” aspetto ludico gastronomico che compensa lo spreco di calorie usate per adempiere agli sforzi programmati per raggiungere rifugi ad altezze importanti dove c’è sempre un cuoco che lavora, vai sempre sul sicuro. A questo punto essendo stati contagiati postitivamente dall’ entusiasmo dimostrato dal trekkista anonimo in questione non ci resta che uscire di casa (quando un nuovo decreto lo prevederà eh eh) e correre subito al CAI locale, per esempio http://www.caigualdotadino.it/ e iscriverci, per iniziare a scoprire mondi di cui non sospettavamo neanche l’esistenza!




BookBreakdown con Codeigniter? Ma non bastava il Lockdown?

web developer umbriaMai sentito parlare di BookBreakdown? E’ un metodo per scomporre un libro in tutti i suoi aspetti fondamentali, un esempio lo puoi vedere dal mio nuovo progetto http://umbriawayformazione.altervista.org/ci_project_longitudine/ dove Codeigniter Framework riduce a brandelli in senso propositivo il bellissimo libro di Dava Sobel Longitudine. A pensarci bene un libro é una fonte preziosa di informazioni e anche se non parlassimo di un saggio storico che si presta per l’esperimento tecnologico del nuovo progetto messo in piedi da Umbriaway Consulting (in realtà l’idea era del 2017, ma realizzata in grezzamente in procedurale) c’è sempre tanto da scavare e da disseppellire. Un libro alla fine é come un nuovo file aperto con photoshop, lo puoi idealmente immaginare come una serie di layer che si sovraqppongono e intrecciano nei modi più disparati dando luogo a qualcosa di organico e coerente. web design umbriaQuali sono questi layer? Ambientazione, personaggi, cronologia storica (come nel caso del progetto longitudine dove il focus é concentrato) , trama, eventi esterni/interni, interazioni etc etc. In questo terzo progetto http://umbriawayformazione.altervista.org/ci_project_longitudine/ l’importanza dell’ applicativo non sta tanto nella cornice tecnica ma nei contenuti per l’appunto! Il tutto potrebbe essere ampliato inserendo un motore di ricerca per esempio o allargando i layer da analizzare (in questo caso di attivo c’è solo l’aspetto storico). In ogni caso ancora una volta si dimostra la plasticità creativa di Codeigniter che si adatta con facilità anche alle idee più irrazionali e umanistiche anche con una certa libertà di espressione grafica! Potenza del foreach potremmo sintetizzare! Per entrare nel vivo dei contenuti riportiamo le info presenti in home:

COME LA VITA DI UN GENIO SOLITARIO CAMBIO’ LA STORIA DELLA NAVIGAZIONE: John Harrison (Foulby, 3 aprile 1693 – Londra, 24 marzo 1776) è stato un orologiaio e inventore inglese. Tra i suoi principali contributi vi fu l’invenzione, nel 1761, del cronometro marino, che permise di determinare con precisione la longitudine in alto mare, dando un decisivo apporto allo sviluppo della navigazione. La longitudine (dal latino longitudo, longitudĭnis derivato di longus, “lungo”) è la distanza angolare misurata in gradi, lungo l’arco di parallelo compreso tra il Meridiano fondamentale, Meridiano di Greenwich, e il meridiano passante per il punto considerato. In riferimento al meridiano di Greenwich, esiste una Longitudine orientale da 0 a 180° gradi e una Longitudine occidentale da 0 a 180°. Essa è definita in maniera analoga, ma riferita a differenti meridiani e piani di riferimento, anche in astronomia. Longitudine è un saggio della scrittrice divulgatrice scientifica statunitense Dava Sobel

In ogni caso ancora una potentissima dimostrazione di Codeigniter che sfruttando materiale già pronto in procedurale con dei semplici copia e incolla e la creazione di viste-modelli e controller per adeguare il tutto ha consentito in tempi ragionevoli di aprire e chiudere un progetto semplicemente sfruttando le competenze acquisite lavorando da un mese scarso su http://umbriawayformazione.altervista.org/ e http://umbriawayformazione.altervista.org/ci_project_competenze/. Lunga vita al sommo https://codeigniter.com/download!




Cinquanta sfumature di sessione, quello che Anastasia con il manuale del framework non ti dirà mai nella stanza torbida di Codeigniter

Oggi ho risolto il problema delle sessioni, eureka, era da una ventina di giorni che speravo di sistemare! Ma il titolo che ci azzecca? Mica è la stanza dei peccati del libro pakko più letto del pianeta dove le confessioni scabrose diventano business da intrattenimento! No qui abbiamo a che fare con il manuale di Codeigniter dove si leggono un sacco di cose belle e meravigliose ma manca poi quel “quid” che consente al NEWBIE di APPLICARE poi la tecnica o la singola istruzione sciorinata dalla bibbia sacra del framework per RISOLVERE UNA QUESTIONE PRATICA. Vediamo prima in sintesi di cosa stiamo parlando. Andando su http://umbriawayformazione.altervista.org/ci_project_competenze/ e facendo il login si entra in informazioni riservate (ma non troppo, non ci sono numeri di carte di credito) che sono protette dall’ esterno su altri browser dalle sessioni, identificate univocamente da id esclusivo. Come tutti Il protocollo HTTP usato per la connessione e la trasmissione delle pagine Web, è un protocollo SENZA MEMORIA o STATELESS. Per aggirare questa situazione possono tornare utili le sessioni. In procedurale avremo una classica situazione caratterizzata daL PULSANTE CHE ACCENDE LE DINAMICHE IN OGGETTO:

Session_start();

Quando la sessione viene ATTIVATA E APERTA viene inizializzato un ARRAY SUPERGLOBALE di nome

$_SESSION[];

un cassetto che andrà a ricevere tutti i dati che si intende ricordare, spesso username e password di chi si sta per LOGGARE. La domanda retorica “ma la $_SESSIONweb design umbria é vuota o piena” serve a proteggere con una istruzione condizionale IF / ELSE tutte le pagine che si intendono occultare al visitatore scaltro che magari alle nostre spalle adocchia un indirizzo web e intende replicarlo su altro browser presso altra macchina. Per esempio potremmo includere un file per queste pagine dove all’ interno esternamente lavora una condizione del tipo se la superglobals é piena e contiene la variabile X,Y,Z fai vedere il contenuto della pagina, altrimenti reindirizza il curiosone troppo curioso altrove, magari al form di login! Ok il manuale di Codeigniter darà per scontato che un minimo di PHP bisogna conoscerlo per seguire almeno le indicazioni base, ma di fatto poi la pratica quando hai un corpo fatto di vestiti di anima e di carne ed ossa (rispettivamente la VIEW, il controller e il Model) che differisce dalla linearità non sai dove devi scrivere le cose e neanche se la sintassi poi suona bene perché di fatto devI procedere a tentoni cercando di incapsulare con delle graffe questo o quell’ elemento, finche alla fine l’azzecchi e la risposta arriva; per far funzionare le sessioni devi richiamare per ogni pagina che si desidera

($this->session->userdata(‘nomevariabilesessione’))

intorno alla QUERY del MODELLO che ovviamente é diversa per ogni progetto e ha le sue specificità legato alla pagina a cui il controller con il suo metodo é legato! Ma mica il Newbie é come la maga Circe che le cose le sa per nascità onnicomprensiva divina?! Ma per impare l’inglese conoscere almeno una lingua alternativa base per capire quali sono i pronomi e i verbi e i complementi oggetto non sarebbe utile?! Più che utile , indispensabile! Avere un minimo di destrezza con la grammatica di base, in questo modo passare a Codeigniter dopo aver sperimentato un pò di procedurale é un balsamo benefico. In ogni caso scomporre i problemi grandi in piccoli pennelli (chi non ricorda la pubblicità cinghiale?) produce enormi vantaggi e una volta entrati nella stanza segreta delle sessioni con Anastasia ogni più torbido segreto sarà rivelato!




Come applicare una mandrakata in Codeigniter e far quadrare il cerchio quando andiamo incontro a sicura disfatta e ribaltare l’esito della lotta

web developer umbriaLa MANDRAKATA è uno dei tanti cavalli di battaglia profusi nel mondo dello spettacolo dal recentemente scomparso Gigi Proietti che se ne é andato amato democraticamente dalla massa intera, mettendo tutti daccordo sulle sue eccezionali qualità di uomo di spettacolo e maestro insuperabile, osannato ovunque (e non potrebbe essere altrimenti) da quelli di destra e quelli di sinistra, da complottisti e terrapiattisti, da trumphisti e sostenitori della difesa Pirc. Tatticamente l’idea di mandrakata pubblicizzata dal Grande Proietti si presta bene anche a risolvere problematiche di “rattoppo” nello sviluppo web in codeigniter quando la soluzione a un problema non arriva. Analizziamo la situazione presente all’ indirizzo http://umbriawayformazione.altervista.org/index.php/home/planner dove volendo mostrare le attività di formazione svolte da umbriaway consulting al contrario, ossia con un ordine discendente in modo da vedere i risultati a partire dall’ attualità di data e non dalla più lontana, ho pensato di inserire dei link nel primo campo cercando di emulare la prestazione dell’ ordine ascendente, quindi copiando il tutto e modificando nomi di funzioni in DESC al posto di ASC nella query per sparare i dati in una nuova pagina, dopo aver creato i dati in una nuova tabella. Peccato che all’ interno dell’ espressione:

public function get_planners($limit, $start)
{
$this->db->limit($limit, $start);
$query = $this->db->get(“nomedellatuatabella”);
return $query->result();
}

dopo vari tentativi per incastrarci dentro un semplice order by data desc e consultando il manuale all’ indirizzo versione tre (quando hai un problema la prima cosa da fare é quella di vedere se nella bibbia dello sviluppatore codeigniter si trovano le risposte) https://codeigniter.com/userguide3/index.html NON TROVANDO COMPOSIZIONI DI QUERY PERTINENTI alle mie esigenze generando in creazioni arbitrarie errori e incastri improbabili nella sintassi, ho dovuto ripiegare su trucchi tattici non proprio corretti (perché in questo caso sono andato a far saltare una paginazione comunque non indispensabile). Alla fine esasperato ho applicato una MANDRAKATA per aggirare il problema, ossia ho tolto il meccanismo della paginazione per la pagina dei dati discendenti, una soluzione stilisticamente deprecabile ma comunque efficace perchè dopo la semplificazione si é avuto nel modello:

public function get_planners_desc()
{
$query = $this->db->query(“
select * from nomedellatuatabella
order by data desc
limit 15
“);
if ($query->num_rows() == 0) {
show_error(‘database vuoto!’);
} else {
return $query->result();
}
}

dove alla fine della query compare un limit 15 che come un decreto ministeriale crea restrizioni sui record da visualizzare per pagina. Fallita quindi la costruzione della query builder iniziale per limiti miei da NEWBIE (è meno di un mese che sto sperimentando questa tecnologia) se non volevo perdere la battaglia ho dovuto applicare qualcosa di semplice ma comunque di funzionale! E’ proprio il caso di dire dopo l’analisi di questa dinamica di combattimento che grazie a una query vecchia maniera con un limit 15 finale ho sconfitto temporaneamente il nemico pronto a ricaricare le batterie per la prossima sfida! E rileggendo il tutto adesso da distanze siderali, senza ATOM a sporcare il codice, mi sembra di avere intuito che il problema del perché FORSE tutto non funzionava cercando di non rovinare la paginazione, potrebbe essere legato al fatto che non ho inserito i parametri iniziali nella mia nuova query (una banale dimenticanza?), potrebbe essere una idea da tenere buona per risolvere nelle prossime partite!




Diventa PRIMA NAZIONALE in due giorni risolvendo il problema della gestione di un FORM in CODEIGNITER FRAMEWORK

web developer umbria

A Roma dicono te fai paura da solo a no quello era te sei parlato da solo, ma quello che é successo dal punto di vista di crescita del punteggio elo tra Lunedì due novembre e oggi Mercoledì 4 novembre ha dell’ incredibile dal punto di vista della risoluzione dei problemi. Sul punteggio elo e le categorie negli scacchi ormai ne parlo da diverso tempo ma per fare un ripasso vediamo quali sono questi step di crescita sportiva che un agonista in erba (definito inclassificato) dovrebbe compiere verso l’alto prima di arrivare alla TRASCENDENZA della categoria GM:

Non Classificato (NC)
Terza Sociale (3S)
Seconda Sociale (2S)
Prima Sociale (1S)
Terza Nazionale (3N)
Seconda Nazionale (2N)
Prima Nazionale (1N)
Candidato Maestro (CM)
Maestro (M)
Maestro FIDE (MF)
Maestro Internazionale (MI)
Grande Maestro (GM)

web developer umbriaSe una guerra è composta da molte battaglie, così come un torneo di scacchi fatto di diversi turni é segnato da sconfitte e vittorie, così l’avventura formativa QUOTIDIANA iniziata su una tecnologia sconosciuta lunedì 12 novembre si sta rivelando un viaggio ricco di insidie ma anche NON PRIVA DI soddisfazioni e di vittorie parziali, esattamente a quello che accade all’ agonista di scacchi in torneo. Lunedì fino alle 21 e 15 ero equiparato (o meglio autoequiparato!) a livello simbolico di conoscenze alla terza sociale. Poi alle 21 e 15 riesco a realizzare il passaggio da SERVER LOCALE A SERVER DI PRODUZIONE e passo di categoria guadagnando elo (sempre simbolicamente) diventando TERZA NAZIONALE. Categoria che é perdurata fino alle 21 e 40 di Martedì 3 Novembre, quando per grazia divina sono riuscito a far funzionare il mio form grazie ai suggerimenti indiretti presenti in https://umbriawayformazione.wordpress.com/2020/11/03/imparare-dagli-errori-non-sono-gli-scacchi-ma-e-codeigniter/ dove si capisce una cosa sostanzialmente ribadita anche alla mia prima richiesta sul forum ufficiale, https://forum.codeigniter.com/, cioé il fatto che non PUOI RISOLVERE UN PROBLEMA se non consulti una fonte che può aiutarti a risolvere il problema è questa sorgente di acqua fresca é il MANUALE, https://codeigniter.com/userguide3/index.html . Quindi ieri leggendo alcune sezioni specifiche del manuale SONO RIUSCITO A FAR FUNZIONARE IL MIO FORM, passando simbolicamente alla categoria SECONDA NAZIONALE. Ma questa mattina sempre spulciando il manuale sono riuscito a risolvere i problemi legati ALLA SICUREZZA DEI FORM, passando simbolicamente PRIMA NAZIONALE! Quante emozioni nell’ arco di poche ore! A questo punto se nei prossimi giorni riesco a risolvere il problema della PAGINAZIONE passo a tutti gli effetti CM di Codeigniter nel senso che poi c’è comunque un abisso di conoscenze da colmare! Ma vediamo in dettaglio cosa è successo sui FORM che quando vengono messi in piedi (FASE 1) sono delicati sotto il punto di vista della sicurezza (FASE 2). All’ indirizzo http://umbriawayformazione.altervista.org/ c’è in alto a destra un form che ora funziona grazie alle istruzioni presenti sul manuale alla voce specifica https://codeigniter.com/userguide3/libraries/input.html?highlight=form :

Accessing form data
Using POST, GET, COOKIE, or SERVER Data

CodeIgniter comes with helper methods that let you fetch POST, GET, COOKIE or SERVER items. The main advantage of using the provided methods rather than fetching an item directly ($_POST[‘something’]) is that the methods will check to see if the item is set and return NULL if not. This lets you conveniently use data without having to test whether an item exists first. In other words, normally you might do something like this:

$something = isset($_POST[‘something’]) ? $_POST[‘something’] : NULL;

With CodeIgniter’s built in methods you can simply do this:

$something = $this->input->post(‘something’);

The main methods are:

$this->input->post()
$this->input->get()
$this->input->cookie()
$this->input->server()

TRADOTTO non riuscivo a risolvere i problemi perché nel mio MODEL mancava una istruzione MOLTO IMPORTANTE messa a un certo punto ossia

$something = $this->input->get(‘something’);

A questo punto tutto si è messo a funzionare come per magia nel senso che se digito il nome di un regista l’operatore LIKE fa il suo sporco lavoro ma poi il novizio deve interrogarsi e chiedersi in particolare:

se digito nulla che cosa accade?
se digito un nome inesistente restituisci all’ utente un messaggio specifico?
e la questione di SQL iniecton come la gestisci?

Allora che cosa è stato fatto Martedì 3 novembre 2020 verso le 22? Sono state risolte le prime due questioni con una clausola IF – ELSE IF in modo da dire all’ utente “guarda che se fai questa cosa qui vai incontro a questo messaggio etc”. Dopodichè soddifatto SONO SBIANCATO quando verificando che inserendo un singolo APICE ingrediente tipico degli ATTACCHI SQL INIECTJON tutta la mia applicazione diventava vulnerabile anche perché il messaggio di sistema riportava ulteriore info da dare all’ utente per capire la struttura del mio database! PANICO ASSOLUTO, che fare, devo trovare subito il modo di disabilitare il FORM senza alterare il codice e scartabellando in rete e anche sul manuale è saltato fuori all’ indirizzo https://codeigniter.com/userguide3/libraries/input.html?highlight=input%20security:

Input Filtering
Security Filtering

The security filtering method is called automatically when a new controller is invoked. It does the following:

If $config[‘allow_get_array’] is FALSE (default is TRUE), destroys the global GET array.
Destroys all global variables in the event register_globals is turned on.
Filters the GET/POST/COOKIE array keys, permitting only alpha-numeric (and a few other) characters.
Provides XSS (Cross-site Scripting Hacks) filtering. This can be enabled globally, or upon request.
Standardizes newline characters to PHP_EOL (\n in UNIX-based OSes, \r\n under Windows). This is configurable

OK! Ottimo anche se ero seccato perché il form risultava inagibile, l’idea era di togliere la funzionalità di GET sul form in attesa di risolvere i problemi di sicurezza e allora vado sul CONFIG.PHP e cerco $config[‘allow_get_array’] per dargli un valore FALSE che non è di default! Carico i file e verifico che funzioni! Ottimo! Peccato però che l’inibizione sul GET é assoluta e questo mi ha portato a rendere inutile tutto il lavoro sul resto dell’ applicativo basato sul passaggio di querystring! Quindi mi sono detto che serviva altro e infatti l’ho trovato apparentemente:

$nomevariabile = $this->security->xss_clean($this->input->get(‘nomevariabile’));

 

ma questa soluzione non lavorava, per cui alla fine ho trovato anche:

$nomevariabile = $this->security->sanitize_filename($this->input->get(‘nomevariabile ‘));

 

e questa volta il malintenzionato che cerca di giocare con gli APICI sul mio form si vede restituire un PIKKE come risposta!

Grazie a queste incredibili scoperte raggiunte consultando il manuale di CODEIGNITER, https://codeigniter.com/userguide3/index.html , non senza difficoltà, oggi mi sento MOLTO PRIMA NAZIONALE. Ma sono bene che se voglio passare CM e guadagnare altro elo per acquisire almeno le basi di Codeigniter Framework devo RISOLVERE ancora il problema della PAGINAZIONE. Un ultimo scoglio fatale per http://umbriawayformazione.altervista.org/ ? La sfida con questo potentissimo e affascinante Framework continua, at the next battle! Intanto oggi siamo arrivati al giorno 24 con tre vittorie di fila negli ultimi tre turni di quotidianità (risultati reali raggiunti sul campo!). Non so dire se http://umbriawayformazione.altervista.org/ sia realmente sicuro adesso ma almeno mi sembra di aver fatto qualcosa per prevenire eventuali attacchi esterni!




Vincere a 2.757 metri con Codeigniter è fattibile? Forse ti confondi con il Giro d’Italia, ma il web developer é come un ciclista che tenta una scalata conoscitiva: per esempio il CRUD è alla tua portata?

Il CRUD per gli sviluppatori é come il santo Graal nelle leggende di Re Artù: l’acronimo sta per CREATE-READ-UPDATE-DELETE. Si tratta di una estrapolazione e di una gestione dei dati dal database che riguarda come esercizio muscolare una delle prime attività di qualunque web developer, tanto per restare in tema di ciclismo. Codiigniter è abbastanza ostico all’ inizio (ma sempre meno complicato da assimilare rispetto a Laravel per esempio) per cui se la sensazione é quella di non riuscire a fare la salita dello Stelvio per transitare per primo alla Cima Coppi e magari vincere la tappa, conviene fermarsi, rifornirsi di bevande e mantellina e consolidare quello che è ormai base tecnica consolidata. Ripassiamo quindi i fondamentali prima di affrontare la questione del crud perchè sappiamo che la salita richiede zuccheri e si rischia di andare come si dice in gergo, quando si tenta di studiare una nuova tecnologia, FUORI RUOTA, come dicono i commentatori della Rai a gara sportiva in onda. Abbiamo detto che conviene concentrarsi su questo framework perchè offre un set di strumenti da coltellino svizzero integrati in unico ambiente di sviluppo, così a sostegno ci ritroviamo numerosi helper o funzioni specifiche utili per risolvere problemi e librerie per attingere a risorse esterne come il famoso database per esempio. Abbiamo sottolineato più volte l’importanza di separare lo scheletro umano dalla muscolatura e dai vestiti che lo compongono, per cui il vantaggio di questa gestione é che tutto è circoscritto alla sua natura strutturale, per cui avremo un Modello che si occuperà della parte logica di gestione dei dati per esempio, avremo una View che non farà altro che visualizzare le nostre richieste a video e in mezzo abbiamo il nostro bel CONTROLLER che dobbiamo considerare come un gigantesco pannello di controllo che attinge dal Model per riconsegnare alla Vista. In questo modo tutto è ordinato e pulito a livello di sviluppo e anche più facile mettere in piedi degli applicativi risparmiando un sacco di tempo. Per imparare Codeigniter bisogna avere conoscenza livello base di php procedurale e un pò di OOP insieme a CSS, HTML e anche Bootstrap per abbellire i nostri vestiti. La ricchezza di funzionalità subito disponibili in uno strumento veloce consentono davvero un gran risparmio di tempo. Per lavorare con codeigniter è sufficiente scaricare un server locale che abbia integrato apache e mysql in modo da parserizzare i nostri file php e un editor di codice e ovviamente il pacchetto completo. Quindi per il localhost che serve alle nostre pagine scaricare https://www.apachefriends.org/it/index.html, per un editor visuale abbiamo cose del tipo ATOM, SUBLIME o VISUAL STUDIO CODE scaricabile all’ indirizzo: https://code.visualstudio.com/ e infine il nostro framework si trova all’ indirizzo https://codeigniter.com/ ; adesso ripassiamo i fondamentali perchè lavorare e sviluppare con procedurale è un conto e invece diverso é l’approccio MVC con la definizione di classi e metodi costruttori. Si lavora prevalentemente solo sulla cartella APLLICATION di codeigniter che guarda caso contiene anche una cartella VIEW e una MODEL oltre a quella CONTROLLER! La cartella Sysytem è considerata il core di sistema ed é quella che fa girare il tutto ma é anche un luogo fisico dove non dovremmo mai intervenire. Dentro la cartella Appllication abbiamo la cartella CONFIG e al suo interno molti file critici di configurazione e settaggio come:

database.php
config.php
routes.php
autoload.php

che consentono rispettivamente aggancio al DB e quindi gestione su database mysql, definizione di path sulle url, instradamenti e caricamenti automatici di risorse , ovviamente richiamabili anche da codice scritto normale. Il modello offre le pallottole al caricatore, la pistola controller spara verso la vista e viceversa ritorna i dati su eventuali interazione dell’ utente al controller che andrà a interrogare il modello per farsi restituire dei dati da ri-spedire al mittente. Diamo meglio una occhiata su questo flusso analizzando l’architettura seguente:

L’utente invia una richiesta dalla vista o finestra o browser che viene instradata seguendo criteri di sicurezza per arrivare infine al controller che potremmo considerare una sorta di mago Merlino della situazione. Merlino va a socmodare i suoi amici al di là del muro, gente che lutente finale non vedrà mai che sono:

Model
Librerie
Helpers
Plugins
assets (risorse grafiche)
scripts
etc

una volta prese tutte le info pertinenti alle richieste mette tutto insieme e assembla e spedisce tutto alla vista che sfruttando il CACHING restituisce il risultato richiesto all’ utente. Bello no?!

Semplificando io chiedo il controller restituisce prendendo i dati a destra e a manca come una piovra, per cui é da considerarsi come un vigile che controlla il traffico, ma il lavoro sporco lo fa il MODEL mentre la vista è quella che fa la preziosa senza lavorare se non offrire modo all’ utente di interagire. A questo punto diamo un occhiata anche allo schema del flusso.

Con questo schema se io scrivessi nella funzione index del controller Welcome di default dopo lo scaricamento qualcosa del tipo:

public function index()
{
echo “fantastico adesso posso personalizzare i contenuti a mio uso e consumo!”;
//$this->load->view(‘welcome_message’);
}

che cosa accadrebbe? Semplicemente che Codeigniter mi direbbe picche (ci sarebbe un messaggio di errore) perché la mia istruzione procedurale non segue la logica MVC, se volessi scrivere una bella scritta simile andrei sulla welcome_message.php, commenterei le parti statiche di HTML e magari con un h1 inserirei la scritta personalizzata di cui sopra. Il fatto è che la funzione index reindirizza il flusso verso la view. Quindi lo schema é:

LOCALHOST seguito dal nome del CONTROLLER seguito dal nome del METODO (nome della funzione) seguito da FUNZIONE 2 e infine dai PARAMETRI

Il controller gestisce le richieste, il model manipola i dati e fa da CPU e la vista fa la presentazione all’ utente. Adesso vediamo il CRUD. Prima di entrare nel crud vero e proprio andiamo sulla nostra drogheria preferita: https://www.grocerycrud.com/

Che cosa è questa cosa?

E’ un modo per non tribolare molto per mettere in piedi un CRUD veloce, pertanto in questo articolo lo testeremo con uno scacco matto in dieci mosse!

Mossa numero 1, scaricare codeigniter

Mossa numero 2, scaricare grocerycrud

Mossa numero 3, decomprimere i due pacchetti e prelevare la cartella APPLICATION di grocerycrud sovrascrivendo quella di codeigniter con lo stesso nome (copia e incolla); fare la stessa operazione anche per la cartella ASSETS altrimenti ci darà errore

Mossa numero 4, configurare il database come sappiamo interagendo su database.php e scrivendo i 4 parametri che sono server, utente, pwd e nome database

Mossa numero 5, definire un nuovo controller chiamato Main nel file main.php

Mossa numero 6 scrivere all’ interno del controller il seguente codice:

<?php if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

class Main extends CI_Controller {

function __construct()
{
parent::__construct();

/* Standard Libraries of codeigniter are required */
$this->load->database();
$this->load->helper(‘url’);
/* —————— */

$this->load->library(‘grocery_CRUD’);

}

public function index()
{
echo “<h1>Welcome to the world of Codeigniter</h1>”;//Just an example to ensure that we get into the function
die();
}

public function western()
{
$crud = new grocery_CRUD();
$crud->set_table(‘western’);
$output = $crud->render();

$this->_example_output($output);
}

function _example_output($output = null)

{
$this->load->view(‘our_template.php’,$output);
}
}

/* End of file Main.php */
/* Location: ./application/controllers/Main.php */

 

Mossa N 7, creare una vista di nome our_template.php

Mossa N 8 scrivere le seguenti info nel file vista:

<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”utf-8″ />

<?php
foreach($css_files as $file): ?>
<link type=”text/css” rel=”stylesheet” href=”<?php echo $file; ?>” />

<?php endforeach; ?>
<?php foreach($js_files as $file): ?>

<script src=”<?php echo $file; ?>”></script>
<?php endforeach; ?>

<style type=’text/css’>
body
{

font-size: 14px;
}
a {
color: blue;
text-decoration: none;
font-size: 14px;
}
a:hover
{
text-decoration: underline;
}
</style>
</head>
<body>
<!– Beginning header –>
<div>
<a href='<?php echo site_url(‘examples/offices_management’)?>’>Offices</a> |
<a href='<?php echo site_url(‘examples/employees_management’)?>’>Employees</a> |
<a href='<?php echo site_url(‘examples/customers_management’)?>’>Customers</a> |
<a href='<?php echo site_url(‘examples/orders_management’)?>’>Orders</a> |
<a href='<?php echo site_url(‘examples/products_management’)?>’>Products</a> |
<a href='<?php echo site_url(‘examples/film_management’)?>’>Films</a>

</div>
<!– End of header–>
<div style=’height:20px;’></div>
<div>
<?php echo $output; ?>

</div>
<!– Beginning footer –>
<div>Footer</div>
<!– End of Footer –>
</body>
</html>

 

Mossa N 9 , verificare che il nome tabella sia giusto:
$crud->set_table(‘western’);

 

Mossa N 10 guardare l’effetto che fa all’ indirizzo:
http://localhost/your_project/index.php/main/western

 

Semplicemente fantastico questo Grocery CRUD FREE scaricabile all’ indirizzo https://www.grocerycrud.com/ ! Funziona tutto , la modifica, l’addizione di dati, la cancellazione, lo abbiamo provato aggiungendo per un pugno di dollari e lo straniero denza nome ed é tutto ok! Il tutorial for dummies non spiega tutto in maniera lineare all’ indirizzo https://www.grocerycrud.com/documentation/create-crud-codeigniter-tutorial/ e qui abbiamo sperimentato la procedura del PRENDO TUTTO IL CONTENUTO IN DOWNLOAD DI GROCERY CRUD E LO COPIO SOPRA LE STESSE CARTELLE DEL CONTENUTO SCARICATO CON IL FRAMEWORK ORIGINALE DECOMPRESSO! Risultato tutto ok, attenzione anche alla parte della pagina statica che nell’ HEAD cicla le risorse ASSETS:

<?php
foreach($css_files as $file): ?>
<link type=”text/css” rel=”stylesheet” href=”<?php echo $file; ?>” />
<?php endforeach; ?>
<?php foreach($js_files as $file): ?>
<script src=”<?php echo $file;?>”></script>
<?php endforeach; ?>

 

 




Codeigniter + Bootstrap una accoppiata vincente: parte IV completare le basi del nostro progetto WESTERN MVC!

Ok dopo aver visto nella prima puntata una overview generale su Codeigniter, cercando gli strumenti iniziali per iniziare, individuando i link dove scaricare le nostre cose (vedere https://umbriawaydesign.wordpress.com/) dopo aver bucato la pagina con i dati che é un azione per l’aspirante sviluppatore simile all’ allunaggio terrestre di Amstrong e perfezionato il vestitino della domenica per dare usabilità e interazione all’ utente (vedere puntate due e tre su https://umbriawaydesign.wordpress.com/) completiamo questa prima parte sulle basi di codeigniter inserendo la quarta sezione, quella della responsività, quindi torniamo a fare il mestiere del web designer e non quello del web developer! La parola magica per chi costruisce web application si chiama RESPONSIVITA’, ossia la capacità di vedere la mia APP su tutti i dispositivi dal più piccolo al più grande. Le media query con i loro breack point dovrebbero risolvere ma perché non integrare nei nostri progetti il potentissimo framework grafico BOOTSTRAP che divide le pagine in lunghezza in dodici colonne a prescindere dalle dimensioni? In questo modo siamo a cavallo, tanto per restare in tema western con personaggi diventati icona di genere a Los Angeles come John Wayne e registi come Ford o il nostro Leone in Italia. Per fare un albero ci vuole un fiore e quello ce lo abbiamo, visto che il motore con mysql contiene la nostra magica tabella di prova western (la progettazione seria di un DB è un’ altra cosa, non a caso esistono nelle aziende enterprise figure professionali addette solo a questo mestiere come il DB administrator per esempio) e visto che siamo riusciti a creare un pannello di controllo (che è un dono di CODEIGNITER e del suo paradigma MVC) dove il VOLANTE trasferisce da destra a sinistra la nostra vettura lungo la strada (la parte logica del MODEL invia i dati filtrati al controller che con il metodo LOAD carica le pagine di informazioni dinamiche richieste dall’ utente) che va ad esaurire e risolvere gli input sulla grafica , adesso siamo in grado di abbellire e rendere funzionali le nostre applicazioni integrando il framework bootstrap o con CDN o scaricandolo e poi puntandolo in una cartella locale. L’utilità non è solo quella di risolvere la responsività, ma anche di poter disporre di un coltellino svizzero o set di strumenti che ci semplificano la vita, vedere per esempio il problema del recordset verticale che avevamo nella terza puntata citata agli indirizzi di cui sopra. Per cui come si risolve? Il lay out usato prevede una colonna centrale settata con <div class=”col-sm-8 text-left”> quindi vedendo tre colonne intuitivamente siamo in grado di rispondere anche alla domanda non detta ma quante sono larghe le colonne laterali? Ovviamente due ciascuna visto che il tutto tocca il dodici. Ora esiste un componente che si chiama CARD in bootstrap che abbraccia i nostri dati dentro delle cornici specifiche disegnate con classi predefinite che ci consente di spalmare il nostro set di dati non tutto in verticale rendendo la vita di chiunque utente impossibile a causa dello scrolling, ma in orizzontale. Tuttavia per fare questa operazione dobbiamo pensare di dividere quello spazio da otto magari con due colonne, in modo che i dati non finiscano uno sopra l’altro ma si dividono tra le colonne (nel nostro caso le card si configurano automaticamente tre per colonna) con la dicitura <div class=”col-md-2″ > ovviamente il punto di inizio del trasferimento dati e quello finale devono abbracciare solo il componente card la cui parte statica è facilmente reperibile dal sito ufficiale GETBOOTSTRAP dove siamo andati a scaricare il tutto (oppure no, visto che i CDN ci risolvono alcune questioni). In definitiva abbiamo costruito le basi in pochissimo tempo per una applicazione da rendere completa, perché è chiaro che dovremmo implementare le sessioni, magari costruire un LOGIN, oppure creare altre pagine di approfondimento e magari anche sviluppare il nostro DB in maniera più organica con altre colonne da inserire a sostegno visto che la ripetizione dei registi ad esempio nella nostra tabella è considerata ridondanza. Però la struttura base adesso c’è ed esiste e costituisce una perfetta base di lancio per andare oltre la LUNA!




Ma tu ce l’hai un Santo che ti sta simpatico? San Biagio non smettere mai di illuminare le nostre esistenze con la tua birra!

web developer umbriaChi fa TURISMO DI PROSSIMITA’ (quella tipologia di turismo che risponde alla domanda base: ma prima di vedere Londra, Parigi e Los Angeles sai dire quali bellezze hai sotto casa?) sa bene che prima o poi quei sette km inediti che da Colle di Nocera Umbra lo separano da frazione Lanciano si dovranno fare, se non altro per soddisfare un peccato che è irrinunciabile almeno una volta nella vita: consumare i prodotti locali del birrificio artigianale dell’ antico monastero! Sul sito https://www.birrasanbiagio.com/ il claim della birra artigianale non filtrata e non pastorizzata promette bene, infatti lo slogan richiama la nostra attenzione: LA PRIMA BIRRA ARTIGIANALE ITALIANA D’ISPIRAZIONE MONASTICA NUTRIMENTO PER IL CORPO E PER LO SPIRITO! E in effetti qualcosa ci ha colpito, inerpicandoci su fino a Lanciano a quindici minuti da Colle di Nocera Umbra a sette km di distanza, su quella collina dove il turismo è sempre dinamico a corredo del birrificio con una struttura di accoglienza che assicura pace e benessere: il profondo silenzio che si respira immersi tra le verdi colline umbre, una profondità che annulla ogni turbolenza dell’ anima e onda fragorosa del mare dei pensieri con un ascolto che sprofonda negli eoni. Si sta bene in questa località Lanciano 42, cap 06025 comune di Nocera Umbra (PG) . Non a casa nei depliant che promuovono varie iniziative locali ce ne una che ben si addice al luogo: “vacanza nel silenzio”, seguita dalle peculiarità del soggiorno. Ancora una conferma che il paradiso esiste ed è qui sulla terra ora, tesi convalidata dalla degustazione delle birre variegate prodotte da Mastro Birraio! San Biagio quindi assicura rigenerazione e benessere con il suo taglio di birreseo specialist umbria prodotte che sono MONASTA, JUBILO, AURUM (una superba doppio malto che abbiamo apprezzato), AMBAR, GAUDENS e VERBUM, nomi esplicativi che ben esprimono l’incipt del claim citato sopra. Birre chiare, ambrate, scure e al doppio malto, insomma ce ne per tutti i gusti! Il posto è fantastico, puoi degustare tutto quello che vuoi all’ aria aperta in piena libertà e le persone qui sono gentili e cordiali se non altro per qualche forma di solidarietà non scritta con il santo che li ospita. Chissà se tra le varie attività organizzano anche i corsi di Yoga, la cornice sembrerebbe in sintonia e la location sembra ammorbidire anche il segnalato sul sito dell’ FBI più pericoloso in circolazione. Un posto indubbiamente magico che ti fidelizza e che non vuole giacere nel dimenticatoio: se ci vai una volta, difficilmente sarà l’ultima se abiti nei paraggi! Per quanto riguarda il prodotto sfornato da https://www.birrasanbiagio.com/ l’ennesima riconferma del connubio felice tra brand e valorizzazione del territorio. Lo avevamo già notato ieri recandoci a Rasiglia per esplorare la Valle di uno dei tanti fiumi importanti locali che si chiama MENOTRE dove i prodotti del pastificio locale che prende il nome della Valle costituiscono una eccellenza del territorio unica ed esclusiva, anche da giustificare con la qualità un costo lievemente sopra l’ordinario. La sensazione è che Mulholland Drive sarà anche fonte di ispirazione per film cult e Los Angeles è un bel luogo da vedere ma di posti belli per chi vive in Umbria che stanno appena dietro l’angolo, uno non deve neanche sbattersi più di tanto per trovarli! Grazie San Biagio a te e alle tue birre per lasciare aperta quella porta alla tentazione alcolica che è solo una scusa per fare TURISMO DI PROSSIMITA’ e il fatto che le tue miracolose bottiglie da 750 ml comunque si fanno pagare oltre l’ordinario non deve essere di scoraggiamento al novello Magellano che potrà così compensare il suo alleggerimento in euro con la vista di scenari naturali portentosi! Lode a te nostro Santo Prediletto! Info https://sanbiagio.net/ e https://www.iluoghidelsilenzio.it/abbazia-di-san-biagio-lanciano-di-nocera-umbra-pg/




Colazione da Tiffany? No in località Rasiglia!

web design umbriaPer chi ha visto https://it.wikipedia.org/wiki/Colazione_da_Tiffany_(film) , sappiamo che la protagonista, una affascinante Audrey Hepburn, consuma una veloce colazione angolizzando le vetrine di Tiffany. Invece noi abbiamo scelto di consumare la colazione in zona Colfiorito dove esiste un piccolo borgo antico che ha fatto dell’ acqua la sua leva motivazionale-imprenditoriale. La piccola Venezia dell’Umbria in riferimento a Rasiglia, https://www.comune.foligno.pg.it/articoli/la-favola-di-rasiglia, come spot pubblicitario è decisamente eccessivo ma funziona alla grande se alle sei del mattino un gallo o un piccione ti sveglia a Colle di Nocera Umbra per costringerti a colpi di testa imprevedibili! Così senza sapere bene perchè all’ improvviso ti si accende una lampadina: vado a prendere un caffè a Colfiorito, se non altro per scappare da questi piccioni irrispettosi che sballano gli orari concordati per la sveglia e finalmente dopo una miriade di condizionamenti in loop dei media mi vedo una Rasiglia inedita visto che al mattino molto presto c’è poco movimento turistico! seo specialist umbriaDa notare che recentemente un servizio su una emittente locale ha esaltato la nuova frontiera degli escursionisti amanti della montagna, mostrando un bellissimo reportage sul Pale che è più vicina da Foligno rispetto alla nostra meta e propone itinerari di immersione nella natura rigeneranti. Ma Rasiglia è una Boschetto moltiplicato per due, magari molto curata e raggruppata, ma allora come mai Boschetto non la chiamano l’Amsterdam Umbra? Parliamo di Rasiglia come di un piccolo borgo che ha saputo sfruttare le sorgenti del fiume locale Capovena e che nel corso della storia è sempre stato al centro dell’ economia con filande, mulini e frantoi, alimentati e rinvigoriti dall’ essenza vitale della divinità fiume. Non c’è da stupirsi che già nel 1300 con i signori folignati dei TRINCI si sviluppò intorno all’ acqua un fiorente commercio che appunto alimentava tutte le attività agricole e tessili locali, segni ereditati dal passato presenti visitando oggi questo straordinario anfratto della zona di Colfiorito. La forza visionaria degli imprenditori locali ha fatto si di imbrigliare l’acqua in flusso acrobatico in mezzo alle case del paese con cascate carpiate ad effetto, costruzioni in pietra antica che sono molto curate e raccolte in mezzo alla viabilità fluviale. Ovviamente intorno all’ acqua che scorre e rigenera in modo onomatopeico i curiosi turisti non possono mancare strutture di accoglienza per il soggiorno, ristoranti e birrifici, gelaterie e musei, camioncini che vendono prodotti gastronomici locali al top (cipolle e patate) e tir adibiti a paninoteche nomadi che aspettano il turista in transito come ragni dopo aver tessuto la tela. Allora riflettiamo sull’ importanza di questo vitale Santo Graal locale, l’acqua fonte di vita e prosecuzione dinastica: ma come ha fatto un piccolo borgo come Rasiglia a mettere in moto una filiera tursitica di questa ampiezza, dal momento che il tutto forse non supera le dimensioni di Colle e Boschetto compattati insieme? web marketing umbriaCi sono più negozi e musei che case, sembra quasi un paradosso! Bè basta chiedere ad Alexa o ai supporti vocali moderni: ehi google metti da Spotify una musichetta rilassante e che cosa ti viene proposto prima di addormentarti in totale benessere? Proprio il motivetto gorgogliante di un ruscello segno che a Rasiglia si respira proprio un atmosfera particolare! Bè con i dovuti paragoni è come quando vai a Boschetto e ti siedi al cospetto dellweb developer umbriae sorgenti del Rio Fergia? Non proprio, qui la realtà è aumentata e da Colle di Nocera Umbra si può solo fare turismo di prossimità andando a Foligno verso direzione Colfiorito dove il Borgo dall’ antica city dominata dai Trinci è a soli venti km. Ma Rasiglia è solo la punta dell’ iceberg.Prima di Rasiglia il turista in fuga dalle metropoli può approdare in località come Ponte Santa Lucia e Pale dove la terra è baciata dalla fertilità delle acque ma anche dalle meraviglie della natura. Il turista condominiale può cimentarsi allora in escursioni e attrazioni da brividi con attività sportive diversificate che vanno dal Quad, bike ed escursioni a cavallo fino al Trekking, il rafting e il Softair (guerriglie simulate) senza dimenticare ricerche guidate stravaganti come quella legata al tartufo! La zona di Colfiorito è ricca di sapori, di bellezze naturali, di acque gorgoglianti e di terreni altrettanto fertili, un vero paradiso terrestre dove non mancano prodotti al top famosi a livello internazionale come la famosa patata rossa, http://www.larossadicolfiorito.it/ . Ok abbiamo parlato bene di Rasiglia, ma un punto debole ce lo ha? Forse il parcheggio! Noi siamo finiti in un campo sportivo in disuso abbastanza scomodo e lontano che ci ha creato diversi problemi di prima mattina quando non c’era praticamente nessuno! Figuriamoci che cosa deve essere il problema del traffico turistico e del parcheggio alle tre di una domenica pomeriggio! Per la colazione abbiamo optato Ponte Santa Lucia dove esiste un bellissimo negozio di gastronomia locale dal quale abbiamo trafugato pagando un bel saccone di patate rosse, una località famosa per un altro fiume che caratterizza varie attività sportive che si chiama MENOTRE. In definitiva nell’ entroterra folignate verso Colfiorito ci sono tantissime cose non solo da vedere. A questo punto per un approfondimento ulteriore aspettiamo la prossima svirgolata del piccione che sadicamente fuori orario costringe i pigroni locali poco restii a svegliarsi alle sei del mattino a fughe imprevedibili optando per un turismo di prossimità!

Link utili:

https://rasigliaelesuesorgenti.com/

http://www.valledelmenotre.it/




Una giornata tipo di Ken Shiro: salvare il mondo con JavaScript e il Drag and Drop

web design umbria

LA TERRA E’ PRECIPITATA NELLE BARBARIE: SOLO KEN SHIRO E LE SETTE STELLE DELLA DIVINA SCUOLA DI HOKUTO CI POSSONO SALVARE!

Quale è la giornata tipica di Ken Shirov? Certamente avrà molto da fare sulla terra. Ce lo immaginiamo: estirpare i laboratori dove vengono creati virus artificiali, debellare i politici corretti in ogni dove, dare una lezione ai prepotenti, salvare la Terra dall’ inquinamento atmosferico, distruggere le mafie locali, fare a pezzi i terrapiattisti etc etc etc. Ma come si organizza Ken Shiro nelle sue attività quotidiane? Ha forse fatto un corso di Time Management o le sette stella della scuola di Hokuto lo hanno anche fornito di un orologio divino che gli dà solo il tempo di dedicare pochi minuti per ogni task? Vediamo in dettaglio quale è il suo pannello di controllo all’ indirizzo https://www.farwebdesign.com/projectcsshtmljs/kenshiro.html. Ken suddivide gli appuntamenti della sua agenda in tre fasi distinte: quello che deve fare, quello che sta facendo e quello che è stato risolto. La catena di montaggio è sempre la stessa, prima fa a pezzi un terrorista che lancia virus nelle stazioni e mentre lo demolisce lo lascia sospeso nell’ area dell’ agenda IN PROGRESSO poi finito il working progress il terrorista diventa mangime per i polli e la sua missione è completata. Poi deve volare fino a Garbatella dove un gruppo di imprenditori locali vendono le mascherine a dieci euro cadauna e il compito passa di nuovo dalla fase in sospeso a risolto e così via finchè arrivando a fine giornata si concede un attimo di respiro telefonando a Carlsen e battendolo con lo scacco matto della divina scuola di Hokuto. Vediamo come tecnicamente lato frontend una tecnologia come JQuery riesce a fare tutto questo; il progetto è composto da un file CSS, un file con estensione JS e il file statico kenshiro.html che ha le inclusioni alle risorse esterne. Dentro questo file in alcuni punti sono definiti degli ID, identificativi unici, che serviranno a JQuery per dinamicizzare i contenuti. Ovviamente ci sarà un CDN per inserire Jquery a scelta fra i tanti che si trovano in rete: <script src=”https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js”></script> , con questo abilitiamo lo script che abbiamo dentro la cartella JS a lavorare. Come funziona il DRAG and DROP come evento di javascript? Si clicca su un elemento per trascinarlo (metodo dragstart), lo si sposta a piacimento grazie al metodo dragover e INFINE LO SI RILASCIA sfruttando il metodo drag, il tutto dicendo agli elementi iniziali che si sposteranno che hanno un nome e un cognome e alcune caratteristiche di trascinabilità che dovranno interagire con certe aree specifiche e non altre, altrimenti l’azione non avrebbe compimento. Analizziamo la parte statica della pagina:

<div id=”board”>
<div id=”todo”>
<div class=”title”>Da fare</div>
<div id=”item1″ draggable=”true”>
<div class=”cardTitle”>Fermare un gruppo di politici corrotti che governano per se stessi</div>
</div>
<div id=”item2″ draggable=”true”>
<div class=”cardTitle”>risanare le terre di Murdor dall’ inquinamento denunciato da Greta</div>
</div>
<div id=”item3″ draggable=”true”>
<div class=”cardTitle”>Distruggere un laboratorio dove creano virus artificiali</div>
</div>
<div id=”item4″ draggable=”true”>
<div class=”cardTitle”>Convincere i terrapiattisti a cambiare religione</div>
</div>
<div id=”item5″ draggable=”true”>
<div class=”cardTitle”>Bloccare le fake news e sgominare la mafia delle scommesse clandestine</div>
</div>
<div id=”item6″ draggable=”true”>
<div class=”cardTitle”>Tra una bonifica e l’altra risanarsi battendo Carlsen a scacchi</div>
</div>
</div>
<div id=”inprogress”>
<div class=”title”>In corso</div>
</div>
<div id=”done”>
<div class=”title”>Fatto</div>
</div>

Da notare come ciascun compito o task definito con l’abilitazione draggable=”true” sia preso dallo script JS per intercettare l’evento dragstart che consente lo spostamento iniziale degli oggetti su aree in cui verrà rilasciato un evento dragover che intercetterà questa volta le TRE aree di rilascio definite come id=”todo” , id=”inprogress” e id=”done” che ospiteranno anche l’azione finale dello spostamento definitivo (metodo DROP) che per Ken stanno proprio a significare leggo l’agenda, vedo quello che c’è da fare, faccio le cose che riempono uno spazio della giornata “inprogress” e archivio il tutto nella dimensione “DONE” e così il ciclo DA FARESTO FACENDOFATTO giunge a compimento. A guardare il risultato finale si penserebbe che tutta la parte di script è lunga due km, ma JQuery nasce proprio con il dono della sintesi che migliora la prolissità di javascript:

$(‘document’).ready(init); function init() {

$(‘#item1, #item2, #item3, #item4, #item5, #item6’).bind(‘dragstart’, function (event) { event.originalEvent.dataTransfer.setData(“text/plain”, event.target.getAttribute(‘id’)); });

$(‘#todo, #inprogress, #done’).bind(‘dragover’, function (event) { event.preventDefault(); });

$(‘#todo, #inprogress, #done’).bind(‘drop’, function (event) { var notecard = event.originalEvent.dataTransfer.getData(“text/plain”); event.target.appendChild(document.getElementById(notecard)); event.preventDefault(); });

}

web design umbriaAnalizzando bene il tutto, ci sono solo TRE funzioni che utilizzano la famosa pala del rottamatore per le autorimesse, $(afferro_un_elemento): quella che afferra dal cielo gli elementi ITEM per metterli in relazione con una azione che devono compiere (DRAGSTART), quella del trascinamento in corsa usando il metodo DRAGOVER e quella predisposta al RILASCIO usando il metodo definitivo DROP che completa il ciclo, spostamento che agisce sempre sulle aree predisposte al parcheggio dei compiti marcate dalla loro carta di identità rappresentata da corrispettivi ID todo, inprogress e done. Il BIND come espressione in programmazione indica un collegamento con qualcosa, una base dati, una procedura. Notare anche che ci sono espressioni tipiche del DOM molto famigliari, come appendChild, getElementById e funzioni come event.preventDefault() che stanno a significare rispettivamente appendi al figlio dell’ elemento, afferra l’elemento in base all’ ID (potrei farlo anche per style o tag) e resetta tutti i comportamenti anomali prima di compiere la successiva operazione, una azione che ricorda molto il famoso RESET.CSS che si utilizza per inizializzare il documento vuoto quando si parla di problematiche dei fogli di stile, al fine di annullare le varie differenze di visualizzazione tra i browser. Nel frattempo grazie al DRAG AND DROP, evento di trascinare e rilasciare, Ken Shiro ha salvato la Terra dalle nefandezze del male. La parte di abbellimento finale sulla struttura HTML per l’esempio di Umbriaway Consulting all’ indirizzo https://www.farwebdesign.com/projectcsshtmljs/kenshiro.html è responsabilità del file CSS che si può modificare a piacere.




Il gatto di Schrodinger é vivo o morto? Risponde javascript!

Javascript è un piccolo passo per un uomo ma grande per l’umanità visto che è utilizzato a man bassa su tutti i moderni applicativi nelle nuove formule lato server con tecnologie come node, vue, typescript angular, react etc etc. Ma come avviene l’interazione con l’utente con javascript? Analizziamo la seguente pagina presente all’ indirizzo: https://www.farwebdesign.com/schrodinger/gatto.html che consente varie interazioni sugli elementi dislocati all’ interno del tag body. Prendiamo in esame uno per uno facendo prima una carrelata su metodi che lo sviluppatore lato front end si ritroverà a aplleggiare quotidianamente. Prendiamo ad esempio il metodo getElementById ma prima prendiamo il toro per le corna: javascript ha a che fare con l’intero documento che è considerato l’oggetto principale del DOM. Il DOM è l’acronimo di document object model, ossia un luogo di gerarchie di oggetti che prende a modello gli alberi della natura nella sua struttura in cui si annidano elementi padri ed elementi figli. Nell’ HTML il body è un elemento padre ma pur sempre figlio del tag HTML. Un paragrafo è un elemento figlio rispetto a un paragrafo e anche a un blocco divisore <DIV> se dovesse essere contenuto al suo interno. Quindi possiamo considerare il nostro metodo come qualcosa che restituisce l’elemento che ha l’attributo ID con il valore specificato. Questo metodo è uno dei metodi più comuni nel DOM HTML e viene utilizzato quasi ogni volta che si desidera manipolare o ottenere informazioni da un elemento del documento. Restituisce null se non esiste alcun elemento con l’ID specificato. Un ID dovrebbe essere univoco all’interno di una pagina. Tuttavia, se esiste più di un elemento con l’ID specificato, il metodo getElementById () restituisce il primo elemento nel codice sorgente. Posso usare anche altri metodi che catturano gli elementi della pagina come una giugantesca tenaglia di un rottamatore di auto. Ad esempio l’espressione var x = document.getElementsByTagName(“p”); non fa altro che catturare tutto il valore contenuto all’ interno del paragrafo P all’ interno della variabile X e in questo caso abbiamo usato il selettore di javascript getElementsByTagName(“p”). Decisamente la tecnica di contrassegnare gli elementi divisori della pagina a un identificativo univoco (ID) è largamente diffuso tra gli sviluppatori. Vediamo quindi il contenuto della pagina https://www.farwebdesign.com/schrodinger/gatto.html e analizziamo tutti gli elementi presenti:

<!–
<head>
<meta charset=”UTF-8″>
<script>
function myFunction() {
document.getElementById(“demofunction”).innerHTML = “ho cambiato il paragrafo con una funzione”;
}
</script>
</head>
<body>

<div align=center>
<h3>Scopri che cosa puoi fare con javascript!</h3>
<p id=”demostyle”>Cambia il font del paragrafo con la proprietà style del metodo getElementById </p>

<button type=”button” onclick=”document.getElementById(‘demostyle’).style.fontSize=’35px'”>Cambia il testo del paragrafo con la proprietà style</button></br>
<hr>

<h2>Il gatto di Schrodinger è vivo o morto?</h2>

<p >In questo caso javascript cambia il valore del sorgente immagine con la proprietà SRC del metodo getElementById</p>

<button onclick=”document.getElementById(‘myImage’).src=’gattomorto.jpg'”>Scopri se il gatto dentro la scatola ha fatto danni</button><br>

<div id=demogatto><img id=”myImage” src=”gattovivo.jpg” style=”width:100px”></br>

<button onclick=”document.getElementById(‘myImage’).src=’gattovivo.jpg'”>Riporta il gatto in vita</button></div>
<button type=”button” onclick=”document.getElementById(‘demogatto’).style.display=’none'”>Fai fuori il gatto per sempre!</button><br>
<button type=”button” onclick=”document.getElementById(‘demogatto’).style.display=’block'”>Lazzaro gatto ritorna!</button>
<hr>
<button type=”button” onclick=”document.getElementById(‘demochange’).innerHTML = ‘testo cambiato'”>Cambia il testo del paragrafo</button><br>
<p id=demochange>Cambia il testo</p><br><br>
<button type=”button” onclick=”myFunction()”>Cambia il testo del paragrafo usando una funzione</button><br>
<p id=demofunction>Cambia il testo</p><br>
<hr>
</div>
</body>
–>

schiacciando il primo tasto in alto modifico la dimensione del font usando la proprietà STYLE.FONTSIZE messa disposizione dal metodo getElementById per cui azionando il click sul pulsante con l’evento onclick azionerò il cambio di dimensioni del paragrafo contrassegnato da id=demostyle con l’istruzione completa document.getElementById(‘demostyle’).style.fontSize=’35px’. A questo punto siamo riusciti ad analizzare la spinosa questione del gatto di Schrodinger, estrapolando infatti da wikipedia:

…il paradosso del gatto di Schrödinger è un ESPERIMENTO MENTALE ideato nel 1935 da Erwin Schrödinger, con lo scopo di illustrare come la meccanica quantistica fornisca risultati paradossali se applicata ad un sistema fisico macroscopico. Andando decisamente contro il senso comune, esso presenta un gatto che, in uno stato noto come sovrapposizione quantistica, può essere contemporaneamente sia vivo che morto, come conseguenza dell’essere collegato a un evento subatomico casuale che può verificarsi o meno. Il paradosso è descritto spesso anche nelle discussioni teoriche sulle interpretazioni della meccanica quantistica. Il gatto romperà la fiala disposta in una scatola chiusa dopo che ne è stato segregato? Quali comportamenti imprevedibili avrà all’ interno dello spazio compresso?

Per javascript queste questioni paradossali sono facilmente risolvibili, infatti utilizzando sempre il metodo di contrassegno degli ID che sono tutti registrati con coordinate anagrafiche sulla pagina, possiamo assegnare loro dei compiti solo usando il metodo di attribuzione proposto dal metodo getElementById per cui schiacciando un pulsante posso sapere che fine farà il gatto, se voglio riportarlo allo stato iniziale lo potrò fare e anche ucciderlo definitivamente se il gatto dopo l’esperimento si comporta come un leone e tenta di sbranarci. Tuttavia c’è anche un tasto di ripristino che farà ritornare in vita il nostro amato gattino cambiando lo stato del DIV che contiene tutti gli elementi che da display = none ridiventa display = block nelle proprietà di stile. Poi abbiamo anche la dimostrazione dopo Schrodinger di cosa può fare il metodo getElementById in sincronia con la proprietà innerHTML che cambia il testo e poi dulcis in fundo (Dulcis in fundo è un’espressione pseudo-latina che, all’orecchio di un parlante Italiano, significherebbe “il dolce giunge alla fine del pranzo”. Come tale è considerata da Giuseppe Fumagalli, “Il dolce viene in fondo”). Insomma per afferrare gli elementi all’ interno della pagina javascript propone numerose soluzioni, nel frattempo ne sappiamo di più sulla fisica quantistica.