My First GNU Mailman Patch

It has been more than 10 months since I have written a blog post. A lot has happened since then. I have 5 incomplete blog drafts, completed my undergrad, joined a startup as the software engineer, enrolled myself for “Basic Mountaineering Course” at HMI Darjeeling, attended PyCon India 2016, met many awesome people there, met awesome people of DgpLUG and many more exciting things.

Among all these important events of my life, another equally important thing happened. I got my first patch to GNU Mailman accepted. 

I am an open source and Python enthusiast. During my college days, I have attended many open source meetups and events. During one such event, I made my first open source contribution to Mozilla Gecko JS rendering engine. Though it was a very small change of just 3-4 lines but it gave me a taste of what open source is. I wanted to contribute to open source project but due to many factors, I was not able to get a start.

How and why GNU Mailman?

Since my college days, I have heard a lot about GNU Mailman from friends in my college, open source blog posts etc. I also heard that GNU Mailman has an awesome software architecture, it’s powered by Python, used by thousands of organizations & open source project and is maintained by some of the smartest people.

All these things and my hunger to learn more motivated me to start contributing to GNU Mailman. On Aug 18, 2016, 5:38pm I opened a Gitlab account, forked and cloned the Mailman repo and started navigating the Mailman source code.

At first, I felt overwhelmed(and sometimes lost). I started reading the Mailman docs and contribution guide. A good thing about Mailman architecture is that it uses Zope Interfaces. Zope interfaces are awesome and it can help new contributors like me to get a start. It gives a high-level view of what all objects are used in the codebase and how they are linked to each other. I started reading the docstring of interfaces code base and it helped me to get a good start then I started looking for some bugs to fix. On 12th September I opened my first merge request MR1 on the same day opened another merge request MR2 and a 3rd request MR3 on 25thSeptember. While my first 2 MR’s are still under review and probably would need lots of improvements before getting merged, today my third MR got accepted to be merged to Mailman core :).

I am very happy and I have learned many things during this short period. Looking forward to doing lots of contributions to MM and open source.

12 Most Influential Books Every Software Engineer Needs to Read

The Curious Programmer

This is a question that I get a lot, especially from co-workers or friends that are just beginning their journey as a software craftsman.

What book should I read to become a better developer? Do I need to read books?

I think it’s a great question, and it is one that I asked many of my mentors as I was becoming a software engineer. The problem was that many people suggested different books on different topics. All the books they suggested were great in their own right, but no one was able to give me a list that would be the ESSENTIAL books, the MUST READS, that any engineer with hopes of being great should most certainly read.

Well, I’ve learned a lot from my mentors and realized that I still had a lot to learn with the many different books that were suggested to me. I decided to develop a routine…

View original post 2,144 more words

Setup Mongo Replica Set

For a project, I am trying to setup Mongo and Elasticsearch. So, both I need to create mongo replica set. Basically, we actually don’t need to do much with mongo replica set. We only need replica set so that replication log of mongo are created and then mongo-connector uses this log to update elastic search with almost the real-time data.

How to setup replication set on MongoDB?

Continue reading “Setup Mongo Replica Set”

Dump, Compress and Upload

This post is about this random thing that I am doing for the second time and I realized that I have to again search on Google about it because I forgot a few things. I am documenting the process to mongodump the database->compress the file->upload to dropbox from a remote server(when you are completely dependent on a terminal and can’t use a dropbox UI).

Continue reading “Dump, Compress and Upload”

Debugging in Python

Python debugger pdb…

Python Conquers The Universe

As a programmer, one of the first things that you need for serious program development is a debugger.

Python has a debugger, which is available as a module called pdb (for “Python DeBugger”, naturally!). Unfortunately, most discussions of pdb are not very useful to a Python newbie — most are very terse and simply rehash the description of pdb in the Python library reference manual. The discussion that I have found most accessible is in the first four pages of Chapter 27 of the Python 2.1 Bible.

So here is my own personal gentle introduction to using pdb. It assumes that you are not using any IDE — that you’re coding Python with a text editor and running your Python programs from the command line.

Some Other Debugger Resources

  • For information on the IDLE interactive debugger, see the IDLE documentation
  • For information on the Wing IDE debugger, see…

View original post 2,053 more words

Python’s super() considered super!

Deep Thoughts by Raymond Hettinger

If you aren’t wowed by Python’s super() builtin, chances are you don’t really know what it is capable of doing or how to use it effectively.

Much has been written about super() and much of that writing has been a failure. This article seeks to improve on the situation by:

  • providing practical use cases
  • giving a clear mental model of how it works
  • showing the tradecraft for getting it to work every time
  • concrete advice for building classes that use super()
  • favoring real examples over abstract ABCD diamond diagrams.

The examples for this post are available in both Python 2 syntax and Python 3 syntax.

Using Python 3 syntax, let’s start with a basic use case, a subclass for extending a method from one of the builtin classes:

class LoggingDict(dict):
    def __setitem__(self, key, value):'Setting %r to %r' % (key, value))
        super().__setitem__(key, value)

This class has all the…

View original post 1,794 more words

Android App Reviews Dataset and Crawler

I lot has happened since the last time I published my blog and this one. I started working at This is my second internship and I am really enjoying working at frankly. There I built a real-time log response time visualization web app within 1 week of joining. I used Pygal for plotting the graphs and flask for serving the graph. I recommend do pygal, do check it out. It uses SVG+XML and generates a very beautiful graphs.

Continue reading “Android App Reviews Dataset and Crawler”