Gran parte del lavoro degli amministratori di un sistema Unix/Linux ha a che fare con l’automatizzazione di procedure spesso piuttosto complesse e lunghe che servono per la quotidiana configurazione, gestione e manutenzione del sistema. Per l’automazione delle procedure e dei task in carico all’amministratore di un sistema, gli script di shell sono un’arma molto potente, ma allo stesso tempo rappresentano un’arma a doppio taglio, quando la complessità dello script e le sue dimensioni divengono tali da creare situazioni in cui sviste o errori sono molto probabili.
Il reverse engineering è il processo attraverso il quale è possibile studiare il comportamento di un software di cui si conosce solo il codice binario, andando ad indagare non solo sul modo di funzionamento ma sulla struttura originaria. Lo scopo di questa tecnica, nasce come necessità di comprensione dei meccanismi di funzionamento dei sistemi chiusi, al fine di poterne capire punti di debolezza per correggere o migliorare il software stesso, o in alcuni casi sfruttarne le debolezze per creare punti di accesso ad un sistema. La pratica del reverse engineering è diffusa soprattutto verso quei software non open, vale a dire software commerciali, o anche gratuiti di cui il proprietario non rilascia il codice sorgente.
La prima volta che ho visto un cellulare ero un bambino, si trattava di un NEC p4, una sorta di citofono senza filo, acquistato da mio padre per motivi di lavoro. Telefonava, e aveva la rubrica, quanto bastava per essere rintracciati sempre e dovunque.
Giungiamo alla fine del nostro speciale dedicato alla ottimizzazione del codice delle nostre applicazioni: ottimizzare significa avere maggiori performance per le proprie applicazioni, risolverne i bugs e avere un risparmio significativo sulla nostra infrastruttura hardware.
L'utilizzo di un tool di profiling risulta molto utile per misurare le performances dei programmi ed individuare i punti del codice responsabili del calo delle prestazioni; a valle dell'analisi condotta con un profiler è possibile pianificare gli interventi da fare per migliorare le performances del codice. Ogni scelta progettuale, sia hardware sia software, va misurata per valutare l'effettiva efficacia relativa, ed ogni implementazione andrebbe confrontata con le possibili alternative scartate per valutarne l'efficacia assoluta.
L’attività di un programmatore è spesso rivolta alla semplice scrittura del codice. Il programmatore analizza il problema per trovare la soluzione migliore e la implementa; la necessità di individuare e preparare la soluzione in tempi brevi, ha come effetto collaterale di dover tralasciare alcuni aspetti altrettanto importanti quanto il codice stesso, quali la sicurezza, e conseguenza di questo è l’emergere di bugs e vulnerabilità o instabilità del codice; un altro aspetto spesso tralasciato riguarda le performances. Il concetto “basta che funzioni”, che esegua quello per cui è stato progettato non è un obiettivo valido per scrivere software di qualità.
Ormai da tempo il mercato dei OS si è avvantaggiato della presenza di nuovi competitor, che sebbene siano molti giovani sono riusciti a rosicchiare fette di mercato ed estimatori alle due super potenze che da anni si contendono i favori degli utenti.
Negli ultimi anni sono nati vari linguaggi scritti in Java ed eseguibili sulla Java Virtual Machine: ci sono delle reimplementazioni di alcuni gia' esistenti, scritti in C, come per esempio JRuby, Jython, Rhino (JavaScript) e PHP (progetto Quercus).
Altri linguaggi sono nati direttamente per essere eseguiti sulla JVM e i piu' famosi sono Groovy, Scala, Clojure (un dialetto di Lisp) e JavaFX. Java e' un linguaggio di programmazione affermato, sopratutto in ambiente enterprise ed e' l'alternativa Open Source a .NET.
Può capitare che su un pc non nostro, la navigazione risulti assai più complicata rispetto a quanto siamo abituati quando lavoriamo con il nostro computer. Chi naviga spesso infatti, utilizza i preferiti in maniera frequente e di conseguenza, tende a dimenticarsi più facilmente anche gli indirizzi che controlla più spesso.
Secondo articolo conclusivo sull'automazione nel linguaggio PHP, nel primo articolo abbiamo visto che questo linguaggio può essere anche di aiuto nel caso di operazioni di interfacciamento a dispositivi esterni, per creare piccoli controlli automatici. In questa seconda parte vediamo altre funzionalità di PHP che ci consentono di uscire dalla programmazione comune che si effettua con questo linguaggio, iniziamo con i processi paralleli e concludiamo con uno sguardo ai database condivisi.


