Google Code-in ============== .. image:: ../images/gci/gci.png :align: center .. note:: `OpenWISP is a mentoring organization for the Google Code-In 2019 `_. If you are reading this page you are probably considering OpenWISP as a possible mentoring organization for the `Google Code-In `_, that's great! If you are looking for a **friendly community** where **your contribution will have a very tangible positive effect from the first day of your participation** and where **you can grow your tech skills at 360°**, then **CONGRATULATIONS!** OpenWISP is the right organization for you. How to run a successful GCI --------------------------- .. image:: ../images/gci/success.jpg Have you read the `contest rules `_ yet? If not, please do! .. danger:: **Students**: please do not share your personal information (full name, age, location) during the program for safety reasons. This is also a new rule established since 2018. The most important thing to keep in mind is that you may claim only one task at time and if you decide you don't want to work on it anymore is totally fine but **please** communicate it to your mentors and remove yourself from the task on the Google Code-In dashboard so that someone else will be able to work on it. **Communication with the rest of the community** is vital for a successful Google Code-In, please join `our communication channels `_, presenting yourself on the mailing list and on chat, tell us who you are, what your values are, what is attracting to OpenWISP and don't be cold like a robot! Stay human :-). How to become an OpenWISP star ------------------------------ .. image:: ../images/gci/star.jpg Here's a few quick tricks you can use to become a star in our community: - read the :doc:`founding values and goals of OpenWISP <../general/values>`, are you on our side? - study and follow closely the :doc:`contributing guidelines <../developer/contributing>` - be patient in the interaction with your mentors, we are all volunteers, we are taking our time to mentor you from our free time which we usually spend with family and loved ones - we know `our documentation `_ is incomplete and fragmented, we are working hard to improve it; if you find a passage that is not clear or you have an idea about how to improve it, **please let us know!** - the same happens with the software, if you see something which looks like a bug, reach out, even if it's not a bug your feedback will help us to improve - if we ask you to open an issue in one of our github repository, please take at least 5 minutes of time to write a proper bug report - watch the `OpenWISP 2 presentation at the OpenWRT Summit 2017 `_ and read the slides of this `more technical OpenWISP 2 talk `_ - try using OpenWISP in real use case scenarios (find out if there's a free wifi community near your area), spend time reading its code, ask questions - try to participate in the community, if a fellow member is in need of help and you know how to help him, please do so, we will reward you Evaluation criteria ------------------- These are the evaluation criteria we will use to select our finalists and vote for the winners. Be patient ~~~~~~~~~~ Mentors are volunteers and they have their own obligations to attend. Avoid asking them continously to review your task. You are in a queue and you need to wait at least 24 hours as indicated in the GCI guidelines **Hint**: optimize your time! 1. ensure the work you submit is of high quality before submitting it 2. if it takes some time for your task to be reviewed, don't sit idle, read our documentation, try OpenWISP, start working on other tasks which allow multiple instances Progression of Skills ~~~~~~~~~~~~~~~~~~~~~ Students should start with simple tasks and gradually progress to more difficult tasks. **Hint**: push yourself gradually to harder tasks once you become confident. Leave easy tasks for beginners. Quality over Quantity ~~~~~~~~~~~~~~~~~~~~~ We care more about the quality and impact of your work rather than the quantity of completed tasks. **How we define quality?** Strict adherence to our :doc:`contributing guidelines <../developer/contributing>`, clean readable code, simplicity, elegance, good commit messages. **How we define impact?** Adding a new feature that was highly requested by the community, improving the UX, improve the documentation to help newcomers, anything that facilitates the life of our users has a positive impact on the community. **Hint**: find out where the highest impact can be made. Some tasks are more important than others. Community ~~~~~~~~~ Open source is not only about producing code, being active in the community (mailing list, chat, github), helping out fellow students and helping out new users who ask beginner questions is also very important to maintain a healthy community. **Hint**: fully embrace the open source community, be helpful to one another. This is the true spirit of open source development. Help us to grow ~~~~~~~~~~~~~~~ Caring for the community also means helping it to grow. Growing is important because it will allow us to have more mentors in the future so we will able to help out more students. **Hint**: try to do some of the easiest actions described in :doc:`Help us to grow <../general/help-us>`. Gradual Independence ~~~~~~~~~~~~~~~~~~~~ Over time we expect you to improve and need less micro-managing from mentors, we expect you to become more independent and learn to solve problems on your own. **Hint**: do your own research before asking obvious questions; search in the mailing list, in the documentation, on github, on google. Send tasks for review only when you consider your work of good quality. You don't need to rush, keep in mind we value more quality and impact rather than number of completed tasks. Learn to use OpenWISP ~~~~~~~~~~~~~~~~~~~~~ The best contributors are those who actively use the software; students may not have a specific need to use OpenWISP but they can simulate it in order to learn. **Hint**: we will appreciate students who will demonstrate good knowledge of how OpenWISP can be used and will help us to write more documentation and tutorials on how to use it. Learn to use OpenWRT ~~~~~~~~~~~~~~~~~~~~ OpenWRT is one of the most important technologies in OpenWISP, therefore we consider important that students learn the basics of how it works and how OpenWISP can control it. **Hint**: start with using a virtual instance of OpenWRT in virtualbox, then when you feel ready get a `cheap OpenWRT compatible device `_ that you can use for testing and development. A full list of the OpenWRT compatible hardware is available in the official `OpenWRT Website `_. Full stack knowledge ~~~~~~~~~~~~~~~~~~~~ OpenWISP is really a full-stack software project, there's everything: python, django, javascript, openwrt, lua, shell scripting, openvpn, freeradius, ansible. The best contributors are not afraid to learn new technologies and contribute on different fronts. **Hint**: we will appreciate students who will spend effort in improving their skills on multiple fronts, rather than focusing exclusively on one specific technology or programming language. Time to start hacking --------------------- .. image:: ../images/gci/technology.gif If you are not familiar with the following concepts and technologies yet, take the time to read these resources, it will help you to speed up and raise to the top! Programming languages and frameworks: - `Python `_ (book) - `Django `_ (official documentation) - `Lua `_ (video tutorial) - `Shell `_ (video tutorial) - `Javascript `_ (tutorial) Networking concepts: - Introduction to networking `terminology `_ Configuration management: - Introduction to `configuration management `_ - Writing Ansible `playbooks `_ - Creating Ansible `roles `_ from scratch FAQs ---- Please refer to the Google Code-in `FAQs `_ before participating. .. note:: You can ask for help whenever needed, but please don't copy someone else's work. Google Code-in has zero tolerance policy regarding cheating and plagiarism. There are some tasks which require a creative mind like designing logos and T-shirts, which you need to do by yourself. Remember, learning is more important than winning. Communication of sensitive issues ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you noticed something that you think is not right, for example: a student cheating, a mentor behaving inappropriately or any other issue you don't feel comfortable discussing in public, please get in touch with an organization administrator, the organization admins for the 2019 edition are: - 2stacks - hispanico - atb00ker - cappe87 - nemesisdesign How can I apply as mentor? ~~~~~~~~~~~~~~~~~~~~~~~~~~ Thank you a lot for wanting to be a GCI mentor! OpenWISP Mentors need to be able to guide students, hence they need to have at least a basic knowledge of how OpenWISP works and having contributed actively to the codebase is highly recommended. If you want to apply, introduce yourself in our `general chat `_, let us know how you are using OpenWISP and how you contributed to it. If you haven't contributed yet, we highly suggest you to :doc:`get started now <../developer/contributing>`. Suspension of mentors ~~~~~~~~~~~~~~~~~~~~~ Once a mentor has been accepted we assume that the mentor will contribute, according to their available free time, until the conclusion of the program. The contribution shall be in good faith, always prioritizing the interests of the students and the goals of our organization. A mentor account may be revoked if these general principles are not followed, more specifically: - if the mentor disappears without justification for more than 2 weeks; in this case the account can be resumed once the mentor comes back into activity - if it's felt the participation of the mentor is not in good faith and or not helpful for the students (for example, it's ascertained that the mentors are not putting effort in reviewing and sending feedback to the students, preferring to accept tasks with very shallow or non-existent reviews, just with the goal of scoring mentored tasks)