An Italian student shares their experience interning at a world leader in open source software. The document discusses the student's work on treemap visualization techniques and integrating them into a thermostat application. It also touches on lessons learned around project management, teamwork, and remote working while emphasizing high quality and continuous improvement.
38. THANKS FOR THE ATTENTION.
Inspired by
Antonio Cesarano
cesarano2607@gmail.com
Hinweis der Redaktion
Buongiorno a tutti ragazzi, oggi vi presento una panoramica su quella che è stata la mia esperienza in RedHat, su ciò di cui mi sono occupato e su quanto di nuovo ho potuto apprezzare in un ambiente molto diverso dal nostro.
Per chi non lo sapesse, la collaborazione con RedHat è possibile grazie al programma Erasmus Traineeship per tirocinio, che cerca a modo suo di fornire un’OPPORTUNITÀ a coloro che vogliono mettersi in gioco. Vorrei ricordavi a questo proposito, che lo status di studente è mantenuto anche dopo la laurea per un certo periodo di tempo quindi se qualcuno è restio all’esperienza per completare gli studi in tempo, ci faccia un pensiero.
Detto ciò, oggi RedHat è l’azienda leader nel settore dell’open source. Fondatrice del noto sistema RedHat Linux e la relativa versione free fedora come anche CentOS. Inoltre partecipa attivamente a moltissimi progetti in svariati ambiti, ad esempio nei tool di sviluppo, nel cloud, lo storage, l’ambito desktop e non solo.
Da qui in poi avrei subito voluto parlarvi di del progetto a cui ho lavorato e tante altre cose fighe, ma onde evitare una morte prematura da presentazione, voglio prima mostrarvi quanto è bello il posto in cui sono stato.
Ovvero, Monaco di baviera.
E ovviamente quant’è bella l’allianz arena…
Vogliamo parlare dell’azienda? Ragazzi, le uniche parole per descriverlo sono proprio quelle, «the best office ever». Questa non è la foto dell’ufficio di monaco ma di quello di Toronto, non perché quello di monaco sia meno bello ma semplicemente perché non avevo nessuna foto di qualità da mostrarvi. Dicevo, l’ufficio piu bello del mondo
Almeno fin quando non sono arrivato io ed è diventato l’ufficio più caotico di sempre.
Bene, ora che vi ho fatto capire quanto è figo l’ambiente, passiamo a vedere quanto è figo il lavoro a cui mi sono dedicato
Allora, il progetto a cui ho lavorato è denominato thermostat. E’ nato circa tre anni fa e rientra tra i progetti sviluppati per OpenJDK, ovvero la versione 100% open source di java .
Thermostat è principalmente uno strumento di tuning, ovvero di messa a punto, e di monitoring per istanze multiple di JVM su più host in un ambiente cloud
I componenti principali di Thermostat sono 3: gli agenti, lo storage e i client
Gli agents si occupano di monitorare le macchine virtuali java presenti su ogni nodo del cluster. Ogni agent rappresenta una tecnica di monitoraggio dedicata prevalentemente ad un indicatore di performance. Le informazioni che gli agent riescono a ricavare sia dalle macchine virtuali java che dagli host stessi, possono essere sia di alto livello come cpu ram e thread che di basso livello come gc, heap e class loader.
Tutti i dati raccolti dagli agents vengono quindi immagazzinati in real time in un repository remoto che è un’istanza di mongoDB.
I client, grafici e a linea di comando, possono quindi connettersi al database, interrogarlo e processare i dati modo da visualizzarli nella maniera più opportuna, solitamente mediante view infografiche.
Ovviamente, soprattutto in ambito enterprise e di ricerca, thermostat può dare un forte contributo al lavoro, ad esempio col framework hadoop utilizando il paradigma mapreduce è possibile monitorare i vari container che si occupano della computazione parallela dei job e analizzare anche il lavoro stesso di hadoop, come il bilanciamento del carico e la ripartizione dei job ai vari hotspot.
Per quanto riguarda il mio lavoro in RedHat, mi sono occupato di progettare e sviluppare un sistema infografico per i client di Thermostat per la visualizzazione e la navigazione della memoria Heap delle macchine virtuali java monitorate sotto forma di treemap.
Una Treemap è una tecnica introdotta dal famosissimo Ben Shneiderman, usata per la rappresentazione di strutture dati ad albero mediante rettangoli annidati, dando molta enfasi al peso dei nodi.
Viene utilizzata praticamente in qualsiasi ambito per la comunicazione di dati statistici e non, ad esempio qui vediamo il PIL britannico scomposto nei vari settori dell’economia nazionale, oppure la percentuale delle diverse fasce d’età nelle regioni dei paesi europei. La ragione per la quale è cosi apprezzata sta nella sua capacità strutturale di essere compatta, di sfruttare tutta l’area a disposizione e di permettere comparazioni visive molto efficaci.
Questo che vedete alle mie spalle è lo studente a cui avevano assegnato il mio task mentre aspettava che l’algoritmo per la treemap ottima desse un output. Alla fine hanno scelto la mia soluzione :P In realtà io non ho inventato nulla, questo era solo un modo carino per dirvi che il problema della costruzione di una treemap appartiene alla classe di complessità computazionale NP.
Per questo motivo, in letteratura ci sono doversi algoritmi greedy per la risoluzione di questo problema, ognuno dei quali si concentra su vari aspetti, che possono essere la stabilità della posizione dei rettangoli, l’ordine nel layout o la qualità dell’aspect ratio. Uno dei principali e quello scelto da me per questo compito, è lo squarified, il quale si concentra prettamente sulla qualità dell’aspect ratio, ovvero il rapporto tra altezza e larghezza di un rettangolo, e dando in output elementi quanto più quadrati possibile e permettere comparazioni visive estremamente efficaci.
Inoltre, ho apportato qualche modifica all’algoritmo introducendo il concetto di layout direction, la quale permette, con pochi passi aggiuntivi, di elaborare ulteriormente i nodi in elaborazione per renderizzarli con un aspect ratio ancora migliore.
Questa è una comparazione tra l’esecuzione step-by-step tra l’algoritmo originale e quello modificato, da cui è possibile notare come gli step aggiuntivi siano davvero pochi, ovvero quelli interlinea.
Ciononostante, su un dataset così piccolo, i miglioramenti sono già evidenti da come possiamo vedere. Infatti, l’algoritmo si comporta allo stesso modo finche non viene processato l’item con peso 3. Addirittura l’algoritmo originale genera un rettangolo con la base doppia rispetto l’altezza, mentre la versione modificata genera un quadrato perfetto. Questo step aggiuntivo ovviamente, influenza l’aspetto degli item che vengono processati successivamente, che risulteranno anch’essi migliori rispetto alla treemap originale.
Una volta implementato l’algoritmo, per poter rappresentare correttamente una struttura heap, è stato necessario sviluppare una tecnica di framing, ovvero una tecnica che permettesse di annidare le treemap per poter rappresentare efficacemente la struttra ad albero.
Per realizzare il framing delle treemap ho annotato l’heap originale con il puntatore al proprio elemento all’interno della treemap. In questo modo, ogni treemap è costruita all’interno del rettangolo del nodo padre PERO’ RIDIMENSIONATO, così da avere un margine che fornisce un aiuto grafico e che possa ospitare la label che indica il nome del nodo. La tecnica del framing è stata poi migliorata con l’ausilio della colorazione a livelli, così da individuare istantaneamente il livello a cui si trovano i nodi, ad esempio nell’immagine si capisce immediatamente che i nodi 9 e 10 sono allo stesso livello dell 11 e 12, dato che sono verdi entrambi.
Questo è il risultato finale. A completare il quadro, vi sono le tecniche di navigazione della treemap, che permettono di fare zoom- in, zoom-out, e jump così da scendere in profondità nei nodi più in basso, cercando però di non perdersi tra i centinaia di migliaia di nodi utilizzando una breadcrumb, ovvero le briciole di pane di ansel e gretel, che segnano la strada man mano che la si percorre. Ovviamente la breadcrumb è interattiva e permette di fare il jump da un nodo all’altro.
Questo lavoro, poi, è stato integrato all’interno di Thermostat e non vi dico che fatica capire dove mettere le mani, poiché Thermostat è praticamente 100 progetti e più messi assieme: ogni agente per monitorare qualcosa, e ogni client per visualizzare quei dati raccolti, come ad esempio la treemap, sono un progetto a sé.
Ad ogni modo, essendo strutturato in maniera impeccabile, una volta individuate le interfacce da implementare e i punti i cui attaccarsi con i design pattern, il lavoro è stato tutto in discesa e il risultato è quello che vedete, ovvero, l’integrazione della treemap al fianco dell’istogramma delle classi dell’heap.
Questo lavoro ha ampliato il mio bagaglio culturale, e non solo, su tantissimi aspetti.
Ragazzi….è estremamente importante lavorare bene. La qualità paga sempre, e non parlo solo del codice: parlo della comunicazione, parlo del decision making, dei processi standardizzati.
Spesso accade questo: si è così concentrati nell’andare avanti che non ci si accorge delle possibilità di poter fare le cose meglio con un minimo sforzo.
Il lavoro di gruppo è pane quotidiano per noi. In RedHat, però, mi sono trovato molte volte in difficoltà e c’è sempre stato qualcuno che ha abbandonato il proprio lavoro e si è dedicato a me. Per quanto qualcuno possa sembrarvi impedito, e questo ve lo dico anche per esperienza,