About Last Week – An update, sort of

I have spent my last week mostly being down with a terrible fever follwed by an awful gastritis and eventually ended up having a terrible weakness – gah! Anyway, I did have a whole bunch of things planned in the US, which I was supposed to execute in this month, well, I am on them. 🙂 After a very pleasant meeting with Alolita at the office (I visited THE office, yay! :D) – this is what we had in minds as the game plan for the next few weeks:

The target is to cover the following areas in the month of July.

  • Visuallization and Language Coverage Matrix
  • jQuery Milshake Libraries  


Target – Visualizations and Language Coverage Matrix

Evaluate visualization libraries for the web to be used for processing and displaying data from the language coverage matrix

  • To identify the selection criteria and select top 3 visualization libraries (JS/HTML5/CSS/server side appls)
  • Build prototypes to demonstrate capabilities of each library
  • Integrate initial snapshot of data for LCM into version 1 of visualizations
  • Requirements: To determine – what types of visualization, graphs do we need for LCM and what are the features that could be used for visualizing complex event data for Language tools like ULS.
  • Language Coverage Matrix – To go through technical specification and UI design mockups.


Target – jQuery Milkshake libraries

  • To learn about jQuery.i18n, jQuery.ime, jQuery.webfonts, jQuery.uls
  • To review the code
  • To get involved with Bug Triaging
  • To get some bug assigned and fix them

Now, the update of what I did get done in the last week:

Update – Visualization 

I looked at Limn, as a start. Limn is a GUI for constructing beautiful visualizations without need of programming skills, which has been using by Wikimedia Engineering so far. This might not be the exact thing that we were looking for, but I decided to play with this, as a start – because:
  • This is what we have been using so far, so let’s get deep into that to analyse the Whys and Hows.

  • Even if we do not choose to use this any way, we should be having a fair idea of the reason behind it.

  • Limn has got wonderful developers like Dan, who was kind enough to sit with me for a meeting over hangout and we discussed several parts of it.  

So, I have a few observations and concerns that came to mind while playing around with the code and the dashboards. What we wanted to look at first was some JavaScript libraries – this isn’t really one. But I have been thinking about if coco (the language which Limn was built upon) is also an option to think about:

  • Limn is written in coco – ‘a CoffeeScript dialect that aims to be more radical and practical. But, not many people are contributing to the language right now – which is not a very good sign, maybe. Which could be a bit of a risk.
  • This could also be a bit weird for the new contributors, to start from a new language. Although I have tried it and it did not seem to be a very impossible job to do. There are also plugins like vim-coco, which could come handy. Still, there remains a bit of a risk.

These are just my concerns. Also, I need to get a better picture of our requirements – which I shall get shortly, I suppose – to dive into some more libraries ( maybe, JavaScript this time, d3 to be specific.)

Update – jQuery Milkshake Libraries:

A bug triage-cum-overall meeting was planned with Runa, this week. We talked
about the above mentioned concerns, and the next few steps. She pointed me to a couple useful links like:
  • A very beautiful chart of the current scenario of all the bugs that are present in Language Engineering.
  • We are going to meet up again sometime soon (maybe, just tomorrow :)) to find out if there’s something that I could possibly triage/get assigned to in jQuery Milkshake Libraries.

Looking forward to a busier week!

On Freedom

This is more like making a transcript of two very interesting conversations – one over phone call and the other over Google chat. The one over Google chat happened earlier – musician friend who’s doing his music studies in Berklee, (the very royal Music School we all know of) suddenly starts an argument asking ‘Why this insistence on Open Source, at all’. My usual instincts naturally turned it into a conflict, where I was putting much effort in explaining how it is much important to provide people with the four basic freedoms Free Software is concerned about. At one point he said, “Yes, but isn’t it a bit insane? It’s like saying that Clapton is an evil musician if he doesn’t, with all his cds, give separate tracks for everyone to mix and listen the way they want!” Well, it would actually be a little insane if he did so. We left the conversation there – I had to run to catch my flight back to India. A week later I was talking to my other friend over phone and we somehow came to the same argument in a slightly different mode – this friend of mine has been an Open Source contributor/ enthusiast for a long time now, currently doing quite a bit of very cool things in MIT (apparently getting a PhD degree there). If you are wondering, yes I am blessed with many cool friends. He quoted his colleague Brian, whose view is – ‘You can write a software in two ways. You can write it as a piece of work or you can write it as a piece of art.’ If you are writing it as a piece of art, you might want to have your identity protected. Here’s where I was reminded of my conversation with Salil. An artiste might not want his creation to lose the identity of his own self that is obviously very attached with that particular piece of art. So, that sort of saves us from the sin of calling the great Clapton evil. (I love him!) But what I would still be believing is – every individual should  have the right to study the source and also to share it. Modifying a software in some random ways or even sometimes in some apparent organized way might be for no good. The creator has the right to protect it if he has to, I believe. Even if it does involve taking away the freedom to modify, from the users. It does not make the developer evil. It makes him an individual who wants his identity to be preserved in his piece of art, for good.

Of Sad things and Women

All cultures, I suspect, contain the seeds of violence when it comes to female sexuality, and I learned something about Draupadi’s situation from Tolstoy’s famous novella The Kreutzer Sonata. The novella grew out of the Russian writer’s own relationship with his wife, and it describes the events that lead to her murder. The husband has violent and humiliating sex with her, and he feels miserable each time he rapes her. Since she is merely an object of bestial desire, he decides that he must kill her to put an end to his misery. After her death, she becomes ‘human’ in his eyes, and he even begins to have compassionate feelings for her. The murdering husband concludes that women will never be treated as full human beings as long as sexual intercourse exists. They will always be humiliated. 

–  Gurcharan Das, The Difficulty of Being Good

Brutal, but.. somewhat true.

মোরা এই ভাষাতেই করি গান, রাজা শুনো ভরে মনপ্রাণ!

আমি চাই সাঁওতাল তার ভাষায় বলবে রাষ্ট্রপুঞ্জে,
আমি চাই মহুল ফুটবে সৌখিনতার গোলাপকুঞ্জে
আমি চাই নেপালি ছেলেটা গিটার হাতে,
আমি চাই তার ভাষাতেই গাইতে আসবে  কোলকাতাতে!

– Kabir Suman

This be the definition of Internationalization and localization. Rather, this be  the reason – why I want it. I remember being in Pune in February for the Language Summit. I remember looking at the language engineering team members putting all their efforts to make the tools happen. I remember myself realizing how they were not doing it just because they had some really good idea about the technology that is involved, also they were determined to give people the fundamental right of using the technologies they use all the time – in their own languages. Yes, it was a week before 21st February – International Mother Language Day. I kept realizing that there could not be a more meaningful way to show how much your language means to you. How much language means to you. As Amir of our Language Engineering Team has said – ‘If you can’t use a program in your own language as easily as in English, it’s not a missing nice-to-have feature, but a bug

There was no specific reason to write up this post – rather I was supposed to write up something totally different and relatively saner. But, this song was playing in my ears and I had to say how I felt.

Thank you.

OPW : A beginning indeed

Time flies when you work! 🙂
It is indeed very hard to believe that three months of OPW internship have passed already, and it is actually a time to write up the Final Project Report. Well, it is satisfying in some ways.

So, here goes!  

My Project: EtherEditor is the MediaWiki extension developed by Mark Holmquist, which allows collaborative editing of wiki pages via Etherpad Lite. Now, the whole idea of Free Software movement, or any other thing, which is believed to be something so meaningful like a movement – gets a little less meaningful without the very idea of collaboration. Collaborative editing is something, which I find cool enough! So, I did  on a project, which does mean something to me. 🙂
Things done: 
Bug Fixes:  

# Bug No.:  39441 
Description: Add tooltips to the icons for session and user list


  •  Added title attributes to the span elements that represent user and session lists in the UI.
  • Didn’t add any messages because “User list” and “Session list” were already around from before, when we had text in the buttons. 

Gerrit Status: Merged

# Bug No.: 39424
Description: Multiple pad per page clarification
Fix: Two fields have been removed from the database, and we no longer track multiple sessions per page. 
# Bug No.: 39443
Description: Submit action in normal edit form enables collaboration. Why? No reason.
Fix: Fix for #Bug – 39424 tangentially fixes this. Had taken care of this bug in the same patch as earlier. 
# Bug No.: 39389
DescriptionSuggestion: tab “collaborative editor” OR “edit” (standard editor) tab in correspondence to the user preference setting.
Fix: Added a user preference to enable collaboration bu default. Useful for people who know they will be collaborating often.
Gerrit Status: Merged.
Bugs Reported: 
# Bug No. : 44122
Description: If a pad gets deleted on EPL, EtherEditor has no clue what to do.
Fix: Open for everyone. Yet to be fixed!

Architectural Changes – No more storing sessions :

  • Getting rid of the feature of having multiple pad per page needed a lot of work. I started going deep into the flow of the whole structure.  Spent a lot of time removing stuff from EtherEditorPad.php, ext.etherEdtior.js etc
  •  Cleaned the database up and updated the changes to  EtherEditorHooks.php. Removed the fields admin_user and public pad from ethereditor_pads, EtherEditorHooks.php was updated accordingly. So, by the end of the third week, I was able to get rid of the two bugs that I was talking about – and a few more ( like, the preview feature was broken too.)  
    • Alternative construction of the URLS: The shareURL did not need the padID in it anymore, as the feature of having multiple pad per page was removed. The padURL needed to be reconstructed too – Pad URLs need to be built on the server side because of the information involved. The important parts are the URL to the base of the pad directory and the group ID. We get the first from the configuration of the wiki (it’s part of the stuff you configure before you can use the extension), but the group ID is brought over from the Etherpad Lite instance. Groups are the only way we can implement any authentication, so we use them for everything. They also help us by solving the problem of special characters, since hashing the page name gets rid of anything Etherpad Lite might deem inappropriate for pad URLs. We just pass in the literal string “original” as the pad name and be done with it.   


    EtherEditor – User can enable it manually by checking the collaborate check-box
    New Feature : User Preference to enable EtherEditor by default. 

    Here’s the checkbox added in the preference section
    Client side updates :
    • Updated the Client Library in EtherEditor : Forked the etherpad-lite-client from the git-repository and cloned it to core/extensions/EtherEditor/includes/ , well more specifically updated the EtherpadLiteClient.php file with the new php file from the cloned etherpad-lite-client followed by some unit testing.
    • The issue with the Format Buttons bug was due to the client-side script in ep_ethereditor (the etherpad plugin we maintain that enables all of the formatting magic) has an incompatibility with the newest release of Etherpad Lite’s API – as we suspected. So a fix there.


    •  Meet the Functions! While working with a few bugs and features, finally after quite a bit of struggle with the code, I had kind of felt that a brief introduction to the functions that I am dealing with would be good to be documented. 

    Feedback on Project: I loved it! I would not say I never got frustrated, demotivated or blocked. In fact there was something like that from February End – March Beginning. A very unfortunate and confusing bug, did block my ways. Which is why – although two of my  patches fixes the respective bugs and a few more right now, is yet to be merged – we were solving the issues with ep_ethereditor . But, I guess, this is also one of the many lessons I got to learn – to deal with situations like this and get going.

    Feedback on OPW: It was special. 🙂 I always had my reasons to contribute to FOSS. OPW gave me the platform. It was indeed very special.
    Disclaimer : This not a bye-bye post. This ain’t an end to anything. I strongly believe, that after a few years in FOSS, I would come back to this post and look at it as how I started something meaningful – a journey, maybe 🙂