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)