24 hours a day, 7 days a week, 365 days per year...

May 28, 2015

2015-05-28 Thursday.

  • Up early; mail chew; call with Niall, admin; CRM bits, filed holiday; signed up for OIN.

May 27, 2015

2015-05-27 Wednesday.

  • Day off - up late, into Cambridge; wandered around the Fitzwilliam Museum a bit with the babes, interesting place. Lunch in the courtyard outside in the sun. Back to the office for a partner call, then a customer call; picked by by a homebound family; TDF board call. Worked late.

#pychill this summer

I got a mail from Satyaakam saying :
     “We will be doing a summer workshop for kids in a school you can read more about the workshop from here
i am looking for volunteers , suggestions , any other schools/colleges  interested in such initiatives can get in touch with me .
Satya |”

Apeejay School Noida  'Soaring hi is my nature'

Apeejay School Noida ‘Soaring high is my nature’

​ ​

I found it as good opportunity to interact with the kids of age group 13-15 from 6-9 grade. I sent a mail to Sir Satyaakam that I can contribute one day with the students. He asked about my suggestions on the topics. I told him that I can talk about the ‘open standards and open source’ and ‘how to contribute to open source’? 26 May 2015, Tuesday was fixed for me to visit Apeejay School Noida sector 16A. I reached the school sharp at 7.40 am. We went to the classes on first floor. It was a group of 16 students .Suddenly  at 8.00 O Clock. Speakers installed in the Lab started saying ‘get ready for the prayers’ and the student joined hands and closed their eyes and started chanting the prayers along with the speakers. It continued for 5 minutes. Just after the prayers we started with our program scheduled for the day. Satyaakam sir first revised with the students the things they discussed the day before. Students could recall 90% of the information given to them, like  what is the difference between the producer and the consumers, what is WWW, DNS? and how to write blogs using

After the brief brush up Satyaakam sir introduced me to the bright and charming #pychill group. He told them that I am going to deliver a talk on the topic open standards and open source and then How to contribute to open source. I had prepared a small presentation for the kids with all the beautiful open source project icons and images. They were looking very excited and keen to know more about the open source and things related to it.They responding to the queries and also asked questions like who and why started the open source movement? if we can change the source code then what happens to the copyrights of the original coder? Where did open source software creators manage to bear the expenses? etc.
then I discussed the various ways to contribute to open source projects. It was surprising that few of them are already contributing on Wikipedia. Then I displayed a image full of logos with open source projects. They instantly started recognizing the icons.  They could successfully  identify the logo of python, mozilla firefox, ubuntu, Linux, android, mediawiki, php and drupal.
Screenshot from 2015-05-28 13:40:47
When I asked by pointing at GNOME’s logo, they said they have seen it, but don’t know about it. Then I gave a brief introduction about the desktop environments and how and why GNOME is  useful?
We discussed bugs, translations, documentation and meritocracy. They all were actively participating at every stage.
That’s it on my part. It was then 9.20 am, Stayaakam sir arrived and again discussed with the group about all they have learned in the session. We also cleared the meaning of FREE in open source terminology. The students were then asked to go to their computer systems and write a blog on that day’s session.
Student writing blog after the talk session

Satyakaam sir helping student writing blog after the talk session

Students were looking happy and keen to know more on open source. I of course was enjoying every moment spend with the kids. After about 25 minutes we all gathered as a group. Students shared their talents by singing and playing guitar.
After a small photo session we call it a day. A memorable day.

Moderating and Code of Conduct

Background: Ubuntu Community Council’s decision (linking to awesome LWN) to remove Jonathan Riddell as the leader of the Kubuntu project.

To me there seems to be a lot of similarities between above and personal experience with moderating. Basically: don’t moderate in threads you’ve participated in because you’re biased. If you think you’re unbiased, guess again and have fun dealing with the fallout if you still take a decision. I thought a few times that I really could be unbiased and was proven wrong each time.

One thing I really like from the GNOME Code of Conduct is:

Assume people mean well

I really like this one because even if you think the person is the worst ever, easily the biggest troll around, no good for anything and basically is just nothing more than a poisonous person who should be kicked out of the project for the good of the project: think again.
I’ve read some of the email communication, and I think there’s something missing in the communication between the various people involved. It would be nice if at least someone would state that the objections they have are not personal. There might be heavy disagreement, but that’s because both want the overall project to succeed and grow.

Something else that would help is expressing the feeling directly to the other person. There’s an anonymous email and the person who wrote it comes across as someone who is trying to do everything the person can and getting frustrated because it feels like the persons work is being considered as bad and nowhere good enough. I’m guessing if people would directly express their frustrations, the other person would quickly apologize for making them feel that way. This can be done while still keeping everyone opinion the same (started with some legal stuff; it’s not about this though).

Not liking some outcome is separate from being able to appreciate the person or persons. I really hope the focus can be on expressing that everyone has the best intentions. Best intentions might’ve lead to frustrations and whatever not, but hopefully once the intention is clear people can apologize and move on.

Ubuntu project is for human beings / humanity to others. I really like this. You can pretty easily recommend Ubuntu and it has pretty heavy brand recognition; so much that people automatically use Ubuntu. For a tv show technical linux is showing some terminal with dmesg; anywhere an easy Linux is needed people suddenly seem to somehow found That said, I contribute to Mageia and everyone (users+contributors) should switch to it :P

I don’t think the current path is good for the Ubuntu project so hope above can be taken into consideration.

A GUI for coala

This post is an introductory post to my GSoC 2015 project. I have been working for about 2 months now on coala(COde AnaLysis Application). It is basically a static code analysis application.  So far, coala offers an easy to use CLI interface wherein users are prompted for input and actions, as and when required. This accounts for a streamlined and hassle-free experience. I have started working on a GUI for coala, which i feel will have the following benefits for the developer community:

  1. A GUI offers a faster and more efficient way to use coala. It will have many features which will help coala users perform their static code analysis with greater speed and have a more stylised way to look at the results and perform actions on them.
  2. A GUI provides a more visual means of performing actions and is therefore, easier to use. Hence, a coala GUI would help new developers joining the open source community to focus on analysing their code without the added complication of getting acquainted with the command line interface.
  3. Another marquee feature that coala has up and coming is code clone detection. Providing a streamlined interface for an important task such as code clone detection is in my opinion very useful, especially when it is language independent.

I have begun work on the GUI and have very rough mockups and a very trivial non functioning app ready for it. The GUI is being developed in pyGTK+3. The GUI is following a very familiar design paradigm that all GNOME applications have. I’m taking cues from GNOME builder, music and boxes etc. for the design and development of the application. Here are some sample images of the GUI attached:
Screen Shot 2015-05-27 at 5.17.29 pm Screen Shot 2015-05-27 at 5.18.29 pm Screen Shot 2015-05-27 at 5.18.38 pm Screen Shot 2015-05-27 at 5.18.51 pm


For more information about the project you can refer to my proposal here :

You can find out more about coala at :

To fiddle around with the GUI you can check out the wip/udayan/guiproto branch.

Any feedback would be much appreciated.

Until next time! Buh Bye!

2015 GNOME.Asia Summit

Last week I wrote a highlight of 2015 GNOME.Asia Summit in Chinese, which I got the idea from Pictures from GNOME.Asia Summit 2015.

I posted on website of Beijing GNOME User Group and CSDN helped to spread it later.

Hope it could let more people in China to feel optimistic about GNOME’s future in Asia.

Thanks sponsorship from GNOME Foundation.


ColorHugALS and Sensor HID

As Bastien hinted in his last blog post, we now have some new test firmware for the ColorHugALS device. The ever-awesome Benjamin Tissoires has been hacking on an alternative device firmware, this time implementing the Sensor HID interface that Microsoft is suggesting vendors use for internal ambient light sensors on tablets and laptops for Windows 8.

Implementing this new interface has several advantages:

  • The sensor should “just work” with Windows 8 without a driver
  • The sensor now works with iio-sensor-proxy without writing any interface code
  • We can test the HID code in the kernel with a device we can hack to do strange things
  • colorhug-als1-large

    So, if you want to test the new GNOME ambient light sensor code, flash your ColorHugALS with this file using colorhug-cmd flash-firmware ColorHugALS-SensorHID.bin — the flash process will appear to fail right at the end, but this is just because we’ve not yet written the HID version of the SetFlashSuccess call that instructs the bootloader to start the firmware automatically when inserted. This isn’t actually such a bad thing for an experimental firmware, but means when you remove then insert your ALS device you’ll have to do colorhug-cmd boot-flash to switch from the flashing red LED bootloader mode into the new firmware mode.

    If it’s too broken for you right now, you can go back to the real firmware using colorhug-cmd when in bootloader mode.


    There are still 17 ColorHugALS devices in stock, if you want to buy one for testing. Once they’ve gone, they’re gone, I don’t think I’ll be building another batch unless there’s a lot more demand as right now I’m building them at a loss.

    This is not the UEFI backdoor you are looking for

    This is currently the top story on the Linux subreddit. It links to this Tweet which demonstrates using a System Management Mode backdoor to perform privilege escalation under Linux. This is not a story.

    But first, some background. System Management Mode (SMM) is a feature in most x86 processors since the 386SL back in 1990. It allows for certain events to cause the CPU to stop executing the OS, jump to an area of hidden RAM and execute code there instead, and then hand off back to the OS without the OS knowing what just happened. This allows you to do things like hardware emulation (SMM is used to make USB keyboards look like PS/2 keyboards before the OS loads a USB driver), fan control (SMM will run even if the OS has crashed and lets you avoid the cost of an additional chip to turn the fan on and off) or even more complicated power management (some server vendors use SMM to read performance counters in the CPU and adjust the memory and CPU clocks without the OS interfering).

    In summary, SMM is a way to run a bunch of non-free code that probably does a worse job than your OS does in most cases, but is occasionally helpful (it's how your laptop prevents random userspace from overwriting your firmware, for instance). And since the RAM that contains the SMM code is hidden from the OS, there's no way to audit what it does. Unsurprisingly, it's an interesting vector to insert malware into - you could configure it so that a process can trigger SMM and then have the resulting SMM code find that process's credentials structure and change it so it's running as root.

    And that's what Dmytro has done - he's written code that sits in that hidden area of RAM and can be triggered to modify the state of the running OS. But he's modified his own firmware in order to do that, which isn't something that's possible without finding an existing vulnerability in either the OS or (or more recently, and) the firmware. It's an excellent demonstration that what we knew to be theoretically possible is practically possible, but it's not evidence of such a backdoor being widely deployed.

    What would that evidence look like? It's more difficult to analyse binary code than source, but it would still be possible to trace firmware to observe everything that's dropped into the SMM RAM area and pull it apart. Sufficiently subtle backdoors would still be hard to find, but enough effort would probably uncover them. A PC motherboard vendor managed to leave the source code to their firmware on an open FTP server and copies leaked into the wild - if there's a ubiquitous backdoor, we'd expect to see it there.

    But still, the fact that system firmware is mostly entirely closed is still a problem in engendering trust - the means to inspect large quantities binary code for vulnerabilities is still beyond the vast majority of skilled developers, let alone the average user. Free firmware such as Coreboot gets part way to solving this but still doesn't solve the case of the pre-flashed firmware being backdoored and then installing the backdoor into any new firmware you flash.

    This specific case may be based on a misunderstanding of Dmytro's work, but figuring out ways to make it easier for users to trust that their firmware is tamper free is going to be increasingly important over the next few years. I have some ideas in that area and I hope to have them working in the near future.

    comment count unavailable comments

    May 26, 2015

    Fedora Workstation 22 is out!

    So we just got the second Fedora Workstation release out the door, and I am quite happy with it, we had quite a few last minute hardware issues pop up, but due to the hard work of the team we where able to get them fixed in time for todays release.

    Every release we do is of course the result of both work we do as part of the Fedora Workstation team, but we also rely on a lot of other people upstream. I would like to especially call out Laurent Pinchart, who is the upstream maintainer of the UVC driver, who fixed a bug we discovered with some built in webcams on newer laptops. So thank you Laurent! So for any users of the Toshiba z20t Portege laptop, your rear camera now works thanks to Laurent :)

    Having a relatively short development cycle this release doesn’t contain huge amounts of major changes, but our team did manage to sneak in a few nice new features. As you can see from this blog entry from Allan Day the notification area re-design that he and Florian worked on landed. It is a huge improvement in my opinion and will let us continue polishing the notification behavior of applications going forward.

    We have a bunch of improvements to the Nautilus file manager thanks to the work of Carlos Soriano. Recommend reading through his blog as there is a quite sizeable collection of smaller fixes and improvements he was able to push through.

    Another thing we got properly resolved for Fedora Workstation 22 is installing it in Boxes. Boxes is our easy to use virtual machine manager which we are putting resources into to make a great developer companion. So while this is a smaller fix for Boxes and Fedora, we have some great Boxes features lining up for the next Fedora release, so stayed tuned for more on that in another blog post.

    Wayland support is also marching forward with this release. The GDM session you get upon installing Fedora Workstation 22 will now default to Wayland, but fall back to X if there is an issue. It is a first step towards migrating the default session to Wayland. We still have some work to do there to get the Wayland session perfect, but we are closing the gap rapidly. Jonas Ådahl and Owen Taylor is pushing that effort forward.

    Related to Wayland we introduce libinput as the backend for both X and Wayland in this release. While we shipped libinput in Fedora 21, when we wrote libinput we did so with Wayland as the primary target, yet at the same time we realized that we didn’t want to maintain two separate input systems going forward, so in this release also uses libinput for input. This means we have one library to work on now that will improve input in both your Wayland session and X sessions.

    This is also the first release featuring the new Adwaita theme for Qt. This release supports Qt4, but we hope to support Qt5 in an upcoming Fedora release and also include a dark variant of the theme for Qt applications. Martin Briza has been leading that effort.

    Another nice little feature addition this release is the notification of long running jobs in the terminal. It was a feature we wanted to do from early on in the Fedora Workstation process, but it took quite some while to figure out the fine details for how we wanted to do it. Basically it means you no longer need to check in with your open terminals to see if a job has completed, instead you are now getting a notification. So you can for instance start a compile and then not have to think about it again until you get the notification. We are still tweaking the notifications a little bit for this one, to make sure we cut down the amount of unhelpful notifications to an absolute minimum, so if you have feedback on how we can improve this feature we be happy to hear it. For example we are thinking about turning off the notification for UI applications launched from a terminal.

    Anyway, we have a lot of features in the pipeline now for Fedora Workstation 23 since quite a few of the items planned for Fedora Workstation 22 didn’t get completed in time, so I am looking forward to writing a blog informing you about those soon.

    You can also read about this release in Fedora Magazine.

    What bindinator is

    Bindinator is a tool to create mono/.NET bindings for libraries automatically which have gobject-introspection support. It uses the introspection information given in a .gir file and tranforms it to the gapi format which can then be used to generate the bindings using the gtk#-generator.

    gir2gapi 1

    Sounds simple? It actually is! You can find the bindinator repository at Github

    Using bindinator

    Using bindinator is simple:

    simply open a terminal and type

    bindinate --help

    to get a basic overview. You have to specify the gir you want to bind without the file extension. For example, you can bind WebKit-3.0 using this command:

    bindinate WebKit-3.0

    You most likely want to specify other options, which improve binding. To ensure platform independance, bindings should use the windows library names in the dllimport tags. Mono can bind the library names dynamically using DllMaps, which is not supported by .NET. Specify --windowslibraryname if platform independance is needed.

    Sometimes, the package name is not equal to the gir's filename, which bindinator automatically uses to retrieve the package name. If binding fails due to the package not being found, specify the name with --package

    To manually specify a assembly name use --name

    The output directory can be set using --out

    Here are some examples that show the usage of bindinator:

    • bindinate WebKit-3.0
    • bindinate WebKit-1.0 --package=webkit-1.0
    • bindinate Gst-1.0 --name=gstreamer-sharp --out=gstreamer-sharp --windowslibraryname=libgstreamer1.0-0.dll

    To add addional package checks create a custom.m4 which contains the base name of every check. Create a new folder called m4 and create all needed checks in there. The packages will be added to the assembly list automatically. Example:


    A pretty but ugly app wiki template

    I recently adapted Builder’s wikipage layout for Polari. I think it adds some fresh air to the app and gives it a home to build upon. Nautilus and Calendar has adopted the layout as well. So I thought I might post how to adopt it.

    Before we continue however, I have a warning: at the moment this template contains ugly markup based on tables. Use at your own risk only if presentation means anything for you beyond the ordinary. And feel free to help improve on it!

    A GNOME Apps landing page wiki template

    05-26-15 template

    There’s two links you need be concerned about:
    * Template as wiki markup.
    * Template as Inkscape SVG file

    To give your wiki page a makeover, copy the wiki markup from link 1. The wiki markup consists of four pictures and some text. To change the text, I would suggest you use find and replace, so you avoid messing up the markup. For images, I suggest you take screenshots and use something like GIMP to crop and export the images as PNG. The four images in the markup code are named “appname-splash.png”, “highlight1-figure.png”, “highlight2-figure.png”, “highlight3-figure.png”. I suggest you rename them (remember to do that in the markup too) to something appropriate for your App.

    The Inkscape SVG file which I have provided above can be used to produce the splash image in the top of the template. While you are on the blank layer, copy and paste a high resolution icon of your app into the template. Then select the outer black rectangle, hide the layer called “place-holder-content” and e
    To export a splash screen, turn off the visibility for the “place-holder-content” layer and the “bg” layer. Then while, you still have this selection, press Ctrl+Shift+E and export a PNG of your selection at around 750x275px. For this to work properly, “Hide all except selected” should NOT be checked.

    If you are not too familiar with Inkscape, I would suggest you download the splash image from Polari (right-click -> Save image as..) and use this png as reference to create your own in fx GIMP.

    Let me say this a second time: At the moment the layout is made up of ugly tables (in 2015!). It’s not mobile-friendly, possibly not screen-reader friendly and I think it might require someone to look at theme and workings of our GNOME Wiki itself. With these things fixed though, I think the layout would be cool for all app wiki pages to adopt in some far-away future. The efforts I did on this is only to try to push this a bit forward. I will gladly assist anyone making that future happen.

    How to add separators between adiacent rows of GtkListBox

    I was fixing a bug of Gnome-Logs for my first step of GSoC 2015 these days. And here is the link to the bugzilla.

    The main idea of the task is to use a single row to display each log entry in a GtkListBox. Right now I'm not gonna talk about how to implement this. What I wanna talk about is how to add GtkSeparator to adiacent rows. The picture below shows how it looks.

    I've never done things like this before. My mentor told me something about this. He suggested me to look at an existing application which includes separators like this. He also mentioned gnome-control-center is the application that has the thing I want.

    Then I got the source code of gnome-control-center, and found the related code below in panels/universal-access/cc-ua-panel.c.
    Through these codes, we can see that separators are added using gtk_list_box_set_header_func (). But this is not enough, we gotta see the codes inside cc_list_box_update_header_func (), which is shown below.
    These codes were found in shell/list_box_helper.c. The basic idea of this function is that if GtkListBoxRow *row is the first row of the GtkListBox, we are not gonna set its header. If not, we use a Gtkseparator to set its header.

    By using these codes, I successfully implemented this feature in Gnome-Logs. The two pictures below shows how it looks before and after the changes.



    Fedora 22 and missing applications

    Quite a few people are going to be installing Fedora 22 in the coming days, searching for things in the software center and not finding what they want. This is because some applications still don’t ship AppData files, which have become compulsory for this release. So far, over 53% of applications shipped in Fedora ship the required software center metadata, up from the original 12% in Fedora 21. If you don’t like this, you can either use dnf to install the package on the command line, or set gsettings set require-appdata false. If you want to see your application in the software center in the future, please file a bug either upstream or downstream (I’ve already filed a lot of upstream bugs) or even better write the metadata and get it installed either upstream tarball or downstream in the Fedora package. Most upstream and downstream maintainers have shipped the extra software center information, but some others might need a little reminder about it from users.

    May 25, 2015

    SUSE Ruling the Stack in Vancouver

    Rule the Stack

    Last week during the the OpenStack Summit in Vancouver, Intel organized a Rule the Stack contest. That's the third one, after Atlanta a year ago and Paris six months ago. In case you missed earlier episodes, SUSE won the two previous contests with Dirk being pretty fast in Atlanta and Adam completing the HA challenge so we could keep the crown. So of course, we had to try again!

    For this contest, the rules came with a list of penalties and bonuses which made it easier for people to participate. And indeed, there were quite a number of participants with the schedule for booking slots being nearly full. While deploying Kilo was a goal, you could go with older releases getting a 10 minutes penalty per release (so +10 minutes for Juno, +20 minutes for Icehouse, and so on). In a similar way, the organizers wanted to see some upgrade and encouraged that with a bonus that could significantly impact the results (-40 minutes) — nobody tried that, though.

    And guess what? SUSE kept the crown again. But we also went ahead with a new challenge: outperforming everyone else not just once, but twice, with two totally different methods.

    For the super-fast approach, Dirk built again an appliance that has everything pre-installed and that configures the software on boot. This is actually not too difficult thanks to the amazing Kiwi tool and all the knowledge we have accumulated through the years at SUSE about building appliances, and also the small scripts we use for the CI of our OpenStack packages. Still, it required some work to adapt the setup to the contest and also to make sure that our Kilo packages (that were brand new and without much testing) were fully working. The clock result was 9 minutes and 6 seconds, resulting in a negative time of minus 10 minutes and 54 seconds (yes, the text in the picture is wrong) after the bonuses. Pretty impressive.

    But we also wanted to show that our product would fare well, so Adam and I started looking at this. We knew it couldn't be faster than the way Dirk picked, and from the start, we targetted the second position. For this approach, there was not much to do since this was similar to what he did in Paris, and there was work to update our SUSE OpenStack Cloud Admin appliance recently. Our first attempt failed miserably due to a nasty bug (which was actually caused by some unicode character in the ID of the USB stick we were using to install the OS... we fixed that bug later in the night). The second attempt went smoother and was actually much faster than we had anticipated: SUSE OpenStack Cloud deployed everything in 23 minutes and 17 seconds, which resulted in a final time of 10 minutes and 17 seconds after bonuses/penalties. And this was with a 10 minutes penalty due to the use of Juno (as well as a couple of minutes lost debugging some setup issue that was just mispreparation on our side). A key contributor to this result is our use of Crowbar, which we've kept improving over time, and that really makes it easy and fast to deploy OpenStack.

    Wall-clock time for SUSE OpenStack Cloud

    Wall-clock time for SUSE OpenStack Cloud

    These two results wouldn't have been possible without the help of Tom and Ralf, but also without the whole SUSE OpenStack Cloud team that works on a daily basis on our product to improve it and to adapt it to the needs of our customers. We really have an awesome team (and btw, we're hiring)!

    For reference, three other contestants succeeded in deploying OpenStack, with the fastest of them ending at 58 minutes after bonuses/penalties. And as I mentioned earlier, there were even more contestants (including some who are not vendors of an OpenStack distribution), which is really good to see. I hope we'll see even more in Tokyo!

    Results of the Rule the Stack contest

    Results of the Rule the Stack contest

    Also thanks to Intel for organizing this; I'm sure every contestant had fun and there was quite a good mood in the area reserved for the contest.

    Update: See also the summary of the contest from the organizers.

    Summer of Code – Prologue

    This is the first report about my Google Summer of Code project. Since I’m already a GNOME member, many administrative steps weren’t needed.

    So, what happened during the community bonding period?

    • The mockups got mature enought for me to start implementing them, thanks to the amazing work of Allan Day.
    • It was discussed how things will be implemented to fit the current Nautilus code, thanks to my awsome and very patient mentor Carlos Soriano.
    • GtkPlacesSidebar is being ported to use a GtkListBox internally. This will fix many theming issues, and it’ll allow greater customization of the entries. Works is happening at this branch, again by Carlos Soriano.
    • Also, we discussed what will happen Gtk+ side.

    This is a very promising project, and I hope everything gets merged before 3.18 release.

    GNOME.Asia Summit 2015 in Depok, Indonesia

    I have just returned from the GNOME.Asia Summit 2015 in Depok, Indonesia.

    Out of the talks, the most interesting talk I have seen, I think, was the one from Iwan S. Tahari, the manager of a local shoe producer who also sponsored GNOME shoes!

    Open Source Software in Shoes Industry” was the title and he talked about how his company, FANS Shoes, est 2001, would use “Open Source”. They are also a BlankOn Linux partner which seems to be a rather big thing in Indonesia. In fact, the keynote presentation earlier was on that distribution and mentioned how they try to make it easier for people of their culture to contribute to Free Software.
    Anyway, the speaker went on to claim that in Indonesia, they have 82 million Internet users out of which 69 million use Facebook. But few use “Open Source”, he asserted. The machines sold ship with either Windows or DOS, he said. He said that FANS preferred FOSS because it increased their productivity, not only because of viruses (he mentioned BRONTOK.A as a pretty annoying example), but also because of the re-installation time. To re-install Windows costs about 90 minutes, he said. The average time to install Blank On (on an SSD), was 15 minutes. According to him, the install time is especially annoying for them, because they don’t have IT people on staff. He liked Blank On Linux because it comes with “all the apps” and that there is not much to install afterwards. Another advantage he mentioned is the costs. He estimated the costs of their IT landscape going Windows to be 136,57 million Rupees (12000 USD). With Blank On, it comes down to 0, he said. That money, he can now spend on a Van and a transporter scooter instead. Another feature of his GNU/Linux based system, he said, was the ability to cut the power at will without stuff breaking. Indonesia, he said, is known for frequent power cuts. He explicitly mentioned printer support to be a major pain point for them.

    When they bootstrapped their Free Software usage, they first tried to do Dual Boot for their 5 employees. But it was not worth their efforts, because everybody selected Windows on boot, anyway. They then migrated the accounting manager to a GNU/Linux based operating system. And that laptop still runs the LinuxMint version 13 they installed… He mentioned that you have to migrate top down, never from bottom to top, so senior management needs to go first. Later Q&A revealed that this is because of cultural issues. The leaders need to set an example and the workers will not change unless their superiors do. Only their RnD department was hard to migrate, he said, because they need to be compatible to Corel Draw. With the help of an Indonesian Inkscape book, though, they managed to run Inkscape. The areas where they lack support is CAD (think AutoCAD), Statistics (think SPSS), Kanban information system (like iceScrum), and integration with “Computer Aided Machinery”. He also identified the lack of documentation to be a problem not only for them, but for the general uptake of Free Software in Indonesia. In order to amend the situation, they provide gifts for people writing documentation or books!

    All in all, it was quite interesting to see an actual (non-computer) business running exclusively on Free Software. I had a chat with Iwan afterwards and maybe we can get GNOME shaped flip-flops in the future :-)

    The next talk was given by Ahmad Haris with GNOME on an Android TV Dongle. He brought GNOME to those 30 USD TV sticks that can turn your TV into a “smart” device. He showed various commands and parameters which enable you to run Linux on these devices. For the reasons as to why put GNOME on those devices, he said, that it has a comparatively small memory footprint. I didn’t really understand the motivation, but I blame mostly myself, because I don’t even have a TV… Anyway, bringing GNOME to more platforms is good, of course, and I was happy to see that people are actively working on bringing GNOME to various hardware.

    Similarly, Running GNOME on a Nexus 7 by Bin Li was presenting how he tried to make his Android tabled run GNOME. There is previous work done by VadimRutkovsky:

    He gave instructions as to how to create a custom kernel for the Nexus 7 device. He also encountered some problems, such as compilations errors, and showed how he fixed them. After building the kernel, he installed Arch-Linux with the help of some scripts. This, however, turned out to not be successful, so he couldn’t run his custom Arch Linux with GNOME.
    He wanted to have a tool like “ubuntu-device-flash” such that hacking on this device is much easier. Also, downloading and flashing a working image is too hard for casually hacking on it, he said.

    A presentation I was not impressed by was “In-memory computing on GNU/Linux”. More and more companies, he said, would be using in-memory computing on a general operating system. Examples of products which use in-memory computing were GridGain, SAP HANA, IBM DB2, and Oracle 12c. These products, he said, allow you to make better and faster decision making and to avoid risks. He also pointed out that you won’t have breaking down hard-drives and less energy consumption. While in-memory is blazingly fast, all your data is lost when you have a power failure. The users of big data, according to him, are businesses, academics, government, or software developers. The last one surprised me, but he didn’t go into detail as to why it is useful for an ordinary developer. The benchmarks he showed were impressive. Up to hundred-fold improvements for various tests were recorded in the in-memory setting compared to the traditional on-disk setting. The methodology wasn’t comprehensive, so I am yet not convinced that the convoluted charts show anything useful. But the speaker is an academic, so I guess he’s got at least compelling arguments for his test setup. In order to build a Linux suitable for in-memory computation, they installed a regular GNU/Linux on a drive and modify the boot scripts such that the disk will be copied into a tmpfs. I am wondering though, wouldn’t it be enough to set up a very aggressive disk cache…?

    I was impressed by David’s work on ChorusText. I couldn’t follow the talk, because my Indonesian wasn’t good enough. But I talked to him privately and he showed me his device which, as far as I understand, is an assistive screen reader. It has various sliders with tactile feedback to help you navigating through text with the screen reader. Apparently, he has low vision himself so he’s way better suited to tell whether this device is useful. For now, I think it’s great and I hope that it helps more people and that we can integrate it nicely into GNOME.

    My own keynote went fairly well. I spent my time with explaining what I think GNOME is, why it’s good, and what it should become in the future. If you know GNOME, me, and my interests, then it doesn’t come as a surprise that I talked about the history of GNOME, how it tries to bring Free computing to everyone, and how I think security and privacy will going to matter in the future. I tried to set the tone for the conference, hoping that discussions about GNOME’s future would spark in the coffee breaks. I had some people discussing with afterwards, so I think it was successful enough.

    When I went home, I saw that the Jakarta airport runs GNOME 3, but probably haven’t done that for too long, because the airport’s UX is terrible. In fact, it is one of the worst ones I’ve seen so far. I arrived at the domestic terminal, but I didn’t know which one it was, i.e. its number. There were no signs or indications that tell you in which terminal you are in. Let alone where you need to go to in order to catch your international flight. Their self-information computer system couldn’t deliver. The information desk was able to help, though. The transfer to the international terminal requires you to take a bus (fair enough), but whatever the drivers yell when they stop is not comprehensible. When you were lucky enough to get out at the right terminal, you needed to have a printed version of your ticket. I think the last time I’ve seen this was about ten years ago in Mumbai. The airport itself is big and bulky with no clear indications as to where to go. Worst of all, it doesn’t have any air conditioning. I was not sure whether I had to pay the 150000 Rupees departure tax, but again, the guy at the information desk was able to help. Although I was disappointed to learn that they won’t take a credit card, but cash only. So I drew the money out of the next ATM that wasn’t broken (I only needed three attempts). But it was good to find the non-broken ATM, because the shops wouldn’t take my credit card, either, so I already knew where to get cash from. The WiFi’s performance matches the other airport’s infrastructure well: It’s quite dirty. Because it turned out that the information the guy gave me was wrong, I invested my spare hundred somewhat thousands rupees in dough-nuts in order to help me waiting for my 2.5 hours delayed flight. But I couldn’t really enjoy the food, because the moment I sat on any bench, cockroaches began to invade the place. I think the airport hosts the dirtiest benches of all Indonesia. The good thing is, that they have toilets. With no drinkable water, but at least you can wash your hands. Fortunately, my flight was only two hours late, so I could escape relatively quickly. I’m looking forward to going back, but maybe not via CGK ;-)

    All in all, many kudos to the organisers. I think this year’s edition was quite successful.

    Sponsored by GNOME!

    Let’s contribute Peru with GNOME

    This time we just gather 4 people who wants to contribute with GNOME. Two of the attendances were from PUCP who use Unity and the others two were from UNI, who use GNOME with Fedora 20. All of them were programmers; so thanks to Jose Quiñones for doing the introduction to GNOME project, he did explained the GNOME community, applications and ways to contribute, IRC.


    After that Cesar Fabian started the code contribution part, because all of them were interested in GNOME developer technologies. We started with glib, based on the GLIB Website. He explained us that Glib is a GNOME library written in C. We did a couple of examples: Hello Word and Lists of Fruits, using glist. Glists are linked lists that use the type void *. It was also explained values and basic types like gboleean where ONE represents TRUE and the rest of values are FALSE .

    What took us so long was the cloning part and the packages that were left in each cases. So, the first step is going to the page: and clone:

    glib After that, get inside the new glib file created and do autogen:

    [jinca@localhost ~]$ cd glib
     [jinca@localhost glib]$ ./

    This was the first error message I got: If ‘LT_INIT’ is in ‘’, make sure its definition is in aclocal’s search path. tests/ ‘’ included from here autoreconf: automake failed with exit status: 1

    To solve this, create  /home/jinca/opt and do export:

     * If the system asked to install packages like libffi or gtk , just install them:

    sudo yum install libffi-dev
    sudo yum installgtk-doc-tools

    Then, inside glib,  apply the configure and make commands:

    cd glib
    ./configure - - prefix=$HOME/opt/
    make install

    So, after coding the examples Cesar gave us, compile and run the programs:

    gcc main.c `pkg-config --cflags --libs glib-2.0` -o main

    After that, we reviewed some string functions like strdup that duplicated strings, but we do not have time for more. We hope next session will be more productive and we are aiming to do GTK after glib and cairo.

    Filed under: GNOME, τεχνολογια :: Technology

    Summary of work from May 12th to May 25th

    These two weeks are right before GSoC's start of coding, so I did some research work and made my first commit.

    1. Some research work: digging into the Evolution-ActiveSync module, learning the implementation of the outdated EPlugin, and the usage of EExtension.

    2. First commit: Trying to bring the GUI configuration of EAS back to use. Tested on the Evolution on my laptop, and waiting for my mentor's opinion. It should be a good start, I believe.

    Helping people around the world is something wonderful. I also joined the TED translation group to translate the subtitle into Chinese so that more people, especially the people in my country, can reach the greatest idea in the world. Keep working.

    May 24, 2015

    GNOME Shell It is!!

    It’s been a while since my last post, I was busy with my university exams and didn’t get much time to work on my GSoC project. But during whatever time I got I tried to get myself familiar with GNOME Shell coding style and get a hang of the way it works, since GNOME Shell is the main module I will be working with in this project. But things weren’t as simple as I initially thought them to be. It has been a struggle trying to find out some structured documentation for GNOME Shell code-base mainly the JavaScript part.

    After a lot of searching I realized that although nothing much directly related to JavaScript is available but it’s not a complete blackout, there are some ways and materials available which can provide a pretty good understanding when put together. So here I would like to mention my findings, it might not be a complete list but I would try to cover most of the things that I found:

    Then next is GNOME Wiki which also contains a lot of information.

    It’s the GNOME Wiki for GNOME Shell, each link inside that is worth a visit but some of the most important one’s are:

    So after going through all these documents I was able to gain a pretty good idea of the mapping between the libraries written in C and used from JavaScript in GNOME Shell. These documents provided me a great deal of information and helped in a lot in understanding GNOME Shell’s JavaScript binding better.

    If you have some more information or link related to this context please drop a comment. :-)

    May 23, 2015

    Python q

    q is python module for Quick-and-dirty debugging output for tired programmers. Did you know about it? Toshio Kuratomi said about q yesterday and I use it now everywhere when I’m trying to debug things.

    It allow you to easy print variables, function arguments, function returns to temp file when you executing code. Let’s see example:

    #!/usr/bin/env python3
    import q
    def q_test(var1=None, var2=None):
        print(q|var1 + var2)
    def main():
        s = {'test': list(range(6))}
        q_test('arg', 'next')
    if __name__ == '__main__':

    After execution /tmp/q looks like:
    Python q output

    dupefinder - Removing duplicate files on different machines

    Imagine you have an old and a new computer. You want to get rid of that old computer, but it still contains loads of files. Some of them are already on the new one, some aren’t. You want to get the ones that aren’t: those are the ones you want to copy before tossing the old machine out.

    That was the problem I was faced with. Not willing to do this tedious task of comparing and merging files manually, I decided to wrote a small tool for it. Since it might be useful to others, I’ve made it open-source.

    Introducing dupefinder

    Here’s how it works:

    1. Use dupefinder to generate a catalog of all files on your new machine.
    2. Transfer this catalog to the old machine
    3. Use dupefinder to detect and delete any known duplicate
    4. Anything that remains on the old machine is unique and needs to be transfered to the new machine

    You can get in two ways: there are pre-built binaries on Github or you may use go get:

    go get

    Usage should be pretty self-explanatory:

    Usage: dupefinder -generate filename folder...
        Generates a catalog file at filename based on one or more folders
    Usage: dupefinder -detect [-dryrun / -rm] filename folder...
        Detects duplicates using a catalog file in on one or more folders
      -detect=false: Detect duplicate files using a catalog
      -dryrun=false: Print what would be deleted
      -generate=false: Generate a catalog file
      -rm=false: Delete detected duplicates (at your own risk!)

    Full source code on Github

    Technical details

    Dupefinder was written using Go, which is my default choice of language nowadays for these kind of tools.

    There’s no doubt that you could use any language to solve this problem, but Go really shines here. The combination of lightweight-threads (goroutines) and message-passing (channels) make it possible to have clean and simple code that is extremely fast.

    Internally, dupefinder looks like this:

    Each of these boxes is a goroutine. There is one hashing routine per CPU core. The arrows indicate channels.

    The beauty of this design is that it’s simple and efficient: the file crawler ensures that there is always work to do for the hashers, the hashers just do one small task (read a file and hash it) and there’s one small task that takes care of processing the results.

    The end-result?

    A multi-threaded design, with no locking misery (the channels take care of that), in what is basically one small source file.

    Any language can be used to get this design, but Go makes it so simple to quickly write this in a correct and (dare I say it?) beautiful way.

    And let’s not forget the simple fact that this trivially compiles to a native binary on pretty much any operationg system that exists. Highly performant cross-platform code with no headaches, in no time.

    The distinct lack of bells and whistles makes Go a bit of an odd duck among modern programming languages. But that’s a good thing. It takes some time to wrap your head around the language, but it’s a truly refreshing experience once you do. If you haven’t done so, I highly recommend playing around with Go.

    Random questions

    Comments | @rubenv on Twitter

    May 22, 2015

    iio-sensor-proxy 1.0 is out!

    Modern (and some less modern) laptops and tablets have a lot of builtin sensors: accelerometer for screen positioning, ambient light sensors to adjust the screen brightness, compass for navigation, proximity sensors to turn off the screen when next to your ear, etc.


    We've supported accelerometers in GNOME/Linux for a number of years, following work on the WeTab. The accelerometer appeared as an input device, and sent kernel events when the orientation of the screen changed.

    Recent devices, especially Windows 8 compatible devices, instead export a HID device, which, under Linux, is handled through the IIO subsystem. So the first version of iio-sensor-proxy took readings from the IIO sub-system and emulated the WeTab's accelerometer: a few too many levels of indirection.

    The 1.0 version of the daemon implements a D-Bus interface, which means we can support more than accelerometers. The D-Bus API, this time, is modelled after the Android and iOS APIs.


    Accelerometers will work in GNOME 3.18 as well as it used to, once a few bugs have been merged[1]. If you need support for older versions of GNOME, you can try using version 0.1 of the proxy.

    Orientation lock in action

    As we've adding ambient light sensor support in the 1.0 release, time to put in practice best practice mentioned by Owen's post about battery usage. We already had code like that in gnome-power-manager nearly 10 years ago, but it really didn't work very well.

    The major problem at the time was that ambient light sensor reading weren't in any particular unit (values had different meanings for different vendors) and the user felt that they were fighting against the computer for the control of the backlight.

    Richard fixed that though, adapting work he did on the ColorHug ALS sensor, and the brightness is now completely in the user's control, and adapts to the user's tastes. This means that we can implement the simplest of UIs for its configuration.

    Power saving in action

    This will be available in the upcoming GNOME 3.17.2 development release.

    Looking ahead

    For future versions, we'll want to export the raw accelerometer readings, so that applications, including games, can make use of them, which might bring up security issues. SDL, Firefox, WebKit could all do with being adapted, in the near future.

    We're also looking at adding compass support (thanks Elad!), which Geoclue will then export to applications, so that location and heading data is collected through a single API.

    Richard and Benjamin Tissoires, of fixing input devices fame, are currently working on making the ColorHug-ALS compatible with Windows 8, meaning it would work out of the box with iio-sensor-proxy.


    We're currently using GitHub for bug and code tracking. Releases are mirrored on, as GitHub is known to mangle filenames. API documentation is available on

    [1]: gnome-settings-daemon, gnome-shell, and systemd will need patches

    An introduction about writing GLib/GTK+ applications in C

    GNOME lacks a good and recent book about writing applications and libraries. I was motivated, some months ago, to write such a book. But this motivation has dissipated somehow, I don’t think I’m the right person.

    Anyway, here is my attempt:

    The GLib/GTK+ Development Platform (version 0.2)

    It contains an introduction to GLib, which is mostly an updated version of the corresponding chapter in GGAD, written by Havoc Pennington (with his permission).

    Even if the document is short, I think it can already be an interesting read. With the hope that the content can be reused for a real book in the future…

    First steps forward, first struggles.

    So I came back from Edinburgh and returned to the calm, slow-paced mood of my home village in Slovakia. Today, I decided to try to imitate a regular working day, which I have designed for myself starting 25/05 - that's when the Google Summer of Code programme officially starts.

    So far, it's been going well. I have had a look at several pull requests by Izidor, where he asked me to comment on parts of refactored code which are not clear or to check any apparent flaws. This is a great experience because I can see which parts of code he replaced by another version of the code with the same functionality, but probably in a more elegant manner. I can spot many handy programming practices, think about the reasons for why he made such a choice, which is great and I enjoy that! This way, we are making the code easier to work with not only for us, but for all the new-comers as well.

    Secondly, I have been working on a prototype of header bar which could be implemented into Getting Things GNOME app. Header bar is a very interesting and useful feature which became a standard of the GNOME 3 design guidelines, as it allows to place all the crucial buttons and functionality into the top bar in an elegant way and still keeps the design simple and clean.

    At first, I programmed the whole prototype in Python, but then, in order to be able to implement it into GTG, I had to create a separate XML .ui file, which would be invoked from a different Python file as this is how GTG is being structured. This is what occupies me currently. It is going rather slowly, since I need to look for the attribute values and individual elements which could be placed inside a header bar or even inside each individual button itself within the XML file. However, I see some progress here, so by this evening, I would like to have it well structured and ready to write the Python file which would make use of this design layout.

    Once I manage to make it work, I will surely post some screenshots of the features which I have implemented, so that you get a clearer view of my activities. As for now, I think that's about everything I had to share. Now I will return to the code refactoring and hopefully finish my re-design attempts with header bar afterwards.

    Galaxy Zoo iPhone App: Developers welcome

    Over the last couple of weeks I’ve made good progress on an IOS app for Galaxy Zoo, reimplementing what I’ve already done in the Galaxy Zoo Android app. The code is in github. This is my first time using Objective-C and developing for IOS, so I’m very open to helpful criticism.

    Though it’s not screenshot ready, I think I’ve done the hard stuff, such as caching enough subjects from the server, uploading the classifications, removing old classifications, and dealing with cache files being deleted by the system. So I’m confident that I can get it finished fairly soon, give or take the usual bug fixing.

    However, I’m going on vacation tomorrow for two weeks, so I filed github issues for the simple things that still need to be done. Maybe some other interested iPhone developers would like to contribute. It would be great to arrive back from vacation to a bunch of github merge requests.

    May 21, 2015

    Report of Libre Graphics Meeting 2015

    We have been back from Libre Graphics Meeting 2015 in Toronto for 2 weeks now. It is time for a report! :-)

    About the event itself, this year was very nice, as usual, though it felt a little empty compared to the previous 2 years we also attended. Not sure exactly why is that. Are most contributors European-based? Apart from this:

    * We could hang out with the rest of the GIMP team, and that’s cool…
    GIMP Breakfast on Sunday

    * Nearly the whole GIMP team made a small road trip to see the Niagara falls…

    ZeMarmot at Niagara falls

    ZeMarmot at Niagara falls

    * Of course, we also had our annual GIMP developer meeting, to discuss directions of the project…
    Gimp bird-of-a-feather meeting

    * And we discovered once again several awesome projects during various presentations. I won’t name them all, and unfortunately we also missed a few talks (I was especially sad to miss “Goodbye FontForge” by Dave Crossland — because with such a title and because Dave is a reference, this looks like it was a must-see; and “Web Sites on a Stick: EPUB and the Web Converge” by Liam Quin, a GIMP contributor, and we heard his talk was very cool). But from what we saw, I’ll raise:

    • Creating textbook-grade SVG illustrations for Wikipedia: a talk about contributing to Wikipedia with SVG images. It was interesting to see nice possible outputs of SVG. Yet what really hit me was the low support of SVG in browsers (like: it is supported nearly everywhere now, but apparently most advanced feature are not). So apparently SVG images contributed to Wikipedia are actually re-rendered as bitmap (text layers are hidden, advanced layout features would get wrong rendering on most browsers, embedded links are not working, etc. Well that’s if I got it right, tell me in comment if I misunderstood! This is sad.
    • imgflo: the cool work of Jonnor, GIMP, GEGL and MyPaint contributor, about imgflo, his project of an image rendering server through HTTP API. These are the kind of projects which will help GEGL go forward.
    • The List powered by Creative Commons: a talk by Matt Lee from Creative Commons about a smartphone app project to request and share photographs. Well I’m not sure if this project will be a success, and I heard a lot of people saying they did not believe in it. But I think the basic idea is still there: we should be able to gain more contributions to Libre Knowledge projects (Wikimedia, OpenStreetMap, Creative Commons projects…) by giving them more “game-like” exposure. This is actually a thought I had slightly before knowing this project, when I met people who send all their data to Google with games like “Ingress” (if you read, you know who you are!). I think we should be able to do the same thing with Libre Knowledge projects. For instance, if instead of sending all your coordinates and personal behavioral data to Google, you had a similar Free Software smartphone game to improve OpenStreetMap data automatically, wouldn’t that be awesome? Well if anyone has such a project, do not hesitate to contact me! Especially if you are into UI, then I’d leave you this part and I’d take care of the engine. :-)
      Of course, I’m not really sure this was the actual direction taken by The List, but it could be an interesting experiment.
      Also we already told about it, but we remind that Matt Lee is running a crowdfunding as well right now for a comedy movie, “Orang-U: An Ape Goes To College”.
    • Allowing Mistakes to Happen: this one was really funny. Antonio is a glitch artist, a field I didn’t know about. Basically while we are looking for bugs to fix them, he is looking for bugs… to use them for art! I know, right?!
      Glitch Art
    • Towards Open Textile and Garment Production: very awesome, an Open Textile Production line project. The idea: the knowledge of making clothes is mostly lost in western countries, and unfair in the rest of the world (bad work condition, dangerous even, bad pay, old material because slaving human workers is cheaper than getting modern machines, etc.). Not to mention the uniformization of fashion. So the idea is to get back control to our own fashion in the same idea as Hackerspaces/fablabs. Here for an awesome video. We also saw one of these hacked knitting machine a week later in OpenTechSummit in Berlin.

      Made In the Neighbourhood (ft. a clothing printer, OpenKnit) from Gerard Rubio.

    These are mostly the talks of less known projects and which I didn’t expected (well, excepted imgflo one’s, but it’s always cool to remind it!). Which is good: I prefer to find unexpected things, it’s less boring. :-)
    Of course, if you were rather expecting news of the big projects from my report, I’d suggest to have a look to the slides of the State of Libre Graphics [pdf] (the first talk of LGM), which are pretty self-explanatory (about Blender, GIMP, Inkscape, Scribus, etc. even our awesome LILA is there, and the brand new website project by Patrick David about Free/OpenSource photography).

    And finally we presented our own project, ZeMarmot.

    LGM-2015-ZeMarmot Talk

    “ZeMarmot in a dense blizzard (due to bad camera settings)! ..At the Libre Graphics Meeting, 2015″, by Tom Lechner, CC BY-SA 2.0

    You can have a look at ZeMarmot’s slides [pdf] (actually the ones for OpenTechSummit, slightly updated, but similar).
    And here for the video of the talk shot by Peter Westenberg (Free Art license):

    The presentation and the teaser (shown publicly for the first time this day) got well received, with applause, so this was a nice start. :-)

    Also we remind that we are still in the middle of ZeMarmot’s crowdfunding, in order to a cool animation film out, and improve (code contribution!) Free Software (GIMP, Blender…)
    Support ZeMarmot

    Meson and 3rd party dependencies. Only one correct way


    As you know, many projects bundling libs (including source code of 3rd party libs). For example, SuperTuxKart bundles angelscript, bullet, enet, glew, irrlicht, jpeglib, libpng, wiiuse, zlib. All of this libs package in my favorite distro Fedora.

    As Fedora maintainer I need to check what changed in bundled libs code, if nothing – write patch to use system lib, if few changes – write patch to use system lib and report bug against this lib in Fedora, if big changes – try to understand what changed, why it’s not in upstream, create FPC ticket and they will accept bundle – use bundle. If all devs will allow to use system libs – this will be great (0 A.D. and Xonotic does this). Yes, this is also cross-platform games.

    In CMake I need to write custom FindSomething.cmake and fix some things in CMakeLists.txt. Providing switch between system and bundled sources is not easy. For example, in stuntrally to unbundle ~ 50% of libs I should Showing 49 changed files with 238 additions and 108 deletions. I hate it.

    In Autotools I never tried to do this, I think I will kill myself if will try.

    With Meson it’s really simple. Meson is designed to be simple for developers, maintainers and fast. Hi to m4 and that black magic.

    I don’t want to write more here, please read manual at official meson wiki. Much better to see real example.


    If we don’t have library in system (I renamed libenet to libent to not delete enet from my system):
    Meson wrap bundled
    If we have library in system:
    Meson wrap system


    Please do not hesitate to contact us via IRC (#mesonbuild on freenode) or send patches/issues via GitHub (

    P.S. When I wrote this example I found some missing functionality and minor bugs and sent patches[1][2]. If you want to try this example – you need apply those patches.

    A few Git commands used while contributing to Gnome-Logs

    I've been contributing to Gnome-Logs project since last September and learned a lot during this period. While talking about contributing to open source, git is the tool you'll definitely use. So in this post, I'd like to talk about a few git commands I used the most in this period.

    The general way I contribute to Logs is that I generate a patch using git and send it to David King who is the maintainer of the project and also my mentor for GSoC 2015, and then he'll push to the code to git repository. In this process, I need commit my changes and generate a patch.

    While commit the changes, we may need to track new files. This can be done using "git add filename". Then we can use "git diff" to see the changes we made to the project and check if out. If everything is fine, now it's time to commit our changes. The simplest way to commit is to type "git commit". Then we need fill the commit message. The picture below shows the guidance of GnomeLove.

    Another command I often use is "git rebase". For most times, I generated a patch and send it to my mentor, but there is still something to be fixed. So I have to make some extra changes to the codes and commit the message again. This will result there exist more than one commit. What I gotta do now is to merge these two commits into one. Here we need use the command "git rebase -i". The commands "pick" and "squash" will be used. Supposing we have two commits before, and we want to merge these two into one commit. After type "git rebase -i", we can see something like this:

    pick patchHash
    pick patchHash

    We keep the first "pick", and change the second "pick" to "squash". In this way, we can merge these two commits into one.

    To see how our patch looks like and save it in a custom location, the command below create a patch from your last commit:

    git format-patch --stdout HEAD~1 > ~/myPatch.patch

    May 20, 2015

    Sharing mobile GPS with PC

    This is my first post for Planet GNOME regarding my GSoC 2015 Project under the mentorship of Zeeshan Ali (Khattak). This summer, I am working on a project to let GNOME users access GPS location (shared) from a GPS source. Android devices are among the most common GPS sources. So, a part of this project will be on Android. This android application will work as a location server for Geoclue. This server will be discoverable via mDNS clients like Avahi and Bonjour.

    Tentative design of Android application
    Tentative design of Android application

    In a broad sense, Android application will use ServerSocket to communicate with Geoclue. Each time Android LocationListener listens to a new Location, it will transmit that location data to Geoclue in form of NMEA sentence. Geoclue takes that location information and passes it on as GPS location. Apart from the android application, GUI application for Geoclue to Geoclue location passing is to be developed.

    Timeline followed by the project will be as follows:

    Week 1 and 2 Experiments with the code and implementation of a basic layout for new Geoclue location source. This Geoclue location source would be able to take in NMEA GGA sentences and convert into location object.
    Week 3 and 4 Geoclue Location source continued.
    Week 5 and 6 Working skeleton of Android application that will connect with Geoclue and send information.
    Week 7 and 8 Geoclue GUI for Geoclue to Geoclue sharing.
    Week 9 and 10 Implementation of more seamless connectivity using Android NSD and Avahi.
    Week 11 and 12 Android application UI/UX improvements.
    Week 13 Testing, optimization, bug fixing and wrapping up.

    GNOME Asia 2015

    I was in Depok, Indonesia last week to speak at GNOME Asia 2015. It was a great experience — the organisers did a fantastic job and as a bonus, the venue was incredibly pretty!

    View from our room

    View from our room

    My talk was about the GNOME audio stack, and my original intention was to talk a bit about the APIs, how to use them, and how to choose which to use. After the first day, though, I felt like a more high-level view of the pieces would be more useful to the audience, so I adjusted the focus a bit. My slides are up here.

    Nirbheek and I then spent a couple of days going down to Yogyakarta to cycle around, visit some temples, and sip some fine hipster coffee.

    All in all, it was a week well spent. I’d like to thank the GNOME Foundation for helping me get to the conference!

    Sponsored by GNOME!

    Sponsored by GNOME!

    May 18, 2015

    The hamburger icon

    The BBC recently ran an article about the "hamburger icon" and how these three lines mystify most people. You can find the hamburger in a variety of modern user interfaces: phones, websites, and desktop environments. The common use of the "hamburger" is to bring up a menu. Even GNOME uses the "hamburger icon" to represent a menu for program options:

    gedit 3.16

    Nautilus 3.16

    Epiphany 3.16

    I've commented in my hands-on review of GNOME 3.16 that in GNOME, the "three lines" icon replaces the gear menu for the drop-down menu. This "three lines" menu icon is more common in other applications, including those on Mac OS X and Windows, so the new menu icon should be easier to find. I still believe that the "hamburger" is a good choice. Visually, the "three lines" icon represents a menu.

    However, it's important to note that the "hamburger" icon is a learned representation. It is a very abstract icon. In contrast, a "boldface" icon (typically a bold "B") or an "italics" icon (typically an italics "I") represents the icon's action by showing you a sample result, so is easy to learn and easy to remember. But the "three lines" icon doesn't exactly look like a menu; you have to learn what it means, then remember it.

    Blogger's edit bar, with "boldface" and "italics" buttons on the left

    I wonder if the "hamburger" icon can be improved by including some other marker to suggest an action? In the BBC article, a web developer conducted some tests on his own, and found:

    1. Adding the word "menu" underneath the three lines increases the button's use by 7.2%.
    2. Putting the hamburger inside a box, so it looks like a button, increases use by 22.4%.
    3. Switching the lines for the word "menu" makes 20% more people click.

    GNOME might benefit by examining this further. GNOME already includes a box around the "three lines" menu icon, which helps. What if we added a "∨" indicator (or "∧" if the menu is on the bottom of the screen) to the icon, to suggest the icon presents a drop-down menu? I recall older versions of GNOME used a similar indicator, in the form of a small triangle.

    Perhaps this is something we can explore in the upcoming GNOME Outreachy. But I think this round of usability testing in Outreachy is already full, so I'm not sure we will be able to examine the "hamburger" icon's usability in any detail, at least in this round. Instead, I encourage others who are interested in GNOME usability to try their own prototype usability test, using mock-ups or paper printouts with test volunteers to see how users respond to the "hamburger" icon with and without a "∨" indicator.

    (And if you are interested in participating in a future round of Outreachy for usability testing, this would be a good first project for you.)

    What to expect for GNOME 3.18

    Legend says that the best GNOME release is always the next one. Here’s a quick selection of features I’ll work on for GNOME 3.18. Hope you all enjoy!


    Calendar was my gatweay to GNOME, thus it’s my cherished project. Some good news: the always-awsome Erick Pérez Castellanos kindly shared the maintance duties of GNOME Calendar with me. Yay!

    For Calendar, we’re preparing an exciting 3.18 release:

    • A new, experimental calendar manager, where users will be able to add, modify and remove calendars from it’s system. (in calendar-editor branch)
    • A first tentative implementation of keyboard navigation, to help power users save their time & energy when using Calendar. (in wip/keyboard-navigation branch)
    • The highly wanted week view, redesigned and unbelievably amazing – thanks to Lapo Calamandrei again.
    • A new event editor, now able to handle attendants, attachments, different timezones e much more.
    • Many bugfixes and code cleanups.


    As part of my Summer of Code project, I’ll work Files’ (a.k.a. Nautilus) new Network & Drives page. Yaay!

    Files will receive a bunch of improvements this cycle too:

    • The new Network & Drives pagemockups are mature enought, thanks to Allan Day.
    • A better sidebar – and Gtk+ will receive it too – thanks to Carlos Soriano’s work.
    • Improvements on bookmark management.
    • New dialog for renaming & creating folders and files.
    • Many bugfixes and cleanups.

    Other projects

    While I’m not directly involved, I’m personally very excited for the new features landing around. We’ll see some improvements on Totem (a.k.a Videos) and Shell. GNOME Builder is growing extremely fast, and Hergert’s contributions overflowed to other projects like GtkSourceView, gEdit and even Gtk+. It’s so good to have such an active and generous contributor as Christian Hergert working full-time on GNOME stack, we see a non-stopping flow of contributions everywhere!

    This year’s Summer of Code’s accepted projects are looking very promising. The ones that really caught my attention were:

    I’m looking forward to see the results. And, by the end of this cycle, we’ll have a better GNOME desktop, which (I hope) users will enjoy to the last bit!

    GNOME Builder - 3.16.3

    I just tagged and released Builder 3.16.3 into the wild. This is likely the last of the 3.16 releases as we hope to start moving full speed ahead towards 3.18. There are a lot of features in various dependencies we need to start taking advantage of now, so fire up that jhbuild.

    I hope that distributions will pick up 3.16.3 just like the other modules, as I think it is a pretty pleasant experience for what it does.

    Now some more screenshots.

    The greeter got an overhaul. Languages are currently extracted from .doap files. That will change once we get a proper tracker-miner.

    You probably saw Ignacio's post about the minimap landing in Gedit. Thanks to his work pushing that into GtkSourceView, that will be available to everyone. There is clearly more work we can do to clean-up my hack of an implementation, but we have plenty of time this cycle. That said, it animates smoothly and I've found it quite useful for jumping ahead to errors/warnings found by our diagnostics engine.

    Starting to cleanup preferences. It was getting out of control.

    And some more.

    And some more. We got ctags auto-completion support this round. We can use that same data for highlighting and symbol resolving (think "gd" in Vim mode), but still need to write that. Not terribly difficult if you are interested in contributing that. It's not necessary for C/C++ since we already have clang.

    Dimitris Zenios has been patch machine the recent couple of weeks. One of his additions was this nice highlighter for matching XML elements. Especially since he had to fix a lot of my broken code in the process.

    Quick example of ctags based autocompletion, which is not terribly fancy. But it gets the job done better than you think.

    And a reminder that we have clang auto-completion, which I'd still consider experimental just because it has so many moving parts. Each of the parameters in the completion turn into a snippet tab stop. Convenient.

    We have a lot to do. Now that we know what it is like building something of this scale, we can clean up and organize the mess I've created.

    Thanks to everyone who contributed this cycle, you keep me going.

    May 17, 2015

    Autocomplete with PyGobject3 in pycharm.

    I recently started learning pygobject as part of my gsoc project and a major problem that I faced was not having autocomplete working with the gobject-introspection library in pycharm. No matter how much we deny it autocompletion helps us developers in not repetitively referring to documentation and guides and increases productivity at the same time.

    Here is a solution for people faced with the same problem. First we need to edit the pyCharm file:

    1. Navigate to the /bin folder.
    2. Locate the file and open it for editing. (Chances are you will need to change the permissions.)
    3. Edit the line “idea.max.intellisense.filesize=1024″ and make the value something like 10000.
    4. Save it!
    5. Restart pyCharm.

    The above steps were done because all the modules in the Gobject-introspection library are binary modules and we need to generate stubs for it in order to have autocompletion. inside the library is too big for the initial buffer size of pyCharm that is 1024 and hence we increase it.

    The next steps are fairly simple:

    1. Go to any existing pyGobject project or create a new python file and type or locate the following line:
      from gi.repository import Gtk
    2. Take your cursor to “Gtk” and press alt+enter and click on “Generate stubs for binary module”.
    3. Wait for the processes to finish.

    Tada! You will have autocompletion working with Gobject-introspection library. This method can also be used for any other library with a similar problem.

    First Step

    On 27th April, 2015 with the announcement of selected students for GSoC 2015, my upcoming adventurous summer was set to begin.

    imageedit_4_5837136942Here by writing this post as my First Step, I embark on this super exciting journey. I am sure it’s going to be a lot of fun and learning experience for me.

    GNOME_logoAlthough I always wanted to start my blog but I never envisioned myself as a writer until now so always kept it for tomorrow, now I am glad that the day has finally come.

    I have been selected to work on a project on GNOME in Google Summer of Code 2015, popularly known as GSoC 2015. My work would be related to a design which was part of the plan but has not yet been fully implemented. In the new design, major changes were made on how the notifications and events are displayed to the user, part of which was to add Birthday Reminders & Weather Information in Time & Date drop-down but is yet to be implemented and that’s what I would be doing this summer.

    I would do this project under the mentor-ship of Florian Müllner, who also helped me a lot during proposal submission period. I would really like to thank him along with Google and GNOME for providing me this wonderful opportunity.

    Really excited about this summer…..

    return GUADEC 2014

    GUADEC 2014 report
    As one of GNOME.Asia 2014 organizers, GNOME Foundation sponsored me to attend GUADEC 2014 in Strasbourg.

    Strasbourg is a wonderful city, I very like the amazing Illuminations of the Cathedral.

    It is awesome four days where I listening to presentation about new technology, meeting old and new friends.

    You can know more about us from flickr, :)

    I got a lot from the topics in these days.

    1) Reusing Libreoffice in your application, in each page there are lines for thanks to each one for their contribution!
    Now libreoffice already be reused by a lot of applications, Markus introduced the LibreofficeKit and a lot of new features.


    You can download his slide for more information.

    2) What’s new in Gstreamer, talked about what’s done last year and new features.
    What captured my attention is that they list the copyright of the pictures in slide at last!!


    3) SDAPS: Easy to use paper surveying tool for GNOME
    No so much listener interested this topic, but Benjamin still finished the topic seriously, and it’s very cool to develop this tool in University.


    4) Fleet Commander: making GNOME 3 shine on large deployments
    It’s a popular topic in second day, and this is a new project, with this tool you can deploy gnome’s configuration to other machines easily.


    5) GPG, SSH, and identity for beginners
    Federico use a very tradition way to show what’s the principle of public-key cryptography.


    6) Flow based programming in the Gnome environment
    It’s the first time to know about it, and NoFlo is cool tool, you can try the 2048’s demo.


    I’ve also took part in below talks, thanks all your guys shared the top-edge technology.

    • Hardware integration, the GNOME way
    • Where are we with this “geo-awareness” dream?
    • Open Source Design – how we do it in ownCloud
    • Corebird: A Twitter client’s open source journey through Gnome land
    • GTK+, dialogs, the HIG and you
    • Where has all the Python gone?
    • Next generation input methods

    Thanks to the GNOME Foundation for sponsoring my travel and accommodation. Looking forward to the next year at Gothenburg. ;)


    And now GNOME.Asia 2015 is call for host!

    May 16, 2015

    GNOME Board of Directors Candidacy

    Over the years, I have watched our Board of Directors knowing that someday I wanted to contribute on that level. This past year has been an incredible experience for me and I owe that to all of you. I want to continue by serving as a board member on your behalf.

    I've been quite satisfied with our Board of Directors over the years. Keeping momentum is not an easy task. I think I can help bring this to our Board and to our Community at large.

    Therefore, I am both humbled and excited to announce my candidacy for the Board of Directors.

    Peace, Love, GNOME!

    Official Announcement

    May 14, 2015

    PTP network clock support in GStreamer

    In the last days I was working at Centricular on adding PTP clock support to GStreamer. This is now mostly done, and the results of this work are public but not yet merged into the GStreamer code base. This will need some further testing and code review, see the related bug report here.

    You can find the current version of the code here in my GIT repository. See at the very bottom for some further hints at how you can run it.

    So what does that mean, how does it relate to GStreamer?

    Precision Time Protocol

    PTP is the Precision Time Protocol, which is a network protocol standardized by the IEEE (IEEE1588:2008) to synchronize the clocks between different devices in a network. It’s similar to the better-known Network Time Protocol (NTP, IETF RFC 5905), which is probably used by millions of computers down there to automatically set the local clock. Different to NTP, PTP promises to give much more accurate results, up to microsecond (or even nanosecond with PTP-aware network hardware) precision inside appropriate networks. PTP is part of a few broadcasting and professional media standards, like AES67, RAVENNA, AVB, SMPTE ST 2059-2 and others for inter-device synchronization.

    PTP comes in 3 different versions, the old PTPv1 (IEEE1588-2002), PTPv2 (IEEE1588-2008) and IEEE 802.1AS-2011. I’ve implemented PTPv2 via UDPv4 for now, but this work can be extended to other variants later.

    GStreamer network synchronization support

    So what does that mean for GStreamer? We are now able to synchronize to a PTP clock in the network, which allows multiple devices to accurately synchronize media to the same clock. This is useful in all scenarios where you want to play the same media on different devices, and want them all to be completely synchronized. You can probably imagine quite a few use cases for this yourself now, especially in the context of the “Internet of Things” but also for more normal things like video walls or just having multiple screens display the same thing in the same room.

    This was already possible previously with the GStreamer network clock, but that clock implements a custom protocol that only other GStreamer applications can understand currently. See for example here, here or here. With the PTP clock we now get another network clock that speaks a standardized protocol and can interoperate with other software and hardware.

    Performance, WiFi and other unreliable networks

    When running the code, you will probably notice that PTP works very well in controlled and reliable networks (2-20 microseconds accuracy is what I got here). But it’s not that accurate in wireless networks or in general unreliable networks. It seems like in those networks the custom GStreamer network clock protocol works more reliable currently, partially by design.


    As a next step, at Centricular we’re going to look at implementing support for RFC7273 in GStreamer, which allows to signal media clocks for RTP. This is part of e.g. AES67 and RAVENNA and would allow multiple RTP receivers to be perfectly synchronized against a PTP clock without any further configuration. And just for completeness, we’re probably going to release a NTP based GStreamer clock in the near future too.

    Running the code

    If you want to test my code, you can run it for example against PTPd. And if you want to test the accuracy of the clock, you can measure it with the ptp-clock-reflector (or here, instructions in the README) that I wrote for testing. The latter allows you to measure the accuracy, and in a local wired network I got around 2-20 microseconds accuracy. A GStreamer example application can be found here, which just prints the local and remote PTP clock times. Other than that you can use it just like any other clock on any GStreamer pipeline you can imagine.

    May 13, 2015

    GNOME Asia 2015 impressions

    I must to congratulate all the enthusiasm and effort from many young students supported by experienced people, leaded by Estu Fardani. There are lots of Linux users in Indonesia and I saw the willing to contribute with the GNOME project. I met Estu in person and I found more friendly local people: my new dear friend Deetah, Harris, Utian, Aris, Kukuh, Fahmi, Moco, Pico, Siska, Lenin & the awsome Sendy!


    Left picture was taken in the BTECH, Bogor.

    It was great to see GNOME friends again: Kat & Dave from UK, Andre & Tobias from Germany, Olav from Holland, Alexander from France and Shobba from India. They shared their years of experience with Linux and GNOME and they guided and answered all the questions of local people. I was in charge of GNOME Marketing; so far, GNOME has not received applicants for the OPW and the GSoC program . We also planned to do an event of the Release Party in Indonesia and Peru on September, 25th.  I hope others countries can join us with this, so the whole world can tweet for the entire day the hash-tag  #ReleaseGNOMEparty or #ReleaseGNOMEparty3.18 or maybe #ReleaseGNOMEparty2015


    17407956016_0befc2b5ee_z Thank you herpiko for capturing that moment. You can see all the pictures in the Flickr group!

    This event make me also meet the GNOME Asia people, Max, Bin Li, Edu Sun and the other guys also were sharing and promoting the Open SUSE distro. Also it was great to met Gstreamers guys: Mathew Waters from Australia, Olivier from Canada, Arun & Nirbheek from India. They shared links and materials to start contribution with GNOME applications like Banshee, Pitivi & Empathy.

    image image

    The event was setup according to the plan, the talks accomplished the schedule and the audience was aware of the event. The talks were presented by Syska, a charismatic person, and Sendy basically. There was enough food and water for attendances and the speakers received special edition of GNOME shoes!

    I gave some presents of Fedora 21 to some Indonesian students :)


    My lighting talk was not so good this time, I could blame my nervous to hear the thunder of the raining during my talk, or the difference of 12 hours of time zone from my Peru. The fact is I have to improve my speed, my tone, my accent and know more my audience (“pay it forward” is not a common movie in Indonesia). Maybe I would have not spent my time emphasis in rejection; but minutes before my talk, I heard during Kat’s talk “Contribute with GNOME” the feeling of “scaring to rejection” from an Indonesian women student. I had heard the same speech from many people around the world, they say that they do not know how to start with GNOME even if everything is documented. My intention was “encouraging people to dare applying and deal with rejections if they have the situation”. Besides that, I have to thank local committee for giving me extra minutes to prize people who responded my questions during my talk. 


    prize2Pictures from Herpiko, t-shirt and notebook

    The local committee took us to visit Indonesia in the miniature and it was so interesting to know more about Indonesia culture. Sumatra custom in Indonesia island impressed most of us: after get married they have a honey moon until getting pregnant. Then we shared a lunch celebrating Estu‘s birthday and we visited Jakarta town in the afternoon… yumy Nasi Goreng Spesial! I did not dare to try avocado juice…



    Some suggestions to improve next events:

    • Get the correct size of the screen of projector. If you have a big auditorium, the screen also must be big enough, so everyone can see the slides. The screen saver can show the logo of the event during the breaks.
    • Get a remotely pointer to press the slides in case the expositor need it. Telling “next please” took a few seconds in my presentation.
    • Prepare at least one static camera for recording talks during the event.
    • Calculate the number of chairs based on the number of participants registered before the event.
    • Test before the event the volume of the microphone and if is too loud that can be heard in other rooms, the rooms must be separated adequately.
    • The location of the stands that show Linux products must be outside of the auditorium because of distraction attention.
    • If there is not enough personnel for guiding audience since the principal door to the auditorium, it would have great to have signals or little banners that show the path. Universitas is so huge.
    • It would be great if the arrangement for all people who is not local, we would have shared the same building for staying and maybe sharing dinners together. Buildings with Internet access in all the rooms can help. University room is OK.
    • Translation of talks, there were some Indonesian talks and other English talks. There are some tecnologies that translate talks, or maybe giving summaries of everytalk can help.
    • Do some kind of survey before and after the event, asking to participants how much they know about Linux and GNOME (before and after the event). Statistics are important after the event.

    Visiting Depok, Bogor, Jakarta and Borobudur was an extraordinary experience! Motorcycles that can fly as mosquitoes that bite, the hot water that make me take more that 8 liters of water everyday, the zero alcohol in public places and the smell of the black cigarette on streets, the musulman culture that pray 5 times per day that make me start my day at 5 am because of the call, meeting the Buda temple and the Jakarta beach were incredible! Terima Kasih, kiri, tolong, keluar, saya, ayo, motor, bir, selamat pagit, teahbotol, kusuh, wanita, whos (for cushis), missi, kamu bisa are a few words I will be so glad to hear and will definitely me reminder the Indonesia kindness and hospitality! Thank you GNOME news and pictures!manos


    Filed under: GNOME, τεχνολογια :: Technology Tagged: Depok, GNOME, GNOME asia, GNOME asia 2015, Indonesia, Juilta Inca Chiroque, Julita Inca, Peru GNOME, Universitas