Dasir Blog

Software

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 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.

GOOGLE: ECCO LA CRITTOGRAFIA GENERATA DALL’INTELLIGENZA ARTIFICIALE

In futuro, le macchine potranno conservare e crittografare dei dati in maniera totalmente inaccessibile ai loro stessi programmatori? Tutto ciò potrebbe diventare realtà, stando a quanto hanno ottenuto i ricercatori di Big G coinvolti nei test di Google Brain, considerando come l’intelligenza artificiale sia stata in grado di creare un metodo crittografico. Per ottenere questo risultato particolarmente interessante, i ricercatori hanno utilizzato diversi sistemi di deep learning, la cui applicazione ha permesso di mettere in evidenza come l’AI possa creare da sola una soluzione crittografica in grado di evitare che i dati contenuti al suo interno possano essere letti da qualcuno. Per l’esperimento, sono state usate le tre intelligenze artificiali Alice, Bob ed Eve: queste ultime sono in grado di comunicare tra di loro e, ancora, le stesse hanno avuto uno speciale addestramento. Nel caso di Alice, infatti, è stato chiesto di spedire un messaggio segreto a Bob, unico proprietario di una chiave utile a decifrare il messaggio, e quindi potenzialmente l’unico in grado di comprendere quanto ricevuto da Alice. Eve, infine, ha ricevuto il compito di tentare di comprendere quanto presente nel messaggio recapitato a Bob, senza aver la chiave di lettura. Per quanto il test sia stato limitato ad un messaggio composto da 16 bit (impostati sui valori 0/1), è stato comunque interessante: per ben 15’000 volte, infatti, Alice e Bob sono riusciti a comunicare in modo sicuro, senza che Eve potesse decifrare le informazioni scambiate, grazie ad una soluzione crittografica che è diventata sempre più evoluta. Ma davvero in futuro le macchine potranno comunicare senza che si riesca a decifrare i loro messaggi? Nel futuro immediato, potremmo escludere questa ipotesi, tuttavia, il machine learning ha dimostrato ancora una volta come le macchine abbiano notevoli potenzialità, considerando come Alice abbia appreso in maniera autonoma – con l’incrementare dei tentativi – ad ottimizzare la soluzione crittografica per proteggere i messaggi, un compito portato a termine senza che fosse stata programmata con un codice ad hoc.  

MILK: IL NUOVO LINGUAGGIO DI PROGRAMMAZIONE

Nei microprocessori moderni, la gestione della memoria è basata sul principio di località, ovvero: se un programma ha bisogno di alcuni dati in un particolare punto della memoria, probabilmente avrà bisogno successivamente anche dei dati vicini. Ma questo principio viene meno nell’era dei Big Data: ogni processo infatti è solito ad elaborare pochi dati presi arbitrariamente tra i tantissimi presenti. In genere l’accesso alla memoria RAM è di per sé la parte più dispendiosa dell’elaborazione (escluso l’accesso alle memorie fisiche) e quindi accedervi ripetutamente rallenta di molto l’elaborazione di grosse quantità di dati. Questa settimana, un gruppo di ricercatori del MIT (Massachusetts Institute of Technology), alla conferenza internazionale sulle architetture parallele e tecniche di compilazione, ha presentato un nuovo linguaggio di programmazione, chiamato Milk, che permette di gestire la memoria più efficacemente in programmi che hanno bisogno di accedere a dati particolari in dataset di grosse quantità. Nei test di molti algoritmi, i programmi scritti in Milk si sono mostrati molto più veloci di quelli scritti nei linguaggi di programmazione fino ad oggi esistenti. Il linguaggio in questione aggiunge alcuni comandi a OpenMP (Open Multiprocessing), un estensione di linguaggi come C e Fortran che rende facile lo sviluppo per processori multicores. Con Milk, un programmatore dovrà scrivere solo alcune righe di codice in più per gestire alcune operazioni che richiedono iterazione in una grande quantità di dati, e il compilatore Milk deciderà come gestire la memoria efficacemente. In un programma Milk, quando un core deve richiedere un dato dalla memoria, non lo richiede (insieme ai dati adiacenti) ma aggiunge l’indirizzo di memoria da richiedere ad una lista. Quando le liste di ogni core sono lunghe abbastanza, vengono messe insieme e vengono raggruppati gli indirizzi di memoria vicini e ridistribuiti ai vari cores con questi raggruppamenti. In questo modo, ogni core riceverà più dati di cui ha bisogno con un solo accesso. Questo, è ciò che succede ad alto livello, ma nel dettaglio, le cose si fanno complicate. Nei processori moderni, ci sono più livelli di cache, ognuno più grande e lento dell’altro. Il compilatore Milk deve dunque tener conto non solo degli indirizzi di memoria, ma anche di quelli in cache in tutti i livelli. Deciderà anche quali indirizzi tenere e quali scartare dalla cache. Ecco cosa ha detto a riguardo Matei Zaharia, un professore alla Standfor University: “Molte applicazioni importanti al giorno d’oggi richiedono una grande quantità di dati, ma sfortunatamente, la costante crescita del gap di performance tra CPU e memoria porta a non utilizzare al massimo le prestazioni della CPU. Milk aiuta a ridurre questa differenza di prestazioni ottimizzando l’accesso alla memoria in alcuni dei costrutti di programmazione più frequenti.”

BORSEGGIATORI: STOP AGLI INSEGUIMENTI

  I droni sono pronti a diventare alleati delle forze dell'ordine contro gli scippi. Il Metropolitan Police di Londra ha infatti intenzione di utilizzare una flotta di droni per controllare motoveicoli sospetti, per prevenire borseggi e furti di smartphone sulle due ruote. Il vice commissario Craig Mackey, a tal proposito, ha fatto notare come i droni rappresentino un’alternativa più sicura alle unità in moto per dare battaglia ai borseggiatori. Nell'ultimo periodo soprattutto, sono davvero tanti gli scippi che la capitale inglese sta fronteggiando e quasi tutti hanno in comune la corsa da parte dei malviventi su due ruote. Gli inseguimenti in moto, con cui ad oggi la polizia cerca di controbattere a questi furti, risultano in alcuni casi pericolosi, potendosi concretizzare in ulteriori incidenti. Ecco quindi che i droni potrebbero rappresentare un’alternativa sicura per monitorare veicoli sospetti e raggiungere i malviventi direttamente a fine corsa. Il tutto, ovviamente, senza alcun intralci alla circolazione su strada. D'altronde, oltre il discorso legato prettamente alla sicurezza, l’utilizzo di droni per l’inseguimento di malviventi comporterebbe un risparmio non indifferente per le casse dello stato, senza considerare che un comune "quadricottero" dotato di GPS, potrebbe tenere traccia e monitorare i movimenti di potenziali sospetti, creando così una mappa sempre aggiornata di possibili covi in cui condurre gli agenti, senza rischio di inseguimenti ad alta velocità. I droni quindi, sono pronti a contrastare i malviventi in maniera più economica e sicura...Se l'esperimento inglese andasse a buon fine, potremmo presto vederlo anche negli altri Paesi.

Visualizzo 1-9 di 26 elementi.