DOM Javascript injection

Programmando complesse UI Javascript-Html5 con ottime librerie quali DevEx o Sencha, può essere molto utile gestire in modo programmatico la DOM attraverso Js-injection. Illustrerò un breve sorgente in Javascript e Delphi webbroker per popolare una maschera tramite Ajax. La stessa tecnica l’ho utilizzata per gestire una webview in un Linux embedded Arm tramite websocket.

Unikernel ed emulatori

Vedremo come virtualizzare i sistemi desktop più diffusi, passando da Vmware, Hyper-V a VirtualBox. O come implementare l’efficiente hypervisor KVM in Linux, con leggerissimi drivers in tecnologia ParaVirtualizedIO, e la scelta dei diversi file system.

Una cosa molto richiesta, vedremo come convertire una macchina virtuale da un formato ad un altro, grazie al progetto QEMU.

Illustrerò il codice sorgente di un emulatore del Commodore 64 scritto in Delphi.

Infine vorrei introdurre la nuovissima tecnologia ideata per il cloud, i cosiddetti unikernel, laddove un’applicazione esegue nell’anello 0 della CPU senza sistema operativo, ma con ridotte ed essenziali API di sistema (stack TCP, etc.). In questo modo si consolidano le architetture anche fino a 1000 volte rispetto ad ora. Speciali gli unikernel http://rumpkernel.org/ (ideale per ErlangVM) e https://torokernel.io/ (con codice esclusivo Pascal).

Decompilare è possibile?

Se ne potrebbe parlare per ore, tanto è vasto l’argomento, quasi come chiedere di tornare indietro nel tempo. In poche parole direi che se fatto dentro la legge e l’etica universalmente riconosciuta come tale, è possibile. Il limite è difficile da cogliere, diciamo che se un imprenditore è rimasto vittima di un furto, o di un virus polimorfico, oppure se ha perso le credenziali di un archivio importante, o ancora se deve poter dialogare con un protocollo di cui non ha documentazione e di cui è terminato il supporto, allora può essere utile tentare il recupero.

Vedremo come usare decompilatori per Java, Delphi, Visual Basic e .NET (spesso hanno credenziali hard-coded all’interno del codice binario), così come strumenti di rete quali WireShark, la distribuzione Kali Linux realizzata ad-hoc per la questione sicurezza, ad esempio per recuperare l’accesso di una rete ActiveDirectory Windows, o più semplicemente per vedere se il vicino di casa sta utilizzando la nostra connessione internet.

KDE Plasma

In diversi mi chiedono se possono usare un Linux desktop, proveniendo dal mondo Windows. Linux di oggi stà facendo passi da gigante anche sotto questo ambito, evoluzioni come Wayland ed il supporto alle GPU con Vulkan permettono di ottenere prestazioni consistenti. Vi sono tanti ambienti grafici di successo, quali XFCE, Gnome, KDE ed una miriade di altre opzioni.

Con qualche accorgimento è possibile ad esempio customizzare lo splendido KDE Plasma in modo da presentare l’UI con un layout simile a come siamo abituati ad utilizzare dal Windows 95 “Start” in poi. Per la suite d’ufficio potreste provare l’Office di Kingsoft, praticamente identico a quello Microsoft; per un “simil-Photoshop” vedere GIMP, ed infine provare i tanti software disponibili per il disegno vettoriale, l’editing video, la gestione dei PDF, la modellazione 3D…

Chi crea potrà invece trovare grande soddisfazione utilizzando il framework QT++

Delphi RTL “speed-up”

A questo indirizzo trovate un pacchetto per ottimizzare le performance e la robustezza delle applicazioni Delphi 64bit che usano multi-threading: https://github.com/RDP1974/Delphi64

L’allocatore di memoria e le funzioni low-level di sistema più utilizzate quali Move(), FillChar(), Pos() vengono sostituite con delle derivate dalle “industry-proven” librerie Intel Performance Primitives e Intel Threading Building Block.

Dopo aver testato oltre dieci nuovi allocatori di memoria, mi sento di dire che questa “combo” di Intel TBB insieme alle patch derivate dalle Intel IPP, sono la migliore fondamenta possibile per le moderne applicazioni Delphi a 64bit.

Le applicazioni server basate, ad esempio, su Thread Pool, o che utilizzano la classe TParallel scalano linearmente su tutti i core della CPU fornendo prestazioni ottimali. Inoltre TBB è un ottimo cacciatore di potenziali problemi, sollevando eccezioni in caso di errori nella gestione della RAM, come i “double free” o i “buffer overrun”.

Ho inoltre creato una libreria per ridurre i tempi di compressione (5x) delle pagine web, nel sito trovate una class helper per abilitare in modo trasparente questo “enhanced deflate” nel Delphi WebBroker.

VPS Windows backup su VPN

Vedremo come utilizzare il servizio di backup in una VPS con Windows Server verso un NAS domestico, senza utilizzare strumenti di terze parti. Illustrerò come fare il setup di una VPN con algoritmo PPTP a 128bit con chiave condivisa.

Quindi nel sistema operativo Windows faremo una corretta configurazione della connessione VPN con la definizione della tabella di routing, della metrica e della risoluzione dei nomi. Infine creeremo una partizione nativa RAW virtuale su di un file VHD, dinamico, posizionato in una cartella remota SMB con credenziali.

Il programma di backup impostato su modalità veloce, incrementale, ma consolidato in un unico file, creerà uno snapshot giornaliero di tutta la macchina sulla partizione nativa scrivendo solamente i dati variati, permettendo di creare uno storico della VPS pronto per un eventuale recupero dei dati.

Player per Raspberry senza X

Vedremo come realizzare un player di immagini per Raspberry, con accesso diretto alla memoria video tramite le API SDL2 e gli stessi drivers FB da compilare, usati per MAME, necessari per poter ottenere dissolvenze a 60fps. Sorgenti in FreePascal per Linux Arm Aarch64 e client HTTP Indy o Curl e nessuna dipendenza da X (runlevel 3).

Custom HTTPS server in Delphi

Illustrerò brevemente come costruire un embedded HTTPS server per servire sia file statici che contenuti dinamici, self-contained nell’applicazione Delphi, per Linux o Windows.

Quindi vedremo come gestire un routing di base, un CRUD primitivo con helpers verso base dati Firedac con pooling, e risolvere problemi di deployment con i certificati TLS, le verifiche, e le librerie OpenSSL. Per realizzare leggeri ed efficienti custom server pronti per girare in un container o dietro un reverse proxy come Nginx. Userò la distribuzione Debian passo a passo.

Elixir “il magnifico”

elixir

Era da tanto tempo che un nuovo linguaggio/framework non mi appassionava così tanto. Parlo di quello che è un vero capolavoro: Elixir di José Valim e Phoenix di Chris McCord.

Elixir è un linguaggio dinamico, funzionale, che compila per la “industry-proven” macchina virtuale Erlang (per capirci, è la base di tutti i sistemi telefonici del mondo intero). Con Elixir otteniamo il meglio dei due mondi:

  • Scalabilità
    Il codice di Elixir gira all’interno di micro-threads o fibers all’interno dell’area user-level, con micro-scheduler pre-emptive. Ogni processo comunica con gli altri tramite messaging; un odierno PC può gestire in concorrenza milioni di processi in tempo reale, con latenza ridotta, parsimonioso uso di memoria e corretta distribuzione sopra i core
  • Fault-Tolerance
    E’ built-in la gestione della sicurezza e della supervisione dei processi, garantendo la continuità dei servizi. Ideale per chi crea applicazioni web, è ad esempio possibile modificare l’applicazione, come aggiungerne funzionalità, non solo non riavviando l’OS, ma senza riavviare l’eseguibile stesso, fornendo un’uptime 24×365 del 100%
  • Produttivo, Robusto, Veloce
    Applicazioni web MVC e realtime senza compromessi, un framework di accesso ai dati SQL come postgre e mysql, ORM e HTTPD di qualità straordinaria; rapido sviluppo dal prototipo alla release pronta a scalare in orizzontale ed in verticale senza scrivere codice aggiuntivo!

Questi i link importanti:
https://www.phoenixframework.org/
https://elixir-lang.org/
https://www.erlang.org/
IRC in the #elixir-lang channel
Elixir Forum
https://github.com/phoenixframework/phoenix
Libri e corsi https://hexdocs.pm/phoenix/community.html
Elixir School 
ElixirCasts
Programming Phoenix 1.4
Phoenix Guides