class: center, middle, inverse # Larigira *l'automatico che mai la sbaglia* --- layout: false # Summary 1. What is it about 2. What's the status of radio automation in Linux 3. Our needs 4. Larigira implementation details (that's the boring part) --- # What is it about * Quando nessuno è in radio, cosa suona la radio? * a.k.a. **compagno automatico** !! * mette musica random * mette jingle, spottini * può schedulare trasmissioni, repliche, ecc. (ma ci interessa relativamente) --- # What's the status of radio automation in Linux * Due parole: un panico * Pochi software, spesso molto complessi * ... ma è anche vero che abbiamo strane necessità! --- # Our needs * roba semplice * affidabile * non ci interessa supporto al preascolto (quindi no supporto doppia scheda audio) * non lo usiamo per fare il palinsesto: andiamo al 99% in diretta, ma occasionalmente mandiamo repliche * hackabile! * crossfade * supporto dignitoso agli storage remoti (richiede accurata gestione di cache & asincronia ⇒ noia) --- class: center, middle, inverse # L'implementazione *Ora finisce la roba interessante e inizia il nerdaggio* --- # Architettura di sistema * Si appoggia ad MPD ** In questo modo il player lo fa chi lo sa fare ** sta in qualsiasi distro * larigira popola la playlist di MPD * se larigira viene riavviato, la musica prosegue indisturbata --- # Architettura del software * greenlet (cioè diciamo che sono tipo thread e tanto fa) per gestire l'asincronia * una greenlet controlla la playlist di mpd. * Quando è quasi vuota... * trova qualcosa da metterci dentro * fa partire una greenlet che, quando ha finito, accoda un nuovo file Perché? perché se copi file da uno storage remoto, vuoi che prima siano cachati su disco --- ## Il software: eventi Ci sono anche gli eventi: un evento è una specifica temporale e una specifica audio. Una specifica temporale è un modo per descrivere una successione (potenzialmente infinita di eventi) Esempi: * ogni mezzora (è infinita!) * il 21 dicembre 2012 alle 12.00 (una sola volta) * tutti i mercoledì di maggio 2015 alle 17.00 (quattro volte) * per ogni evento nel db c'è una greenlet che * attende l'arrivo della sua ora * quando la sua ora è **quasi** arrivata, parte la greenlet corrispondente --- ## Il software: eventi (2) Ci sono anche gli eventi: un evento è una specifica temporale e una specifica audio. Una specifica audio è un modo per descrivere una successione (finita) di file audio già creati. Esempi: * il file `/home/pippo/Music/ciao.ogg` * tutti i file indicati da `http://www.example.org/foo.rss` * il file più recente nella directory `/home/pippo/GiornaliRadio/` --- ## L'ultima sugli eventi, prometto È abbastanza semplice definire delle specifiche temporali, o delle specifiche audio, personalizzate. Così è possibile fare cose molto particolari, tipo: > ogni terzo martedì del mese manda la replica di una trasmissione presa da `http://www.rad.io/feed.xml` ma solo se quella più recente è della categoria "approfondimenti".