123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <!DOCTYPE html>
- <html>
- <head>
- <title>larigira</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <style type="text/css">
- body { font-family: 'Droid Serif'; }
- h1, h2, h3 {
- font-family: 'Verdana';
- font-weight: normal;
- }
- .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono', inconsolata, monospace; }
- .inverse {
- background: #272822;
- color: #777872;
- text-shadow: 0 0 20px #333;
- }
- .inverse h1, .inverse h2 {
- color: #f3f3f3;
- line-height: 0.8em;
- }
- /* Slide-specific styling */
- #slide-inverse .footnote {
- bottom: 12px;
- left: 20px;
- }
- </style>
- </head>
- <body>
- <textarea id="source">
- 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".
- </textarea>
- <script src="remark-latest.min.js">
- </script>
- <script>
- var slideshow = remark.create({
- });
- </script>
- </body>
- </html>
|