Monday 9 May 2016

Proposal Explained

Hi readers,
In this post I will try to explain the project that I will be doing this summer.

Project Title : Preset List Settings Template(aka Styles)
Organization  : GNU Mailman
Mentors          : Abhilash Raj, Barry Warsaw, Terri Oda, Florian Fuchs


Some basics:
What is Mailman?
Mailman is a piece of software that is used for managing mailing lists, newsletters etc. It mainly has four components:
1: Core- It is responsible for the actual delivery of the emails, management of user data(subscriptions, preferences etc.) and for the handling of the requests made by REST API.
2: Postorius- It is official web user interface of the Mailman which helps users(list members, list admins, moderators) in managing their settings(preferences, subscriptions) and the settings of their lists.
3: Mailman Client- It provides the glue code which enables a developer to write its own scripts and front-ends which can communicate with the core without caring for the underlying details and changes. Postorius also uses it for communicating with the core.
4: Hyperkitty- It is official archiver of the Mailman which provides access to the list archives and provides a way to interact with the lists.

What's the purpose of a mailing list?
A mailing list is simply a list of e-mail addresses of people that are interested in the same subject, are members of the same work group, or who are taking class together. When a member of the list sends an email to the group's special email address(the address of the mailing list), the e-mail is broadcast to all of the members of the list automatically. The subscribers can opt either to receive the mail immediately or as digests(a single mail containing all the new mails posted to the list).
At least there can be two type of mailing lists:
1: Announcement lists: These type of lists are used for broadcasting information to a group. The users who subscribe to these lists are eligible for receiving mails from this list but they can't send mails to the list.
2: Discussion lists: These types of lists are meant for sharing ideas, discussing some thing about some particular topic etc. Each member can send message to list distribution to all other members which in turn can then share their ideas, give feedback etc.

What is a 'Style'?
Managing a mailing list may be a tedious task. The list administrators need to manage a number of settings which govern how their list behaves. Mailman refers these set of settings as 'Style'. When we define a new 'Style' we create a new set of settings that can be applied to a mailing list. Mailman uses a database to store the 'settings' of a list. By 'applying a style to a list' we mean to take the 'values' of the attributes(settings) from a style and copy them to the database.

Present Scenario(Or the problem)-
Currently for defining a new style, the users need to create a file containing a python class which implements the 'IStyle' interface. This class will be containing all the necessary details required for defining the new style and the name of this class will be the name of the new style(which has to be unique). This file then needs to be copied to one of the import paths so that mailman can load it. This is process is much more tedious than it seems. Also only the users having shell access to the machine are able to define a new style. Furthermore, managing styles becomes an extremely difficult task. For defining a new style, it becomes mandatory to know Python(as he/she will need to write python code). Not only this, there is a one more big issue that is: At present a style can be applied to a list only when it is created. It means that if we change a style, then, the settings of the mailing lists using that style are not updated automatically. This posses a serious problem in managing the list. For tackling this problem, the Postorius provides a "List Settings Form" which enables a user to change the settings of the list. But that too contains just a handful of the settings and if the user has to take the support of an external web form for managing the list settings then it becomes a serious question on the usefulness of the styles in managing the list settings.

Aims of my project-
My project aims at providing a web interface(as part of Postorius) that will help the users in creating the new styles and managing the existing ones and to make it possible to manage the list settings via modifying a style, i.e., if a user updates some settings in the style then those the corresponding settings of the mailing list using that style should automatically get updated. This will make the whole process of defining a new style and managing a list's settings using it just a matter of few clicks.

That's it for now. I hope that it was not difficult to follow. I will be posting more of the technical details about the project as soon as my semester exams end.

Thanks,
Harshit Bansal

Thursday 5 May 2016

My GSOC journey so far

Hi readers,
This is going to be my first blog post and somewhat longer as well. It is an informal post not related to my GSOC project. In this post I will be focusing mainly on my journey of GSOC. Okay so lets get started- :)

How all of this started? -
All of this started about one and a half year ago during my stay in Kota for my preparation of various competitive exams(Yes, I am a dropper). When I was in Kota I had made it my habit to browse quora and google news daily for fifteen minutes so that I can stay updated with worldly affairs apart from PCM. It was like a normal night, the sky was clear, the stars were twinkling(don't worry not going to write a long story, just setting up the mood), I was browsing quora on my Micromax Q5(my phone earlier) then all of a sudden a question poped in my Quora feed. If I remember correctly, it was like - How should one prepare for "GSOC"? (I was unable to even pronounce the last word correctly!). I had no idea about GSOC. So I googled "GSOC"(from that day I have made it my habit to google any term that I come across, whose meaning I don't know. Never know what the luck has in its pocket for you!). It took me about five to six days to completely understand how the program works and what are its prerequsites. Since before this I had never heard of the term "opensource" so I started to google about it and to my mere surprise it turned out that the browser that I am using for all this is also an open source software. I was surprised to see how vast the open source world is. But since I was on my "mission" to crack some competitive exam so that I could land into a good college with a branch of my choice(CS/IT), I had to forget about all this and to concentrate on my studies. I put GSOC aside and continued my preparation but it was now on my target list. All of this happened even before I started my engineering. ;)


As we know that "Time and Tide waits for none", time passed away sooner then I expected and it was now exam time. After facing a mix of some success and failures and a lot of hardships, I was able to grab a seat in HBTI, Kanpur with a branch of my choice(I.T.)(There is a long story behind it as well that I hope to share some time later). Between all of this, there was a time period of about one and a half when I was completely free and since it was almost a year that I was from programming, the programming enthusiast inside me was desperate to start coding again. It was during this time period that I got to know about "Python". I got "attracted" towards it and started to learn it. Since I already had a good knowledge of C and Java, Python seemed to be a piece of cake and within just one month I got proficient in it. Knowing about my  passion for programming, my parents gifted me a really nice laptop. Now to have some practice of my newly learned language and to have a view of the open source world I started to contribute to Mozilla(GSOC was still not in the picture). While contributing to Mozilla I got to learn about a plethora of new things like Linux, version control, unit testing etc. It was really a nice experience. The people there were really helpful.


About five months of hard work, by the end of December I was now very much comfortable with the terminology and the modus-operandi of the open source world. Earlier, I was having plan to apply for GSOC in my second year of engineering. But being confident enough about my skills I decided to apply for it in my first year. I thought that if I get selected then it will be a big achievement and a dream come true earlier than expected and even if I don't get selected I will be having the "necessary experience" so that I can crack it next year and it really turned out to be a really good decision.
That's it for now. I will be adding more posts sooner so stay connected for more. I hope that it wasn't boring.

Thanks,
Harshit Bansal.