Turning CS Theory into Practice

Wish you all a very happy new year!

Since last year I am a part of a program which believes that when empowered with the right CS skills, each person can use technology to accelerate change towards a better world that they envision. Having already completed two workshops at Netaji Subhash Engineering College with more than 50 students, I want to share my story with the world.

Applied CS with Android is a program designed by Google for Juniors and Seniors that enhances concepts from their current CS curricular work. The program revisits concepts from Data Structures and Algorithms, as well as Artificial Intelligence, and uses Android as a development platform because it’s modern, has an easy to use graphical interface – and, it’s just fun! The only requirements for students to register for this program are to have prior coursework in Data Structures and Algorithms, some experience in Java and commitment to attending all workshops.

For the last few months I have been volunteering as a facilitator for this program. My task is to help the participants understand the CS concepts and assist them in implementing these concepts on Android platform. Together we have explored Data Structures and Algorithms concepts, created interesting Android games using these concepts, learnt from our errors, exchanged ideas, and most importantly took back home something new!

Workshop 1

img-20160404-wa0001

The first workshop was hosted in April 2016 with around 30 students from the pre-final year. The six units were covered on a weekly basis so that one could study the materials during the weekend and the hands-on activity could be held on a suitable weekday.

We fired up the course with Unit 1 where we learnt about ArrayList, HashSet and HashMaps. During the workshop we made an app called Anagrams in which a user has to make anagrams with a given word by adding another letter to it. It was an exciting experience for many since they were making their first Android app and they enjoyed the session.

img-20160412-wa0009

In Unit 2 we learnt more about Android and created an app for a game called Scarne’s Dice completely from scratch. Some students came up with interesting extensions for the activity.

In Unit 3 and 4 we created an app for a game called Ghost were a user competes with the computer to add letters to a word in such a way so that a new word can be created from it but the one who completes the word first, loses. To implement this game we first created a simple dictionary that can be searched using binary search. Then, to increase the efficiency of the game, we created a fast dictionary using Trie for faster retrieval of words.

img-20160412-wa0010

In Unit 5 we learnt about Heap, Priority Queue and a heuristic search algorithm called A* search. Using these concepts we created an app for a game called Puzzle-8 where the user needs to slide tiles to position all the tiles numbered 1 to 8 in order. We employed AI to create a solver so that the computer can play the game and solve the problem from any state by itself.

Finally, in Unit 6 we came up with unique and original ideas for an Android app incorporating all the lessons learnt in the workshop. The students presented their ideas in front of everyone and tried to come up with an alpha-version of their idea.

Workshop 2

The second workshop was hosted in November 2016 with the students of second year and third year. The six units were covered over a weekend. This time participation was more and the students were more excited than ever to create their first Android app.

Google supported the second workshop with a workshop kit and sponsored for snacks. The kit included Applied CS stickers, sipper bottles, Google Play books, a flex banner and posters. The stickers were distributed to everyone but since the sippers and books were limited in number, they we awarded to only those who actively participated in the workshop and answered the short quizzes that were asked throughout the day.

img_20161118_142541_hdr

On Day 1 we fired up the course with Unit 1. In the first half of the workshop, we learned the concepts of ArrayList, HashSet and HashMap. The game mechanics of the Anagrams app was understood. This was followed by a hands-on implementation of the app on Android Studio.

We completed Unit 2 in the second half of the workshop. Participants learnt about the game mechanics of the Scarne’s Dice app and how to create an app completely from scratch.

img_20161119_151943_hdrOn Day 2 we completed Unit 3, 4 and 5. We created the Ghost app in the first half of the workshop. First we learned the concepts of binary search, tree data structure, tree traversal, BFS, DFS and trie data structure. Thereafter, we implemented a simple dictionary and a faster dictionary using the concepts learned.

In the second half of the workshop, we learned the concepts of heap data structure, priority queue and A* search algorithm. Then we  learned to implement the Puzzle-8 app.

We wrapped up the workshop with a networking session with all the participants with snack boxes sponsored by Google. We talked about our ambitions post the Applied CS with Android course and discussed if we would like an advanced level to this course in the future.

For a complete photo-story for both the workshops please click here.

Advertisements

Workshop on Women in Free Software

As a part of Fedora Women’s Day 2016, a two day Workshop on Women in Free Software was organized with the help of Ubuntu Women and Fedora Project. The event was held at Netaji Subhash Engineering College, Kolkata, IN. The aim of WWFS-FWD 2016 was to encourage the participation of women in free software (FLOSS) projects in various capacities, to empower them, to deliberate on related gender issues and introduce cutting edge free software. The workshop was open for women with interest in free software/ computers and applied human rights. Queer women were encouraged to apply.

 

Cake.jpg
Celebratory cake for WWFS-FWD 2016

15 July 2016, Friday

The idea for this event was conceived in March 2016 and finally it was all happening. This was the first time I was hosting a FOSS event, so naturally, I was very excited about it. Trishna Guha and I had decided to reach the venue early so that we could configure the systems with Fedora 24 and install necessary software. Trishna, like me, is also a final year student of Computer Science and she is already contributing to Fedora.

10:00 – The participants started arriving and registered for the event. We assigned them machines with the installed software. Ubuntu and Fedora had sent us swag including stickers, pens, USB holders, cufflinks, DVDs, caps and t-shirts. These were distributed among the participants. Though the participation was very less (which is quite common for FOSS events, especially ones that are held for women), what I liked about the audience was its uniqueness. They were all self-motivated women from different age groups who had come just to learn something new.

11:00 – We started the workshop. Trishna began with a talk on ‘What I do in Fedora and how can you get involved’. She discussed about her work in Fedora Bodhi and Fedora Cloud. She shared stories and experiences of her journey in FOSS and also motivated the participants to start contributing to Fedora.

12:00 – A. Mani (Chairwoman) was next to take the stage. She delivered a talk on ‘Free Software, Women and Feminism’. Mani is affiliated to Calcutta University and is a researcher in pure mathematics and logic. She also takes an interest in feminism, gender theory and philosophy.

 

Swag.jpg
Swag sent by Ubuntu Women and Fedora Project

13:30 – We paused for lunch. A delicious round chocolate cake with WWFS-FWD 2016 written on it was cut to celebrate Fedora Women’s Day 2016. Grilled sandwiches and patties were on the menu.

14:30 – The session was resumed by Mani who delivered another talk on ‘GNU/Linux, Ubuntu’. She gave a functional view of the operating system, installation, hardware, software, shells, files and file systems, permissions, etc.

15:30 – Priyanka Nag took the stage next and involved everyone in fun activities to bring back energy into the room. Priyanka is a technical writer at Red Hat, Pune and a Mozilla advocate. Her talk was on ‘Overcoming Imposter Syndrome’, a condition found in high-achieving individuals marked by an inability to internalize their accomplishments and a persistent fear of being exposed as a fraud. For the first activity everyone had to sit in pairs and exchange information about themselves so that they could introduce their partners and say one embarrassing moment they faced. For the second activity each person in the room had to write three compliments that they believe they are or they want to be, on chits of paper and submit. The chits were then laid out and everyone had to pick one compliment for themselves. Selecting a compliment was not an easy task and it showed how less we think about ourselves. Her talk was really very motivating and a perfect wrapper for the day.

16:30 – End of session.

 

16 July 2016, Saturday

11:00 – I re-booted the workshop with a talk on ‘Python Scripting for System Administration’. It was a hands-on activity that focused on the basic syntax of the Python programming language. This session was dedicated to demonstrating variables, data types, conditional statements, iterations, functions, classes, modules, packages and exception handling in the Python shell so that this knowledge could be used to learn scripting for system administration. I had included three simple sys admin tasks in my talk mainly dealing with handling processes, tar files and file permissions. It is always a pleasure to help out people write their first few lines of code.

12:00 – Priyanka Sinha talked about ‘TensorFlow’, an open source software library developed by Google for machine learning in various kinds of perceptual and language understanding tasks. Due to a bug with the demo, the talk was shifted to the last session where she talked about handling Twitter data with Parsey Mcparsey. Priyanka is a researcher at Tata Consultancy Services, Kolkata.

12:30 – Gunjan Gautam made a presentation on ‘GNU Image Manipulation Program (GIMP) and Scripting’, a free and open-source raster graphics editor. Gunjan is doing her PhD in image processing from Indian School of Mines, Dhanbad.

13:30 – We paused for lunch. Fried rice and chilli paneer/ chicken was on the menu. The food was delicious and everyone was happy!

14:30 – Priyanka Nag resumed the session with a talk on ‘How to Contribute to FLOSS.’ She explained what is meant by Open Source and how it is different from Free Software. Everyone gave inputs to this discussion using all the knowledge they had gathered since Day 1. Priyanka then explained why it is important to contribute to Open Source projects and how to get started. She also talked about IRC, mailing lists, bug tracking with bugzilla and version controlling using Git.

15:30 – Mani talked about ‘LaTeX for Publishing’, a document preparation system. She explained how a document can be created using code with the help of various examples.

16:30 – Swapna Agarwal gave a live demo on ‘GNU/Octave’. Swapna is a researcher at Indian Statistical Institute, Kolkata. She is working on facial expression analysis. First, she demonstrated the basic operations in Octave and then she showed how this programming language is used in machine learning tasks.

17:30 – End of session.

 

Team.jpg
L-R: Priyanka Nag, Priyanka Sinha, Upasana Ghosh Dastidar, Apeksha Priya, Shikha Kumari, A Mani, Gunjan Gautam, Me, Swapna Agarwal, Ruchira Ray

Phew! So it was a success. Not only because we learned about new technologies from each other, but we also learned the importance of community bonding. At the end of the day, we had some amazing ladies motivated to take on the world with their code.

Hello World!

Freedom is a choice. Freedom means having complete control of your own life. And this applies to computing, as much as it does to every other activity in our lives. Today I want to talk about why I would choose freedom over anything else.

If you want to fly, give up everything that weighs you down.

Around 30 years ago Richard Stallman formally founded the free software movement. The philosophy of this movement is that computer users deserve the freedom to form a community. Practically, this means, rejecting propriety software and promoting free software. (Here, “free” may refer to “free speech” and not “free beer”.)

A free software gives the user the freedom to run, copy, distribute, study, change and improve the software when they wish. A propriety software does the exact opposite and snatches this freedom from the user. If the user cannot control the program, the program controls the user. Life without freedom is oppression.

If this sounds all vague to you, let me give you an instance. Let us assume you ordered soup at a restaurant. The dish was served, you had your first sip and didn’t like it. You prefer your soup with a pinch of pepper. Now the catch is that, in this particular restaurant, the chef (developer) is constantly tracking your activities. As soon as you touch the tray of condiments, you will be reported and put behind bars. That is the rule here. Would you like it? Adding pepper to your own soup is illegal. Not only that, if you like your soup, you can’t share the recipe with a friend, because that too is illegal. This is what happens when using non-free software.

Sadly, there is a general lack of awareness about free and open source software (FOSS) in my community. All throughout primary and secondary education, I was encouraged to use non-free software. It was not until I met some wonderful mentors who told me about the FOSS culture, that I realized how beautiful its philosophy is. As computer scientists we must live as a community and cooperate with each other. Not only will that reduce redundancy  of code and give faster results, but also give us power since ‘united we stand, divided we fall.’

And that is how I started my journey… towards freedom.