No more pink walls

    Still kickin

    I thought I should post a bit of an update on the status of things at the moment. An article which was published on linux.com recently (http://www.linux.com/feature/135096) has generated a bit of interest in Gloss and whilst for the most part the comments have been positive, there have been a few questioning my motives and/or saying its a waste of effort to start a new project.

    In many cases, these arguements are 100% correct. There’s already a number of really great projects out there, not to mention the official mythfrontend itself, where efforts could possibly be better spent, but personally that’s not what I’m looking for at the moment. The best suggestion I’ve seen so far is that I should ‘swallow my pride’ and work on an Elisa plugin getting myth functionality (ie live tv / recordings) happening there. This is something I am going to seriously consider and now that I have a reasonably complete implementation of the myth protocol in python, it shouldn’t be too hard to do. That said I haven’t looked at Elisa’s plugin structure at all and I am assuming that, like Gloss, the ability to feed data through to gstreamer should be pretty much taken care of already.

    As for my motives for writing Gloss in the first place, I never wanted to step on people’s toes, I was simply intending to have something that would, at the very least, generate some discussion regarding the current state of the myth frontend and where it is and should be heading. Frankly, I don’t care if not a single person ever uses Gloss seriously, its something that currently I enjoy hammering away at and I will continue to do so regardless. Its nice to have a project of your own, where you understand it from one end to the other and where you don’t get tied up so much in the ‘politics’ and egos of open source development. Maybe I’m too thin skinned for it. That’s not to say that help isn’t appreciated and other opinions considered, just that I don’t feel I need to be continually justifying myself and my work to other people. I get enough of that every day at work.
    At the end of the day, if you don’t like Gloss, ignore it and don’t use it.

    OK, so with that rant over, I’ll say that the movement in Gloss has been a little stunted, but still coming along. I do hope to have another screencast VERY soon (Yeah I know I said that last time too), but I mean it this time. Beyond that, I am going to start looking at packaging things up for a 0.1 release and move onto 0.2. At this stage, the things I definitely want in 0.2 are:

    • Full adherence to existing myth key bindings (Actually already started, but will not be done for 0.1)
    • TV Guide
    • Recording playback
    • Expanding video directory browsing + automatic refresh of video archive

    Finally, I’m giving a talk on Clutter at the next Linux Users Victoria (LUV) meeting. Details can be found at: http://luv.asn.au/2008/06

    I’ve been a bit slack on the posts lately, although it is at least in part due to the fact that I’ve felt like I’ve nothing to say. I took a bit of a break from coding for a week or so as work has been doing my head in lately and have had a few technical hurdles in Gloss that are beyond my ability to fix in the ways I was hoping. That said though, I’ve got back into it the last week and made some nice, if not astounding steps forward, mostly on the music player, although there’s been a heap of little things fixed in the shared elements code. Screencast of the music interface should finally be done soon, just need to add a nice screen to show when a playlist is running. I’d like to add visualisations also, but at this stage, I have no idea how to implement such a thing.
    I’ve also started forming in my head the ‘roadmap’ for what I want to put into a 0.1 release. The main items are:

    • All currently started modules themed and in a working state
    • A full readme doc written up
    • Proper installation packages (should go without saying I guess)
    • Potentially recording viewing

    I’d really like to reach that sort of point within the next month or 2, but it does come down to how much time I have of a night.

    One of the things I’ve been constantly delaying on Gloss is the development of the music player module. For a long time this was simply because I had no idea in my own head about what it should look like. I’ve bitched and moaned along with all the others about the existing MythMusic interface, but when it was all said and done, I didn’t have anything better to offer.

    Well that is now a thing of the past. There’s a plan in my head and some code in SVN. What I’m picturing is a mix of the interfaces from Elisa and FrontRow, hopefully being a little simpler in the end. One of the crucial things I decided early on with this idea though was that it would require images. Lots and lots of images. Nobody likes sorting through a list of band names when you could be rolling through some form of pretty image display (ie Coverflow).

    The obvious problem with this though is, of course, actually having the images. ID3 data in the files themselves is ok, but it really doesn’t represent the band itself. If you’ve got a band with 5 albums, which album cover do you pick to represent the band? So whilst Gloss will now pull images out of ID3′s, the solution is for the higher level pics fairly obvious, Last.fm. Last.fm offer a reasonable web service interface allowing you to get information, including images if you look hard enough, on bands, albums, songs etc. Integrating with Last.fm wasn’t too difficult, although bringing it all together is still a work in progress.
    Currently, Gloss will run through your existing music collection and download (in the background) images for artists and albums, storing them locally for future use. This is a fully automated process and has about a 95% success rate. Once the images are downloaded, artists and albums can be searched in a pretty growing/shrinking image row, similar to what Elisa currently uses. I’m thinking in future that I will also pull general info about bands (description, tour dates etc) from Last.fm, but these would obviously require further DB updates, which I am hesitant to do.

    So that’s about it for shiny new stuff type updates. There’s been a bit of work ‘generifying’ some code to make it usable across the whole system rather than just in specific modules. Code reuse is a glorious thing when you sit down and make things useful :)
    Depending on how busy I am over the next week, I’d like to have another screencast with the basic Music interface up within 2 weeks, but there’s still a lot to do.

    So time for another update, this time accompanied by a mini screencast. Recently I’ve been focussing on the TV functionality part of Gloss as it has been a bit neglected since it was first written. The backend streaming code has received a partial rewrite (Still very much in progress) that aims to lay the code out in a way that more closely resembles the official Myth Frontend. Needless to say I’ve been poring over this code, and when not getting confused, have learned some really interesting things. I’ve also been tuning the transfer parameters a little to try and achieve smoother, more consistent playback.
    The ability to change channels is now firmly in place and with it comes a basic on screen display featuring channel names/logos/guide etc.

    A couple of people have recently been on the IRC chat too (#gloss on irc.freenode.org) and have provided some really useful feedback. This has lead to a heap of compatibility bugs being corrected, as well as the addition of a –debug mode allowing a different level of verbosity in reporting.

    As I said, I’ve done another screencast, but its only a short one showing some of the new features since the last video. Enjoy:
    YouTube Preview Image

    Hardware fun

    1 comment

    After attending Jon Oxer’s fantastic talk at lca2008, “Joining Second Life to the Real World”, and purchasing one of the Arduino kits he had for sale, I’ve spent a bit of time reading up on both the board itself and stepper motor controllers. So this weekend I finally started putting something together.

    For a while dad and I have been ‘dreaming’ of fitting up a throttle-by-wire system to the (as yet not quite finished) race car. This has the advantages of being more flexible  than a mechanical system as well as having the capability of multiple (potentially non-linear) throttle maps (ie one for road and one for track).
    We looked for a kit that offered such a thing however having found nothing, we put the idea on the “good idea only” pile (We did also investigate pulling one out of a factory TBW car, but all have the controller built into the ECU making it an expensive proposal). The Arduino though is nearly the perfect device to act as the controller!

    So anyway, without dragging on too long (I’ve not done much hardware stuff like this so it has been a series of ‘woohoo’ moments over simple things), I’ve so far managed to hook up a unipolar stepper motor (Pilfered from an old HP inkjet), a 1k pot and a darlington array to the Arduino and set the position of the stepper based on the position of the pot. The position is decided by an array lookup so having different maps should be a simple matter of changing arrays. This is, in a very rudimentary way, the same thing that a TBW system does (with the pot being a throttle position sensor and the stepper being hooked up to the carby actuator).

    So whilst its still a LONG way from the end goal, its a step in the right direction. I quickly learned that the stepper motor I’m using will need to be replaced as I’ll need one with some form of position reference feedback (eBay seems to have heaps). We’ve also briefly discussed hooking the Arduino up to the pulse counter on the front wheel, adding another pulse counter on a rear wheel and creating a basic traction control system. To do this though I’d need to read up a bit on how the Arduino goes at pulse counting. Interestingly, having accurate pulse counting would also make something like cruise control a reasonably simple addition.
    So lots of possibilities and lots of this to play with over the next few months :)

    Well its back to real life now and I can already feel the buzz from linux.conf.au starting to wear thin. Fortunately it has lasted long enough though for me to get a hell of a lot of things done. I met some terrific people at LCA including Rob Bradford from O-Hand in the UK (Thanks for the stickers) as well as catching up with some old conf friends (Hey Nick!).
    On the Gloss side, there’s been plenty of updates, the two most visible being the creation of a sliding image previewer and the stripping out of the menu system from the core code. This means that it is no longer mandatory for Gloss to use a standard menu system for its interface. Whilst writing a new interface module isn’t exactly as stragithforward as writing a new transition, it is now a viable option and to prove the point, I wrote a ‘wheel’ system that (kind of) duplicates the system found on the original version of Frontrow, but is much nicer in my opinion. The great thing about this is that  the interface is completely transparent to the modules themselves and the option of which interface to use is simply set in the theme like any other option. A new screencast showing off these two things shouldn’t be too far away now.
    Also, I received so much schtick from certain people about it during LCA that I have made the TV functionality my next priority, with channel changing being top of the list. This is something I should have got around to doing a LONG time ago, but the eye candy always seemed to keep getting in the way.
    I’ve also updated the setup instructions for Gloss so its now (a little) easier for someone to get it up and running. Thanks to ctudball for being the guinea pig.

    I’ve also spent the last week or so trying to give something back to Clutter by porting all the tests to python, discovering some niggly little issues along the way. I should finish these off this weekend and I’ll get back into Gloss properly after that.

    Anyway, I’m off to Spamalot tonight with Dad, should be an awesome evening :)

    So I’ve been promising it for quite a while now, but the latest Gloss screencast is finally out, and its a doozy. Its a full 5 minutes long and has commentary explaining various features. As usual, its up on YouTube:
    YouTube Preview Image

    The last few weeks have been very hectic on the Gloss front as I’m preparing to show it off at linux.conf.au next week.  Whilst there’s not been many new features added, many of the existing ones have been cleaned up and are working more reliably than they were in the past.
    There has been a lot of work on the themes themselves, making them look their best on as many resolutions as possible. I also added one new menu transition in (zoom_fade), although it still has some clipping issues.

    So that’s about all for now. After next week I hope to do some work in getting the TV module more fully featured, with the top priority being channel changing. Good things to come in other words.

    So I figured that before the sheer number of changes overwhelmed me to the point of forgetting them all, I’d make another long overdue entry about Gloss.

    Firstly, I mentioned in my last entry that I had submitted a proposal for a lightning talk on Gloss at linux.conf.au, well I can confirm that this will be going ahead on the first Monday at the Multimedia Mini-conf. This has probably been the driver that has caused me to work on Gloss so much as there’s a whole heap of things I’d like to see implemented by the time I give the talk.

    So anyway, onto things that have happened since last time:

    • Clutter has moved up to version 0.5, breaking so many things in Gloss in the process that I thought I’d never get to the bottom of it all. There’s still a couple of little changes that are causing me problems and I have a couple of bugs in O-Hands Bugzilla that will help things if/when they get fixed.
    • Probably the biggest change has been the creation of themes for Gloss. I made the decision to go with XML based config for these and so far everything is going really well. Not all of the modules are yet fully themeable, but all the main stuff is done and I’ve made 2 themes to demonstrate what’s possible. The new theme is pretty much a direct knock-off of the Apple FrontRow interface, but it does look good and includes many of the nifty graphic animations that FrontRow contains. The theming moves beyond just simply changing images and moving elements, it also allows you to select transformations for various actions, which leads onto the next point:
    • Pluggable transformations. One of the bigger ‘bling’ elements in a media centre is the transitions/transformations between various elements. Now because I’m not the most artistic or creative of people, I’ve made it as simple as possible for others to be able to make their own transitions without needing to understand much of the underlying system. These transitions can then be selected within themes.
    • TV playback: I FINALLY fixed the streaming video playback system so that it buffers and streams smoothly. This had been really p*ssing me off for a long time, so I was rather happy when I finally got it right :)

    And now a few less exciting things:

    • A nice central input queue that controls and buffers key inputs on scrollable items (eg menus). This fixes problems that were caused when a navigation key was held down causing multiple input events while there was an existing timeline running. Now that’s a big mouthful and sounds really boring, but the theory is that this will lead to those sexy accelerating menu’s that all the cool kids are using these days
    • Video module now has rolling cover viewers so that different folders can be viewed. This is still reasonably basic as most of the work has been around getting it work with Clutter 0.5. Expect more in this area soon.
    • So many little fixes and neatening of the code that to mention them all would cause this entry to become the most boring ever.

    I REALLY want to do another screencast, but a few little things are still broken with Clutter 0.5 and the theming updates, so doing anything at the moment doesn’t feel right, although it would demonstrate so many new things since the last video was made. So, I promise that by the next entry I will have a new screencast ready, bugs or not, and I might even add a little bit of a commentary too :)

    Well its been a little while between updates so I thought I should pop something up. Gloss has been moving slowly, but steadily, forward. I took a break from coding / technology for about a month when I visited Singapore and have been a bit slack getting back into things. That said, they’re well and truly back on track now.

    There’s no screencast from Gloss today as most of the work has been happening under the covers and visually very little has changed since last time. I can happily say though that most of the features that were shown in the last screencast are now actually working propoerly rather than just working long enough to do a demo :)

    The video player had some performance tuning done to it as the large use of textures was having an impact on video and transition framerate. All textures are now being dynamically add/removed as needed rather than just sitting there once the module is loaded. I’m also currently in the process of making this module be able to navigate a file system in an aesthetically pleasing manner. If anyone has suggestions on how best to do this, please let me know, what I think I have is OK, but maybe limited for some peoples needs.

    The TV module has taken steps towards improving its very dodgy file buffering system. Gstreamer is currently reading directly off the socket and whilst this is working and exactly what I wanted, I’m having ‘difficulties’ (To put it mildly) convincing gstreamer to buffer enough data. In the end I fear I’m going to have to move to a custom made pipeline, which I always knew was going to be the case, but I dreaded doing it.

    From a program ‘maturity’ point of view, all modules are now fully pluggable, meaning that they are dynamically added at runtime etc. Everything that the program does (Including the actual TV playback) exists as a discrete module, using the shared Gloss resources (Eg input mgt, video controller etc) where required, but otherwise living in its own world. This was a big step towards making it simple for new modules to be added in the future.
    The only other minor change of interest is a splash screen. This is hamstrung a little bit by some threading issues that I should hopefully be able to fix with the newest SVN of Clutter, however due to the large number of changes occurring on their trunk at the moment I am holding off on this front.

    So that’s about it for now. Expect a new screencast with some funky cover viewer effects in the very near future.
    P.S. I’ve also submitted a proposal to do a brief introductory talk about Gloss at the multimedia mini-conf at linux.conf.au in January, so here’s hoping that comes through.

    So time for another Gloss update. I’ve put in a lot of effort lately to adding new feature so its highly unstable at the moment but most of the things that were working continue to do so and there’s even been the odd bug fixed.

    As far as new features go, the big ticket items are:

    • A video plugin! Its been under development for a little while but now its in place and seemingly working, albeit rather buggy
    • Full screen video now works.
    • All video playback now runs through a central controller that ensures a consistent on screen display

    It doesn’t sound like much but there’s been a bit to get it all running together. I need to pause now I think and start fixing bugs. The final big plugin to be written is an audio player which hasn’t even been started at this stage.

    As usual, the screencast is up on YouTube:
    YouTube Preview Image