Planet dgplug

July 21, 2017

Jaysinh Shukla

PyDelhi Conf 2017: A beautiful conference happened in New Delhi, India

PyDelhi Conf 2017


PyDelhi conf 2017 was a two-day conference which featured workshops, dev sprints, both full-length and lightning talks. There were workshop sessions without any extra charges. Delhiites should not miss the chance to attend this conference in future. I conducted a workshop titled “Tango with Django” helping beginners to understand the Django web framework.

Detailed Review

About the PyDelhi community

PyDelhi Community

PyDelhi conf 2017 volunteers

The PyDelhi community was known as NCR Python Users Group before few years. This community is performing a role of an umbrella organization for other FLOSS communities across New Delhi, India. They are actively arranging monthly meetups on interesting topics. Last PyCon India which is a national level conference of Python programming language was impressively organized by this community. This year too they took the responsibility of managing it. I am very thankful to this community for their immense contribution to this society. If you are around New Delhi, India then you should not miss the chance to attend their meetups. This community has great people who are always happy to mentor.

PyDelhi conf 2017

Conference T-shirt

Conference T-shirt

PyDelhi conf is a regional level conference of Python programming language organized by PyDelhi community. It is their second year organizing this conference. Last year it was located at JNU University. This year it happened at IIM, Lucknow campus based in Noida, New Delhi, India. I enjoyed various talks which I will mention later here, a workshops section because I was conducting one and some panel discussions because people involved were having a good level of experience. 80% of the time slot was divided equally between 30 minutes talk and 2-hour workshop section. 10% were given to panel discussions and 10% was reserved for lightning talks. The dev sprints were happening in parallel with the conference. The early slot was given to workshops for both the days. One large conference hall was located on a 2nd floor of the building and two halls at the ground floor. Food and beverages were served on the base floor.

Panel discussion

Panel Discussion


Registration desk


Tea break

Keynote speakers

Mr. Richardo Rocha

  • Mr. Ricardo Rocha: Mr. Rocha is a software engineer at CERN. I got some time to talk with him post-conference. We discussed his responsibilities at CERN. I was impressed when he explained how he is managing infrastructure with his team. On inquiring opportunities available at CERN he mentioned that the organization is always looking for the talented developers. New grads can keep an eye on various Summer Internship Programs which are very similar to Google Summer of Code program.

Mr. Chris Stucchio

  • Mr. Chris Stucchio: Mr. Stucchio is director of Data Science at Wingify/ VWO. I found him physically fit compared to other software developers (mostly of India). I didn’t get much time to have a word with him.

Interesting Talks

Because I took the wrong metro train, I was late for the inaugural ceremony. I also missed a keynote given by Mr. Rocha. Below talks were impressively presented at the conference.

I love discussing with people rather than sit in on sessions. With that ace-reason, I always lose some important talks presented at the conference. I do not forget to watch them once they are publicly available. This year I missed following talks.

Volunteer Party

I got a warm invitation by the organizers to join the volunteer party, but I was little tensed about my session happening on the next day. So, I decided to go home and improve the slides. I heard from friends that the party was awesome!

My workshop session

Tango with Django

Me conducting workshop

I conducted a workshop on Django web framework. “Tango with Django” was chosen as a title with a thought of attracting beginners. I believe this title is already a name of famous book solving the same purpose.

Dev sprints

Dev sprints

Me hacking at dev sprints section

The dev sprints were happening parallel with the conference. Mr. Pillai was representing Junction. I decided to test few issues of CPython but didn’t do much. There were a bunch of people hacking but didn’t find anything interesting. The quality of chairs was so an impressive that I have decided to buy the same for my home office.

Why attend this conference?

  • Free Workshops: The conference has great slot of talks and workshops. Workshops are being conducted by field experts without expecting any other fees. This can be one of the great advantages you leverage from this conference.

  • Student discounts: If you are a student then you will receive a discount on the conference ticket.

  • Beginner friendly platform: If you are novice speaker than you will get mentorship from this community. You can conduct a session for beginners.

  • Networking: You will find senior employees of tech giants, owner of innovative start-ups and professors from well-known universities participating in this conference. It can be a good opportunity for you to network with them.

What was missing?

  • Lecture hall arrangement: It was difficult to frequently travel to the second floor and come back to the ground floor. I found most people were spending their time on the ground floor rather than attending talks going on upstairs.

  • No corporate stalls: Despite having corporate sponsors like Microsoft I didn’t find any stall of any company.

  • The venue for dev sprints: The rooms were designed for teleconference containing circularly arranged wooden tables. This was not creating a collaborative environment. Involved projects were not frequently promoted during the conference.

Thank you PyDelhi community!

I would like to thank all the known, unknown volunteers who performed their best in arranging this conference. I am encouraging PyDelhi community for keep organizing such an affable conference.

Proofreaders: Mr. Daniel Foerster, Mr. Dhavan Vaidya, Mr. Sayan Chowdhury, Mr. Trent Buck

by Jaysinh Shukla at July 21, 2017 12:44 PM

Mario Jason Braganza

On Margin

This post is for my younger colleagues on the student planet.
Yes kids, this is a long post. Suck it up and read it over the weekend.
This is important stuff.
And please go, read this on the blog.


In The Intelligent Investor, published in 1949, Benjamin Graham1 wrote:

In the old legend the wise men finally boiled down the history of mortal affairs into the single phrase, “This too will pass.”

Confronted with a like challenge to distill the secret of sound investment into three words, we venture the motto;


… the function of the margin of safety is, in essence, that of rendering unnecessary an accurate estimate of the future.

(emphasis mine)

What does that mean to me?

That in order to do anything with my life, in any area, I should have enough to face the worst that I think, could happen to me.

I’ll simplify it further.

Margin is having enough room to breathe;
and knowing what “enough” means in every sphere of life.

It has implications throughout life and across various societal disciplines even.
Ben Graham’s quote above comes from the field of finance.
What about engineering?

Consider a highly-engineered jet engine part. If the part were to fail, the engine would also fail, perhaps at the worst possible moment—while in flight with passengers on board … We’ve designed the part for 10,000 hours of average flying time. That brings us to a central question: After how many hours of service do we replace this critical part? 9,999 hours? Why replace it any sooner than we have to? Why waste money?

The first problem is, we know nothing of the composition of the 10,000 hours any individual part has gone through. Were they 10,000 particularly tough hours, filled with turbulent skies? Was it all relatively smooth sailing?
And, how confident are we, that the part will really last the full 10,000 hours? What if it had a slight flaw during manufacturing? What if we made an assumption about its reliability that was not conservative enough? What if the material degraded in bad weather to a degree we didn’t foresee?

The challenge is clear, and the implication obvious: we do not wait until the part has been in service for 9,999 hours. Perhaps at 7,000 hours, we seriously consider replacing the part, and we put a hard stop at 7,500 hours.

The difference between waiting until the last minute and replacing it comfortably early gives us a margin of safety. We leave ourselves a cushion. (Ever notice how your gas tank indicator goes on long before you’re really on empty? It’s the same idea.)

Go read the whole post. It’s awesome.

So, Why Do We Need Margin?

To paraphrase Dr. Richard Swenson, who’s literally written the book on Margin (the book has a moral, Christian bent. Don’t let that bother you);

  • Progress gives us more and more, which leads to
  • stress, change, complexity, speed, intensity, and overload.
  • which is bad, because all humans have physical, mental, emotional, and financial limits that are relatively fixed
  • Thus progress is on a collision course with human limits and once we can’t take progress any more, we flame and burn out. On the unsaturated side of our limits, humans can be open and expansive. Cross them however, and the rules of life totally change.

What would you think if this page had no margins?
What would you think of me if I crammed the print top to bottom and side to side so that every blank space was filled up?
The result would be aesthetically displeasing and chaotic.

Like some of our lives!

Marginless, according to Swenson, is being thirty minutes late to the doctors office because you were twenty minutes late getting out of the bank because you were ten minutes late dropping the kids off at school because the car ran out of fuel two klicks from the petrol pump and you forgot your wallet.
Margin, on the other hand, is having breath left at the top of the staircase, money left at the end of the month, and sanity left at the end of adolescence.

No Margin, causes hyperstress and overload. (terms that to folks like us, need no definition)

Here’s Dr. Swenson again,

To be healthy, we require margin in at least four areas:
- emotional energy,
- physical energy,
- time,
- and finances.

Yet, right now for the most part we are emotional wrecks, stressed, alone, and so exhausted in spirit.
Physically, we are overfed, underactive, and sleep-deprived.
We have no time, at all.
And when it comes to finances, our bank balances look as barren as the surface of Mars.

What Can We Do about It?

Thank Pareto, grab the low hanging fruit and do the twenty percent of the work that’ll yield the most margin in your life.

Remember, we live lives, full of intention now :)

Let’s intentionally tackle each domain and see what we can do.


  • Bond with your family
  • Make time for friends
  • Switch off the TV! … and your other screens
  • Get a pet or go play with doggies in the park
  • Pray, meditate.


  • Eat less, move more
  • Walk, Run!
  • Cut out sugar
  • Drink water.
  • Have the discipline (or build it up) to keep at it.
    (I didn’t have any and I’m paying the price!)
  • Most importantly, get enough sleep.


  • You’ll never “find time”. Be intentional. Make time!
  • Learn to plan your day and your week.
  • Plan your day with plenty of spaces in the middle
  • Did you cut out FB? Twitter? TV? :P
  • Learn to say No. No is a complete sentence.


  • Stop eating out! Learn to make do.
  • The only debt you have should be your home. (and no more than 40% of income at that)
  • Have 6 months living expenses in the bank.
  • Spend way less than you make. (The bigger the buffer, the more chaos you can handle.)
  • Be comfortable with charity and giving now, when it’s hard to do. Like Dave Ramsey says, “If you will live like no one else, later you can live and give like no one else.”

And finally here’s James Clear, echoing Taleb
Leave Room for the Unexpected!

If your life is designed only to handle the expected challenges, then it will fall apart as soon as something unexpected happens to you.
Always be stronger than you need to be.
Always leave room for the unexpected.

Thank you for reading. Here’s a puppy.

This is the bonus section

Want to hear from an actual practitioner?

So what is the lesson?
Save your current income, even as you build complementary skills like frugality, adaptability, and the ability to earn money in more than one way.
Then you’ll be ready to retire much earlier, because the sum of your safety margins will be enough to make you feel comfortable taking the leap.
And most importantly, stop worrying!

That’s Mr. Money Mustache (real name, Pete Adeney), software developer who retired at age 30! (watch the video)

(in the grand tradition of @mbuf feeding us well with knowledge)

P.S. This post is part of the Life Outside Code series.

by Mario Jason Braganza at July 21, 2017 12:07 PM

July 18, 2017

Anwesha Das

My Free Software journey, from today to yesteryear and back!

My life can be divided into major two parts.
Life before knowing “Libre Office” and after.
No, I won’t go on about how good the software is (which it is; fairly good).

I was fascinated by the name, the meaning.
Libre, means “free, at liberty.”
The name suggested a philosophy, a vision, an idea to me.

Libre != Gratis

Though I was introduced to the Free Software World briefly a while back at, 2012, a conference that altered the way I look at my soul-mate forever.

But the concept of open source, free software, the industry did not quite settle in clearly, in my mind. The past leads us to the present. So I became more interested in its history. The history of the movement of liberating cyber space. I asked Kushal, who happens to be a free software advocate, and a devout follower to tell me the story, and guide me through the path.

We embarked on a wonderfully meandering journey where I was visiting older, simpler times and Kushal was revisiting the movement with me. The era of sharing, the beginning of the complexities and the fight against it.

Our primary source of knowledge was the book, Hackers: Heroes of the Computer Revolution, apart from several old articles, newsletters etc.

I was astonished to know that there exists software that respects freedom; the freedom of end users.
There exists software that believes in cooperation and collective building.
By strict definition, the first one is known as free software and the second one is open source software.
To my utmost surprise there are people sacrificing their material wants, over the peace of mind, and easy fame to help others. To preach freedom and openness.

How did it help me?

It made me understand the present state of the world, a lot better.
I now see the words community, & collaboration in a different light altogether.
I now understand why people are so passionate about words, phrases or things.
Why these terms make all the difference.

Most importantly it gave me a refuge. I may not be someone with a coding background, but I can still very much be a part of this community. Coding may be a big part of the technical community but it’s not the only part. It gave me the power to ignore the cold shoulder and the occasional jibe (and laugh at their incomprehension about history), whenever someone treated me like an outsider. It gave myself the justification, and confidence to take the decision of quitting a fairly established career as mortgage attorney and start afresh at 30.

Community, collaboration, and freedom are the some my most used words (apart from “No Py”!) in a day since then.

And now I know why.
And it’s time for me to spread the word.

Coming to the present

July 2017, a tweet and its reply made us relive that journey. It was the discussion of the recent travel ban. A tweet came from @gnome about this. Totally appropriate given the primary idea of gnome. But many could not figure out why such statements are coming from @gnome.
I was taken aback. We were sad, surprised and somewhat angry. People were enjoying the fruits of so many people’s hard work and effort and were yet ignorant of the history and the toil behind it all.
Among many other replies, there was a reply from Miguel de Icaza that seemed to echo our (Kushal’s and mine) thoughts.

We understand why he said that. We thought it’s time for us too, to do our bit, to spread the word.
And so, we decided to do two things -

Firstly, to tell newer, younger lot about it.
For which Kushal & I have taken classes on
- the history of hacker ethics - licensing and how the choices we make affect us, the society, and the world at large, at DGPLUG Summer training session.
A similar session will follow in PyLadies Pune August meetup.

Secondly, to write an article on the Hacker Ethic and the Free Software movement, together.
We have published this on 12th July, 2017. Here is the link
. Please read it (though it is a bit lengthy) and be a part of our journey.

by Anwesha Das at July 18, 2017 05:41 PM

July 17, 2017

Kushal Das

Encrypting drives with LUKS

Encrypting hard drives should be a common step in our regular computer usage. If nothing else, this will help you sleep well, in case you lose your computer (theft) or that small USB disk you were carrying in your pocket. In this guide, I’ll explain how to encrypt your USB disks so that you have peace of mind, in case you lose them.

But, before we dig into the technical details, always remember the following from XKCD.

What is LUKS?

LUKS or Linux Unified Key Setup is a disk encryption specification, first introduced in 2004 by Clemens Fruhwirth. Notice the word specification; instead of trying to implement something of its own, LUKS is a standard way of doing drive encryption across tools and distributions. You can even use drives from Windows using the LibreCrypt application.

For the following example, I am going to use a standard 16 GB USB stick as my external drive.

Formatting the drive

Note: check the drive name/path twice before you press enter for any of the commands below. A mistake, might destroy your primary drive, and there is no way to recover the data. So, execute with caution.

In my case, the drive is detected as /dev/sdb. It is always a good idea to format the drive before you start using it. You can use wipefs tool to clean any signature from the device,

$ sudo wipefs -a /dev/sdb1

Then you can use fdisk tool to delete the old partitions , and create a new primary partition.

Next step is to create the LUKS partition.

$ sudo cryptsetup luksFormat /dev/sdb1

This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase:

Opening up the encrypted drive and creating a filesystem

Next, we will open up the drive using the passphrase we just gave, and create a filesystem on the device.

$ sudo cryptsetup luksOpen /dev/sdb1 reddrive
Enter passphrase for /dev/sdb1
$ ls -l /dev/mapper/reddrive
lrwxrwxrwx. 1 root root 7 Jul 17 10:18 /dev/mapper/reddrive -> ../dm-5

I am going to create an EXT4 filesystem on here.
Feel free to create which ever filesystem you want.

$ sudo mkfs.ext4 /dev/mapper/reddrive -L reddrive
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 3815424 4k blocks and 954720 inodes
Filesystem UUID: b00be39d-4656-4022-92ea-6a518b08f1e1
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done   

Mounting, using, and unmounting the drive

The device is now ready to use. You can manually mount it with the mount command. Any of the modern desktops will ask you to unlock using the passphrase if you connect the device (or try to double click on the file browser).

I will show the command line option. I will create a file hello.txt as an example.

$ sudo mount /dev/mapper/reddrive /mnt/red
$ su -c "echo hello > /mnt/red/hello.txt"
$ ls -l /mnt/red
total 20
-rw-rw-r--. 1 root root     6 Jul 17 10:26 hello.txt
drwx------. 2 root root 16384 Jul 17 10:21 lost+found
$ sudo umount /mnt/red
$ sudo cryptsetup luksClose reddrive

When I attach the drive to my system, the file browser asks me to unlock it using the following dialog. Remember to choose forget immediately so that the file browser forgets the password.

On passphrases

The FAQ entry on cryptsetup page, give us hints and suggestions about passphrase creation.

If paranoid, add at least 20 bit. That is roughly four additional characters for random passphrases and roughly 32 characters for a random English sentence.

Key slots aka different passphrases

In LUKS, we get 8 different key slots (for passphrases) for each device(partition). You can see them using luksDump sub-command.

$ sudo cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Adding a new key

The following command adds a new key to the drive.

$ sudo cryptsetup luksAddKey /dev/sdb1 -S 5
Enter any existing passphrase: 
Enter new passphrase for key slot: 
Verify passphrase:

You will have to use any of the existing passphrases to add a new key.

$  sudo cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: ENABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Removing a passphrase

Remember that removing a passphrase is based on the passphrase itself, not by the key slot number.

$ sudo cryptsetup luksRemoveKey /dev/sdb1
Enter passphrase to be deleted: 
$ sudo cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Now in case you don’t know the passphrase, then you can use luksKillSlot.

$ sudo cryptsetup luksKillSlot /dev/sdb1 3
Enter any remaining passphrase:

Overview of the disk layout

The disk layout looks like the following. The header or phdr contains various details like magic value, version, cipher name, following the 8 keyblocks (marked as kb1, kb2.. in the drawing), and then the encrypted bulk data block. We can see all of those details in the C structure.

struct luks_phdr {
        char            magic[LUKS_MAGIC_L];
        uint16_t        version;
        char            cipherName[LUKS_CIPHERNAME_L];
        char            cipherMode[LUKS_CIPHERMODE_L];
        char            hashSpec[LUKS_HASHSPEC_L];
        uint32_t        payloadOffset;
        uint32_t        keyBytes;
        char            mkDigest[LUKS_DIGESTSIZE];
        char            mkDigestSalt[LUKS_SALTSIZE];
        uint32_t        mkDigestIterations;
        char            uuid[UUID_STRING_L];

        struct {
                uint32_t active;

                /* parameters used for password processing */
                uint32_t passwordIterations;
                char     passwordSalt[LUKS_SALTSIZE];

                /* parameters used for AF store/load */
                uint32_t keyMaterialOffset;
                uint32_t stripes;
        } keyblock[LUKS_NUMKEYS];

        /* Align it to 512 sector size */
        char                _padding[432];

Each (active) keyblock contains an encrypted copy of the master key. When we enter the passphrase, it unlocks the master key, that in turn unlocks the encrypted data.

But, remember, all of this is of no use if you have a very simple passphrase. We have another XKCD to explain this.

I hope this post encourages you to use encrypted drives more. All of my computers have their drives encrypted; (I do that while installing the Operating System.) This means, without decrypting the drive you can not boot the system properly. On a related note, remember to turn off your computer completely, (not hibernation or suspend mode) when you’re traveling.

by Kushal Das at July 17, 2017 09:10 AM

July 12, 2017

Kushal Das

Article on Hacker Ethic and Free Software movement

As I have mentioned in the dgplug summer training page, focusing on the Free Software movement is a big part of this year’s training program. A few weeks back there was a tweet from @gnome about travel ban, and many could not figure out why Gnome was writing about this topic. Amongst the many proper replies, Miguel de Icaza’s reply was to the point. This incident made Anwesha and me stop and think; and then made us rethink, about how we wanted to conduct the sessions on the Free Software movement and Software Licensing.

I was born in the beginning of the 80s and Anwesha even later. Our introduction to the movement was from the stories we heard (from many people); from Levy’s famous book, Hackers: Heroes of the Computer Revolution and the seminal Free as in Freedom.

My introduction to the FSF came through ilug-calcutta, and from Sayamindu. Later, at 2005, I made another friend (for life), Praveen A (he is from the same batch). And even later through out various conferences, I was introduced to other members of FSF India. In 2007, I was part of the 4th GPLv3 meet organizing team in Bangalore. That was my introduction to RMS, and his personality (I will write a blog post later about various incidents from that conference). That had a big impact on me.

Coming back to the story of the tweet, we also saw similar ignorance from newcomers, as they never got a chance to learn about the past, nor did get to meet the various people involved (distance and time). So, Anwesha and I, tried to write a brief history, including the hacker ethic, and beginning of the Free Software movement. A lot of stories mentioned in the article are from the books mentioned above. At the very end, I have written about how the different software we use everyday came about initially. I took the help of various FSF bulletins for the same.

This Monday I took a session on the same topic in the #dgplug IRC channel. When I made mention of the GNU C Library and the time Ronald McGrath started it, Siddhesh called attention to an announcement he (Ronald) made a few days ago (about stepping down from maintainership of that same GNU Library). I also pointed that Siddhesh is now one of the maintainer of Glibc. That gave the students a sense of impact and immediacy; a feeling of involvement and ownership.

Today evening from 13:30 UTC, Anwesha took a session on Software Licenses 101 in the #dgplug channel on Freenode. There will be more follow up sessions in the coming days.

Link to the article once again

by Kushal Das at July 12, 2017 04:28 PM

July 11, 2017

Anwesha Das

How to upload a package in PyPI using twine ?

While I was working on my project on software licensing, I noticed that there are several packages in PyPI which do not have a requirements.txt file (the file mentioning the dependencies). License files, though not a rare species but surely an endangered one in the Python World. These made my life so difficult you lazy programmers, grrr).

“One has to solve her problem.” So whenever I used to meet any developer I used to tell them the best practices for developers. Some of them used to give me not always a good vibe. (oh you irritating lady :(). Most of them were saddened by the long list of best practices. (me (grrr, grrr, grr))

I wanted to upload my new project, gitcen in PyPI. I shared my this thought with my eternal rival. He gave me quite smile.
He thinking : "Lady now you will understand". I smiled back.
Me thinking : "ohh man I hate you".

The code was all set and working

I used both PyCharm and jupyter notebook to write code.

The main job is done, now I will only have to upload my project at PyPI, the Pyhton Package Index.


I created a requirements.txt file. One has to add the external dependencies. It helps to create the the similar development environment. Instead of manually typing the dependencies one can use pip freeze which will show the all modules installed in that particular virtual environment.

$ pip freeze
$ pip freeze > requirements.txt

This is easy, (Lazy coders).

Now is the time for It is a Python file which helps us to get the package. In the file, we call the setup function. The parameter inside the function are the different metadata of the project. The file of gitcen looks like this:

from setuptools import setup

    description="A project to find git information.",
    long_description="A project to find git information about authors' commits,most active days and time.",
    author="Anwesha Das.",
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
        'Programming Language :: Python :: 3.6'

A little bite of history, previously there was package a named distutils which provided the setup function. But now we use the package setuptools.

It includes different information such as name, license, entry point etc. There is a parameter classifiers . Read more about it here.

This was lenghty but ok. May these coders are not that lazy (while coding, otherwise is. As per my experience with my man goes.)

Creating Source Distribution

The next was to create a compressed tarball for source distribution.

$python3 sdist

Output of the command is a tar.gz file.

Creating PyPI account

PyPI, the Python Package Index, the third party official software repository for Python ecosystem. One has to create an account in it.

If one wants to test the upload, is the address to go to. Know more about the steps here.

When will this thing end?

Use twine

twine helps to upload packages in PyPI. It assembles the utilities to interact with PyPI. The first step was to install twine. I installed it from dnf package manager.

$ sudo dnf install python3-twine

I had to register my project. Using the following command

$ twine register dist/gitcen-0.1.0.tar.gz

Finally the moment had come! I uploaded gitcen in PyPI with the following command

 $ twine upload dist/gitcen-0.1.0.tar.gz

I had already put my authentication information in the ~/.pypirc

Now anyone can install gitcen from PyPI

$ pip install gitcen

Therefore going through this now I understand that it is very frustrating. You have a working code and you are not been able to share this with the community (easily, fast). If we give it a thought then we can realize that these are steps one has to memorize. As I was a first timer there were many new things to which I came across, so it made my life difficult. And yes,

Sorry coders, for not understanding your pain!

by Anwesha Das at July 11, 2017 05:53 PM

Mario Jason Braganza

On Free & Open Culture; Some Resources

Note: This is for the Student Planet.
Please read this on the blog.

At the dawn of computing …

Last night, over at DGPLUG, Kushal gave quite a heart rousing talk on the history of Free Software, covering quite a bit about Richard Stallman and the events leading up to him (RMS, not Kushal) launching GNU & the FSF.

If you’re interested in reading more about that sort of thing, here’s a few more books & resources.

Free as in Freedom

The seminal book is of course, Free as in Freedom, on RMS’ life and the massive base he built, upon which we all stand today.
Reading this made me realise what a debt we owe to him.
So the next time we hear about how old & weird Stallman is, maybe we could cut him some slack.

The Groklaw Archives

Did you know, that the SCO Group once brought a case against IBM, suing them for using Linux?
It was a large, long drawn out affair, 1 drawing old heavyweights such as Novell and new upcoming ones like Red Hat, into the fray.
If SCO had won, it would have been the end, of the just barely decade old Linux and our landscape would not have been as rich as it is today.

We know all this, because of the daring and intrepid, Pamela (PJ) Jones, who started up one of the earliest blogs on the internet.
It was called Groklaw, and it was …

a place where lawyers and geeks could explain things to each other and work together, so they'd understand each other's work better2

It brought awareness of the case to a wide swathe of people and Linux into the mainstream.
The bar on the left of the site, gives you access to a whole lot of cases threatening Linux, and the news and views of the people in the know

A Quarter Century of Unix

A short, really influential book on Unix History by Peter Salus.
I don’t quite know how you can lay hands on a copy, but if you do, it’s fascinating.
Nearly every article, every blog post, every book that needs something on the history of Unix, pulls a quote from this one.

The Daemon, the GNU & the Penguin

Salus’ follow up book, following Unix History on to Linux, is available to read on the Groklaw website.
You can think of it as an expanded version of Kushal’s talk last night.

Open Sources

Want to hear from the people involved in the free software movement?
From the horse’s mouths themselves?
Open Sources is a collection of essays from the folks who were there.
Marshall McKusick, author of the BSD filesystem narrates how BSD went on to be free from AT&T ownership and Free as in Freedom.
RMS tells us about GNU himself.
Bob Young, founder of Red Hat, expounds on how the company set itself on the path to becoming a business on the back of free software.
Linus, tells us of the edge, Linux had, to become successful.

Producing OSS

Karl Fogel’s book, on why we write free / open source software and how to pitch it in your organisation

This is all that comes to mind, right now.
If you know more, let me know or write about and I’ll update the page or link to yours.


In the Beginning was the Command Line

Neal Stephenson’s essay on why Free Software would eventually win. (chock-full of history and analogy)
It’s dated and hasn’t quite panned out as he wished, but is still a fun read!

  1. Even though SCO is dead, the case is still ongoing.

  2. from the FSF article at

by Mario Jason Braganza at July 11, 2017 12:20 AM

July 05, 2017

Shakthi Kannan

"i want 2 do project. tell me wat 2 do" workshop, reserved-bit, Pune

I had organized a one-day workshop based on my book i want 2 do project. tell me wat 2 do at reserved-bit, Pune on Saturday, June 3, 2017. Thanks to Nisha Poyarekar and Siddhesh Poyarekar for providing their makerspace as venue for the workshop.

Workshop in progress

The objective of the workshop is to share the methodology and best practices on working with Free and Open Source Software projects, and also to guide the participants on career options. Although there is plenty of free documentation (including my own) available on the subject, some people prefer a formal, systematic approach to learning in a private coaching environment. Hence, this workshop is tailored for the same and is made a paid workshop, similar to personal tutoring.

The book has been in circulation for many years. So, I had to give two options - pay only for the workshop, or pay for both the workshop and the book (if they have not already bought the book). I have also kept additional copies of my book at the reserved-bit makerspace if people are interested. I had covered the following topics:

  1. Careers with F/OSS
  2. “i want 2 do project. tell me wat 2 do” best practices
  3. Introduction to Git
  4. Hands-on problem solving exercises
  5. Real-world project example
  6. Goal-driven development

The feedback has been positive and I am sharing the same below:

Feedback 1
Feedback 2
Feedback 3
Feedback 4
Feedback 5

If you are interested in attending such a workshop, do write to me: author at shakthimaan dot com.

July 05, 2017 01:45 PM

June 26, 2017

Sanyam Khurana

Why you should contribute to Open Source

My first step with FOSS was during the summer of 2014, where I got introduced to DGPLUG (Durgapur Linux Users Group). Every year, they conduct a training over IRC covering a wide range of topics. Since then, I've been contributing to different projects, primarily to Mozilla's Gecko Engine. Recently I also started contributing to CPython.

Over this journey as CuriousLearner over the past few years, I've been fortunate enough to collaborate with some of the best engineers, learnt a lot of skills & gained some nice perspective on different technologies by just contributing to Open Source. I owe my learning to them.

I've been always asked this question by my friends, colleagues, and strangers whom I often run into in local meet-ups and conferences.

  • Why should I contribute to Open Source
  • What's in it for me

So, I thought I would cover this topic from the perspective of a student as well as the perspective of a working professional.

Learn new skills

When I say skills, I'm not referring to just coding skills or learning yet another framework. There are tons of skills to be learnt. These include coding, debugging, testing, writing docs, collaboration, participating in meetings etc. In FOSS, you won't just learn technical skills, but soft skills as well. That means you'll learn how to communicate effectively over different mediums and making sense to other people who might be from different backgrounds.

I've seen many engineers are hesitant when it comes to communication. They can think and write really nice code, but when it comes to explaining themselves, they lack the communication skills, which is vital to be a better professional.

Improve existing skills

It's not always about learning a new tech that you heard about. It's important to improve on things you think you might already know. Contributing to a FOSS project would make you learn intricate details that your mentors have gained working as a software craftsmen for several years.

Meet like-minded people

Many organizations do stand-up / all-hands meetings where everyone comes together and explains what are they're working on, what they plan to do next and if they face any blocker. So, students, there is a high possibility that when you graduate, you'll do this in your organization :) You'll meet a lot of people having similar interests and you'll learn a lot of things just by hanging out with them (most of the time on IRC).

Learn people skills

Learn team management, resolving internal conflicts, brainstorming on a new feature, public-speaking, time-management, conducting meet-ups & learn to prioritize your work. You will just expand your horizons.

Learn to READ

One of the best things I've been ever taught is to "READ". (And those who've met me personally knows how many times I've been repeating this thing :)).

When I say read, I mean you'll read the documentation, development guide and most importantly the source code.

Always remember that code is meant to be read more times than it is written. When you contribute to any FOSS project, one of the important skill you add to your skill-set is to make your brain make sense out of the code that may look gibberish to many people.

This is a very important skill. Once you're in a company, you'll be given the responsibility of maintaining huge code base and constantly adding features to it. There won't be someone who would spoon-feed you by explaining what every line of code means.

I've seen many people struggling hard in their jobs to figure out what a particular piece of code does. But if you've already worked with humongous code bases, this shall be a cake-walk for you. You would already know how to scrutinize bugs, debug errors and most importantly, would have already taught your brain to think and READ.

Find mentors

FOSS is all about mentors & mentees. There are people just like me and you who volunteer their time and skill to do good for the community. You'll find a lot of mentors who would be willing to teach you different skills. Remember, that you've got this opportunity to learn from domain experts :)

And no matter what, always respect everyone's time.

Teach others

While it is important to get your code reviewed, it is much more important to review other's code. This would help you in learning different coding style and also about how someone approached a particular problem. This would help in expanding your logical skills & as always you'll be learning a lot yourself along the way with having healthy discussions in code reviews.

It feels great to make (small) changes

You don't necessarily need to work on big features in a project or become a life-long contributor. Contribute to a project that you use on daily basis (like Mozilla Firefox) and I promise you that it would be gratifying when you see the whole world rely on the small code changes you did.

A small change in the documentation means you might save someone countless hours of debugging and scratching their head on how to use a particular piece of code. Always remember, documentation bugs are not something inferior; you'll learn a lot in writing documentation, right from the tools such as Sphinx and rST to expanding your domain knowledge about the project.

Building your reputation (& career) along the way

All the code you'll write in Open Source projects would be public and can be taken as a demonstration of how you write code & what you can do. It depicts how you work with others and most importantly give you an enormous amount of experience in working with people having diversified skill-set.

Once you get acquainted with the code base, you'll be invited to develop stand-alone features and who knows you might get that commit bit turned on when you've developed enough reputation in the community ;)

Apart from all the things mentioned above, I think Mozilla's mission says a lot about why I contribute to FOSS

Doing good is part of our code

Alright, I didn't realize, I'll be able to write this much. Hopefully, this would help & motivate people to get involved in contributing to Open Source. As always, if you have any queries, or want help in contributing to any project, feel free to mail me on Sanyam [at] SanyamKhurana [dot] com.

by Sanyam Khurana at June 26, 2017 11:41 AM

June 22, 2017

Saptak Sengupta

Avoid Race Condition in CSV exports

One of the biggest problems that appear while writing any file in the server side is a race condition. A race condition when two or more users make request to write to the same file in the server side and since neither of the operations are completed, so there is a certain problem in the integrity of the data written and may also cause the operation to be completely blocked. So how to stop this and still maintain that a large number of files or memory is not used? Let’s see.

What is a Race Condition?

A race condition is a situation when two or more processes perform a write operation on the same file at the same time. This causes an undesirable situation since the process should be in a sequential manner. So the situation causes something like a ‘race’ between the two server requests to change or modify the same file. So in such a scenario, there is no guarantee that the data written to the file is correct or will be meaningful at the end. Maximum probability is it won’t be.

Avoiding Race Condition

The general way of avoiding a race condition is adding a file lock. We lock a file while it is being written by some user or process and prevent other users from being able to write to the file. They have to wait for the ongoing writing process to complete to start another write process. But making that might increase the wait time quite considerably for users when we are looking to export CSV data about an event.

So to keep the process fast and use the advantage of distributed system, we write the CSV for different request in different files. We create the filenames by appending a random hexadecimal string to the original filename.

Avoid Wastage of Memory

However as we can understand by the proposed method above, there will be a huge wastage of memory since a large amount of files will be created. So to avoid wastage of memory, we run a cron job. The cron job deletes all the csv files after a certain amount of time. For this, we use apscheduler.

Thus, we avoid the race condition while also maintaining that a lot of memory isn’t wasted.

by SaptakS ( at June 22, 2017 09:45 PM

June 21, 2017

Saptak Sengupta

Ticket Ordering and Positioning (Front-end)

As discussed in my last blog about ticket ordering and positioning, in this blog we are gonna talk about how we implement the front-end part of re-arranging the tickets. We essentially do it using compute and methods of Vue.js. The functionality that is expected in the front-end is, the event organizer should be able to move the tickets Up or Down the order and save that position so that it gets displayed later in that very particular order.
Like I said above we use two main things of Vue.JS for this purpose - Compute and Methods.


We use this to get the sorted list of tickets based on the position key of the tickets and use this sorted list to display the tickets in the event editing wizard. Whenever you change the value of the position for a ticket, it automatically updates the list to sorted list again and hence the order of ticket in the front-end also updates. To add a compute function in Vue.JS, inside the new Vue() object creation, we add an attribute computed and inside that we put all the functions that we are gonna use. So in our case the function is sortedTickets . We make use of the sort function of lodash to sort the tickets array based on it's position attribute.

Now while showing or looping over the tickets, we loop over sortedTickets  rather than the original ticket array.


This method is called when the button is clicked to move it up or down. This makes the calculations to determine the values of the position of the two tickets which are being re-ordered in a single click. To add a method, we do it in a similar way like computed but using methods attribute instead. The methods we have written to move tickets up or down is moveTicket.

It has 3 parameters - ticket, index and direction. So when this function call is emitted, depending on the button, the direction is either "up" or "down" while the other two parameters are the ticket properties of the particular ticket. So in this function we check the direction and accordingly update the value of position for the tickets involved in the arranging. As we update the position here, because of the compute, the UI automatically updates to show the tickets in the new order.
Finally after all arrangement is done, the position is always saved in a hidden input field which is then passed as form data and is saved in the database so that the position value can be used in other pages for showing the ticket in order.

Show Ordered Ticket

In other pages, while showing ordered ticket, we already receive the ticket array in sorted format based on the position key. Hence, we don't need to worry about it in the front-end and it automatically is shown in the sorted order.

by SaptakS ( at June 21, 2017 08:22 AM

June 20, 2017

Sanyam Khurana

Contributing enhancement patch to CPython

I started contributing to CPython this year from PyCon Pune sprints. That was one of the best PyCon I've ever attended. Since then, I've spent some time in going through documentation, core dev-guide and now I'm still reading about internals of the Python programming language.

I recently contributed an enhancement patch to Python 3.7 which might be back-ported to Python 3.6. Let's understand the scenario and the enhancement:

New contributor to Python 3 might use old Python 2 syntax treating print as a statement rather than a function and then see an error like:

>>> print "hello"
  File "<stdin>", line 1
    print "hello"
SyntaxError: Missing parentheses in call to 'print'

The task was to improve the error message based on different kinds of user input. This shall ensure that we don't only show error to the user but also suggest the correct syntax to be used as a hint. So after the patch being applied, the error message shall say this:

>>> print "hello"
  File "<stdin>", line 1
    print "hello"
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("hello")?

Sounds easy? Right? No, we aren't done yet. This was a simple print statement dealing with just a string. Potentially someone can try to print anything. What if someone wants to print a tuple?

>>> print 4,
  File "<stdin>", line 1
    print 4,
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(4, end=" ")?

So, the correct syntax is suggested to the user according to Python3.

Along with this, there are cases when someone adds soft-spaces, or just use excessive whitespace like:

>>> print    "hello"
  File "<stdin>", line 1
    print    "hello"
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("hello")?

This was the first patch where I had to deal with C code. It was more of reading and understanding what the current code does. I had to do a complete re-write of this patch two times in a span of just 1.5 days (Thanks to Nick and Serhiy for the quick reviews).

Here's why:

The first time I wrote the patch, I used raw C APIs, which means I used malloc and free for memory allocation and deallocation for manipulating the string input that was received from the user.

While this might work, but there is already a lot of work done by Python core-devs & they've created an entire C API layer. So, in the first review, I was pointed to use this API layer, so I had to re-write the patch. One of the learning I had is that virtually any API can fail. So, it is necessary to always check the results before using them.

Most of the methods from the C-API layer that were used in this patch were dealing with Unicode objects.

Another important learning was to deallocate the previous memory at each check point (if some of the API call fails and there is no memory allocated on heap then deallocate all the previous allocated memory).

Apart from handling the striping of characters that were input on the shell and detecting the tuple syntax, I also wrote test cases for the new feature. In CPython, most of the test cases are written in Python (except a few). Typically in this use case, we only need to check the functionality of the Python layer, so test cases were written in Python.

Let's see how the added feature does what it is intended to do:

// Static helper for setting legacy print error message
static int
_set_legacy_print_statement_msg(PySyntaxErrorObject *self, Py_ssize_t start)
    PyObject *strip_sep_obj = PyUnicode_FromString(" \t\r\n");
    if (strip_sep_obj == NULL)
        return -1;

    // PRINT_OFFSET is to remove `print ` word from the data.
    const int PRINT_OFFSET = 6;
    Py_ssize_t text_len = PyUnicode_GET_LENGTH(self->text);
    PyObject *data = PyUnicode_Substring(self->text, PRINT_OFFSET, text_len);

    if (data == NULL) {
        return -1;
    PyObject *new_data = _PyUnicode_XStrip(data, 2, strip_sep_obj);

    if (new_data == NULL) {
        return -1;
    // gets the modified text_len after stripping `print `
    text_len = PyUnicode_GET_LENGTH(new_data);
    const char *maybe_end_arg = "";
    if (text_len > 0 && PyUnicode_READ_CHAR(new_data, text_len-1) == ',') {
        maybe_end_arg = " end=\" \"";
    PyObject *error_msg = PyUnicode_FromFormat(
        "Missing parentheses in call to 'print'. Did you mean print(%U%s)?",
        new_data, maybe_end_arg
    if (error_msg == NULL)
        return -1;

    Py_XSETREF(self->msg, error_msg);
    return 1;

This function returns the following:

  • 1 if the error message is successfully set.
  • -1 in case any of the C-API fails.

So, first we use strip_sep_obj to define all the symbols that we need to strip from the input received from the user. Next, when we get the string, it would be of the form print "Hello".

PyObject *strip_sep_obj = PyUnicode_FromString(" \t\r\n");
if (strip_sep_obj == NULL)
    return -1;

// PRINT_OFFSET is to remove `print ` word from the data.
const int PRINT_OFFSET = 6;

What we're interested in is about the text after the print and space. That accounts for the PRINT_OFFSET that is set to constant 6.

Next, _PyUnicode_XStrip uses to strip strip_sep_obj from the data we assigned earlier. The 2 in this function is a constant value that implies stripping the input from both sides of the data.

PyObject *new_data = _PyUnicode_XStrip(data, 2, strip_sep_obj);

Next, we get the length of the text and check if the input meant to print a tuple by checking the last character from the Unicode buffer to be equal to string literal ,.

const char *maybe_end_arg = "";
if (text_len > 0 && PyUnicode_READ_CHAR(new_data, text_len-1) == ',') {
    maybe_end_arg = " end=\" \"";

After setting up the maybe_end_arg we format the new message and use Py_XSETREF to set the new error_msg to the PySyntaxErrorObject instance.

Py_XSETREF(self->msg, error_msg);

Here is the full patch if you want to see. The meaning of each of the methods used can be easily found from the official documentation.

I hope to write about my learning in more detail and also explain about different parts of the programming language in a future post.

by Sanyam Khurana at June 20, 2017 03:04 PM

Shakthi Kannan

Rootconf 2017


I attended Rootconf 2017 on May 11-12, 2017 at MLR Convention Centre, JP Nagar, Bengaluru.


The event had two parallel tracks, the Rootconf track at the main conference hall, and the track sponsored by Red Hat. A number of infrastructure hosting companies had sponsored the event. The selected talks had good diversity with topics ranging from monitoring, databases, networking, security etc.

Day I

The day’s proceedings began with the talk on the “State of open source monitoring landscape” by Bernd Erk. He gave a good overview of the available monitoring tools. He is involved in the Icinga2 project, which is re-written in C++ for performance. It is an alternative for the Nagios tool.

Aditya Patawari then provided an introduction to Kubernetes with a demo, as Spencer Krum could not make it to his talk on the “Anatomy of an alert”. After a short break, I attended “A little bot for big cause” session by Pooja Shah. The talk basically demonstrated how to create a bot by integrating various APIs.

I attended Manan Bharara’s talk on “Monitoring performance critical applications” where he had explained how they had used Clojure for monitoring at Otto in Germany. The presentation was very good, and the Oscillator Clojure code is available. He had provided good illustrations and code snippets in his presentation.

Manan Bharara' oscillator visualization

A number of stalls were available in the hallway, and I spent considerable time talking with the sponsors. At the Red Hat stall, I learnt some of the features and use cases for the Foreman provisioning tool. I was pictured with the Foreman helmet:

Shakthimaan with Foreman helmet

After lunch, I attended “SELinux: A deep dive” by Rejy M Cyriac. He gave an excellent introduction to SELinux, explaining the underlying concepts and rationale for the same. We also did basic hands-on exercises, but, I could not attend the last section as I had to move to the main conference hall for the flash talks. I sang the Nursery Rhymes version for DevOps. The video is available.

We then headed to the Rootconf party sponsored by Go-Jek!

Day II

The second day started with the talk by Kunal Grover on “Failure resilient architecture with microservice dependencies”. He presented the ways by which disruptions are performed in cloud infrastructure and how recovery mechanisms are tested. Ramya A then gave an interesting talk on “Asynchronous integration tests for microservices”. She had explained the family of frameworks to support Consumer Driven Contracts testing. Laxmi Nagarajan then gave a high level overview of “Capacity planning for AWS and configuring AWS autoscaling policies” sharing her Industry experience. After a short break, Colin Charles presented his story on “Capacity planning for your data stores” citing real world examples.

I then moved to the track to attend Ruchi Singh’s talk on “Migration of 300 microservices from AWS cloud to Snapdeal cloud”. The time was too short for such a talk, and it was an overview. I would have liked to see more details, given that they use Chef for provisioning and handle more than 16 TB of data as mentioned by Ruchi Singh.

After a quick lunch, I attended “Adventures in Postgres management” by Ramanan Balakrishnan. It was a good technical talk going over the failures and experiences learnt. After the talk I went to the hallway to listen to the Off-The-Record (OTR) session on mistakes to avoid when planning your infrastructure.

OTR session

I returned to the main conference hall for doing some stretching exercises. In my opinion, all conferences should make this session mandatory, especially after you have been sitting for a long period of time. This session was then followed by the “Working with Secrets” talk by Shrey Agarwal, who gave an overview of using Hashicorp’s Vault for managing passwords. It was a very short introduction on the topic.

After a short beverage break, Toshaan Bharvani presented “Living with SELinux”, which was an excellent presentation on the subject. The initial slides had some material that Rejy M Cyriac had introduced the previous day, but, the content and presentation were good. With proper SELinux policies, he said that root in his production servers cannot do much. Rejy and Toshaan both asked people to use permissive mode instead of disabling SELinux altogether, so that you at least know what is being audited.

The last talk of the day was by Anurag Bhatia on “Understanding eyeball routing via RIPE Atlas”. He gave an overview of the RIPE Atlas project and how network metrics are measured and monitored wherever the RIPE device is installed. It is a TP-Link hardware whose firmware can be flashed using Libre software. Unfortunately, at this point the source of the firmware is not released as Free and Open Source Software. I was told that there is still an ongoing discussion on the same.


The talk by Manan Bharara and Rejy’s SELinux workshop were the highlights for day one for me. The content on the second day was much better and had greater depth in my opinion. Overall, it was a useful technical conference, and a good place to meet like-minded people.

I would like to thank Aerospike for sponsoring me to attend the conference.

June 20, 2017 02:30 PM

June 17, 2017

Dhriti Shikhar

June ’17 Golang Bangalore Meetup

The June Golang Bangalore Meetup was conducted on Saturday, June 17th, 2017. There were around 35-40 people who attended the meetup.


The meetup started at 10:15 with the first talk by Nurali Virani who works at SAP Labs, Bengaluru. He talked about “Understanding Type System In Go”.


Saifi gave an awesome talk about “Working with C code and plugins in Go”. The slides related to his talk can be found here


Umasankar Mukkara is the Co-Founder and CEO at CloudByte Inc. He talked about OpenEBS and their experience with Golang. The slides of his talk could be found here. OpenEBS is an open source project written in Golang. You can find the source code of OpenEBS here.

Satyam Zode who is also a fellow Golang programmer at OpenEBS presented a talk about “Package oriented design in Go”. The slides related to his talk could be found here


I thank Uma, OpenEBS and Nexus Ventures Partners for helping us to organize the June Golang Bangalore Meetup by providing venue and food. There were also a few goodies for the participants by OpenEBS. Fortuanately, this event was recorded and we will be sharing the recorded videos soon when they will be ready.



by Dhriti Shikhar at June 17, 2017 01:01 PM

June 14, 2017

Sayan Chowdhury

PyLadies Pune Meetup - June 2017

Back after a long time. It’s been a long time since I blogged. This was mostly because I was busy with different conferences. Yes,I attended three conferences PyCon Pune, FOSSASIA, and PyCon US since the last time I blogged. I would be back writing reports on all the three events and I have a pending third and the final blog post to be done on fedimg.

Now, let me rollback to the topic for which this blog post is meant to be.

11th June 2017, PyLadies Pune organized the meetup for the month of June. The meetup started a bit late with Shilpee Chamoli taking a 101 class on Data Science. The workshop focused on installing dependencies (Jupyter, Pandas, etc), and working on a dataset on ‘survival on the Titanic’. Since few people were having trouble with installing the dependencies, Kushal and a few other people used Azure Notebooks.

Shilpee Chamoli (Picture by: Kushal Das)

Anwesha and I had recorded videos during PyCon US which had messages from Lynn Root, Ewa Jodlowska, Carol Willing, and Jackie Kazil for the PyLadies Pune group members encouraging them on progressively working ahead and helping the community grow.

Jackie Kazil

Carol Willing

Ewa Jodlowska

Lynn Root

After lunch, a mini-dev-sprint was planned where the participants would come up with a project idea. Chandan, Praveen, Kushal and me were doing the mentoring. I was mentoring a group who are planning to build a recommendation system for restaurants (as of now). Based on my experience, I shared with them on which are the important things to focus first and follow the principle “release early and release often”. On the sidelines, I was also working on my project “invento”

The meetup ended at around 5 PM in the evening, though few people stayed up late working on the project.

June 14, 2017 05:00 PM