<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14239409</id><updated>2011-04-22T03:28:54.496+02:00</updated><title type='text'>Chicken's Soup</title><subtitle type='html'>The life and times of the younger, lesser spotted chicken.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14239409.post-115988604633450874</id><published>2005-08-25T16:33:00.000+02:00</published><updated>2006-10-03T16:34:06.340+02:00</updated><title type='text'>XMLTV &amp;&amp; PuddleTV continued...</title><content type='html'>&lt;div style="text-align: justify; font-family: trebuchet ms;"&gt;                 After a &lt;b&gt;full afternoon of fiddling&lt;/b&gt; with the XMLTV scripts, as well as port forwarding to update Gorilla's portage, I think I have created a solution for showing whats coming up on SABC[1,2,3] and ETV, live, on PuddleTV.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;first problem&lt;/b&gt; I had to tackle was an irregularity in the tv_grab_za and tv_grep script. The tv_grep script does exactly what you'd expect it to do, from the name, it just 'grep's for certain arguments or parameters, and gives you the filtered result. The tv_grep script comes with a command to show the part of the schedule that hasn't already aired, ie. only from the current time, until the end of the cached schedule. The problem with this extension is that when asking it to show all shows that are coming up, it seems to start with shows that aired two hours previously. The obvious cause of this would be a &lt;b&gt;badly interpreted&lt;/b&gt; current time/date. The fact that it is two hours difference made me immediately suspect SAST vs UTC. South Africa is +2 hours on GMT, and because of this, I suspected that the script wasn't taking this into account.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;After a bit of fiddling&lt;/b&gt;, I found that it was trying to take this time zone difference into consideration, but for some reason wasn't being very successful with the adjustment. It would take the read out from a `date` command and then parse it, and based on whether there was a time zone mentioned, it default to just UTC or GMT time. For some reason, &lt;b&gt;it wasn't interpretting SAST&lt;/b&gt; and so would take the current time as UTC and then make the adjustment for my time zone, and end up two hours early. &lt;b&gt;The solution, after some bashing, came about quite randomly&lt;/b&gt;. I thought that because it isn't reading the SAST right, it might only be able to interpret certain symbols or time zones. I added an extra UTC to the end of a customized `date` command and voila, it worked. All of a sudden the script was doing as it was supposed to, and it was interpretting the correct time zone. After wording through my train of thought and attempts to fix it, in this blog, I have realised that &lt;b&gt;it doesn't really make that much sense&lt;/b&gt;, but &lt;b&gt;bygons&lt;/b&gt;, it works &lt;img src="http://flipflop.rucus.net/%7Eflipflop/blog/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /&gt;&lt;br /&gt;&lt;br /&gt;The second problem this afternoon was the issue of an &lt;b&gt;out of date portage&lt;/b&gt; on gorilla.scw. He can't see campus, and as a result, his rsync in Gentoo doesn't work. An out of date portage isn't the worst thing in the world, because I can just make my PC fetch the files and then scp them across to gorilla. That works in most cases, but not when XMLTV has a dependency list of over &lt;b&gt;50 tiny perl packages&lt;/b&gt;. I tried making a snapshot of my portage and untar'ing it over gorilla's current portage with no luck. The easiest work around, I found, was to just:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;$ ssh -L 80:ftp.rucus.ru.ac.za:80 flipflop@flipflop.scw.ru.ac.za&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;And then run the emerge -f xmltv command to fetch all the files through my PC. I will look into fixing rsync soon. It apparently uses SSH, so a simple ssh forward to my box should do the trick. &lt;b&gt;I'm too excited&lt;/b&gt; to try figure it out now... I finally have the scripts for the schedule display on PuddleTV and &lt;b&gt;I want to see it in action&lt;/b&gt; ASAP!&lt;br /&gt;&lt;br /&gt;The scripts weren't too difficult to come up with, and with a &lt;b&gt;bit of fancy footwork&lt;/b&gt;, I have emerged with two bash scripts. The one script ssh's to flipflop.scw and instructs it to fetch the TV schedules for the next 7 days from DSTV. Again, this is needed because gorilla himself can't see DSTV.co.za. flipflop.scw fetches the new schedule &lt;b&gt;every three days&lt;/b&gt; (instructed to by the crontab) and then scp's it back to gorilla and effectively updates it. The use of sshkeys makes this possible, so I don't have to be there to type in the password to scp and ssh to and from the two boxes. The fetch script is below:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;#/bin/bash&lt;/i&gt;&lt;br /&gt;&lt;i&gt; TVDIR="/home/flipflop/PuddleTV"&lt;/i&gt;&lt;br /&gt;&lt;i&gt; export http_proxy="http://username:password@cache.ru.ac.za:3128"&lt;/i&gt;&lt;br /&gt;&lt;i&gt; tv_grab_za --days 7 &gt; $TVDIR/sabc_schedule.raw&lt;/i&gt;&lt;br /&gt;&lt;i&gt; scp $TVDIR/sabc_schedule.raw gorilla:~/PuddleTV/&lt;/i&gt;&lt;br /&gt;&lt;i&gt; rm $TVDIR/sabc_schedule.raw&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;It is &lt;b&gt;frustrating&lt;/b&gt; because of gorilla's inability to see campus, but this kindof work around has become second nature to me, through the development of PuddleTV. The next script is the script which filters the schedule and then outputs the necessary, and needed, information to a local file. The file is then cat'd (with some more fancy footwork) and given to 'convert' which, through the use of the 'text' function, writes the programme information to a blankly (but PuddleTV prepared) jpeg image. This image is then &lt;b&gt;replicated twenty times&lt;/b&gt; and then, using mencoder, made into a movie running at 2 frames per second. The result is a 10 second long video showing the next 15 shows that are to come onto the 'free' SA TV channels, in order of screening. The script is as follows:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;#/bin/bash&lt;/i&gt;&lt;br /&gt;&lt;i&gt; TVDIR="/home/flipflop/PuddleTV"&lt;/i&gt;&lt;br /&gt;&lt;i&gt; tv_sort $TVDIR/sabc_schedule.raw | tv_grep --on-after "`date +%x' '%X' 'UTC`" --on-before tomorrow | tv_to_text | head -n 15 | grep "\-\-" &gt; $TVDIR/temp/sabc_list&lt;/i&gt;&lt;br /&gt;&lt;i&gt; convert -font helvetica -pointsize 30 -fill blue -draw "text 10,110 '`cat $TVDIR/temp/sabc_list | sed 's/\t/ /g'`'" $TVDIR/schedule_pics/sabcschedule.jpg $TVDIR/temp/schedule_sabc.jpg&lt;/i&gt;&lt;br /&gt;&lt;i&gt; for i in `seq 1 20`                                                                     &lt;/i&gt;&lt;br /&gt;&lt;i&gt; do&lt;/i&gt;&lt;br /&gt;&lt;i&gt;         cp $TVDIR/temp/schedule_sabc.jpg $TVDIR/temp/schedule_sabc-$i.jpg&lt;/i&gt;&lt;br /&gt;&lt;i&gt; done&lt;/i&gt;&lt;br /&gt;&lt;i&gt; mencoder "mf://$TVDIR/temp/schedule_sabc-*.jpg" -mf fps=2 -o $TVDIR/videoclips/sabc_schedule.avi -ovc lavc -lavcopts vcodec=mpeg4&lt;/i&gt;&lt;br /&gt;&lt;i&gt; rm $TVDIR/temp/*&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This script is run every five minutes on gorilla. I may change this so that it happens less often, like every ten minutes maybe, because the schedule doesn't change that often, and every ten minutes should be more than sufficient (and accurate). The only thing I want to add to this script is the &lt;b&gt;addition of a timestamp&lt;/b&gt; in the top corner. This isn't too difficult, as it is already implemented into my original PuddleTV schedule generator.&lt;br /&gt;&lt;br /&gt;I am in the process of emerging XMLTV onto gorilla, and the minute it is finished, I will&lt;b&gt; fire up the scripts&lt;/b&gt; on the PuddleTV, realtime, and see how they perform. I plan on making the advert show, just about as often as the PuddleTV schedule. Once again, &lt;b&gt;PuddleTV is developing&lt;/b&gt;, and every time I release another one of these scripts, it makes me think about &lt;b&gt;how awesome it would be to actually package PuddleTV&lt;/b&gt; and release it as an actual ebuild for Gentoo. Oh well, &lt;b&gt;some day&lt;/b&gt; &lt;img src="http://flipflop.rucus.net/%7Eflipflop/blog/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-115988604633450874?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/115988604633450874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=115988604633450874' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988604633450874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988604633450874'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/08/xmltv-puddletv-continued.html' title='XMLTV &amp;&amp; PuddleTV continued...'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-115988622387846450</id><published>2005-08-24T16:35:00.000+02:00</published><updated>2006-10-03T16:37:03.880+02:00</updated><title type='text'>Fish River Point</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://flipflop.rucus.net/images/lighthouse.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://flipflop.rucus.net/images/lighthouse.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify; font-family: trebuchet ms;"&gt;We stayed here last weekend for Andrew Elliotts 22nd birthday. Besides the weather, it was incredible. The two houses were in an abandoned firestation, adjacent to a lighthouse.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-115988622387846450?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/115988622387846450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=115988622387846450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988622387846450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988622387846450'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/08/fish-river-point.html' title='Fish River Point'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-115988609586052195</id><published>2005-08-24T16:34:00.000+02:00</published><updated>2006-10-03T16:34:55.863+02:00</updated><title type='text'>XMLTV &amp;&amp; PuddleTV</title><content type='html'>&lt;div style="text-align: justify; font-family: trebuchet ms;"&gt;                 One of my friends, &lt;b&gt;Andrew Illgner&lt;/b&gt;, pointed out an &lt;b&gt;awesome Linux based utility&lt;/b&gt;, &lt;a href="http://membled.com/work/apps/xmltv/"&gt;xmltv&lt;/a&gt;, which &lt;b&gt;fetches web based TV station schedules&lt;/b&gt; and formats them into standard XML. It even has a script set aside for South Africa, and can fetch all of the &lt;a href="http://www.dstv.co.za/"&gt;DSTV&lt;/a&gt; channel's schedules in a couple of seconds. It takes quite a few parameters and is pretty &lt;b&gt;customizable&lt;/b&gt; in that regard. As well as the actual fetching script, the package comes with a couple other scripts for manipulation of the actual XML output. Scripts which 'grep' for certain form values, names etc. as well as scripts which order and arrange the output into seperate channels or days, for instance.&lt;br /&gt;&lt;br /&gt;The only &lt;b&gt;shortcoming&lt;/b&gt; I've found so far, is that some of the scripts which cut the output to only show the schedule that is relevant to user at the current time, seems to report programmes which happened two hours ago. In other words, the script seems to believe that it is GMT and not GMT +2, like South Africa is. I'm sure there is a way to correct this, and if there isn't, then &lt;b&gt;I may have to hack away at the scripts&lt;/b&gt; to find out how to correct this. Before using the fetching script, a simple export of the http_proxy environment variable sorts out any proxy issues you would have, like we do, sitting behind a firewall.&lt;br /&gt;&lt;br /&gt;I plan to incorporate this XMLTV utility into PuddleTV. I want to add more onto my ~/.mplayer/input.conf, so that a user can push one of the 'F' keys and it will display what is coming up on &lt;a href="http://www.sabc.co.za/"&gt;SABC&lt;/a&gt;[1,2,3] and &lt;a href="http://www.etv.co.za/"&gt;ETV&lt;/a&gt;. It &lt;b&gt;shouldn't be too hard&lt;/b&gt;, because I already have other scripts which osd_cat things to the screen to show settings or upcoming movies. It should just be a case of fiddling the output so that it is human readable (from the XML document) and then osd_cat'ing line by line onto the screen. After that, I was thinking about &lt;b&gt;implementing actual adverts&lt;/b&gt;, showing the upcoming schedule on the available 'free' TV channels, using the current mplayer/convert script I built for displaying PuddleTV's schedule, realtime.&lt;br /&gt;&lt;br /&gt;Below, I've &lt;b&gt;detailed how I used the XMLTV utility&lt;/b&gt; and some of the outputs it's capable of:&lt;br /&gt;&lt;br /&gt;First of all, &lt;b&gt;export your http_proxy&lt;/b&gt; variable if you have to access http through a proxy server:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;$ export http_proxy="http://username:passwd@proxy.address.com"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Next&lt;/b&gt;, depending on where you live (different scripts are built for different countries), &lt;b&gt;run the fetch script configuration:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;$ tv_grab_za --configure&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;This allows you to select which channels it must fetch information for, so as to not be fetching a shitload of channels every time from the server. After this is done, you can tell it to fetch the channels and output the XML to something other than STDOUT.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;$ tv_grab_za --days 7 &gt; list.xml&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;It takes about a minute and the result it an XML formatted list.xml of the schedules for the channels you selected over the next seven days. The command line I'm using to parse for PuddleTV is as follows: (I've only just fiddled around with it for an hour or so, so I still plan on refining it quite a bit before deploying it as an actual output for PuddleTV)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;$ tv_grep --channel 48.dstv.com --on-after "Thu Aug 25 00:22:39 SAST 2005" list.xml | tv_to_text - | head -n 5&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;... and the output:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;08-24 (Wednesday)&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;&lt;i&gt; 22:00--22:30    News    SABC 3&lt;/i&gt;&lt;br /&gt;&lt;i&gt; 22:30--23:15    The Oprah Winfrey Show // Diary Of a Mad Black Woman    SABC 3&lt;/i&gt;&lt;br /&gt;&lt;i&gt; 23:15--23:45    Crossing Over With John Edward II       SABC 3&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;... Cool eh!? Now go for it, &lt;b&gt;emerge xmltv&lt;/b&gt;. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-115988609586052195?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/115988609586052195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=115988609586052195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988609586052195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988609586052195'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/08/xmltv-puddletv.html' title='XMLTV &amp;&amp; PuddleTV'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-115988628022625575</id><published>2005-08-23T16:37:00.000+02:00</published><updated>2006-10-03T16:38:00.226+02:00</updated><title type='text'>Nokia N-Gage &amp;&amp; Worms World Party</title><content type='html'>&lt;div style="text-align: justify; font-family: trebuchet ms;"&gt;                 So &lt;b&gt;stoked&lt;/b&gt;, just got &lt;b&gt;Worms World Party&lt;/b&gt; for my stocky little &lt;b&gt;&lt;a href="http://web.n-gage.com/en-R1/home/home.html"&gt;Nokia N-Gage&lt;/a&gt;&lt;/b&gt;. It's really awesome, just like playing it on the PC but on a much smaller screen. It comes with a &lt;b&gt;whole range of voice packages&lt;/b&gt; and nationalities, all crammed into a little 32Mb MMC. It even supports N-Gage Arena which you can play over GPRS, as well as bluetooth multiplayer support. Imagine sitting in a room with three other N-Gage owners playing Worms against each other, wow. The only sacrifice for playing Worms on your cell (whilst you wait for something to compile &lt;img src="http://flipflop.rucus.net/%7Eflipflop/blog/templates/default/img/emoticons/tongue.png" alt=":-P" style="display: inline; vertical-align: bottom;" class="emoticon" /&gt; ), is &lt;b&gt;battery life&lt;/b&gt;. It's expected though, when you see the graphics and sound it's constantly pushing out. It's not the biggest problem, considering the full battery cycle charge time of just over an hour.&lt;br /&gt;&lt;br /&gt;Anyways, it's &lt;b&gt;a real winner&lt;/b&gt; and, the &lt;b&gt;best Symbian S60 based game I've played&lt;/b&gt; so far. So yeah, check it out at &lt;a href="http://www.ngageworld.com/worms-nokia-n-gage/"&gt;www.ngageworld.com&lt;/a&gt;, and if I'm feeling really generous I may even snap some pics with my digicam for you &lt;img src="http://flipflop.rucus.net/%7Eflipflop/blog/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-115988628022625575?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/115988628022625575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=115988628022625575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988628022625575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/115988628022625575'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/08/nokia-n-gage-worms-world-party.html' title='Nokia N-Gage &amp;&amp; Worms World Party'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112470574111992220</id><published>2005-08-22T12:04:00.000+02:00</published><updated>2005-08-22T12:15:41.130+02:00</updated><title type='text'>XMMS2 and Euphoria</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;I am currently trying to get &lt;a href="http://wiki.xmms2.xmms.se/index.php/Main_Page"&gt;XMMS2&lt;/a&gt; to build on my Gentoo box. For those who don't know, XMMS is the &lt;a href="http://www.winamp.com"&gt;Winamp&lt;/a&gt; of Linux, and XMMS2 is a very unstable, under development port which attempts to emulate the skins of Winamp5. They currently can't use official Winamp5 skins but have released some pretty kief skins which make XMMS2 look very similar.&lt;br /&gt;&lt;br /&gt;I'm keen on having an &lt;a href="http://www.xmms.org"&gt;XMMS&lt;/a&gt; which isn't a standard "Winamp2" rectangle. I want something that is "morphable" or ... neater. Something which can fit into the corners of my desktop and look as snug as my e17 installation. I haven't blogged about it yet, but I am currently using &lt;a href="http://www.get-e.org"&gt;enlightenment DR17&lt;/a&gt; as my window manager in &lt;a href="http://www.gentoo.org"&gt;Gentoo&lt;/a&gt;. It's incredible. It's all in CVS at the moment, so no official releases have been made, but what I have running at the moment is just the ultimate eye-candy. Check out&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; these screenshots of my desktop: &lt;a href="http://flipflop.rucus.net/screenshot.jpg"&gt;[1]&lt;/a&gt; &lt;a href="http://flipflop.rucus.net/screenshot2.jpg"&gt;[2]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It wasn't easy, and DR17 is currently still very buggy, which made customizing and fiddling very difficult with many a segfault and unhandled exceptions. Either way, I got it running, and now I'm pretty stoked with it. The only short coming I've found so far is it's incompatibility with my&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.mplayerhq.com"&gt;&lt;/a&gt; for some reason. &lt;a href="http://www.mplayerhq.com"&gt;MPlayer&lt;/a&gt; seems to halt e17 and force you to back out of X and then restart it before you can do anything again. I've been looking around the net but can't seem to find anybody experiencing the same problem. It's tough finding any help because of how developmental e17 is. I'm sure it isn't something too serious, but for now I will just use Xine for videos.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112470574111992220?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112470574111992220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112470574111992220' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112470574111992220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112470574111992220'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/08/xmms2-and-euphoria.html' title='XMMS2 and Euphoria'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112288619374685970</id><published>2005-08-01T10:41:00.000+02:00</published><updated>2005-08-01T10:49:53.746+02:00</updated><title type='text'>We can rebuild him, we can make him stronger.</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Gorilla ails. I can hear him crying. I have the technology, I can make him stronger, faster, better than ever before.&lt;br /&gt;&lt;br /&gt;In an effort to save space on gorilla, a while ago, I started deleting what I thought was unimportant information. Turns out that a whole lot of what I deleted was critical to portage, and the result was a b0rked ports tree and so much more. It didn't bother me at first because gorilla was all sorted, he didn't need any more applications, and was running like a pearler. Unfortunately, his cron stopped working for some reason, and although I tried my bestest to correct the problem, I was unable to. The simple resolution to re-emerge another cron or the same cron was also quickly aborted after realisation of the portage problem which existed on gorilla.&lt;br /&gt;&lt;br /&gt;The next best solution: A reinstallation of Gentoo onto the machine. But this time, because I know what to expect, I can do it better. There was a bit of a dogshow surrounding Gorilla's limited space issues last time, which can be avoided this time, resulting in a smoother installation and post installation of Gentoo.&lt;br /&gt;&lt;br /&gt;So far, I have booted him off a Gentoo install CD, and with the files I backed up before reinstallation, have already flashed the new portage tree and it's recompilation of all the necessary packages is imminent. Dealing with an old 2gb (for the root) and 1gb hard drive (for auxillary) is frustrating, but sufficient.&lt;br /&gt;&lt;br /&gt;Progress will be documented and blogged. Stay tuned.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112288619374685970?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112288619374685970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112288619374685970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112288619374685970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112288619374685970'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/08/we-can-rebuild-him-we-can-make-him.html' title='We can rebuild him, we can make him stronger.'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112266139156572724</id><published>2005-07-29T20:23:00.000+02:00</published><updated>2005-07-29T20:23:11.580+02:00</updated><title type='text'>The airport official can only show you the door. You must walk thr
 ough it.</title><content type='html'>&lt;p class="mobile-post"&gt;Point is, is that you'll only know how many people are inside the toilets if you check it out for yourself.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112266139156572724?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112266139156572724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112266139156572724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112266139156572724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112266139156572724'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/airport-official-can-only-show-you.html' title='The airport official can only show you the door. You must walk thr&#xA; ough it.'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112206341382303273</id><published>2005-07-22T22:16:00.000+02:00</published><updated>2005-07-22T22:16:53.833+02:00</updated><title type='text'>Go Count Them</title><content type='html'>&lt;p class="mobile-post"&gt;By law, all 1-ply toilet rolls must have 500 sheets. Count them.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112206341382303273?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112206341382303273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112206341382303273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112206341382303273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112206341382303273'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/go-count-them.html' title='Go Count Them'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112236507420237862</id><published>2005-07-22T15:13:00.000+02:00</published><updated>2005-07-26T10:04:34.206+02:00</updated><title type='text'>Jozi and the Giant</title><content type='html'>&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;I feel the beat of Jozi's heart&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;, throbbing deeply beneath my feet.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I'm in Joburg visiting Jen's family and the &lt;/span&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;trip has been nothing short of intense&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;. We meet with family and friends countless times a day and rush around the spaghetti freeway of Jozi like a tunneling ferret. &lt;/span&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;I'm tired&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;. I've forgotten what it's like to sleep in till lunch and pass the day with geeking. I am &lt;/span&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;keen to return to the chilled out vibes&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; that course through the veins of the Puddle and greater Grahamstown.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;The &lt;/span&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;visit to Jozi has been amazing&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; though, meeting Jen's family (although nerve racking at times) has been really awesome and I'm glad to now know my extended family :-)&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;We &lt;/span&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;toured &lt;a href="http://www.constitutionalcourt.org.za/site/home.htm"&gt;Constitution Hill&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; yesterday, which was incredible. I had no idea what to expect and after wandering through that life changing piece of history, I now have so much more &lt;/span&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;respect for our country&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; and &lt;/span&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;realisation of the challenges&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; we face in advancing from our troubled past. I plan on blogging a whole lot more about it, upon returning to &lt;a href="http://www.ru.ac.za"&gt;Rhodes&lt;/a&gt;. Right now, I wait for Jen's highlights to take effect and her hair dressing appointment to approach completion. Have you ever noticed how much hair she actually has!? ;-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112236507420237862?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112236507420237862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112236507420237862' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112236507420237862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112236507420237862'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/jozi-and-giant_22.html' title='Jozi and the Giant'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112072724750363257</id><published>2005-07-07T10:31:00.000+02:00</published><updated>2005-07-07T11:07:27.510+02:00</updated><title type='text'>this music will change your life</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;I found some &lt;span style="font-weight: bold;"&gt;amazing&lt;/span&gt; Trance type music. It's this &lt;span style="font-style: italic;"&gt;random&lt;/span&gt; swedish dudes mixes of about an hour in length. They're really &lt;span style="font-weight: bold;"&gt;kief&lt;/span&gt;. Starts off really chilled and then works up, quite awesome to geek to :-) It's at &lt;a href="http://www.da-la.com"&gt;Da-La.com&lt;/a&gt;, under the mixes section. Personally, I prefer the first "Digital Alchemy" mix, especially around 18 minutes in. &lt;span style="font-weight: bold;"&gt;Wow&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Tomorrow the &lt;span style="font-weight: bold;"&gt;journey back home&lt;/span&gt; to Durban starts. It's a &lt;span style="font-style: italic;"&gt;grueling&lt;/span&gt; ten hour trip through the Transkei and other spectacular places. Me and Jen are gonna start the journey at 3am tomorrow morning. She's working &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; day, and then going to a "rap" party (See, thats what they call an end of project party in the "industry") so won't be much company in the car tomorrow :-P &lt;span style="font-weight: bold;"&gt;Nonetheless&lt;/span&gt;, I will be getting to sleep pretty early and then waking up to drive most (if not all) of the way.&lt;br /&gt;&lt;br /&gt;The whole "&lt;span style="font-style: italic;"&gt;driving all the way&lt;/span&gt;" thing is not because of Jen's driving, or her keen-ness for driving, but rather my &lt;span style="font-weight: bold;"&gt;enjoyment&lt;/span&gt; of, driving. I really enjoy doing the whole journey from here, taking &lt;a href="http://radbrad.rucus.net/gallery/theCamel/040_15?full=1"&gt;Sopwith&lt;/a&gt; to &lt;span style="font-weight: bold;"&gt;new&lt;/span&gt; boundaries :-) Sopwith is, nevertheless, &lt;span style="font-weight: bold;"&gt;just&lt;/span&gt; a camel (Sopwith is my jade 1994 Toyota Conquest). Yah, so I really &lt;span style="font-weight: bold;"&gt;enjoy driving the distance&lt;/span&gt;, and if I do happen to get tired, I will let Jen step in and takeover (no matter how bad her driving is - &lt;span style="font-style: italic;"&gt;j/k&lt;/span&gt;). &lt;span style="font-weight: bold;"&gt;Durban will be plentiful&lt;/span&gt; with food and rest. I am so keen on not having to cook for myself for a while, this year has been so hectic with that. Sometimes you miss the ease of &lt;a href="http://graham.ru.ac.za"&gt;residence&lt;/a&gt;, where food is prepared with or without you three times a day. It's not &lt;span style="font-weight: bold;"&gt;good&lt;/span&gt; food... but it's food that you &lt;span style="font-weight: bold;"&gt;didn't have to prepare yourself&lt;/span&gt;. But then again,&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://graham.ru.ac.za"&gt;&lt;/a&gt; residence had &lt;span style="font-weight: bold;"&gt;more than one&lt;/span&gt; "minus side".&lt;br /&gt;&lt;br /&gt;Today is gonna be filled with doing things that need to be done before I leave. At least I don't have to pack up my room anymore, and leaving with the knowledge that everything will be exactly how it was when I left, is &lt;span style="font-weight: bold;"&gt;spectacular&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've been thinking about ways to improve PuddleTV again. I'm sure I can come up with some &lt;span style="font-weight: bold;"&gt;awesome&lt;/span&gt; new ways to improve it, just need some time to think about it. Maybe the ability to make &lt;a href="http://www.mplayerhq.com"&gt;MPlayer&lt;/a&gt; show you whats coming up next? I use osd_cat to do my "messaging" to the viewer, it overlays on MPlayer &lt;span style="font-weight: bold;"&gt;so well&lt;/span&gt;, and because of it's customizability, I can make it stand out quite nicely. osd_cat is part of the &lt;a href="http://www.ignavus.net/"&gt;xosd&lt;/a&gt; package. All you have to do is pipe any output to osd_cat and it displays it onto your X environment. So a way to make it show the next item coming up in the schedule shouldn't be too difficult, I will think about it over the holidays, as well as other &lt;span style="font-weight: bold;"&gt;ideas I need to implement&lt;/span&gt; when I get back.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112072724750363257?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112072724750363257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112072724750363257' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112072724750363257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112072724750363257'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/this-music-will-change-your-life.html' title='this music will change your life'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112066144032435221</id><published>2005-07-06T15:55:00.000+02:00</published><updated>2005-07-06T17:05:49.796+02:00</updated><title type='text'>Puddle TV - A product of boredom and genius</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;So Gorilla.scw was &lt;span style="font-weight: bold;"&gt;finally&lt;/span&gt; running, and was happily playing hours and hours of music videos continuously. This wasn't enough. I had no one to talk to except my PC... and Gorilla. I decided that it was time that Gorilla started doing something more useful, and not just blindly play music videos for the rest of eternity. My knowledge of a useful scripting language called &lt;a href="http://www.perl.org/"&gt;Perl&lt;/a&gt; was very scarce, which forced me to use the simpler, more painful style of programming... &lt;span style="font-weight: bold;"&gt;bash scripting&lt;/span&gt;. I &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;planned to make a couple scripts which played a variety of media, based upon a schedule which I would put into place via the use of the crontab.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The crontab is a type of event scheduler for *NIX boxes. The scheduler is called at certain specified times, and the script or program that is specified is run in the background. This is &lt;span style="font-weight: bold;"&gt;super&lt;/span&gt; useful for what I was wanting to do. The schedule would be exactly that, a schedule for the channel, detailing times to start programs. At first, it sounds pretty straight forward, and honestly, at first it was, but as soon as you start demanding more and more of the scripting, it becomes amazingly complex and complicated. The first huge obstacle I came across was having new events start running without just closing whatever was playing, but rather, wait until they have finished and then play afterwards, simulating a queuing system. This queuing system gave rise to a number of different scripts, each in charge of playing a certain type of video ie. music videos or movies or TV series. The queuing system was achieved through lock files, which would be 'touched' when playing was active and removed when playing was inactive. At the sign of no playing lock, the script would be able to play, knowing that nothing else is playing already.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Originally, this solution was &lt;span style="font-weight: bold;"&gt;outstanding&lt;/span&gt;, it performed exactly as I predicted, and seemed to make the queuing system work out quite efficiently. Unfortunately, with this queuing simulation, came the need for a certail hierarchy between all the different scripts. For instance, what happens if a movie is queued to play, but music videos are already playing. Here, the movie would wait for the music videos to finish before playing, but how does the music video script know that there is an even more important script waiting for airtime? I achieved this through the use of a "priority request" flag, which was set whenever a script of higher stature requested airtime. This way, the music video script would keep checking the flag, waiting to see if another script requested airtime, and in the case of a request, the music video script would play out the video until the end and then kill itself, removing the playing lock file, and "giving way" to the "priority request" script.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;This worked out awesomely. The hierarchy was: Movie &gt; TV Series &gt; Music Videos. Music videos were at the bottom of the pile, which was ideal, because whenever neither a TV series, nor a Movie was playing, music videos would fill the "white space". That way, PuddleTV would never be idling and something would always be showing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Unfortunately, (like with all scripts) something kept on bugging out and there were times when dead locks would occur with a race condition ocurring between two active scripts. Both would be fighting for the playing lock whilst one held the priority request. Suddenly, situations kept occuring where PuddleTV would be in a dead lock state with nothing playing. I came up with an idea to create a "check_idle" script which, through the crontab, would be called every two minutes. The script would check for the existence of the playing lock and/or the priority request, and then check whether &lt;a href="http://www.mplayerhq.com/"&gt;MPlayer&lt;/a&gt; was running. If no mplayer was running, then it would mean that two scripts are &lt;span style="font-weight: bold;"&gt;fighting&lt;/span&gt;, and there needs to be some kind of intervention. The intervention would be to remove the playing lock and/or the priority request flag. This would cause both scripts to try grab the locks again, and because of the hierarchy and because of alternate waiting times between trying to grab the locks, the dead lock would be corrected, and the script with the highest priority would be granted airtime.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Eventually, I found a comfortable setting where no more dead locks ocurred, and the system ran fine for days without ever freezing due to a race condition. The system was &lt;span style="font-weight: bold;"&gt;brilliant&lt;/span&gt;, and after deciding on a daily TV schedule, I built the corresponding crontab file and started the system rolling.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;After a couple hours watching PuddleTV, I realised the one main thing missing from the channel, compared to real world public TV channels, was advertising. I found myself &lt;span style="font-weight: bold;"&gt;missing&lt;/span&gt; the adverts between music videos or movies, as well as the advertising for up coming shows or the movies that are to appear that day/week. The solution was right in front of me: I had to create advertising on PuddleTV and some kind of way to let the viewers know about upcoming shows.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The first advert that was installed into the system was an advert showing the PuddleTV daily schedule. This was achieved by making a standard JPEG with all the details of showtimes in it, and then using mplayer, create an MJPEG of the picture repeating for a couple seconds. The schedule was shown over two different pages, one for morning/lunch viewing and the other for afternoon/evening viewing. Another necessity in advertising a schedule is to have some backing music to it. I used Audacity to cut some samples of equivalent running times as the schedule and then using &lt;a href="http://www.transcoding.org/cgi-bin/transcode"&gt;mplex&lt;/a&gt;, I multiplexed the rendered video with the sampled audio. The results were &lt;span style="font-weight: bold;"&gt;incredible&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Soon after this, I figured out a way to advertise the movies for that particular day. Every day at midnight, Gorilla would randomize the list of movies and select two from it. The names of these two movies would then be pasted onto a template, using the &lt;a href="http://www.imagemagick.org/"&gt;convert&lt;/a&gt; command. This enables you to place text onto an image without actually placing it yourself in a graphics studio. After pasting the name onto the template, mplayer would create the MJPEG and mplex would multiplex it with some sampled audio, and then spit out two different AVI's, one for the 10AM movie and the other for the 8PM movie.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;It was all good and well having these awesome scripts which would create movies (during runtime) and prepare them for airing on PuddleTV but there was no system implemented yet to decide when to play them, and how often. I started thinking about ways to decide when it will be appropriate to play adverts... obviously you don't want them too often otherwise it will be just like normal TV, but at the same time, you want the schedule to be aired every once in a while to show people whats up next.&lt;br /&gt;&lt;br /&gt;The main scheduling of adverts would take place during music videos, because these would be playing the most, and the broken up nature of a whole lot of music videos would make slotting adverts in quite easy. I decided that the schedule should be shown every +- 8 videos, and advertising for the day's movies would happen every 8+(random(10)) videos. This would institute a kind of &lt;span style="font-weight: bold;"&gt;entropy&lt;/span&gt; with the advertising and not make it too structured. Another really cool feature I built in during a very lonely night was a stats page. The stats page would show you the current temperature outside, as well as maximum, minimum and wind speeds. It would also display the date and time, and the current load averages of Gorilla. This was done by a &lt;span style="font-style: italic;"&gt;simple&lt;/span&gt; '&lt;a href="http://wget.sunsite.dk/"&gt;wget&lt;/a&gt;' of the local weather page, and then some fancy footwork to extract the relevant values. The stats were then pasted onto a stats page template the same way that the upcoming movies were, using convert, mplayer and mplex. The stats page also was also shown at random, iirc, about every 8-15 videos. Whenever movies or series were playing, the schedule and upcoming movies would be screened before and after every movie/series. I used some &lt;span style="font-weight: bold;"&gt;amazing&lt;/span&gt; backing samples from &lt;a href="http://www.africandope.co.za/"&gt;African Dope Records&lt;/a&gt; and &lt;a href="http://www.musica.co.za/eMusica/Product.asp?Barcode=600120801293"&gt;Cape Town 2AM&lt;/a&gt;, both are &lt;span style="font-weight: bold;"&gt;local&lt;/span&gt; South African albums.&lt;br /&gt;&lt;br /&gt;The upcoming movie script also had to be able to check what the time was, so as to avoid playing the advert for the 10am movie at like 2pm that day (after the movie had actually played). This was done by just performing a 'date' command and then cutting the relevant data from it, to check what the hour of the day is.&lt;br /&gt;&lt;br /&gt;The scripts are now keeping themselves up to date by running a regeneration script every midnight. The script rebuilds the listings of movies/musicvideos/series to ensure that newly added media is also put into the loop. The use of these listings of available media was &lt;span style="font-weight: bold;"&gt;critical&lt;/span&gt; in making sure that the system ran smoothly and quickly, and that wait times between media playing on PuddleTV was kept to a minimum. With this system, the viewer rarely experiences an idle period of no more than 3 seconds, and if there is a deadlock, the viewer will only wait for under 2 minutes before the check_idle script is called to fix the deadlock (although, if the system is running untouched, this will rarely, &lt;span style="font-weight: bold;"&gt;if ever&lt;/span&gt;, occur).&lt;br /&gt;&lt;br /&gt;After running PuddleTV for a couple days and once everyone was back in the digs, I could start getting some feedback and recommended addons. The one major noticeable problem was that certain music videos kept being played more often than others. It is so difficult to create completely random values constantly, without finding some kind of repetition of or "favourite" value. It sounds silly, but it was happening. It was quite obvious that some videos would keep coming up, far more often than others. The solution for this was quite simple: I made the music video script add the name of the song that it chose to a running list. The list would only ever be 100 lines long. As soon as it is filled, and another music video is added, the video on the bottom of the file would drop off. Each time a music video is randomly selected, the script would check if that name exists in the list, if it did, it would randomize another song and then check again, until it found a song that hadn't been played in the last 100 music video slots. This system seemed to work efficiently, and because it only ever had to deal with text files with music video names within it, the randomization and reselection would happen extremely quickly and completely &lt;span style="font-weight: bold;"&gt;transparent&lt;/span&gt; to the viewer.&lt;br /&gt;&lt;br /&gt;The system is still far from perfect, I still want to implement some more advertising (real adverts, like the ones around the net that have been banned from TV), as well as more TV series. I also plan to make it more generic and more able to be ported across different computers. By making path names and other specific variables unset inside the actual script, other people could start to use my scripts to make their own PuddleTV, by just supplying the necessary directories containing the relevant media.&lt;br /&gt;&lt;br /&gt;** All media discussed above have been obtained legally.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112066144032435221?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112066144032435221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112066144032435221' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112066144032435221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112066144032435221'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/puddle-tv-product-of-boredom-and.html' title='Puddle TV - A product of boredom and genius'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112064936478399783</id><published>2005-07-06T12:59:00.000+02:00</published><updated>2005-07-06T13:41:40.006+02:00</updated><title type='text'>Gorilla.scw</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Everyone left for holidays and such. I was left all alone in my digs. The product: Gorilla, and subsequently, PuddleTV (more on that later).&lt;br /&gt;&lt;br /&gt;The idea has been floating around in my head for quite some time now. With all the media and random stuff on my PC, I could create some kind of continuous television programme on the TV in our communal lounge. At first, we played movies on the TV rather than sitting and watching it on a small computer screen, but it wasn't as easy as it sounds. To do this, I would have to move my whole PC through to the lounge, of course, switching it off (which any geek will tell you, is criminal) and taking the mouse and keyboard with it, plus extra AV cabling. This wasn't fun. And when you want to do it often, it becomes more of a pain than a pleasure.&lt;br /&gt;&lt;br /&gt;The solution was simple: Using the spare parts I have lying around, create another stand-alone "dumb" terminal which can just play movies and nothing else. This was easy, first of all, I had tons of spare parts around my room from PC's that I've repaired and replaced over the last few years, and second of all, because our entire digs is on a switched network, it wouldn't need a big hard drive at all because all the media would be streamed over the network.&lt;br /&gt;&lt;br /&gt;The end result goes by the name of Gorilla. The name was a randomly chosen word that &lt;a href="http://radbrad.rucus.net/"&gt;Darb&lt;/a&gt; (my brother) gave the outstanding registered network address and so, the new machine, &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Gorilla, was named. It's a Pentium-4 2.0 Ghz, with onboard network and audio. It carries a two gigabyte hard drive as it's primary drive and a one gigabyte drive as it's auxillary. Stacked with a mere 128Mb SDRAM PC133, and an old 32Mb RIVATNT2 AGP video card, it more than fits the requirements for playing standard compressed media.&lt;br /&gt;&lt;br /&gt;The first obstacle was the operating system. Being a keen &lt;a href="http://www.gentoo.org/"&gt;Gentoo Linux&lt;/a&gt; user, my first instincts were to install a base &lt;a href="http://www.gentoo.org/"&gt;Gentoo linux&lt;/a&gt; system and then tailor it with some customized version of X and standard &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;a href="http://www.mplayerhq.com/"&gt;MPlayer&lt;/a&gt;. Unfortunately, when seeking Darb's counsel on choice of OS, his opinions seemed to differ. He believed that a more desktop oriented flavour of Linux would suit Gorilla better, something along the lines of &lt;a href="http://www.ubuntulinux.org/"&gt;Ubuntu&lt;/a&gt; Linux. I am &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; a fan of Ubuntu. I have tried to use it before on our home PC in Durban, with no luck. I found that the simple desktop user requirements were not met, and simplistic things like connecting to the internet via a modem rather than a permanent DSL line, were verging on impossible. And if they're impossible for me as a long standing *NIX user, then how would the usual Joe be able to do it? Due to this, I was against the Ubuntu idea but because of it's quick installation times and relatively easy install procedure (as well as the respect I have for Darb's opinion) I decided to try it out.&lt;br /&gt;&lt;br /&gt;I was unsuccessful. Dealing with such a small hard drive (2Gb) makes any standard Linux desktop installation difficult (but not impossible). Ubuntu states that it requires only 2gb for the normal installation, but when trying to perform this install, it ran out of disk space. This was Not Kief (tm). After a couple hours of toying with Ubuntu to make it install a less-fancy base, I threw in the towel and went with what I knew best, Gentoo.&lt;br /&gt;&lt;br /&gt;Gentoo has it's pro's and con's. I'm a firm believer in Gentoo, and I still rate it as the best Linux distribution available. I have never liked &lt;a href="http://www.debian.org/"&gt;Debian&lt;/a&gt; (the basis of Ubuntu) and I&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; have always enjoyed compiling and installing applications from source (the basis of &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;a href="http://www.gentoo.org/"&gt;Gentoo&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;After pulling out of Ubuntu's install, and burning a copy of Gentoo's install CD, I was on my way. About 6 hours later I was settled in with a neat Gentoo installation containing all the required applications and 250mb to spare. Things were looking good.&lt;br /&gt;&lt;br /&gt;Originally I wanted to build routing and bridging capabilities into Gorilla as well, so that he could take the place of our current router, &lt;a href="http://figlet.scw.ru.ac.za/"&gt;Figlet&lt;/a&gt;. &lt;a href="http://figlet.scw.ru.ac.za/"&gt;Figlet&lt;/a&gt; is a fine specimen, don't get me wrong, but her temperamental nature lends itself to being referred to as a female :-)&lt;br /&gt;&lt;br /&gt;Gorilla was ready for launch, and after hooking it up to the TV (via a Digital to PAL converter), it was looking good. I samba mounted all my music videos onto Gorilla, and set it to play in a loop continuously, randomizing video choice, using MPlayer. Suddenly, the Puddle had a new music television channel.&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112064936478399783?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112064936478399783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112064936478399783' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112064936478399783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112064936478399783'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/gorillascw.html' title='Gorilla.scw'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112064735279787436</id><published>2005-07-06T12:55:00.000+02:00</published><updated>2005-07-06T15:18:26.540+02:00</updated><title type='text'>Blogging Via Email</title><content type='html'>&lt;p style="font-family: trebuchet ms;" class="mobile-post"&gt;Testing blogging over email, using my handy Nokia N-Gage, and GPRS. It works :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112064735279787436?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112064735279787436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112064735279787436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112064735279787436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112064735279787436'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/blogging-via-email.html' title='Blogging Via Email'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14239409.post-112064615740687550</id><published>2005-07-06T11:35:00.000+02:00</published><updated>2005-07-06T13:40:43.630+02:00</updated><title type='text'>Stir the Soup</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I &lt;/span&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;finally&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; decided to start my own blog. I was thinking of hosting it on my &lt;a href="http://www.ru.ac.za/"&gt;universities&lt;/a&gt; &lt;a href="http://rucus.ru.ac.za/"&gt;local server&lt;/a&gt;, but instead, took the easy route and used &lt;a href="http://www.blogger.com/"&gt;blogspot&lt;/a&gt;. As soon as I'm blogging regularly, and I have the time next term, I will move it to a local, more personalized location&lt;/span&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;The name of my blog comes from &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;one of my many nick names here at Rhodes: Chicken. Thus, the ramblings on this blog are basically Chicken's soup of thoughts, therefore, Chicken Soup.&lt;br /&gt;&lt;/span&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;On &lt;span style="font-weight: bold;"&gt;Friday&lt;/span&gt;, me and my girlfriend Jen are trekking all the way up to my home town, Durban, basically for my mom's &lt;span style="font-weight: bold;"&gt;50th&lt;/span&gt; birthday as well as for a nice ten day break at home. After that, we plan on heading up to Joburg for a couple days to stay with her mom, and sister. Should be great. I'm gonna blog about the project I'm currently working on at home, called PuddleTV real soon now, just want to test out this blogging facility first :-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14239409-112064615740687550?l=soupofchicken.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soupofchicken.blogspot.com/feeds/112064615740687550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14239409&amp;postID=112064615740687550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112064615740687550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14239409/posts/default/112064615740687550'/><link rel='alternate' type='text/html' href='http://soupofchicken.blogspot.com/2005/07/stir-soup.html' title='Stir the Soup'/><author><name>Kyle Whittington</name><uri>http://www.blogger.com/profile/06680204657740121572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
