Icecast + MySQL Stats

Icecast è ormai considerato uno dei migliore software per realizzare un server di relay per flussi audio in streaming basato su formati e codice Open Source. Non solo è stato uno dei primi a supportare più flussi su un unico server, ma può essere usato anche con flussi audio/video basati su formati OGG.

Per quanto riguarda le statistiche di ascolto, il software di per se fornisce già alcuni dati come il numero di ascoltatori attuali per ogni flusso e quello del picco massimo, e consente di ottenere informazioni maggiori usando soluzioni esterne, come parser i files di log oppure software esterni che interrogano periodicamente il server.

Faccio parte del Team di UnicaRadio, la webradio degli Studenti dell’Università di Cagliari. Lavorando nell’ambiente ho capito l’importanza di un dato come il tempo medio di permanenza degli ascoltatori. Dopo aver valutato diverse soluzioni e provato diversi software, ho deciso di implementare la cosa lavorando direttamente sul codice sorgente, così da ottenere data ed ora di connessione e disconnessione di ogni singolo ascoltatore.

L’uso di un database esterno mi è sembrata la migliore soluzione, sia per l’inserimento dei dati da parte di Icecast, sia per la consultazione delle statistiche ottenute che può essere implementata anche con un semplice sito internet PHP+HTML.

Ho creato un repository su GitHub, raggiungibile all’indirizzo https://github.com/sardylan/icecast-mysql nel quale a breve riporterò tutte le modifiche che ho fatto fin’ora al sorgente originale.

Stay Tuned…

strlen e puntatori a NULL

Oggi ho scoperto una cosa molto importante sulla strlen() in linguaggio C.
Utilizzo questa funzione in quasi tutte le operazioni che riguardano le stringhe, ma non mi è mai capitato un caso in cui viene richiamata passando un puntatore a NULL come parametro di ingresso.
E non intendo un puntatore ad una stringa vuota (il cui unico elemento è un carattere di NULL), ma proprio un puntatore che in effetti non punta da nessuna parte.
Mentre testavo le nuove modifiche al codice di icecast (che pubblicherò non appena saranno stabili) ottenevo una serie di Segmentation Fault, e grazie a GDB ho scoperto e risolto il problema implementando una nuova funzione:

Nel mio caso, la strlen serve per preparare una query SQL, quindi il problema di un puntatore a NULL può essere risolto considerandolo come una stringa vuota.
In ogni caso si può risolvere la cosa con un semplice if.

Anche la funzione strcpy ha un comportament simile. Alla fine ho gestito la cosa con un if a monte.

Benvenuti

Benvenuti.

Come potete vedere, dopo tanto tempo mi son deciso a dare un aspetto decente al mio sito personale. Dopo aver testato Joomla (vecchie versioni), provato Drupal e dopo aver perfino creato un CMS partendo da zero, ho finalmente preso la decisione finale di installare WordPress.
Questo significa che avrò finalmente un blog serio, con una grafica “decente” e sopratutto facile da usare.

Argomenti e contenuti saranno quelli di sempre, ovvero un po’ di tutto. Guide, notizie, foto, e tanto altro, ma sopratutto tanta tanta roba inutile…