Posted in Guides

Attempting Google Summer of Code – A Mentor’s Advice

I have been asked this question once every day for the past week so instead of the repeated iterations, I thought it’d be best to invest some time into writing it all down. I myself learned a lot in the entire selection process so would like to share those small pearls of wisdom before they start fading away.

The easiest way to get started with GSoC is to just get started! It is not rocket science. It is not even difficult. The process in itself not at all hard or demanding but it is made elusive by the amount of talent and hard work it sees from the students who participate. This post won’t be able to guide you on how to make the best proposal or how to grab GSoC because that will ultimately come down to your own dedication but it will remove any hesitation or doubt you might have on how the process works. The sole aim is to not let any misunderstanding about the the process, or the assumption that the projects to be done, are difficult, hold back a student from trying.
The projects in my opinion are simple, well majority of them are. Complex projects do exist but plenty of projects can be picked up by dedicated beginners and be completed successfully. Even if you feel you are not qualified enough, do give it a shot as soon as possible, don’t wait for next year. Being rejected (if it happens) in the first attempt will teach you a lot more than the year of waiting will.

So let us start and answer the first question, where to start?

Disclaimer : I will be using the project I mentored in GSoC 2016, PowerUp by Systers to illustrate the process. Also the guide will apply more on development/coding projects under GSoC as I am not well versed to the process of applying for research/scientific projects that exist.

1) Pick an organization (or a project)

opensource-logos

To be (preferably) done before the organizations are officially announced
This is sometimes the easiest part, sometimes the hardest.
First things first, what are these organizations? The organizations participating in Gsoc are open source organizations that put up their entire code-base for the developer community to share and build upon. Open Source means just that, open for all. This is not the same as free software but that is beyond the topic of today.
Your task is to go ahead and browse the 150+ organizations list of GSoC(previous edition) and pick one that catches your eye. Or you can browse projects according to your preferred technology stack and pick one from there. For example, say you were to search Android, you would come up with a bucket loads of projects and say you picked PowerUp.
While picking an organisation early you run the slight risk of that organisation not participating or qualifying for the next edition so place your bets safely (preferably an organisation that has had at least 3-4 projects in the previous edition).

— Some Technical Jargon —
Before we move to the next step, you have to know what contributing to a project technically means. It can involve various aspects like : a) Creating an Issue. b) Sending a Pull Request 3) Documentation. 4) So on….
Don’t feel dizzy just yet, explanations are on the way.

For beginners to version control, you would need to learn the ins and outs of Git and Github and how to work on collaborative projects. Refer:https://github.com/chhavip/Git-Guide to get started off the right foot.
A) Creating an Issue.
For this you need to go through the project (run it on device, deploy it on server) and find bugs in it. Head over to the issues section of your project, make sure it doesn’t already exist and open it up! If it gets approved by the project maintainers, you might get to work on it too. Usually it is advised to open an issue first and then send its solution rather than just sending the fix.

B) Sending a Pull Request
Remember the solution to bugs we talked about? This is it. How do you fix something or add a new feature to the project? Pull Request is the way to go. You work on your copy of the project and send a request for specific changes to be merged with the original project. If it gets merged? Go out and celebrate!
Enough talk, show me the steps :

C) Documentation
An easier approach to contribution that is often overlooked. Coders are lazy to document but it matters! Help complete the introduction, write the wiki or a guide about the project and believe me the mentors will be more than happy.

— Its Over Finally —

2) Start working on your picked project

How much work you do is left up to your own dedication
This is the salient part of the whole process. Here your main aim is to get to know about the project, the organisation and the kind of work they do. Now different organizations go about differently. For some you can simply start out by creating issues and sending PRs on their project, for others you need to introduce yourself first on the mailing list, ask for the required work to be done and then start. The main point being that this is the point where you can showcase your coding skills and make the mentors believe that you are good enough to be selected.

A sample procedure for contributing to an organisation: Suppose you picked PowerUp as your project of choice, then head over to the issues list : https://github.com/systers/powerup-android/issues and sort through all the available issues. Sometimes labels like ‘beginner’ and ‘gsoc’ are put up to help first time contributors make their mark. Understand the project and see if you can fix this issue. If you can, the voilà! But not just yet. The best way to go about sending code to an organization is to first comment on an issue and express your willingness to fix it, wait for approval from the mentor and then you can go ahead and submit that PR 🙂 . This way the mentors can interact with you and let you know any intricacies hidden with solving the issue or if it has already been assigned to someone else. Again, this may not be the procedure with every organization but serves for widely approved conduct.

3) See the Ideas List

Organizations start releasing their ideas list at the same time they start applying to be a part of GSoC which happens around in February. Go through this list. It can have the project you have been working on or completely new projects and sometimes you can even suggest your own ideas to the organization. From the ideas list, pick the projects that seem most suitable to you and start envisioning how you would go about completing the same. This forms the base of the project time line and the time you spent upon several ideas will showcase your understanding of the same in the proposal. So selecting a final project for which you will be submitting a proposal is a crucial step, give it time.

4) Write a Proposal

proposal-writing-workshop-2_80ecd181-bc38-4104-b7aa-4654aa72b564

Now comes the part that carries a good amount of weight age in your selection. This is almost the last step in your entire journey. Now what is a proposal? After the organizations are officially released on the GSoC site, now is your time to start going through the ideas list of each of your previously shortlisted organizations and see what projects suit you best. You may submit a proposal for a completely new project and not the one you contributed to as contributions to the organization are considered on an overall basis. A proposal basically contains all the information about yourself, your academic status and information about how long have you been working in open source. The important parts of the proposal are where you are supposed to answer queries related to your vision and plans for the selected project and provide a concrete timeline according to which you will be working throughout the summer. This is to judge your understanding of the project and see if you can correctly estimate and incorporate the time it would take to complete the project.

In many ways your proposal is the only medium for the organization to get to know you so keep in mind the following points when composing one:

  • Submit as early as possible and utilise mentor feedback.
  • Do not deviate too much from the basic requirements, Quality matters more than Quantity.
  • It’s the only medium for organisation to know you, provide adequate information.
  • Tabulate the final timeline in a clean and efficient manner.
  • Make the timeline as realistic as possible, include buffer period for code cleanup, bug fixing and documentation (an important but often overlooked part).

5) Get Involved with the Community

Now this is a somewhat vague aspect of the process and so might my advice seem to be. Problem being that there is no set pattern as to how to go about doing this as different organizations have different form of communications. But the purpose is the same irrespective of the organization – make yourself known. This does not mean that you badger the mentors or flood the mailing list! This means that you maintain healthy communication with the members, by properly introducing yourself, by properly researching on a topic to make an informed query and also by helping out fellow students who are stuck somewhere. If your organization arranges a video chat with its prospective applicants, do attend even if you don’t have any questions! You might be able to answer someone else’s query and that will go a long way in uplifting your image.

 

 

Coming to the end of this very long post, my final piece of advise (request) would be that you apply, doesn’t matter if you are an absolute beginner or if there is only one month left on the clock. Even if your chances are less than zero, you are guaranteed not to walk away empty handed by investing a few weeks in this task.

Also this is a  small presentation I gave at one of my recent talks for Women Techmakers, attaching just because I had fun making it  😉  .

Feel free to comment or reach out to me (chhavip.gupta@gmail.com) for any other specific queries.

Posted in Android Experiments, Guides

Android Resources : A Beginner’s Guide

I have been asked this question umpteenth number of times now: Where to begin in Android Development?

Somehow the field of development has garnered a lot of interest in the recent years and I for one appreciate the efforts made by newcomers in trying to grasp as much as possible. The concept of hackathons and start-ups needing beginner level developers has put a meaning to all the work done and prove a worthy motive for developers in wanting to up their game.

I will try my best to provide a flow of learning and the important things every developer should know. This list may not be perfect, far from exhaustive and a little more than a guide. (Disclaimer)

First Lesson Of The Day : Learn to Search! Stack Overflow is your best friend in development! Google Google and Google some more for every problem you have. Mix and combine the answers, copy paste and always make a thorough search before asking your own question. Also when asking a question try to be as specific as possible. Almost everything you are trying to do has had people try it and fail at it. So the answer will be out there somewhere.

Lesson Number Two : Learn to Read Other’s Code. Stuck at implementing a feature? A library guide seems incomplete? Go through the source code, check the flow and see what you missed out. Developers are lazy people when it comes to writing so you’ll seldom find a wiki or guide that is complete or updated (I have encountered so many where they change variable names and forget to indicate so in the wiki.) So read the source. This will not only make you comfortable working on team projects but also give you an idea of how to write code so other’s can understand it easily. Very rarely will you be building a project alone so let’s learn to be a team player 😉

Out of Clever Lessons Now, so back to boring guide for Android. I won’t be providing links to specific tutorials but rather a list of what you should learn (you can go ahead and apply Rule Number 1 to find the tutorials and also because a lot has changed since I first learned Android). You should be able to compare code side by side and judge which is best for your situation, so open a couple of links on every topic and try to decide which one taught you the best and follow it.

The basic lessons to go through (and some not so basic):

  • Learn about the file structure of an Android Project and where everything goes.
  • Learn about basic layouts, toast, Activities and click events. www.raywenderlich.com/78574/androidtutorial-for-beginners-part-1   is a good guide to follow, the whole series is excellent.
  • Learn about intents, extremely useful, sending data through and fro from activities and how to open them.
  • Networking, learn how GET and POST requests are made, through basic HTTTP URL connection then through a networking library like Volley, Retrofit whatever seems best. Almost all applications need to be connected to the net and function in real time.
  • Image handling,take care  not using too much memory and rendering problems. Give Picasso, Glide and Ion a look.
  • Data storage : through shared preferences then local database (both have very different use case) then learn to use an ORM like Sugar or any other that seems better.
  • Fragments – perhaps the most difficult topic there is for beginners, create view pager, and navigation drawers on your own (then use libraries in the future – Neokree, MaterialViewPager)
  • GCM :  Google Cloud Messaging (Advanced): Learn how to do it on your own and then using helpful tech like Firebase. Can also implement the chat application with Firebase as a fun exercise.
  • Being able to integrate available APIs especially Google APIs like Maps. (Advanced)
  • Learn to interact with the camera and the gallery and handle edge cases on devices of various APIs (best to use libraries later for fast and effective implementation)

Once you are through with the basics or want to test your knowledge you can do one or all of the following:

Now for Some Side Tips : (Heads Up on things that become apparent in given time)

  • Android Studio is a genius invention, let it help you as much as possible. Learn about all the shortcuts available for code completion and jumping between files.
  • Do Not and I mean DO NOT stress about the Java implementation of everything. Why did the hardworking chaps in Google do all the hard work if you had to go ahead and spend your head at it. Accept things as they are.
  • A word of advice to Windows users, shift to Linux. You will be doing yourself a favor. So do it before you pull out your hair from all the waiting.
  • Use Genymotion for emulators if real device is unavailable (they are the best option though).
  • Learn Git / Github! The importance of this cannot be stressed enough. If you don’t know how to use them, you are a duck sitting alone outside the party the developer’s world is having.
  • Keep up to date with updates and changes in Android Design Guidelines. Read about the design repository. Some of the best guides available out there : https://github.com/codepath/android_guides
  • Its best to use open source libraries available to build nice features that adhere to Android Design Guidelines. A sample list of libraries for simple features is available at my starred repositories list (too lazy to list them, apologies) Github Profile.

 

I will add resources and guides as I remember them and any suggestion, comments are welcome! Hope it helps some of you out there. Keep coding 🙂