larigira.html 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>larigira</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  6. <style type="text/css">
  7. body { font-family: 'Droid Serif'; }
  8. h1, h2, h3 {
  9. font-family: 'Verdana';
  10. font-weight: normal;
  11. }
  12. .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono', inconsolata, monospace; }
  13. .inverse {
  14. background: #272822;
  15. color: #777872;
  16. text-shadow: 0 0 20px #333;
  17. }
  18. .inverse h1, .inverse h2 {
  19. color: #f3f3f3;
  20. line-height: 0.8em;
  21. }
  22. /* Slide-specific styling */
  23. #slide-inverse .footnote {
  24. bottom: 12px;
  25. left: 20px;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <textarea id="source">
  31. class: center, middle, inverse
  32. # Larigira
  33. *l'automatico che mai la sbaglia*
  34. ---
  35. layout: false
  36. # Summary
  37. 1. What is it about
  38. 2. What's the status of radio automation in Linux
  39. 3. Our needs
  40. 4. Larigira implementation details (that's the boring part)
  41. ---
  42. # What is it about
  43. * Quando nessuno è in radio, cosa suona la radio?
  44. * a.k.a. **compagno automatico** !!
  45. * mette musica random
  46. * mette jingle, spottini
  47. * può schedulare trasmissioni, repliche, ecc. (ma ci interessa relativamente)
  48. ---
  49. # What's the status of radio automation in Linux
  50. * Due parole: un panico
  51. * Pochi software, spesso molto complessi
  52. * ... ma è anche vero che abbiamo strane necessità!
  53. ---
  54. # Our needs
  55. * roba semplice
  56. * affidabile
  57. * non ci interessa supporto al preascolto (quindi no supporto doppia scheda audio)
  58. * non lo usiamo per fare il palinsesto: andiamo al 99% in diretta, ma occasionalmente mandiamo repliche
  59. * hackabile!
  60. * crossfade
  61. * supporto dignitoso agli storage remoti (richiede accurata gestione di cache & asincronia ⇒ noia)
  62. ---
  63. class: center, middle, inverse
  64. # L'implementazione
  65. *Ora finisce la roba interessante e inizia il nerdaggio*
  66. ---
  67. # Architettura di sistema
  68. * Si appoggia ad MPD
  69. ** In questo modo il player lo fa chi lo sa fare
  70. ** sta in qualsiasi distro
  71. * larigira popola la playlist di MPD
  72. * se larigira viene riavviato, la musica prosegue indisturbata
  73. ---
  74. # Architettura del software
  75. * greenlet (cioè diciamo che sono tipo thread e tanto fa) per gestire l'asincronia
  76. * una greenlet controlla la playlist di mpd.
  77. * Quando è quasi vuota...
  78. * trova qualcosa da metterci dentro
  79. * fa partire una greenlet che, quando ha finito, accoda un nuovo file
  80. Perché? perché se copi file da uno storage remoto, vuoi che prima siano cachati su disco
  81. ---
  82. ## Il software: eventi
  83. Ci sono anche gli eventi: un evento è una specifica temporale e una specifica audio.
  84. Una specifica temporale è un modo per descrivere una successione (potenzialmente infinita di eventi)
  85. Esempi:
  86. * ogni mezzora (è infinita!)
  87. * il 21 dicembre 2012 alle 12.00 (una sola volta)
  88. * tutti i mercoledì di maggio 2015 alle 17.00 (quattro volte)
  89. * per ogni evento nel db c'è una greenlet che
  90. * attende l'arrivo della sua ora
  91. * quando la sua ora è **quasi** arrivata, parte la greenlet corrispondente
  92. ---
  93. ## Il software: eventi (2)
  94. Ci sono anche gli eventi: un evento è una specifica temporale e una specifica audio.
  95. Una specifica audio è un modo per descrivere una successione (finita) di file audio già creati.
  96. Esempi:
  97. * il file `/home/pippo/Music/ciao.ogg`
  98. * tutti i file indicati da `http://www.example.org/foo.rss`
  99. * il file più recente nella directory `/home/pippo/GiornaliRadio/`
  100. ---
  101. ## L'ultima sugli eventi, prometto
  102. È abbastanza semplice definire delle specifiche temporali, o delle specifiche audio, personalizzate.
  103. Così è possibile fare cose molto particolari, tipo:
  104. > 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".
  105. </textarea>
  106. <script src="remark-latest.min.js">
  107. </script>
  108. <script>
  109. var slideshow = remark.create({
  110. });
  111. </script>
  112. </body>
  113. </html>