Wednesday, April 21, 2010

Rygel logo v2

So based on comments received on the Rygel logo in the last blog entry, Klaus did some adjustments and came-up with even more improved version:



Tuesday, April 20, 2010

Future of Rygel

While you can follow the progress of Rygel through the release announcements on my blog, mailing-lists and even git log, I feel that I am not providing enough information about the future plans. Also there are some things that are not (or so far have not been) in a shape to be part of a release so here is some of what is coming:


I've been looking for an artist to make me a nice logo ever since the start of the project. A few artists gave it a try but they didn't succeed in creating anything worth showing to anyone. I couldn't possibly blame them since:

  • Its not very clear to everyone what Rygel is and I suck at explaining things.
  • Its hard to represent it even when you learn what it is.

So what happened was that I told Sebastian that I was so jealous of his new logo, he asked Klaus to attempt to do the same for Rygel. He did and after a bit of talking and him trying different ideas, we finally agreed on this:




Some people like it, some people don't but I like it. I think Klaus did a pretty good job, keeping in mind this wasn't an easy one. If you are one of those who don't like it, feel free to provide better alternatives or suggestions for Klaus.

Tracker or no Tracker

About an year ago, we (mostly Jens Georg) wrote a plugin (media-export) for Rygel that exposes folders on filesystem on the UPnP network. Although that meant us re-implementing some wheels and getting hated (no i know Ivan still loves me :)) for not being active member of Tracker revolution, I think this was still the right decision because:

  • The stable tracker version (0.6) we were using sucked big time in many ways, a fact admitted by every Tracker developer I've talked to regarding this.
  • AFAIK most GNOME developer (not involved with Tracker project) and distribution packagers didn't feel very positive about the project. Rygel was getting part of the heat for depending on it and that wasn't helping in gaining popularity for a new project.
  • It wasn't really very difficult to implement media-export in Vala, I didn't need to spend a lot of time on it myself and I didn't feel like standing in the way of a new plugin that I'll get almost for free and will satisfy a lot of people.

So now its mid'ish 2010, the world has changed and so has Tracker:

  • Tracker is now a blessed GNOME dependency. That means no one can say 'boo' at me anymore for depending on Tracker, while I walk the streets. More than enough people are now positive about the project.
  • New Tracker APIs are very different from that of 0.6, richer easier, dynamic, complete and future proof. Not to mention its based on existing and proven technologies/concepts: RDF and Sparql.
  • Most of the performance issues that tracker 0.6 was known for, has been addressed appropriately.
  • Tracker is now nicely divided in different components so an application can easily depend only on the parts that it really need. For example, Rygel won't have to depend on evolution since it doesn't need any email-related stuff.
  • I made sure 'nmm' ontology of Tracker has the needed UPnP properties that I will need in Rygel.

Some people still just don't like the very idea of Tracker and for those lost souls, I quote Owen Taylor:

I think it will definitely be hard to implement our ideas without something that looks a lot like Tracker, and since we have Tracker something that looks a lot like Tracker is most likely Tracker :-)

So keeping these facts in mind I've decided to:

  • Strip down almost all the functionalities of media-export so it only exposes the file-system hierarchies on UPnP network without any metadata. Actually this is exactly what Lennart wanted in the first place when he asked for this plugin. With metadata extraction in place, we are no better than tracker 0.6 anyway.
  • Remove media-export from preferences UI. Keeping in mind what kind of users will still use media-export in its new form, its quite enough that they can configure the directories to export by manually editing the configuration file.
  • Provide an easy way for the user to specify which media from tracker-store to expose on UPnP network. Since user chooses the files to harvest for metadata and keep in tracker-store using tracker's preferences UI, I think it's better if this option is also provided in there but I need to discuss with Ivan yet regarding this. If that is not feasible, I'll do this in rygel-preferences.

Other features

  • Unit tests: In the last release we introduced a few unit tests. This is just the beginning and we intend to write units for at least all core modules.
  • MediaServer v2: Iago and Juan talked about this in their blog and announced that they already have implemented v2 so now I have to do my part and implement the consumer part in Rygel: i-e Port v1 code to v2 and I am already on it.
  • DLNA compliance: Looking at the results of DLNA CTT session we had last time, we've a lot of work to do here. Hopefully mostly small fixes here and there.
  • Getting married on 29.05.2010. This is the hardest one but I'm sure I can do it. :)


Some facts that I forgot to mention/explain when I posted the blog entry and to reply to some comments I received here and on IRC:

  • media-export is not being dropped. Please read carefully before making such assumptions and then saying 'Boo' to me for that. :)
  • I still don't plan to have a hard dependency on Tracker at all. It will still be one of the plugins. If you want something like Tracker that is not tracker, you are more than welcome to take the existing media-export code and maintain it as separate or part of your project/process.
  • Once gst-convenience library that Edward and Arun are working on, is in a stable state and delivers to it's promises of speeds (so far it has), we'll re-add export of metadata in media-export but this time around, we'll do it on the fly and won't need to deal with databases and stuff.
  • Tracker has always (even in the 0.6 days) provided easy ways for specifying which directories you want it to index so once we've a way to tell it which of the indexed media to expose on UPnP, we've all the features the media-export currently provides.

I'll leave the comments about the Logo for Klaus to reply. :)


OK OK, I get it that I am making a lot more people unhappy than I am making happy with the 'media-export' plan. So based on that and the fact that Jens is willing to keep maintaining media-export for me, I'll leave this as is. I'll just move code in the core that only media-export uses into media-export plugin. I myself will embrace the future and concentrate on Tracker integration. :)

Wednesday, April 14, 2010

Rygel 0.5.2 released!

Rygel 0.5.2 (Crackers Don't Matter) is out!

Another release in the unstable 0.5.x series. Changes since 0.5.0:

- Add support for Xbox 360 and Window Media Player 11.
- Add support for subtitles. Currently only useful for certain Samsung DLNA TVs.
- Add Windows Media Video (WMV) transcoder.
- Add unit tests for a few modules.
- Fix some (potential) crashes.
- Make database operations cancellable.
- Throw error on database creation failure.
- Simpler (hopefully) build rules.
- Fix race-condition in streaming code so we don't terminate the connection
  before all the bytes are sent to the client.
- Fix leaking of HTTP messages of live streams on termination.
- Fix 'Content-Length' header values for partial requests.
- Fix parsing of search expression containing characters not within the original
  latin1 range.
- Use bigger (64Ki) buffers when streaming media to reduce cpu usage and
  therefore improve battery life.
- Include spec version in description document.
- Remove now unneeded work-around for vala bug#568972.
- Advertize photos with their specific class, i-e 'photo' rather than 'image'.
- MediaExport:
  - Implement search by URIs.
  - Implement search by album.
  - Error-out on invalid search expression.
  - Add support for virtual containers. This allows creation of metadata-based
    hierarchies in the user-config.
  - Fix deletion of containers.
  - URI-escape meta-data fields.
  - Catch previously uncaught exceptions.
  - Fix upgrade of database from older schemas.
- Lots of code clean-ups and documentation fixes. 
Dependency-related changes:

- Require gupnp >= 0.13.3.
- Require gupnp-av >= 0.5.5. 
- Require gupnp-vala >= 0.6.5.
- Require valac >= 0.8.0.

Bugs fixed in this release:

608886 - media export plugin corrupts its database when you change directories
609944 - Files not harvested on update
606305 - Samsung subtitles

All contributors to this release:

Jens Georg 
Zeeshan Ali (Khattak) 
Cyrille Chepelov 

Download source tarball from here

Friday, April 9, 2010

GSSDP 0.7.2, GUPnP 0.13.3, GUPnP AV 0.5.5 & GUPnP Vala 0.6.5

GSSDP 0.7.2 released!

Changes since 0.7.1:

- Provide gobject-introspection GIR and typelib.
- Use silent build rules.
- Fix issues with version-independence magic in SSDP code.
- Fix build issues in jhbuild environment.

Bugs fixed in this release:

2025 - fails to find autoconf macros when they're installed in a
           non-standard location
1927 - gssdp fails to answer M-SEARCH sometimes
1921 - GObject Introspection Makefile for GSSDP

All Contributors:

Zeeshan Ali (Khattak) 
Zach Goldberg 
Jens Georg 
Neil Roberts 
Ross Burton 

Download source tarball from here

GUPnP 0.13.3 released!

Changes since 0.13.2:

- Include the Content-Type header in the HTTP messages. This satisfies DLNA
 CTT test cases and
- Use g_message instead of g_warning if we can't connect to DBus.
- Make the HTTP server listen on the context's interface only.
- Fix some potential crashes in GUPnPServiceProxy and GUPnPContextManager code.
- Fix build issues in jhbuild environment.
- Fix some gcc warnings.
- Add new API to host path for specific user-agent(s).
- Add gobject-introspection support:
 - Provide gobject-introspection GIR and typelib.
 - Add needed annotations to doc comments.
 - Add GList variants of action-related functions to satisfy PyGI.
- A few non-functional improvments.

Dependency related changes:

- gssdp >= 0.7.1

Bugs fixed in this release:

2054 - Xbox hacks
1965 - gcc warning fixes
2039 - GUPnP is hard to use with jhbuild
1948 - Signal handler are not disconnected when ContextManager is disposed
2030 - gupnp context listens on instead of the context's ip
1924 - Content-Type header must contain charset="utf-8" in all HTTP transactions
2006 - Implement 3 new functions for language bindings (begin_action_list,
           end_action_list, gupnp_service_action_get_value_type)
1919 - Add GObject Introspection Annotations and Makefile
1979 - g_warning make gupnp-igd test fails
1906 - Tests failed with gupnp 0.13

All contributors:

Zeeshan Ali (Khattak) 
Zach Goldberg 
Ross Burton 
Olivier CrĂȘte 
Neil Roberts 
Sven Neumann 
Jens Georg 
Yakup Akbay 

Download source tarball from here

GUPnP AV 0.5.5 released!

Changes since 0.5.4:

- Provide gobject-introspection GIR and typelib.
- Provide microseconds in 'duration' to satisfy XBox.
- Fix data type of GUPnPDIDLLiteContainer:child-count
- Fix build issues in jhbuild environment.
- Enable silent build rules if they are available.

All contributors to this release:

Zeeshan Ali (Khattak) 
Zach Goldberg 
Neil Roberts 
Ross Burton 

Download source tarball from here

GUPnP Vala 0.6.5 released!

Changes since 0.6.4:

- Require & adapt to:
 - gssdp 0.7.2
 - gupnp 0.13.3
 - gupnp-av 0.5.5
 - vala 0.8.0
- Don't hide gupnp_root_device_get_relative_location

All contributors:

Zeeshan Ali (Khattak) 

Download source tarball from here

Saturday, April 3, 2010

Introducing Zhaan

I mentioned this cool guy Zachary Goldberg in my blog and in my talk before. While I mentioned his name in regards to his efforts to making sure GUPnP glues nicely with gobject-introspection and is usable from Python, he went much further than I expected and made a cool new UPnP control-point for N900 based on GUPnP in Python. He named it Zhaan (another character from Farscape in the spirit of Rygel).

Some mandatory screenshots:

You can check out more screenshots/specs of the project and follow its status here.

There are many people out there making cool UIs but they end-up using wrong tools and/or re-inventing the wheel so its nice to see someone doing cool stuff but the right way. :)