Come funziona Inotify - parte 2 - Come viene chiamata la system call

In questo blog post cercheremo di capire come le chiamate di Inotify arrivano a livello kernel, passando per la libreria di interfaccia del sistema (libc). Se effettuiamo strace del nostro programma vediamo le chiamate effettuate dal nostro processo. Strace e’ un comando che registra le syscall fatte dal nostro processo in user space verso il kernel in kernel space, ci ritorna come output la system call, i parametri che passiamo il valore di ritorno. Lo eseguiamo sul programma che abbiamo creato nel precedente articolo http://www.candido.io/2019/02/01/come-funziona-inotify-parte-1/ ...

26 febbraio 2019

Come funziona Inotify - parte 1

Leggevo il libro The linux programming interface e finalmente mi sono interessato di come Inotify funzioni su Linux Semplicemente Inotify e’ un sistema di notifiche per cambiamenti su filesystem per file e directory, come accesso, modifica e esecuzione. E’ stato sviluppato per sostituire dnotify, il vecchio sistema di notifiche su cambiamenti del filesystem. Inotify si basa sui file descriptor, vengono aperti quando si vuole interrogare il sistema di cambiamenti di un singolo file e vengono letti con la system call read() ...

1 febbraio 2019

Dutch National Flag Problem o Problema della bandiera Olandese

Un problema molto divertente da risolvere è quello della Bandiera Olandese o in inglese Dutch National Flag Problem. Il problema e’ stato postulato da Edsger Dijkstra, il famoso informatico per l’algoritmo sui grafi. Questo problema si formula così: Abbiamo un array non ordinato formato da N valori numerici, che sono o 0 o 1 o 2. Il nostro compito è ordinarlo. Quindi mi trovo in una situazione del genere: [0,1,2,0,1,1,2,0,2,1,0,0,1,1,2,2] ...

9 marzo 2018

Ottimi libri per imparare il Machine Learning

In questo articolo presenterò dei libri che ho trovato ottimi per iniziare o migliorare nel mondo del machine learning. Come ben si sa non è facile iniziare in questo campo da 0 senza avere una conoscenza della matematica e in parte degli argomenti propri del settore, con questa lista spero di aiutarvi a iniziare in questo mondo. Partiamo con la lista! Machine Learning for Hackers ★★★★★ Questo libro tratta le tematiche di machine learning con molta semplicità, prima viene esposta la teoria e poi viene corredato l’esempio con Python o R. Gli esempi sono semplici e molto bene commentati, non è difficile seguire l’ordine degli argomenti proposti dal libro. I capitoli che lo compongono si basano su argomenti sia teorici che pratici e si va dai problemi di classificazione a metodi di visualizzazione. Il libro è molto basilare ed è adatto a un programmatore che inizialmente vuole approcciarsi a questo mondo e avere una infarinatura senza finire in pura teoria. Gli esempi sono corredati da codice su Github e vengono offerti alcuni spunti per sistemi in produzione che utilizzano questi algoritmi. ...

11 ottobre 2017

Machine Learning in Pratica: Decision Tree in Python con Scikit

In questo articolo spiegherò come fare una analisi basilare di un dataset da me creato e di come applicare il modello di Decision Tree con Python. Ho utilizzato Scikit e Pandas per la parte di analisi dati e dataframe, per la parte relativa ai grafici ho scoperto ultimamente questa libreria Seaborn che va a sostituire a matplotlib. Il dataset che prendo in considerazione è stato costruito da me facendo un semplice scraping della pagina di ogni regione di Booking.com . Dopo avere effettuato lo scraping, fatto a mano dal sito, ho preso ogni singola città e ne ho categorizzato un tipo possibile di turismo. Esso è costituito da: Nome città, regione, Hotel, Latitudine, Longitudine, tipo di turismo Nella pratica considero tutte le regioni italiane e elenco le prime 25 città per numero di hotel. Il dataset è disponibile in fondo al blogpost. ...

6 ottobre 2017

Decision Tree o Alberi Decisionali

I Decision Tree o Alberi Decisionali sono uno strumento di apprendimento supervisionato, essi risolvono principalmente tematiche di classificazione o regressione. Sono molto facili da interpretare e da applicare, non basandosi su un modello lineare sono capaci di apprendere anche associazioni non lineari. Funzionano sia su dati numerici che categorici. I Decision Tree si categorizzano rispetto alla variabile in output come: Categorical Decision Tree Continuous Decision Tree Nella figura seguente si vede un esempio di Decision Tree sul dataset di Iris. ...

3 ottobre 2017

Stochastic Gradient Descent in Python con Sci-kit

Un modo molto semplice di implementare lo Stochastic Gradient Descent nei nostri script è quello di usare l’implementazione di Scikit. La classe SGDClassifier implementa un classificatore che utilizza lo Stochastic Gradient Descent per classificare valori. Il mio script in python applica questo classificatore sul MNIST database, un dataset contente dei numeri scritti a mano e utilizzati come dataset d’esempio nei problemi di classificazione. Ho utilizzato questo semplice script inoltre per gareggiare su Kaggle alla competizione https://www.kaggle.com/c/digit-recognizer, dove si chiede di scrivere un classificatore di cifre e fare il submit del punteggio. ...

29 settembre 2017

Gradient Descent o Discesa del Gradiente

Il Gradient Descent o Discesa del Gradiente è uno dei più popolari algoritmi di ottimizzazione. La discesa del gradiente è un algoritmo molto usato nelle reti neurali in quanto è alla base dell’algoritmo di backpropagation, attualmente sono tantissime le librerie che implementano questo algoritmo. L’idea del Gradiente Descent è quello di minimizzare una funzione obiettivo J(θ) formata da N parametri θ, aggiornando il valore dei parametri in base alla differenza con il gradiente negativo di J(θ) rispetto al parametro considerato. L’aggiornamento del parametro viene aggiornato poi passo passo, secondo un dato valore η, chiamato learning rate. ...

27 settembre 2017

Recensione: Mining Of Massive Datasets

Mining of Massive Datasets è un libro scritto da Jure Leskovec, Anand Rajaraman, Jeff Ullman basato sul corso di studi tenuto a Stanford riguardante il Data Mining. Ogni lezione è poi corredata sul web da dei video presenti su Youtube che spiegano le tematiche dei capitoli, la qualità del corso è molto alta e sono facili da seguire. Capitoli del libro Il libro è diviso nei seguenti Capitoli: Data Mining: Il capitolo è una introduzione al libro, parla degli aspetti dei Big Data, del perchè si fa data mining, delle sfide e dei problemi. Map-Reduce and the new Software Stack: Questo capitolo parla di Map-Reduce, del perchè è stato inventato questo approccio, quanto si riesce ad essere più performanti, del perchè è stato inventato in Google e dei problemi che va a risolvere. Si parla inoltre dei sistemi Opensource che implementano MapReduce fra cui Hadoop. Finding Similar Items: Questo capitolo parla di come misurare i dati, cioè di come decidere delle distanze fra i dati e permettere di capire quanto due dati generici possano essere uguali. Tratta delle distanze classiche fra numeri e stringhe e dell’hashing per trovare i dati similin. Mining Data Streams: Questo capitolo tratta degli Stream e come fare Sampling, contare elementi distinti, applicare il Bloom Filter, stimare i Momenti, stimare il numero di elementi in una finestra temporale. Link Analysis: Questo capitolo parla di PageRank, dell’implementazione e il modello su cui si basa, il rischio di avere attacchi spam che possano deviare il risultato di PageRank delle pagine e i metodi per evitare questo tipo di attacchi. Frequent Itemsets: Questo capitolo parla degli insiemi di oggetti frequenti e delle regole di associazione, spiega inoltre l’algoritmo A-Priori e l’algoritmo PCY con ulteriori spunti. Clustering: Questo capitolo tratta il clustering, sia gerarchico che non, esplorando gli algoritmi KMeans, BFR, Cure Advertising on the Web: Questo capitolo tratta del problema della pubblicità sul web, cioè come fare linking fra annunci e oggetti e migliore offerta sulla pubblicità in quel momento. Recommendation Systems: Questo capitolo parla dei sistemi di raccomandazione esponendo quale è il problema della raccomandazione e come si tenta di risolverlo tramite un approccio semantico basato sui tag o tramite un approccio sulle relazioni fra gli oggetti basato sull’algebra lineare Mining Social Network Graphs: Questo capitolo parla delle connessioni nei social network e nelle community applicando algoritmi e rappresentazioni. Dimensionality Reduction: Questo capitolo parla della riduzione delle dimensioni in un dataset e di come applicare la decomposizione SVD e la decomposizione CUR al nostro dataset. Large-Scale Machine Learning: Questo capitolo spiega i concetti di Training Set, Test Set, allenamento in batch o online, e algoritmi classici di machine learning come il Perceptron, le reti neurali e il Nearest-Neighbor Perchè dovrei leggerlo? Questo libro esplora le basi del data mining e del machine learning, fornendo le nozioni per argomento via via più complessi. E’ di per sé un libro teorico universitario, non si troverà codice, ma solo pseudo codice e ottime spiegazioni. Il libro inoltre non si perde in teoria inutile, ma va dritto al punto fornendo però il contesto adatto. Ogni algoritmo trattato nel libro può essere poi trovato implementato facilmente online da altri programmatori. ...

23 settembre 2017

Facebook Filter Bubble

La Filter Bubble (o camera di Eco) di Facebook è la bolla di informazioni che gli algoritmi usati da Facebook decidono di farci vedere. Gli algoritmi di Facebook si basano sull’idea che noi utenti dobbiamo rimanere ingaggiati dalle informazioni basate sui nostri gusti mostrandoci post di pagine e amici, ma il risultato è diverso, vedremo informazioni basate sì sui nostri gusti, sui nostri amici e sulle pagine che seguiamo, ma ignorando le cose e le idee che non fanno parte della nostra sfera. Inoltre non sapendo come funziona perfettamente l’algoritmo di Facebook per mostrare i contenuti, ma conoscendo quello che i tecnici decidono di dirci possiamo sapere in base a cosa è organizzato in modo approssimativo. ...

14 settembre 2017