Starving Developers

Samikshan Bairagya:

Please try and donate to make the Randa Sprint possible this year. :)

Originally posted on The World According to Harald:

Please help!

KDE‘s Randa Meetings is quite possibly the best large-scale developer sprint ever. And you can help make it happen.

Imagine some 40 developers cramped together in a house in the middle of the Alps, living of code alone. Nothing could possibly go wrong….

Phonon, a pillar of our multimedia solutions, was revived in Randa. Kdenlive, our video editor, became 302% more awesome in Randa. The KDE Frameworks 5 movement seeking to make our awesome libraries more useful to all the world started in Randa. Amarok 2 was planned in Randa. Approximately a godzillion bugs were fixed in Randa.

Donate to the Randa Meetings 2014 now and get more free awesome! I personally have set my heart on making multimedia more awesome with easier APIs for developers and UPnP streaming support, also other stuff ( maybe a wallpaper that shows kittens wearing hats? #kdekittenhat)

View original

Not so easy way to know about your Kernel ABI

My work in Red Hat is related to the Linux kernel ABI (or kABI). This has been an entirely new and exciting experience for me since I became a Red Hat associate in May last year. In this blog post and some posts subsequent to this I would like to talk about everything I have been learning so far.

First up, ABI or the Application Binary Interface is a low level (binary level) interface exposed by some application. The linux kernel and its accompanying modules also expose (or exports) a binary interface which we refer to as the kernel ABI or kABI. It is important that this exported interface remains stable because modules written for a particular kABI would need to be recompiled if the interface does change in a subsequent kernel version.

The exported binary interface that I keep referring to is nothing except a list of symbols which have been decided to be exported. These symbols could be function names, enums, structs or anything. To find these exported symbols, you would just need to ‘grep’ through the linux source for “EXPORT_SYMBOL”. Following is a section of the grep output when I search for EXPORT_SYMBOL in the source code for kernel-3.14.5-200.fc20 built for Fedora:

sbairagy@dhcp193-120 ~/r/k/linux-3.14> grep -Rn "EXPORT_SYMBOL" .
./kernel/async.c:303:EXPORT_SYMBOL_GPL(async_synchronize_cookie_domain);
./kernel/async.c:316:EXPORT_SYMBOL_GPL(async_synchronize_cookie);
./kernel/gcov/base.c:52:EXPORT_SYMBOL(__gcov_init);
./kernel/gcov/base.c:62:EXPORT_SYMBOL(__gcov_flush);
./kernel/gcov/base.c:68:EXPORT_SYMBOL(__gcov_merge_add);
./kernel/gcov/base.c:74:EXPORT_SYMBOL(__gcov_merge_single);
./kernel/gcov/base.c:80:EXPORT_SYMBOL(__gcov_merge_delta);
./kernel/gcov/base.c:86:EXPORT_SYMBOL(__gcov_merge_ior);
./kernel/tracepoint.c:395:EXPORT_SYMBOL_GPL(tracepoint_probe_register);
./kernel/tracepoint.c:439:EXPORT_SYMBOL_GPL(tracepoint_probe_unregister);

All symbols enclosed in brackets after EXPORT_SYMBOL or EXPORT_SYMBOL_GPL are exported as a part of the binary interface exported by the kernel. When the kernel is built for Fedora, these exported symbols are stored in a file called Module.symvers. You can find this file for the kernel version you are running in /usr/src/kernels/<version>/. A section of the Module.symvers file for the kernel I am using is shown below:

sbairagy@dhcp193-120 ~/r/k/linux-3.14> vim /usr/src/kernels/3.14.8-200.fc20.x86_64/Module.symvers
0x00000000      tveeprom_read   drivers/media/common/tveeprom   EXPORT_SYMBOL
0x00000000      cx2341x_log_status      drivers/media/common/cx2341x    EXPORT_SYMBOL
0x00000000      ttm_bo_acc_size drivers/gpu/drm/ttm/ttm EXPORT_SYMBOL
0x00000000      inet_sendmsg    vmlinux EXPORT_SYMBOL
0x00000000      zs_get_total_size_bytes vmlinux EXPORT_SYMBOL_GPL

The 0th column contain checksums corresponding to the exported symbols which one can find in column 1. You might notice that the checksums for all the symbols are 0×00000000. This is not odd because some variable called CONFIG_MODVERSIONS had not been set during the kernel build process thus disabling generation of checksums for the exported symbols.

These checksums are vital to catching kABI breakages. kABI breakage occurs whenever changes are made to exported symbols. As a simple example, if we have a exported symbol ‘colours’ which refers to an enum ‘colours’ defined as

enum colours {"Red", "Green", "Blue"}

and if we decide to change this enum by adding one more colour (say “Yellow”) to it, then we say that the change in the exported symbol ‘colours’ have resulted in a change in the kernel ABI. Now whenever such changes happen for any symbol, the checksum corresponding to that symbol also change which leads to easy detection of kernel ABI change (or breakage).

How are these checksums generated? Well, there is a tool called genksyms which is integrated with the Linux kernel source and does this job of generating checksums for exported symbols during build process, if CONFIG_MODVERSIONS variable is set. In my subsequent posts I will write about the genksyms tool and how it actually generates the all important checksums. Till then, cheers. ;)

How to get an IRC bouncer with ZNC for KDE developers

I had been postponing setting up an IRC bouncer for a long time inspite of its benefits, until recently, when I actually went through with the really easy process even for lazy people like me. This is all you really need to do:

  1. Go to https://sysadmin.kde.org/tickets/ and login using your identity.kde.org username and password (Here I am assuming you already have a KDE identity account)
  2. Go to ‘Submit A Ticket’ and select ‘IRC’ from the list of options available.
  3. File a bug with appropriate information for ‘Subject’, ‘Priority’ and ‘Freenode Nickname’ and provide some other relevant information in the text field.
  4. Once this ticket is closed by KDE sysadmin, which might take 1-2 days, you will receive a login id and password through email.
  5. Open https://bnc.kde.org:7778/ and login using the above login id and password.
  6. In ‘Your Settings’ you can configure your account which includes changing the password set by sysadmin, adding your Freenode network and then adding the channels you want to stay connected to.
  7. Just remember that when you add servers to your network which is Freenode, the format is ‘One server per line, host [[+]port] [password]‘. For example:
    irc.freenode.net 6667 <your_password>
  8. Once you are done with this you need to configure your IRC client. For Konversation which is the client I use for IRC, all you really need to do is follow the steps here: http://community.kde.org/Sysadmin/BNC#Settings_for_Konversation. However, do note that ‘yourusername’ == <your_kde_identity_username>/Freenode.

That’s all that you need to do! Also this is the wiki page that talks about setting this up for other IRC clients: http://community.kde.org/Sysadmin/BNC. So go ahead and setup your IRC bouncer; and you can always see what happened on a channel even when you are not connected.

Cheers!

Memories and some notes from KDE-Edu Sprint, 2013

I have been too sick for the last couple of days since I returned from the KDE-Edu Sprint 2013 which was held in A Coruna, Spain this year. Well, now I’m a little better and would like to talk about what a nice experience it had been.

I had no experience when it came to sprints, and I was expecting a lot of hacking and interesting discussions on KDE-Edu software. All these expectations were fulfilled as I did hack on Artikulate during my stay there; made a few commits after a long, long time and enjoyed it. Other than hacking on Artikulate, there were several discussion sessions through which I came to know of various KDE-Edu applications that I was not aware of and learned more about applications I already knew. Especially I had little idea that there were so many language learning applications in the KDE-Edu suite. Parley will surely be an application I shall be using. I also submitted two tasks got GCI this year from KStars, to improve upon my feature “What’s Interesting…” in KStars. Hope there would be students who would like to work on these tasks and I’m looking forward to some mentoring experience.

Post this sprint, I am going to continue my work with Artikulate which currently involves several changes to the UI to accommodate user profiles support currently being worked on by Andreas.

Since there were 7 people attending the sprint (Oindrila was not able to attend the sprint as her Visa was rejected.. again!), this was a nice opportunity to get to know KDE folks (Andreas, Sebastian, Albert, Aleix and Jose) I have met during Akademy 2013 in a better way. Also met Punit, who was travelling for the first time not only outside India, but also outside Gujarat – his home state. Also people got to know that I am a late riser, failing to come to breakfast on time every day! :-/

Like any other KDE event, this event was a great experience. Jose and the local support from GPUL was awesome. Also countless thanks to KDE e.V. for once again agreeing to fund my travel all the way from India. I have uploaded some of the pictures from the sprint on Flickr.

Cheers! :)

Recalling the days from Akademy 2013 in Bilbao, Spain

It has been almost 3 weeks since I’ve been back from Akademy 2013 which was held in the splendid city of Bilbao this year, and it would be foolish to not write about my experiences there, since memories however bright they might be, can easily fade away with time.

Akademy was only for a week, from 13th to 19th of July. But each and every day was so eventful, that, by the time I and others started leaving, it felt like we’ve been there since ages. This was my first Akademy and there were several highlights that I’d like to mention.

This being my first Akademy is one of several firsts for me that happened during this trip. This was also my first travel outside of India and thus, this was an entirely new and exciting experience for me. I tried to interact as much as possible with everyone who attended Akademy and met people who I only knew by their IRC nicks.

This was also the first time I gave a talk in any major conference, leave aside Akademy. To find so many people present in the room awaiting my talk, that too early in the morning was unnerving as well as motivating at the same time. The friendly and helping nature of the KDE community made me feel comfortable. I would like to thank everyone who was present during the talk and especially Lydia, Valorie and Rishab for being especially helpful. Further details on my talk are here.

The usability testing on KStars was also a new experience for me, where so many issues came to the forefront. The BOF on Simon was quite absorbing, even though I could not see anything (having lost my spectacles the previous night – long story to be discussed some other time), with interesting ideas being put forward by the attendees regarding different ways to use Simon. Other than Simon, another project that has got me interested is Artikulate, which is being developed to become a pronunciation training software. I spoke to Andreas Cord-Landwehr (CoLa) and promised him contributions from my end to the project. One talk that especially impressed me was by Mailson Menezes where he spoke about how he implemented tile-based engine in Okular during GSoC 2012, so that greater zoom-levels could be achieved. It was one of the examples of the awesome work that is accomplished during the GSoC/SoK periods.

Each and every day in Akademy was really full of fun and energy. The daytrip, the evening trip to Algorta, the boat trip, the Akademy and Qt CS parties; all these added a lot to the fun factor of the event and helped new members of the community, like me to interact with all the nice people. All in all, Akademy 2013 gave me a lot (if I neglect the lost spectacles) and I hope to give back much more to KDE than I do now.

I have also shared pictures from Akademy here and here on Flickr.

P.S. There was another highlight. I had a snail in Algorta. Following me, Yash too had one. See the picture here.

Cheers.

I’m going to Akademy 2013!

It is dangerous as well as exciting to invite more people to your first ever talk in any major conference, and that is what I’ll be doing here. :D

So, yes I’ll be going to Akademy this year (if my visa application doesn’t betray me)! I will be speaking about how I used QtQuick with C++ in my project for KStars during GSoC 2012. Please find more details about my talk here, and if you are planning to attend, do not forget to register yourself here.

Also, thank you so much KDE for supporting my travel and accommodation expenses. This will be my first ever Akademy and my 2nd KDE conference after the awesome conf.KDE.in, 2011 in Bengaluru, India. So, really looking forward to this one! :)

Cheers!

GSoC 2012 work merged finally!

Finally I have merged my Google Summer of Code work for KStars and the new feature called “What’s Interesting…” is on master branch. This feature suggests “interesting” sky-objects to users to view. Whether a sky-object is interesting or not depends on the night-sky conditions and the equipment availability. Hopefully this feature would prove useful for beginner astronomers. Although this merge has taken a long time, I never felt like all that work could go waste. Thanks to Akarsh and Rafal for helping me throughout.

While a lot of polishing has been done, I’m sure there is always room for improvement. I’m therefore awaiting feedback from users of KStars regarding any unnoticed bugs or feature requests.

Cheers!