Hi. I’m Sai Prayaga.

Here are some thoughts of mine.

au revoir - GSoC 2014

It’s been a more than week since the completion of the GSoC and I am happy to announce that I have successfully completed the project. This year’s GSoC couldn’t have been better. I was out of India for the first time to attend the Gnome Users and Developers European Conference(GUADEC) which was held at Strasbourg, France where I met met my mentor and a lot of other cool people who contribute to Gnome. I would like to thank Gnome Foundation for sponsoring me to visit the conference.

I always wondered what motivates someone to keep contributing to a software project. After attending the GUADEC I realised that a sense of belongingness in the community is a really as important if not, more so than the other factors such as sharing the same values and goals as the community. I had interesting conversations with my roommate sri about whats more important, whether adhereing to values or creating software that is contextual and useful and we came to a conclusion that both can be acheived at the same time. After attending GUADEC I have a strong feeling that I will keep contibuting to the project and the community.

Apart from that, I am also happy to announce that I have graduated recently after which I have been travelling which is the reason for the delay in this blog post.

Grilo Plugins and Ampache.

Hi, Last year as a GSoC intern, we implemented A Music player called Music for the GNOME Desktop Environment.
In this years GSoC, I am trying to extend Music to play music from remote resources such as Ampache, Owncloud and the like. In this blog I’ll try to explain how different sources work in Music and how I am trying to implement the Ampache Source. My mentor for this project is Vadim Rutkovsky. I am working with Arnel A. Borja (my fellow GSoC intern) who is mainly focusing on search.

Music uses Grilo to help users stream music from different sources. Grilo is a framework which provides us with plugin support which helps us to display consolidated media content from different sources in our application. And to implement a new source for the application, we just need to create a new grilo plugin. This ensures that the application code remains same even when new sources are added. For instance, the media from Jamendo and Magnatune that we see in Music is because of their corresponding Grilo plugins. So, the Ampache source I am trying to implement will be a Grilo plugin.

Search output from Jamendo source in Music

Ampache is a web based media streaming server and file manager which helps us to access our music & videos from anywhere, using almost any internet enabled device. Ampache provides us with an XML based API for integration with external web based or desktop applications for streaming media. It provides the output in xml format which needs to be parsed to generate the appropriate media content.

When the project started, we thought of implementing the plugin in Lua, since Grilo has a plugin called Lua Factory which basically tries to simplify all plugin implementations by reducing the boilerplate code necessary if the plugin was implemented in C. But implementing in Lua needed including some external libraries for processing xml and since the libraries could fail to install without any warning, using Lua was not acceptable to us. We finally decided to write the plugin in C. I’ve tried to get some understanding of the Grilo plugins by reading the documentation and source code of plugins that were already written. I had to brush up C which I learnt during first year in college and got myself familiar with Gobject and Gtype systems since they were important in understanding the object oriented and design decisions since the past few days. I’ve started implementing the plugin and I will write extensively about what I learnt in my next blog post.


I am happy to announce that GNOME Music has shaped up really great and I am proud to be a part of it. This blog post is a final consolidated report as part of GSoC.

I made some great friends and learned a lot during my experience with the GNOME community.

Also, I am excited about the new features that are yet to come in the upcoming releases and here is some eye candy. :D

Until next time

A computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match.

Bill Bryson Notes From a Big Country


Hello everyone :–). Today I am back to save you from the agony of reinstalling your operating system because your sourecode screwed up your operating system’s dependencies.


JHbuild is a tool that allows you to install programs/modules at a saperate prefix other than the systems default prefix. JHBuild uses “module set” files to describe the modules available to build. The “module set” files include dependency information that allows JHBuild to discover what modules need to be built and in what order.

You might be thinking “Whats so special about that, there are a lot of other programs that does the same thing”, well…

JHBuild can build modules from a variety of sources, including CVS, Subversion, Bazaar, Darcs, Git and Mercurial repositories, as well as Tar and Zip archives hosted on web or FTP sites. JHBuild can build modules using a variety of build systems, including Autotools, CMake, WAF, Python Distutils and Perl Makefiles. If you are a gnome-developer, JHbuild is a must have!

Here is how to get started with JHbuild.

  • Install jhbuild using the command sudo apt-get install jhbuild or from the source.
  • Configure the jhbuildrc present in ~/.config folder.
    • change the checkout root to any directory of your choice, this is where the source code of the dependencies will be downloaded.
    • change the prefix to /opt/gnome. This is where your dependencies will be installed (this can be any directory of your choice too).
    • Change the moduleset to gnome-world-3.10, the latest gnome moduleset.
    • If you are using a proxy server, you might want to use https to download from a git repo rather than ssh, since JHbuild uses ssh by default, adding repos['git.gnome.org'] = 'http://git.gnome.org/browse/' to your jhbuildrc will allow JHbuild to download using https rather than ssh. The same holds true for other git repositories as well.
    • Add ignore_suggests = True which will ignore installing many unwanted dependencies, making the building process a lot faster.
  • Once you are done with configuring JHbuild, install the additional dependencies required for building with jhbuild specific to your distribution from here
  • jhbuild sanitycheck to check if everything is in the right place.
  • jhbuild sysdeps --install to install missing system dependencies( you need apt-file to install the missing dependencies )
  • you now have a working installation of JHbuild. To start jhbuild run jhbuild bootstrap. This will download the necessary tools for building the source code(autotools, gettext et al).
  • voila! you can now build any package from scratch with all its dependencies with the command jhbuild build 'package name'.
  • At any point of time if you are stuck with any package the following menu will be shown.
[1] Rerun phase build
    [2] Ignore error and continue to install
    [3] Give up on module
    [4] Start shell
    [5] Reload configuration
    [6] Go to phase "wipe directory and start over"
    [7] Go to phase "configure"
    [8] Go to phase "clean"
    [9] Go to phase "distclean"

Just start the shell and installed the required dependency using apt-get or jhbuild and exit the shell with exit command, the building will continue.

Until next time

Flying is learning how to throw yourself at the ground and miss.

Douglas Adams The Hichhikers Guide to the Galaxy

Hello World


It would be an understatement to say that I am delighted to be a part of GNOME community now. This blog is about my work for gnome-foundation as a part of my GSoC internship at GNOME.

Firstly I would like to thank my mentors Seif Lotfy and Vadim Rutkovsky for being extremely patient in guiding me when I am new to the community, Guillaume Quintard for helping me solve all the crazy errors i got while i was building the application for the first time, Designers Allan and Jimmac for designing such a beautiful music player and my fellow interns Shivani and Eslam.

I am working on Gnome-Music, a music player that is going to be launched as a desktop application with Gnome. The Music player is being written in JavaScript with Gtk bindings. The Player uses Gstreamer at its core to play the music. Here are some screenshots of the player.