It's Time to Translate

GNOME 2.32 release is coming, so it's time to prepare translations for your language. Currently it's about 96% translated into Russian, and we are going to hit 100% like in previous release :) If you have some free time — you can help to spread GNOME by translating it into your native language. It's a great pleasure to use software in native language, even if you are great in English. Let's make this release ready for the whole world :)

Why does Network Manager rock

I was out of the city (Saint Petersburg) for two weeks, and I needed some kind of Internet connection (there was no wired or wireless connection). So I bought a 3G USB dongle from the local mobile network operator. I had never used such devices before. Mine one was a Huawei E1550 (E620). I plugged it in USB and waited for some seconds. A new device (with the suggestion to create a new connection) appeared in Network Manager's list of connections. I clicked for Next button three or four times, selected my operator from the list and... that's all! I clicked for a new connection and I was in Internet after a few seconds. No third-party software or drivers installation. Awesome! Just plug-and-work. Thanks to all NM developers for such a great job.

P.S. Just got an email for successful final evalution for my GSoC 2010 :) I'm really happy to finish this summer on positive note, though a lot of work is on the road.

GSoC Weekly Code Report 12

This is my last GSoC 2010 weekly report. I have mixed feelings: on one hand I'm sad that summer is over along with the GSoC, but on another hand I'm happy and proud that I had been working with such a great GNOME community. Before GSoC I was just looking at all that was happening around opensource world, especially the GNOME. I always wanted to make something useful for others, but I didn't know where to start from. And for me GSoC was like a door to the opensource world. It let me to come in, and now I don't want to go back :)

Well, this week I was working on GstToc support in the GStreamer. But there are some more good news: my Totem chapters plugin was pushed into the master branch (git commit) and now you can test it with the fresh Totem git snapshot. I'm really glad to see it there, and you are welcome to test it and to file some bug reports :) Regarding to GstToc work, there were quite a few changes. I added new GstTocSetter interface (with unit tests) similar to GstTagSetter interface, so that applications can set TOC on the pipeline via the proper tocsetter element, added copy functions for GstTocEntry and GstToc structures, removed some values from GstTocEntry, added methods to set/get time positions of the TOC entries, updated tests for GstToc and all docs. Also other fixes and improvements were done. You can track new patches in the bug report 540890.

Now I want to summarize a bit all the work I had been doing during GSoC. You can read more about my project and how the GSoC was on my project's page.

What Is Done
  • All things mentioned in my GSoC proposal except writing files with embedded chapters and overlay titles. The first one will need file transcoding, which is not cool to do inside Totem. Before GSoC I thought that it can be done without transcoding, but I was wrong. Overlay titles need some changes in Totem's GStreamer backend, and they are not so important to spend time on them.
  • Wrote my own tiny CMML parser with embedded thumbnails support using libxml2 to drop dependency for obsolete libcmml, included in the chapters plugin.
  • Started to implement generic TOC support (GstToc) in the GStreamer. Totem (and chapters plugin, too) will have great benefits from that: imagine that you can navigate through FLAC tracks from the embedded cue sheet or chapters from the Matroska file. And support for new formats in GStreamer will require almost no changes in chapters plugin (see link for separate repository on the project's page).
  • Implemented Matroska chapters support based on GstToc (see link for separate repository on the project's page). But it will require some changes because GstToc isn't stable enough.

What I'm Going to Do After GSoC
  • Improve Totem chapters plugin (some UI redesign, integration with GstToc).
  • Finish GstToc support in the GStreamer.
  • Finish Matroska chapters support after GstToc stabilization.
  • Implement GstToc support for the FLAC embedded cue sheets (I have already read FLAC specifications).
  • Look for other GStreamer elements where I can implement GstToc support to make chapters plugin more valuable.

What I Have Learnt During GSoC
  • GLib/GObject
  • GTK+
  • libxml2
  • CMML and Annodex formats
  • OGG/liboggz
  • GStreamer
  • Matroska/EBML format
  • FLAC format
  • How to work with git and bugzilla
  • Autotools a bit
  • and other coding tips & tricks

I want to say a big "thank you" to my mentor Bastien Nocera for his help, advices and guidance during this summer, to Sebastian Dröge from the GStreamer team for his great help with GstToc and Matroska, to all GSoC GNOME administrators for their hard work with us and to all those people who helped me with advices and who simply believed in my success - I tried to do my best. And also I want to thanks Google for such a great opportunity to work during this summer. I'm not saying goodbye, I just want to put a little point at the end of this summer :)

GSoC Weekly Code Report 11

Ouh, yet another week is gone. It's a time for the "soft" pencils down state — to fix bugs and to make final touches. Well, I still have a lot of work and ideas to do :) For me the finish line of the GSoC 2010 is rather smooth because I will continue working on my project after that, so it's just some kind of a checkpoint I have to go through.

This week I was working on my GstToc implementation. First of all, I fixed some stuff: added GstStructure field to GstToc and GstTocEntry to store some additional info there, added pointer to the GstPad into every GstTocEntry to track the origin of the chapters. I added a new GstQuery — TOC query, using which you can retrieve full TOC with UID marker for the TOC entry which can be used to extend the TOC with new entries. Also I added a new GstEvent — TOC select event, to select a chapter or edition to start playback from. It will make easier chapters navigation via applications. Now I can remove start/stop and format values from GstTocEntry because they are not generic (some elements doesn't need them), but we need to find a way to store these values somewhere so that applications can retrieve them for additional information for the user interface. And I updated GstToc tests to handle new query and event, and docs for all the recent changes.

Well, I've done not so much I wanted last week, but last three days I was working only for some hours due to the breakage of my laptop's AC adapter :( Just got a new one ($55 for that — the costs are quite high here in Russia), and now I can work more. I'm moving out of the city for two weeks, so I'll be online not a much time, but I'll not stop working and try to find some kind of mobile broadband Internet there. Next week I want to work on GstToc stuff and it's implementation in the Matroska element.

GSoC Weekly Code Report 10

Heya, guys! I hope you all had a great time at the GUADEC :) This week I hadn't done too much due to absence of my mentors, but I got some days for the rest a bit, which I spent reading some books. Well, not only the books, actually. We started to discuss with Sebastian Dröge how we can integrate GstToc into the GStreamer, and I got first stuff I need to fix/implement for that. Also I read FLAC documentation to prepare for implementing cue sheets using GstToc and looked up through the flac element to figure out how I can do that. Now it's pretty clear for me.

Last week I was quite accurate with my planning due to the GUADEC :) Now, when all are backed, I can continue working on my project. First of all, I want to continue working on GstToc integration. I think that amount of work is quite well to do, so I'll do my best. Also I wish I'll have time to work on my chapters plugin. Now when Bastien Nocera is here, we can discuss what I need to do with it. See you next week with some results :)

GSoC Weekly Code Report 9

Heat. heat, heat... That was the most popular topic for the discussions this week in Russia. Yeah, again and again. The rain is most welcomed today, I think. There is a more terrible weather in the Moscow, BBC reports quite well the current situation. It's time for BBQs and swimming now :) Aside from weather, I'm a bit late with my report due to some things I wanted to be finished. And now I can tell about what I was working for during this week.

First of all, I was improving GstToc support in GStreamer. I created a repository[0] instead of posting a batch of patches to bugzilla again, so everyone can test it without much efforts. I added more sanity checks for TOC's structure during serialization/deserialization process: there shouldn't be mixed chapters and editions at the same level of the TOC 'cause it makes no sense. Also I added a bit more tests for GstToc to cover this improvement. Unit testing helped me a lot while I was making those changes in the GstToc.

Finally, I have finished chapters support in Matroska element including demuxer and muxer support with per-chapter/edition tags. This work is based on GstToc. What does it mean? Well, now applications can handle Matroska chapters and navigate through the file using them. With all the tags related to the TOC. That's one of the cool features I'm going to implement in my Totem chapters plugin in case of successful acceptance of the GStreamer's GstToc patches. Also from now you will not lose chapters inside Matroska files while remuxing them. All the chapters will be handled by the muxer and saved properly. Just tested it with VLC — works quite well. I've already sent patch for Matroska element to bugzilla. And you can grab gst-plugins-good branch with Matroska chapters support in my repository[1].

I worked a bit on my Totem chapters plugin (just some minor fixes), too. It's waiting for the GstToc support :) Now I'm waiting for reviews on my GStreamer patches to decide in which way I'll be moving next week. Sebastian said that GUADEC is a nice place to do it :) Well, I'm really sad that I couldn't go GUADEC this year :( I hope all you guys have a good time there! Last week my planning was quite accurate and I did all the things I wanted to do (and a bit more, but with report delaying). I didn't think that debugging and testing can take so much time, though.

Next week... For now, I'm really don't know what to do next, 'cause my work depends on GstToc features. It's August almost there and it's a time for some final touches on my GSoC project, I think. So, what do I need to do? First of all I need to integrate my Totem chapters plugin into the master branch, but it will have more sense with GstToc support in it. That's why my nearest target will be to get GstToc accepted. After that I can implement it in my chapters plugin. Till that I will be looking for other GStreamer elements in which I can implement GstToc support (not sure I will have a time during GSoC, but I have plans to make my plugin more valuable after GSoC). Also I will be hacking Totem's backend a bit to play around with GstToc features. See you next week :)

======================
[0] git@gitorious.org:gstreamer-chapters/gstreamer-core.git
[1] git@gitorious.org:gstreamer-chapters/gstreamer-good.git

GSoC Weekly Code Report 8

Wow, another week has gone :) Enormous heat is continuing to terrorize Saint Petersburg, it is really hot hear :) Well, the summer is going on. This week I was working on GStreamer's table of contents (TOC) implementation. First of all, I moved all code related to generic TOC manipulation into the separate module (called GstToc for now). Of course, there were discussions with Sebastian Dröge about best way to do it. Main structures were changed a bit, too (e.g. titles are merged with tags list). There are four public functions now - to create/free TOC and it's entries. That's all. So, you can fill structures in free way and send them later.

Next, I was writing GTK-Doc comments to create GstToc section in GStreamer reference manual. Well, now it looks quite nice, I think. I hope it would be helpful. Also I added new GstEvent and GstMessage for sending and parsing TOC events and messages. Usage is rather common who is known with GStreamer: gst_event_new_toc () and gst_event_parse_toc () for the TOC events, gst_message_new_toc () and gst_message_parse_toc () for the TOC messages. After reading manual for Check unit testing framework I wrote test for GstToc serialization into GstStructure and back. I added this test to the Gstreamer's set of test cases. I need to say that unit testing rocks :) It is much easier to test changes (especially large-scale changes) with unit testing, and it helps me to find some regressions during code writing.

Also I was working on Matroska's TOC implementation. Now Matroska demuxer fully supports GstToc features except handling per-chapter/edition/toc tags. I cleaned up my code and made some optimizations to make it a bit faster, thanks to Sebastian's advices. And at the end of the week I spent some time to update and rebuild core libraries I need to work with. After some initial reviews made by Sebastian, I attached the set of patches to appropriate bug reports: #540890 and #481070. Now I'm waiting for the further reviews :) Anyway, you can test them with latest git versions of GStreamer.

As for my planning, the things were changed right on the road. Working on code integration with such a large project as GStreamer takes much more time I thought before. So I spent most of the time for code clean up, moving it to the appropriate place, writing docs and tests. I have to admit that my planning was not quite accurate, but I think that the amount of work done is quite well. Next week I will continue to work on TOC integration into the GStreamer and to fix any related issues. Also I have some ideas how I can improve Totem chapters plugin and I want to work on it a bit. And I'm planning to start working on TOC support in Matroska muxer (hope I will have time for that). Cya ;)