Top Trending Python Projects, Airflow, and Intelligent Agents

Came across Top 10 Trending Python Projects On GitHub: 2020  and could not resist. Looking at a couple of them for our explorations in Natural Language Processing and using Games for Teaching Software.

Apache Airflow

Airflow pipelines are configuration as code (Python), allowing for dynamic pipeline generation.

You can use it for building ML models, transferring data or managing your infrastructure.

We experiment with simple Natural Language Processing tasks – entity extraction, finding keywords from text, language understanding, question/answer generation. Many of them have common steps – gather data from the web, clean the data and turn it into text, parse the data, etc. Trying to create simple pipelines that we can reuse will be of great benefit. Used to love Yahoo Pipes.

Unity Machine Learning Agent Toolkit

The ML-Agents Toolkit is beneficial for both game developers and AI researchers as it provides a central platform where advances in AI can be evaluated on Unity’s rich environments and then made accessible to the wider research and game developer communities.

We include writing simple games as part of teaching Introductory Python. In fact, we start with Turtle module and move them to Pygame Zero. As students move up to write more powerful games, it will be interesting to infuse some intelligence into the games. We are looking at a few options like Micro-worlds and Agent toolkits.

Innovation and Startup Culture in Colleges

How do you bootstrap a culture of Innovation and  Entrepreneurship in your college?

  1. Start an Innovation and Entrepreneurship development activity. Find a few mentors from the industry. Involve your nearest TiE/NASSCOM/NEN/CII chapters. Have each mentor adopt a few projects. They can teach students how to generate ideas, build demonstrable prototypes, find initial users and validate ideas. Pick simple ideas that benefit people or industry. Encourage projects with an element of social innovation.
  2. Adopt The Lean Startup method. The concept of a lean startup is to build early prototypes and validate product/service ideas. There is a great free course on Udacity on building The Lean Startup.
  3. Create a set of student startups (have a goal of doing 10-20 startups in every batch). Associate a faculty member and an industry expert with each group. Create a plan for brainstorming ideas, building prototypes to test the feasibility.
  4. Develop student skills on user centric design, communicating with potential customers, validating ideas. They can start in the Second Year of college.
  5. Give course credit to innovation and entrepreneurship activity. Kerala government is doing this, and it is a great idea to adopt it in your institution.
  6. Focus on finding at least 5-10 customers/users for each startup, in the first year of entrepreneurship. Every following year, try to raise that number by a factor of 10.
  7. Allow for failures. Don’t discourage them. Make students blog about their experiments, what worked and what did not. This will be useful for students. Have open sessions to discuss these experiments.

By creating a practical program for student entrepreneurship and getting faculty involved, you will change the culture of your institution. You are sending a message that practice is as important as theory.


This is part of an article I wrote for ICT Academy of Tamil Nadu.

A Few Things We Learned from Doing a Workshop at #PyDelhiConf

Here are a few lessons I learned, doing a workshop at #PyDelhiConf
  1. Chatbots are interesting to people (we had good attendance)
  2. Jump into the code after showing a couple of overview diagrams (I talked too much)
  3. Send the code and tools to the participants a few days earlier
  4. Make it interactive (one of the organizers came by and told me during our session)
  5. Just because you are going to a Python conference, don’t assume that everyone knows Python. Lots of students and beginners were in attendance.
  6. Do code walkthroughs – very clear and very concise
  7. Don’t underestimate the time needed to do a good workshop. Use time wisely.
  8. Take the help of the community during the workshop, a couple of kindred spirits helped others.
  9. Always go with a few copies of all the software needed in pen drives.
  10. Ask yourself one question and let it guide the flow – what nanoskill will a participant get from their investment of time in your workshop

A Good Teacher …

A good teacher worries about a lot of things. Here are a few, I can think of:
  1. Do I understand the subject well enough to teach? Do I have both the conceptual and the detailed understanding of the topic?
  2. How can I keep the students engaged? How can I evoke curiosity? How do help them learn during my session?
  3. How can I make my students understand enough to ask a lot of questions? What do I do if I don’t know the answer to some of them?
  4. What pace should I cover the subject?
  5. How do I handle a mix of knowledge levels of students?


Once you start teaching, you will figure out the answers to most of these questions. You will also learn how to be a good guide.  Be comfortable with who you are. Prepare, prepare, prepare and prepare some more. If you don’t know something, say so and find the answer and get back to the students.
The toughest part of teaching is to keep students fully engaged.  The greatest joy of teaching is that you will always learn something new. The ‘aha’ moments you create for the students will make you forget everything else.


I wrote this for a young friend who is just starting to teach to professionals.

Can You Give Me a Bigger Problem?

I was conducting a Python workshop at KCG College a few years ago.  I was teaching them basics  – variables, strings, control statements, etc. for about half an hour. Then, I gave them a few minutes to try out some examples and started walking around to see how they were doing.

I saw Swathi (one of the students) sitting with a bored look. I walked up to her and asked, how she was doing.

“Sir, I finished all the problems you gave me. Can you give me a Bigger Problem?”.

I was pleasantly surprised. I said, “Do you know Newton-Raphson Method” for finding the square root of a number? She did not know. I explained briefly with an example, the principle of how the method worked. A few minutes later, she called me and showed me her program. I tested it a bit, and it worked great. In those few minutes, she got the formula from Wikipedia, coded in Python and tested it.

She used is one of the most powerful methods of learning – “Learning by Doing”.

Swathi was an unusual student. She is doing her masters now. I normally find one or two such students in each batch, and it is always a pleasure to discover them. I am always looking to work with such students.

Nano Hackathons and Build to Learn

A small group to build stuff together, learn together and learn by doing. This will replace techtalks for our weekly meets.

  1. A nanoapp is something we can build n a day. The core in a couple of hours. The goal is to learn by doing.
  2. We may find open source stuff that to build upon. It will be easy to get started. Every nanoapp we build will be open sourced with a liberal license (like BSD/MIT/Apache)
  3. We can start with a few programming languages  – Python, Lua, Clojure. We can have others too. We need a couple of champions for each language.
  4. We can build web apps, mobile apps and desktop apps to start with.
  5. If there is enough interest and a community forms around it, we can grow them in to mini apps or even commercial products.
  6. We will keep the group small – 10 to 20 regulars
  7. We would love to have students. As long as they are willing to work and learn.

If the experiment is successful, we can create nano hackathon events in schools, colleges.

How Much should You Know About Computing?

How much should you know about computing, if you are not a software developer? In his podcast titled To Code or Not to Code, Grady discusses how much a functioning member of society today should know about computing.

A couple of my favorite snippets from the podcast:

Knowledge and understanding have a funny way of expanding.

Creating to code is a gateway to thinking computationally

Thinking computationally? What does that mean? Why is that important?

Computational Thinking (CT) is a problem solving method that uses computer science techniques. The term computational thinking was first used by Seymour Papert in 1996.

Jeannette Wing, Head of the Department of Computer Science at Carnegie Mellon University (CMU) has been one of the most eloquent Computer Scientists to argue the case. Computational Thinking isthe skill of the 21st century

So what is Computational Thinking? Well it is a collection of diverse skills to do with problem solving that result from studying the nature of computation. It includes some obviously important skills that most subjects help develop, like creativity, ability to explain and team work. It also consists of some very specific problem solving skills such as the ability to think logically, algorithmically and recursively. It is also about understanding people. Computer Science is unique in the way it brings all these diverse skills together.

So back to the original question – how much should you know about computing? It depends.

  • Everyone should have a  high level understanding of what computers are capable of, how they work and where they exist (in desktops, laptops, mobile devices, tablets, cloud and even in cars, smart devices)
  • Engineers/Scientists should know how to use them as tools to improve their work. They may need to learn simple scripting language like Python
  • Students should know “computational thinking” since it will help them build problem solving skills.
  • Not every one needs to be a programmer but learning a simple language will give them a chance to appreciate thinking like a programmer. The essential skill one need to acquire is to take a complex problem, break it into simpler/manageable problems and apply existing knowledge to solve the simple problems.
  • To find patterns (some level of abstract thinking) to apply solutions from one domain to an entirely different domain.

What do you think? Do you think Computational Thinking is an essential basic skill?


Promoting Self Organized Learning

XPrize is offering $15 million to build tablet apps that help kids teach themselves.

The goal is to help the 250 million school-age children in the world who can’t read or write. Contestants will build apps that kids can use on their own — because many of these kids don’t have access to the “unscalable” resources of teachers and schools.

The prize all ties into a philosophy known as self-organized learning — where kids learn autonomously by figuring out technology for themselves — that’s popular with the TED crowd. And of course, the other big idea is that contests are a peculiarly effective way of motivating people.

Keller said he anticipated that the winning app would use an artificial intelligence approach to figure out what an individual kid knows and does not know.

A few thoughts:

  1. The kids (targeted by this effort) cannot read or write. So you need to starting points may be different (speech, images).
  2. Kids should use these apps on their own. This means the apps need to be engaging and evoke curiosity constantly (the game community can contribute a lot).
  3. Since there will be no teachers involved, this would encourage peer based learning (and students playing the role as teachers)
  4. You cannot make any assumptions about what they know or what language they speak.
  5. The app is supposed to use AI approach. So you need to use AI to mimic a teacher or a self learner or a combination of both.
  6. To come up with a reasonable solution, you need to understand how kids learn.  That, in itself, is a fascinating area of exploration.
  7. Kids don’t have access to “unscalable” resources (like teachers and schools). That points to tablets with long battery life, solar chargeable or something that requires hand cranked power. This is not actually the app quality but the need of the underlying platform. This also means, schools cannot the platform for distribution of apps or devices. Hopefully that will be a different challenge.

Rural India and countries in Asia and Africa will certainly benefit from the outcomes. No matter which app wins, we will get a lot of great ideas for self-organized learning. That is bound to change education as we know it.

Five Ways We Can Help Students

I keep talking to lots of students and have some ideas on how we (at educational institutions and community) can help them. Here are some thoughts.

  1. Encourage curiosity. Curious kids learn a lot more.
  2. Help them explore. Give them broad exposure and have them explore on their own. Exploration helps satisfy their curiosity.
  3. Help them become  self-learners.Teaching them how to learn is more challenging since you need to customize it for different learning styles.
  4. Encourage them to be creative. When they come up with ideas, help them work through ideas .
  5. Help them increase their confidence. I have seen lots of students very capable, but do not venture into trying out new things because they do not have the confidence.

There may be lots of ways we can help. I just picked a few.  Let me know your thoughts.

Edit 1st Aug 2014

Will start collecting articles on the “Purpose of Education” and list them here.

What Is The Purpose Of Education?



Educational Technology for Schools

Technology in Education is one of my interests. With the advent of low cost tablets and ubiquitous cloud computing, the way we teach and learn is bound to change. But it is not enough to simply provide technology. We need innovative ways to harness technology.

A small team from KCG Social Causes Club tried a few experiment at a couple of public schools in Chennai. We observed a few things.

  • Kids are excited by tablets and smart phones. They seem to have an intuitive understanding of touch computing and require almost no training to discover their capabilities.
  • While there are lots of free games and content available in English, there is not much  for people in other languages. In Chennai at the middle school level students speak a mixture of Tamil and English.
  • There are huge gaps (and opportunities) in using tablets, smart phones and cloud connectivity in innovative ways to engage students. Our college students who were guiding the school kids found it a big challenge. So some of them started building apps for education.
  • We cannot simply leave the task of innovating to schools and teachers. Technology companies need to play an active role in translating teachers’ ideas into simple apps for kids.
  • Knowledge is required in areas of user centric design, app building, gamification and we need to experiment with lots of different ideas to engage students and learn how they learn.

It is nice to see NMC and CoSN Release the NMC Horizon Report  on the trends, challenges and emerging technologies for schools. Reports like these provide us a broader view and helps us understand the trends and challenges of using technology in education.

The report covers:

Six key trends, six significant challenges, and six emerging technologies are identified across three adoption horizons over the next one to five years

… identifies BYOD and cloud computing as technologies expected to enter mainstream use in the first horizon of one year or less. Games and gamification and learning analytics are seen in the second horizon of two to three years; The Internet of Things and wearable technology are seen emerging in the third horizon of four to five years.

More after I digest the report. I do need to work on an action plan for the next batch of the Social Causes team at KCG Tech.