Summer of Code - Getting Started: Difference between revisions

→‎Steps Toward a Successful Application: mediawiki syntax improvements and new section to not ask us what to do
(→‎Steps Toward a Successful Application: mediawiki syntax improvements and new section to not ask us what to do)
Line 3: Line 3:
= Steps Toward a Successful Application =
= Steps Toward a Successful Application =


If you like any of the projects described below, these are the steps you need to follow to apply:
* '''Help Us Get To Know You'''
 
*: If you aren't communicating with us before the application is due, your application will not be accepted.
* '''Help Us Get To Know You'''<br>
*:* '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.
: If you aren't communicating with us before the application is due, your application will not be accepted.
*:* '''Hang out in our [https://webchat.freenode.net/?channels=#octave IRC channel]'''. Ask questions, answer questions from users, show us that you are motivated, and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your public application to increase the strength of your proposal!
:: '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.
* '''Do not wait for us to tell you what to do'''
:: '''Hang out in our [https://webchat.freenode.net/?channels=#octave IRC channel]'''. Ask questions, show us that you are motivated and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your public application to increase the strength of your proposal!
*: You should be doing something that interests you, and should not need us to tell you what to do.  Similarly, you shouldn't ask us what to do either.
*:* It is good to ask advice on how to solve something you can't but you must show some work done.  Remember, we are mentors and not your boss.  Read [http://www.catb.org/esr/faqs/smart-questions.html How to ask questions the smart way]:
*:*: <blockquote cite="http://www.catb.org/esr/faqs/smart-questions.html">[...] hackers have a reputation for meeting simple questions with what looks like hostility or arrogance. It sometimes looks like we're reflexively rude to newbies and the ignorant. But this isn't really true.<br> What we are, unapologetically, is hostile to people who seem to be unwilling to think or to do their own homework before asking questions. People like that are time sinks — they take without giving back, and they waste time we could have spent on another question more interesting and another person more worthy of an answer.''</blockquote>
*:* It can be difficult at the beginning to think on something to do.  This is nature of free and open source software development.  You will need to break the mental barrier that prevents you from thinking on what can be done.  Once you do that, you will have no lack of ideas for what to do next.
*:* Use Octave.  Eventually you will come accross somethings that does not work the way you like.  Fix that.  Or you will come accross a missing function.  Implement it.  It may be a difficult problem (they usually are) but while solving that problem you may find other missing functions ().  Implemenent and contribute those to Octave.
* '''Find Something That Interests You'''
* '''Find Something That Interests You'''
: It's '''critical''' that you '''find a project that excites you'''.  You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).
*: It's '''critical''' that you '''find a project that excites you'''.  You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).
: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [http://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on e-mail and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.
*: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [http://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on the mailing list and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.
* '''Prepare Your Proposal With Us'''
* '''Prepare Your Proposal With Us'''
: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].
*: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].
* '''Complete Your Application'''
* '''Complete Your Application'''
: Fill out our '''''public''''' application template.
*: Fill out our '''''public''''' application template.
:: This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.
*:* This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.
:: You really only need to copy and answer the '''''public''''' part there, there is no need to showcase everything else to everybody reading your user page!
*:* You really only need to copy and answer the '''''public''''' part there, there is no need to showcase everything else to everybody reading your user page!
: Fill out our '''''private''''' application template.
*: Fill out our '''''private''''' application template.
:: This is best done by copying the '''[[Template:Student_application_template_private|template]]''' from its page and '''adding the required information to your application at Google (melange)''' or at '''ESA'''.<br>
*:* This is best done by copying the '''[[Template:Student_application_template_private|template]]''' from its page and '''adding the required information to your application at Google (melange)''' or at '''ESA'''.<br>
:: Only the organization admin and the possible mentors will see this data.  You can still edit it after submitting until the deadline!
*:* Only the organization admin and the possible mentors will see this data.  You can still edit it after submitting until the deadline!


== Things You'll be Expected to Know or Quickly Learn ==
== Things You'll be Expected to Know or Quickly Learn On Your Own ==


Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. There are bits and pieces of Fortran, Perl, C, awk, and Unix shell scripts here and there. In addition to being familiar with C++ and Octave's scripting language, successful applicants will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project.
Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. There are bits and pieces of Fortran, Perl, C, awk, and Unix shell scripts here and there. In addition to being familiar with C++ and Octave's scripting language, successful applicants will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project.


* '''The Build System'''
* '''The Build System'''
: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.
: While you generally don't need to understand too much unless you actually want to change how Octave is built, you should be able to understand enough to get a general idea of how to build Octave.
*: While you generally don't need to understand too much unless you actually want to change how Octave is built, you should be able to understand enough to get a general idea of how to build Octave.
: If you've ever done a <tt>configure && make && make install</tt> series of commands, you have already used the GNU build system.
*: If you've ever done a {{Codeline|configure && make && make install}} series of commands, you have already used the GNU build system.
: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' You will be able to find instructions how to it on this wiki, and the manual. Linux is arguably the easiest system to work on.
*: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' You will be able to find instructions how to it on this wiki, and the manual. Linux is arguably the easiest system to work on.
:* [[Building_for_Linux_systems]]
*:* [[Building_for_Linux_systems]]
:* [[Building]]
*:* [[Building]]
:* [https://www.gnu.org/software/octave/doc/interpreter/Building-the-Development-Sources.html Octave Manual on Building the Development Sources]
*:* [https://www.gnu.org/software/octave/doc/interpreter/Building-the-Development-Sources.html Octave Manual on Building the Development Sources]
:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]
*:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]
* '''The Version Control System'''
* '''The Version Control System'''
: We use [http://mercurial.selenic.com/ Mercurial] (abbreviated hg).
*: We use [http://mercurial.selenic.com/ Mercurial] (abbreviated hg).
: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System distributed version control system] (DVCS) we use for managing our source code. You should have some basic understanding of how a DVCS works, but hg is pretty easy to pick up, especially if you already know a VCS like git or svn.
*: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System distributed version control system] (DVCS) we use for managing our source code. You should have some basic understanding of how a DVCS works, but hg is pretty easy to pick up, especially if you already know a VCS like git or svn.
* '''The Procedure for Contributing Changesets'''
* '''The Procedure for Contributing Changesets'''
: You will be expected to follow the same procedures as other contributors and core developers.
*: You will be expected to follow the same procedures as other contributors and core developers.
: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on.  You should also read the same [https://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html contribution] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.
*: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on.  You should also read the same [https://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html contribution] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.
: [[Hg_instructions_for_mentors#Mercurial_Tips_for_SoC_students | This page]] describes the procedures students are expected to use to publicly display their progress in a public mercurial repo during their work.
*: [[Hg_instructions_for_mentors#Mercurial_Tips_for_SoC_students | This page]] describes the procedures students are expected to use to publicly display their progress in a public mercurial repo during their work.
* '''The Maintainers Mailing List'''
* '''The Maintainers Mailing List'''
: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.
*: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.
: The mailing list is used most often for discussions about non-trivial changes to Octave, or for setting the direction of development.
*: The mailing list is used most often for discussions about non-trivial changes to Octave, or for setting the direction of development.
: You should follow basic mailing list etiquette. For us, this mostly means "do not [https://en.wikipedia.org/wiki/Posting_style#Top-posting top post]".
*: You should follow basic mailing list etiquette. For us, this mostly means "do not [https://en.wikipedia.org/wiki/Posting_style#Top-posting top post]".
* '''The IRC Channel'''
* '''The IRC Channel'''
: We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode].
*: We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode].
: You should be familiar with the IRC channel.  It's very helpful for new contributors (you) to get immediate feedback on ideas and code.
*: You should be familiar with the IRC channel.  It's very helpful for new contributors (you) to get immediate feedback on ideas and code.
: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and Octave developers.
*: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and Octave developers.
* '''The Octave Forge Project'''
* '''The Octave Forge Project'''
: [http://octave.sf.net Octave-Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.
*: [http://octave.sf.net Octave-Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.
* '''Related Skills'''
* '''Related Skills'''
: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.
: If so, you probably have already been exposed to the kinds of problems that Octave is used for.
*: If so, you probably have already been exposed to the kinds of problems that Octave is used for.


== Criteria by which applications are judged ==
== Criteria by which applications are judged ==
Line 61: Line 65:


* '''Applicant has demonstrated an ability to make substantial modifications to Octave'''
* '''Applicant has demonstrated an ability to make substantial modifications to Octave'''
: The most important thing is that you've contributed some interesting code samples to judge you by. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.
*: The most important thing is that you've contributed some interesting code samples to judge you by. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.


* '''Applicant shows understanding of topic'''
* '''Applicant shows understanding of topic'''
: Your application should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.
*: Your application should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.


* '''Applicant shows understanding of and interest in Octave development'''
* '''Applicant shows understanding of and interest in Octave development'''
: The best evidence for this is previous contributions and interactions.
*: The best evidence for this is previous contributions and interactions.


* '''Well thought out, adequately detailed, realistic project plan'''
* '''Well thought out, adequately detailed, realistic project plan'''
: "I'm good at this, so trust me" isn't enough. You should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a full timeline and goals for the midterm and final evaluations.
*: "I'm good at this, so trust me" isn't enough. You should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a full timeline and goals for the midterm and final evaluations.


= Suggested projects =
= Suggested projects =