
Dasir Blog
Software
Come la tecnologia e l’uso del software supportano la progettazione in Architettura
La tecnologia si evolve velocemente, cambiando le metodologie e le tecniche di lavoro in tutte le aree produttive, dai processi semplici ai più complessi, trovando così diversi ambiti d’applicazione che aprono nuove possibilità a qualsiasi settore. L'architettura non è estranea a questo cambiamento, oggi esistono diverse applicazioni per lo sviluppo e il design architettonico e queste consolidano il ruolo della tecnologia anche in questo campo, svolgendo un ruolo molto importante nel settore. Per questo motivo sono state sviluppate diverse tipologie di applicazioni, che oggi vengono utilizzate costantemente da architetti e ingegneri, diventando strumenti fondamentali nei loro lavori, semplificandone la progettazione, ottimizzando i processi e migliorandone la qualità. L'industria del software sviluppa programmi che permettono di figurare strutture spaziali tridimensionali, quindi non è più necessario immaginare come sarebbe un elemento nella vita reale… questo può essere visto sul monitor di qualsiasi studio d’architettura. La maggior parte dei programmi utilizzati attualmente contengono una API (Application Programming Interface) o un'interfaccia di programmazione delle applicazioni che consentono l'accesso ai meccanismi interni del software e vengono utilizzate per automatizzare il programma o per aggiungere nuove funzionalità. La maggior parte dei software, come CAD e BIM, opera su base API. L’utilizzo di API non è esclusivo di questo settore, infatti, anche tutti i prodotti Microsoft Office hanno un'API integrata per l’automazione del software. Inoltre anche siti web come Facebook e Google hanno APIs che possono essere utilizzati per creare nuove caratteristiche e funzionalità. Visto che l’era digital in architettura e design si sviluppa rapidamente, imparare a programmare diventa sempre più un'abilità essenziale per un architetto e si può dire che, il suo lavoro, è si frutto della propria creatività ma vede la luce attraverso il supporto di un computer.

La scelta della tecnologia nei progetti software
Quando si inizia un nuovo progetto software la valutazione delle tecnologie da utilizzare, ed in particolare, la scelta del framework, è una fase fondamentale e particolarmente critica che richiede grande attenzione e uno studio preliminare approfondito. Al giorno d'oggi gli strumenti che supportano lo sviluppo software sono numerosi, con caratteristiche, vantaggi, svantaggi e costi differenti. La fase precedente a questa scelta, dovrebbe prevedere un'accurata raccolta di requisiti funzionali, non funzionali e relativi all'aspetto grafico che il prodotto finale dovrà avere. Una volta completata questa prima analisi, si procede con quella delle tecnologie disponibili. Trovare la tecnologia che supporti completamente ed esaustivamente lo sviluppo delle funzionalità richieste è impossibile, ma si può restringere il campo selezionando quella che facilita maggiormente il lavoro. Lo sviluppo delle funzionalità non è però l'unico fattore da considerare. Altri, altrettanto importanti, sono: - Il supporto da parte degli sviluppatori della tecnologia, ma anche quello di una community che attraverso forum e blog proponga soluzioni a problemi più o meno comuni che si possono presentare; - La stabilità degli aggiornamenti nel tempo: utilizzando componenti che non vengono aggiornati da molto tempo, si rischiano problemi di compatibilità che in futuro potrebbero costringere a dover rimuovere quel componente o addirittura a dover riprogettare tutto utilizzando tecnologie diverse; - La compatibilità tra le tecnologie e la facilità con cui interagiscono dovrà essere comprovata, se si dovesse aver bisogno di utilizzarne più di una; - La scelta tra linguaggi nativi e ibridi: si tratta di un problema molto comune quando si parla di sviluppo di App. Utilizzare linguaggi nativi, ovvero linguaggi scritti appositamente per un determinato sistema (ad esempio iOS o android), permette di sfruttare al massimo le potenzialità del dispositivo migliorando nettamente le prestazioni. Lo svantaggio che ne consegue è che la stessa App dovrà essere sviluppata più volte nei vari linguaggi. D’altro canto, l’utilizzo di linguaggi ibridi permette di sviluppare una singola App che funziona su vari sistemi, a discapito però delle prestazioni; - L’esperienza nelle tecnologie, fattore va valutato insieme al tempo a disposizione. Se il tempo per la realizzazione del prodotto finale è limitato, probabilmente è meglio optare per tecnologie che già si padroneggiamo in modo da poter entrare subito nel vivo dello sviluppo. In caso contrario si possono anche scegliere tecnologie che prevedano una prima fase di formazione. Per lo sviluppatore, quindi, la valutazione della giusta tecnologia da utilizzare è un passo fondamentale. Se questo aspetto viene affrontato con la giusta attenzione, porta indubbi vantaggi al progetto che si intende realizzare.

CMS headless: gestori di contenuto per le moderne esigenze
Lo sviluppo tecnologico ha portato a dover trasferire contenuti e dati attraverso piattaforme e canali di comunicazione differenti. Anche la gestione del flusso dei dati sul web si è evoluta. I CMS tradizionali non riescono a soddisfare le esigenze moderne per la loro struttura monolitica che prevede la gestione e la visualizzazione dei dati in un unico software. Per questo motivo sono nati i CMS headless, ovvero “senza testa”, poiché la parte di presentazione dei dati (Content Delivery Application) non è presente nel sistema che, è composta dalla sola parte di gestione dei contenuti (Content Management Application). Il contenuto di questo tipo di CMS si può considerare puro e permette in una sola istanza di essere visualizzato su diverse piattaforme quali siti web, smartphone, tablet e device IoT. I servizi sono offerti mediante delle API di tipo REST basate sul protocollo HTTP. Le diverse operazioni di CRUD sui dati vengono effettuate chiamando il giusto URL che farà da endpoint e utilizzando uno specifico verbo HTTP quali GET, POST, PUT e DELETE. Focalizzandosi solo sulla parte di gestione dei contenuti, il CMS headless è un sistema più semplice di uno tradizionale riuscendo quindi ad offrire i suoi servizi mediante un numero più basso di operazioni. I contenuti possono essere offerti dividendo il carico di gestione e flusso dei dati utilizzando un CDN (Content Delivery Network), il quale permette di ridurre gli attacchi di tipo DDOS. La sua flessibilità permette di sviluppare dei frontend con qualsiasi tecnologia e di facilitarne un loro possibile aggiornamento, senza aver bisogno di dover aggiornare anche il backend. In conclusione possiamo affermare che la tendenza è sempre più quella di sviluppare sistemi di questo tipo o talvolta di tipo ibrido. Non è un caso che alcuni tra i CMS di maggior rilievo come WordPress e Drupal si stiano spostando anch’essi verso questa direzione.

Magento 2 - usare Transaction per salvare oggetti
Magento 2 è la nuova versione della piattaforma E-commerce che offre nuove e interessanti funzionalità. Tra queste Transaction per salvare oggetti. Una funzionalità poco conosciuta, che risulta però molto utile se si desidera garantire uno stato coerente nel database. Con una singola transazione è possibile combinare molti oggetti da salvare . In tal caso sono possibili due esiti: Transazione riuscita garantisce che tutte le operazioni SQL all'interno della transazione siano eseguite senza problemi. Quindi i dati sono validi e vengono salvati in db. Errore di transazione qualcosa è accaduto durante l'esecuzione della transazione. I sistemi di transazione forniscono una funzione chiamata rollback in cui i dati vengono ripristinati all’istante prima dell’inizio della transazione. Magento 2 in alcuni casi non sembra garantire un comportamento corretto nelle operazioni verso il db. Un esempio è il mal funzionamento con "rollback della transazione asimmetrica", ossia il salvataggio di default di tutte le informazione riguardati più tabelle. Tale malfunzionamento può essere risolto usando alternativamente:TransactionFactory o Custom SQL statement transaction TransactionFactory Il seguente codice mostra come utilizzare TransactionFactory in Magento 2: class MyClass { protected $saveTransaction; public function __construct \Magento\Framework\DB\TransactionFactory $transactionFactory ){ $this->saveTransaction = $transactionFactory->create(); } public function saveManyObjects() { ... $this->saveTransaction->addObject($order); $this->saveTransaction->addObject($customer); $this->saveTransaction->addObject($customObject); $this->saveTransaction->save(); } } Se si esegue il metodo saveManyObjects () di questa classe, tutti gli oggetti specificati vengono salvati contemporaneamente. Per una transazione è necessario iniettare la classe \ Magento \ Framework \ DB \ TransactionFactory, che offre tutte le funzionalità necessarie. È possibile aggiungere oggetti da salvare con il metodo addObject (). Si possono aggiungere oggetti quali: ordini, clienti, prodotti o persino oggetti personalizzati. Tramite il metodo save() viene eseguito automaticamente un commit o una rollback in base all’esito dell’operazione garantendo uno stato coerente dei dati. Custom SQL statement transactions Se si vuole usare istruzioni SQL custom utilizzando le transazioni è possibile riferirsi al seguente codice di esempio: $connection = $this->getConnection(); $connection->beginTransaction(); try { ... $connection->commit(); } catch (\Exception $e) { $connection->rollBack(); throw $e; } È possibile chiamare il metodo beginTransaction () per inizializzare una transazione sull'oggetto “connection” dell'utente. In seguito si possono creare le istruzioni di inserimento o aggiornamento. Con commit () vengono rese persistenti le operazioni sul database. Se qualcosa non è andato a buon fine, il costrutto try catch chiamerà una transaction rollBack per ripristinare uno stato coerente del database e genererà un errore. In conclusione Magento 2 offre tutto il necessario per utilizzare le transazioni. Una transazione è uno strumento utile per rendere sicure le modifiche al database, impedendo di corrompere un database se qualcosa non ha avuto esito positivo.

Isomorphic rendering e le tecnologie client side
Al giorno d’oggi esistono numerose tecnologie per la produzione di contenuti web che si differenziano in base a diversi fattori quali: semplicità di sviluppo, interattività con l’utente, potenza di calcolo, etc. Le tecnologie si differenziano in server side, se eseguite dal server, o client side se eseguite da un client, ad esempio il browser. Il vantaggio nell’utilizzo di tecnologie server side consiste nella semplicità di sviluppo e nella robustezza, le interazioni con il browser sono ridotte e di conseguenza anche la possibilità di errori si riduce. Le tecnologie client side, a differenza delle precedenti, richiedono una maggiore interazione tra server e client, oltre ad una forte interazione tra client e utente. Le tecnologie client side si sono sempre più diffuse e tra i framework più interessanti abbiamo: ReactJS, Angular, Vue.js. Tutte le tecnologie descritte offrono un’elevata reattività, tempi di caricamento ridotti per i contenuti, un ridotto carico sul server ed un’esperienza utente paragonabile ad un'app nativa sui sistemi mobile. Un’azienda che punti su tali tecnologie per fornire tutti i vantaggi descritti deve necessariamente risolvere le problematiche introdotte da tale approccio, grazie ad un forte know-how relativo alle tecnologie usate, una forte sensibilità sulle tematiche della sicurezza e di indicizzazione di web application. Una soluzione a quest'ultima problematica è rappresentata dall’isomorphic rendering, tecnica che consiste nell’eseguire un prerendering della pagina lato server prelevando ed inserendo le informazioni necessarie prima della fase dell’invio della web application. L’isomorphic rendering, tuttavia, apre una serie di nuove problematiche relative in particolare alla velocità di caricamento della web app sul client alla prima esecuzione a causa di un notevole aumento della quantità di informazioni prelevate dal server. Un’azienda che punta su tali tecnologie deve pertanto condurre una continua fase di ricerca e implementazione di nuovi strumenti in grado di mitigare le problematiche introdotte da questa tecnica. Tutto ciò affinchè si possa realizzare un prodotto avente una ottima user experience, un carico computazionale distribuito fra i client e tempi di caricamento accettabili.

La continua evoluzione dei linguaggi di programmazione
La figura del programmatore software da diversi anni mantiene la sua posizione tra i lavori più pagati al mondo ma è difficile che si possa guadagnare da vivere con i linguaggi appresi all’università. È, invece, molto probabile che egli debba aggiornare le proprie competenze. Secondo l’ufficio di statistica del lavoro americano (Us Bureau of Labor Statistics) la richiesta di sviluppatori web è incrementata del 20% negli ultimi 10 anni, raddoppiando l’indice di crescita di ogni altra occupazione. Vediamo dunque quali sono i linguaggi più richiesti nel 2018: -SQL: vince a mani basse, da anni. Se il web è un database, il linguaggio più richiesto in assoluto non può che essere quello per la realizzazione di database; -JAVA: dopo i database, sul secondo gradino del podio si posiziona IoT, ossia un’evoluzione della rete che si integra con gli oggetti, dandogli la possibilità di comunicare tra loro attraverso un’intelligenza intrinseca; -PHYTON: linguaggio di programmazione moderno e potente ma allo stesso tempo abbastanza facile da imparare. Prende il nome dalla passione per i Monty Python del suo creatore Guido van Rossum; -JAVASCRIPT: a differenza di Java, è utilizzato soprattutto nello sviluppo della parte esteriore di siti e pagine web. La sua popolarità continua a crescere, grazie alla semplicità e alla versatilità che ne consente l’utilizzo anche per le app; -C++: l’erede del C, il padre di tutti i linguaggi di programmazione, mantiene alta la reputazione di una concezione geniale, sublimazione tra semplicità e potenza. Il C++ è molto utilizzato soprattutto per costruire i motori grafici dei videogiochi ma anche per servizi web. Se lo si impara bene, Python o JavaScript saranno una passeggiata; -C# e SWIFT: chiunque decida di programmare in Windows e iOS dovrà mettere in conto di imparare rispettivamente C# e Swift perché questi due ambienti necessitano di competenze particolari; -PHP: da una recente stima, circa l’80% dei siti Internet utilizza PHP principalmente perché è stato uno dei primi linguaggi di programmazione a diffondersi in quello specifico ambito; -GO: è uno degli ultimi linguaggi di programmazione presentato da Google con l’intento di realizzare un modo di programmare adatto a computer e dispositivi con scarse capacità di calcolo. Dunque l’informatica è un campo in continuo aggiornamento, l’hardware si evolve continuamente così come i linguaggi di programmazione. La figura del programmatore prevede un continuo apprendimento. Quello che oggi il programmatore apprende potrebbe non servire più nei prossimi 10 anni, ma d'altronde il cambiamento è l’unica costante della nostra vita ed è anche un prezzo da pagare per il successo!

Perchè realizzare un E-commerce con Magento??
Quando si decide di aprire un negozio, molte sono le spese a cui si deve andare incontro. Basti pensare all’acquisto o affitto del locale, ai costi di ristrutturazione, ai permessi, alla merce e a tanto altro. Il discorso invece cambia quando si parla di E-commerce: un negozio a tutti gli effetti senza vincoli di spazio o tempo. Tuttavia un E-commerce non è un sito come un altro, ma uno strumento che deve essere pensato in maniera ben strutturata e tale da poter far emergere quanto prima un beneficio da parte degli acquirenti. Attraverso Magento è possibile realizzare E-commerce, anche di grandi dimensioni. A differenza di molte altre piattaforme infatti si possono gestire un gran numero di prodotti. C’è anche la possibilità di realizzare cataloghi online di grandi dimensioni. Magento infatti è uno dei CMS più utilizzati per la vendita online, perché in grado di garantire alte prestazioni, grazie alle sue numerose funzionalità. È una piattaforma scalabile, che permette d’installare dei “plugins” o comunemente chiamati “moduli”, che aggiungono delle nuove features alla piattaforma. Questi rendono il prodotto software, adattabile alle esigenze di ogni tipo di cliente. Un altro punto di forza di Magento, è sicuramente il fatto di essere totalmente compatibile con E-Bay, poiché di proprietà della stessa. In DasirTech, sono stati implementati due moduli Magento: -Sticky Navigation Layer: Barra di navigazione RWD -Before & After Widget: Comparatore fotografico Oltre allo sviluppo di moduli Magento, sono stati realizzati anche dei prodotti software completi, su misura per il cliente, in particolare: -Scottiverdesign.it: Fiori, arredamento e design online. Insomma Magento è una piattaforma veramente poliedrica, in grado di fornire i migliori servizi per realizzare un E-commerce.

Bug dei microprocessori
Meltdown e Spectre sono vulnerabilità hardware scoperte dai ricercatori di Project Zero di Google, rese pubbliche il 3 gennaio 2018 tramite rumors diffusi su social, web e programmi tv. Google spiega che malintenzionati possono sfruttare la "speculative execution". Questa consiste nell'esecuzione di frammenti di codice il cui risultato è utile solo quando l'esecuzione anticipata delle istruzioni utilizza meno spazio e meno tempo in fase di lettura della memoria di sistema. Tale procedura è utilizzata in maniera malevola per leggere dati sensibili nella memoria di sistema, come password, chiavi crittografiche o eventuali informazioni sensibili nei software “aperti”. Tali vulnerabilità interessano molte CPU e inoltre coinvolgono i dispositivi e i sistemi operativi da esse eseguiti. A seguito di alcuni aggiornamenti e di alcuni studi effettuati nell’ultimo periodo, le case produttrici stanno correndo ai ripari. Ad esempio, AMD afferma che i propri processori sono risultati vulnerabili a Spectre ma non a Meltdown. Le GPU Nvidia, invece, non sono colpite da Meltdown e Spectre ma comunque Nvidia ha aggiornato i propri driver per mitigare l'impatto dell'attacco Spectre. Apple ha confermato che le vulnerabilità interessano tutti i dispositivi presenti sul mercato che eseguono iOS e macOS ma sta rilasciando continui aggiornamenti per arginare il problema. Per verificare se il proprio sistema è colpito da tale bug si può seguire questa semplice guida: Aprire una finestra di PowerShell con i permessi di amministratore (tasto destro, Esegui come amministratore) (clicca immagine per ingrandire) Digitare il comando "Install-Module SpeculationControl". Quando richiesto, confermare (digitando S e premendo Invio) l'utilizzo del provider NuGet e in un secondo momento dell'archivio non attendibile. (clicca immagine per ingrandire) Digitare il comando "Get-ExecutionPolicy" per verificare se si hanno i permessi di esecuzione degli script esterni. Nel caso in cui non si abbiano i permessi, digitare "Set-ExecutionPolicy RemoteSigned" (clicca immagine per ingrandire) Successivamente, si può avviare lo script vero e proprio, tramite i comandi "Import-Module SpeculationControl" e in seguito "Get-SpeculationControlSettings" (clicca immagine per ingrandire) La voce "Windows OS support for branch target injection mitigation" con valore True indica che si sono installate le patch Microsoft. Il valore False indica invece l'assenza dell'aggiornamento. "Hardware support for branch target injection mitigation" suggerisce l’installazione dell'aggiornamento del firmware (UEFI/BIOS) per proteggersi da Spectre. Per una protezione completa, quindi, basterà far riferimento al sito ufficiale del produttore del PC, dispositivo o scheda madre cercando un aggiornamento del BIOS che nel proprio "changelog" presenti un riferimento all'introduzione del "microcode Intel aggiornato a gennaio 2018". In alternativa è possibile affidarsi ad un’azienda informatica che sia in grado di garantire la protezione dell’integrità fisica (hardware) e logico-funzionale (software) dei sistemi coinvolti.

Il Sistema Operativo a 64-bit per RaspberryPi 3
RaspberryPi 3 Modello B è la prima versione con architettura a 64 bit del più popolare “mini-computer”, ma nonostante l’upgrade del processore, che è diventato un ARMv8 nella versione Pi 3, non esiste una distribuzione ufficiale di un sistema operativo a 64-bit. I motivi sono legati al fatto che l’azienda fondatrice del “lampone embedded” si è concentrata sul rendere il suo sistema operativo, Raspbian, che è una distribuzione Debian, compatibile per tutte le generazioni di Pi. Il sistema operativo SUSE, che è una distribuzione di Linux, supporta le più svariate architetture e con la sempre più forte presenza di processori ARM all’interno dei data center, l’azienda tedesca (che ha iniziato stampando manuali UNIX e offrendo assistenza tecnica circa 3 decenni addietro) si è concentrata sulla possibilità di operare su questi tipi di calcolatori in modo da poter aggiungere ulteriori piattaforme al calderone di quelle supportate. In occasione dell’evento SUSECon 2016, SUSE ha annunciato il supporto di SLES (SUSE Linux Enterprise Server) per RaspberryPi 3. In realtà esiste anche una release di openSUSE, la versione open di SUSE, che è in grado di girare sul dispositivo embedded. Pertanto i possessori di una boardPi 3 possono sfruttare le funzionalità del proprio dispositivo grazie all’unico sistema operativo a 64 bit compatibile ad oggi disponibile. I vantaggi vengono tradotti in termini di performance di computazione e anche circa la compatibilità di programmi le cui release a 32 bit sono di fatti in via di estinzione. Come spiega EbenUpton, fondatore di Raspberry, si tratta del primo rilascio ufficiale per l’architettura a 64-bit da parte di un importante fornitore e soprattutto SLES prevede il supporto per il protocollo wireless e bluetooth (BLE), che sono delle novità presenti proprio a partire dalla versione Pi 3. SLES è disponibile con una versione evalution con un limite di durata pari a 60 giorni, ma la patch per Raspberry, prevede un abbonamento gratuito di un anno con possibilità di scaricare gli aggiornamenti. In alternativa, si può tenere in considerazione il prodotto free di SUSE, openSUSE, la quale ha reso disponibile due immagini per Raspberry Pi3, ormai ben note alla community di SUSE, Leap e Tumbleweed. Di fatti SLES è l’unica distribuzione enterprise, che sicuramente porta notevoli vantaggi rispetto alle versioni open o community, quali ad esempio aggiornamenti tempestivi e sicuri, longevità, supporto per 10 anni, certificazioni di sicurezza. Sarà interessante capire se sarà mai rilasciato il sistema Raspbian a 64-bit oppure se SUSE possa diventare il prossimo sistama operativo ufficiale di Raspberry.
