Evo jedne ideje koju mi je sugerisao drug pre neki dan.
Festival je, kao sto znate, sintisajzer govora. Iskoristicemo njega da izgovori informacije koji inace lepimo po conky-ju gkrellm-u i slicnim ukrasima za desktop. A onda, strpamo skriptu koja to radi u crontab i svakih sat vremena (recimo) imamo potpun izvestaj. Bas kao na radiju - vesti na svaki pun sat

Cron ili slicnu alatku, pretpostavljam, vec imate na sistemu. Ako nemate festival, instalirajte ga.
Prva 'caka' - festival podrazummevano pusta ton upisivanjem u /dev/dsp, sto ce reci da koristi zvucni podsistem ekskluzivno. Dakle, ako nesto pusta zvuke u trenutku kada pokrecemo festival, on nece moci. Ako pokrenemo festival, nakon njega nista nece moci da koristi zvuk. Da bi smo prevazisli ovo, poteracemo festival tako da koristi ALSA uredjaje. Na srecu, ovo je lagano. Dodajte u fajl /etc/festival.scm (ukoliko ne postoji napravite ga) sledece redove:
(Parameter.set 'Audio_Command "aplay -D plug:dmix -q -c 1 -t raw -f s16 -r $SR $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Format 'snd)
Ovo ce naterati festival da koristi aplay za zvuk.
Hajde da napravimo i neku skriptu za informacije. Ja sam se organizovao ovako: napravio sam jedan direktosijum za skripte za "radio". Kod mene je to /home/rile/local/radio. Preporucijem i vama da negde unutar $HOME direktorijuma kreirate jedan nov direktorijum za ovo. U nastavku cemo napraviti nesto fajlova (uglavnom bash skripte). Podrazumevacu da su svi fajlovi sacuvani u ovom direktoijumu.
Sta bi mogli da strpamo u skripte? Ja sam stavio ovo:
1) Tacno vreme. Skripta se zove time.sh
#!/bin/bash
echo -n "It's "
echo -n `date | cut -d ' ' -f 4 | cut -d ':' -f 1`
echo -n " hours and "
echo -n `date | cut -d ' ' -f 4 | cut -d ':' -f 2`
echo -n " minutes. "
echo "..."
Rezultat izvrsavanje je sledeci:
rile@rile:~/local/radio$ ./time.sh
It's 01 hours and 30 minutes. ...
2) Zauzetost masine. Skripta se zove system.sh
#!/bin/bash
prolaz="a"
mfree=0
mcache=0
for i in `cat /proc/meminfo | grep MemFree`
do
#echo $prolaz
if [ "$prolaz" == "aa" ]
then
mfree=$i
fi
prolaz=$prolaz"a"
done
prolaz="a"
for i in `cat /proc/meminfo | grep Cached`
do
#echo $prolaz
if [ "$prolaz" == "aa" ]
then
mcache=$i
fi
prolaz=$prolaz"a"
done
ukupno=$(( $mfree + $mcache ))
ukupno=$(( $ukupno/1024 ))
prosek=`uptime | cut -d ',' -f 5 | cut -d '.' -f 2`
echo "Average processor load is $prosek percents."
echo "There's $ukupno megabytes of free memory."
echo "..."
exit 0
Rezultat izvrsavanja:
rile@rile:~/local/radio$ ./system.sh
Average processor load is 32 percents.
There's 1415 megabytes of free memory.
...
Sto se ove skripte tice: zauzetost procesora je za zadnjih 15 minuta (prosecna), a ako ovo citaju ljudi koji se uce bash skriptama, nemojte koristiti one cikluse za izdvajanje zauzetosti kod provere memorije. To je los princip, al sam ja na brzaka prvo to ispisao

3) Vremenska prognoza. Skripta se zove weather.sh
Ovde i u sledecoj skripti cemo iskoristiti nekoliko mocnijih unux komandnih alata za rad sa tekstom i XMLom.
Stvari koje su na netu postavljenje u vidu web servisa (koji koristi SOAP, tj XML u sintaksi) ili bilo kakvih servisa koji koriste tekstualne ili XML poruke mozemo lagano obradjivati i koristiti u ovoj situaciji.
Za ovu skriptu se koristi curl i morate ga instalirati da bi uopste proradilo sve.

Vremenska prognoza se "svlaci" sa
www.weather.com (tamo postoji jedan od web servisa za ovu namenu) pa se primenjuje sledeca XSL transformacija:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="text" disable-output-escaping="yes"/>
<xsl:template match="weather">
<xsl:apply-templates select="cc"/>
<xsl:apply-templates select="dayf/day[@d='1']"/>
</xsl:template>
<xsl:template match="cc">
<xsl:text>Temperature: </xsl:text> <xsl:value-of select="tmp"/>
<xsl:text> Celsius degree </xsl:text>
<xsl:text>. Conditions: </xsl:text><xsl:value-of select="t"/>
</xsl:template>
<xsl:template match="dayf/day[@d='1']">
<xsl:text>. Tomorrow: </xsl:text>
<xsl:value-of select="low"/>
<xsl:text> to </xsl:text>
<xsl:value-of select="hi"/><xsl:text> Celsius degree </xsl:text>
<xsl:text>, </xsl:text><xsl:value-of select="part[@p='d']/t"/>
<xsl:text>.</xsl:text><xsl:value-of select="/weather/swa/a/t"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Ovaj fajl sacuvajte kao weather.xslt
Skripta koja koristi ovo izgleda ovako
#!/bin/sh
export http_proxy=http://user:pass@proxy.domen.lan:8080
LOCID=SRXX0027
UNITS=m
RUNDIR=/home/rile/local/radio
CURLCMD=/usr/bin/curl
XSLTCMD=/usr/bin/xsltproc
CURLURL="http://xoap.weather.com/weather/local/$LOCID?cc=*&unit=$UNITS&dayf=2"
XSLT=$RUNDIR/weather.xslt
eval "$CURLCMD \"$CURLURL\" 2>/dev/null| $XSLTCMD $XSLT - $FILTER"
Ovde trebate uneti sledece izmene:
Red koji izvosi http proxy prilagodite vasem proksiju, ili izbacite ako ne koristite proxy.
Redove RUNDIR, CURLCMD i XSLTCMD izmenite tako da odgovaraju lokacijama na vasem disku.
Promenljivu LOCID podesite tako da odgovara vasem mestu. Ovde je lokacija za Nis. Na
www.weather.com mozete pronaci kod koji odgovara Vasem mestu.
Izlaz koji daje skripta izgleda ovako:
rile@rile:~/local/radio$ ./weather.sh
Temperature: 10 Celsius degree . Conditions: Partly Cloudy. Tomorrow: 6 to 6 Celsius degree , Rain.
Ovo je inace minimalno modifikovana skripta koju sam nasao negde na webu i koju koristim u conky-ju.
4) Zadnje vesti iz BBC-a. Skripta se zove bbc.sh
#!/bin/bash
export http_proxy=http://user:pass@proxy.domen.lan:8080
wget http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml
xmlstarlet sel -t -m "rss/channel/item" -v title -n -v description -n rss.xml | sed -e 's/$/./' > bbcnews
rm rss.xml
exit 0
Vazi ista izmena za http_proxy varijablu kao kod prethodne skripte.
Ova skripta izvlaci vesti iz BBC-evog RSS feeda. Modifikovanjem lokacije sa koje wget dovlaci fajl mozete iskoristiti ovu skriptu za dovlacenje informacija sa bilo kog RSS feeda.
Potreban vam je xmlstarlet (moj omiljeni sekvencni konzolni XML editor) da bi ovo proradilo.
Izlaz necu postovati jer je poveci. Zbog toja je i "tailovan" u sledecoj skripti.
Ok... Sad jos da sklopimo sve u jedno.
Napravicemo novu skriptu koja se zove radio.sh
#!/bin/bash
workDir="/home/rile/local/radio/"
cd "$workDir"
if [ -f "block" ]
then
log=`date`
echo "Stopped on $log" > last.log
exit 0
fi
echo "This is regular hourly report." > "vesti.txt"
$workDir/time.sh >> "vesti.txt"
echo "." >> "vesti.txt"
./system.sh >> "vesti.txt"
echo "Weather forcast:" >> "vesti.txt"
./weather.sh >> "vesti.txt"
echo "The latest BBC news:" >> "vesti.txt"
./bbc.sh
cat "bbcnews" | tail -n 15 >> "vesti.txt"
echo ". . . Have a nice day." >> "vesti.txt"
ogg123 intro.ogg
festival --tts "vesti.txt"
log=`date`
echo "Executed on $log" > last.log
exit 0
Izmenite promenljivu workDir da pokazuje na direktorijum u kome ste Vi stavili sve ove fajlove.
Ova skripta preusmerava izlaze svih prethodnih skripti u jedan fajl, a zatim taj fajl "cita" festivalom.
Ukoliko u direktorijumu u kojima su skripte postoji fajl koji se zove 'block' skripta nece uraditi nista. Ovim smo dobili mogucnost da "redovne vesti" iskljucimo jednim `touch block` i ukljucimo sa `rm block`.
U fajlu last.log se cuva vreme zadnje akcije i to da li je skripta izvrsena ili blokirana.
Osim toga, u direktorijum sam stavio fajl intro.ogg, sto je ustvai
ovaj fajl spakovan u ogg format. Obican zvuk gonga koji se lepo uklapa kao "spica za vesti" i koji se pokrece malim konzolnim plejerom `ogg123` (i njega trebate instalirati da bi sve proradilo).
Ok... Sad je sve tu. Ako vec niste, dodajte privilegije za izvrsavanje svim bash skriptama.
Sada treba samo dodati u crontab red kojim se izvrsava "glavna" skripta na odredjeno vreme. Ako zelite da se izvrsava svakog punog sata, ukucajte
crontab -e
i dodajte red koji izgleda ovako nekako
0 * * * * /putanja/do/skripti/radio.sh
Uzivajte u festivalu i izvestajima!
