Files
mlpack/doc/developer/gsoc.md
T
Ryan CurtinandDirk Eddelbuettel 9fd815144d Add a cache to documentation check job (#3882)
* A first attempt at overhauling the documentation job with a cache.

* Actually remove files we don't need anymore.

* Fix output from local link checks to give it all at once.

* Add sparse matrices to the set of detected matrix types.

* Fix comparison condition.

* Make a pass to try and re-validate cached links that have not yet expired.

* Compile and link separately so that ccache can take effect.

* Be a little bit smarter about caching.

* Ensure libicu$SO is installed so 'stringi' can be used

Also collapse to remotes calls into one

* Fix style issues that cpplint 2 found (#3884)

* Try to workaround the libicu issue for now.

* Mention new dependency.

---------

Co-authored-by: Dirk Eddelbuettel <edd@debian.org>
2025-02-04 08:04:42 -05:00

80 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# mlpack and Google Summer of Code
mlpack is a proud participant in Google Summer of Code. We have been a part of
the program since 2013, with over 50 students accepted over the years for mlpack
(all of whom succeeded in the program). Each year, we receive very many
applications and it is a competitive process, so this page exists to help you
determine if you could be a strong candidate.
## How to be a good candidate
The two most important qualities that an mlpack GSoC candidate can possess is
the ability to be self-sufficient and the willingness to learn.
Self-sufficiency is key because mentors have limited time and cant put in as
much time helping the student as the student is putting in. However, this of
course does not mean that a student (or a prospective student) can never ask any
questions! mlpack is a complex library and can sometimes take help and
explanation to understand.
A willingness to learn is also important because virtually every potential
project will require the student to become familiar with a new algorithm or C++
technique. mlpack is a complex library with many components and it is likely
during your project that you might have to use or interact with some other part
of the codebase.
## Things to be familiar with
Of course, these are not the only important ingredients for a successful GSoC
project. A student should ideally be familiar with
- *open source software development*: opening pull requests, using git, opening
issues. mlpack uses Github, which has great documentation. You can learn
about the workflow using [this link](https://docs.github.com/en), if you are
not already familiar.
- *using the development toolchain on your computer*: you should be able to
download and compile mlpack, make changes to the code, and recompile with the
new changes. There is a [guide](../user/install.md) for how to build mlpack
and that would be a great place to get started. If youre on Windows, then
the [Windows build guide](../user/build_windows.md) could be very useful. See
also the [Community page](community.md) for more information on getting
started.
- *at least intermediate C++ knowledge*: mlpack uses lots of different C++
paradigms including template metaprogramming, C++ features like rvalue
references, and other strategies, in order to make the code fast. You should
be at least familiar with some of these language features and what templates
are, even if you have not used them in-depth, so that you can understand the
mlpack codebase. Some examples of patterns that are often used inside of
mlpack are SFINAE ([example in mlpack, see std::enable_if usages](https://github.com/mlpack/mlpack/blob/565cfd3aad22deec0656b86e801052593a937723/src/mlpack/methods/mean_shift/mean_shift.hpp)),
[policy-based design](https://www.drdobbs.com/policy-based-design-in-the-real-world/184401861),
and [compile-time class traits](https://accu.org/xaraya/journals/442.html).
Here are some [other useful resources](https://en.wikipedia.org/wiki/Template_metaprogramming)
for learning template metaprogramming, and some useful
[reference books](https://www.aristeia.com/books.html).
If some of this sounds new to you, dont feel overwhelmed; its not a
necessity, but it is helpful. You should at least be prepared to learn about
it!
- *project-specific knowledge*: youll need to have an in-depth understanding
of the specific project that you choose. If youre not sure what project you
want to work on, see the
[SummerOfCodeIdeas](https://github.com/mlpack/mlpack/wiki/SummerOfCodeIdeas)
wiki page, which has ideas for GSoC projects that you might find interesting.
But you arent required to do one of those projects; if you have another
interesting idea, propose it and see if a mentor is interested in supervising
the project! If you have any questions about a project, be aware that its
possible that the question has already been answered on Github. Take a look
through the closed issues or search to see if theres already an answer to
your question. Get involved!
For a strong proposal, its important to be a part of the mlpack community, via
contributions, code reviews, helping others solve their issues, and so forth.
There are some pointers on the [community page](community.md) on how to start
contributing and get involved.
When it comes time to write your proposal, we do have a
[proposal guide](https://github.com/mlpack/mlpack/wiki/Google-Summer-of-Code-Application-Guide)
that you can take a look at to guide your application.