Google Summer of Code - Crystal Space 3D in GSoC 2014
- What is GSoC
- CS and GSoC
- GSoC Student in CS
- Project Evaluation: A commentary by Scott (jwir3)
- Getting accepted: Tips by Mike (Xordan)
- Choosing Goals
- Project Ideas
What is GSoC
Google Summer of Code is a program that offers student developers stipends to write code for various open source projects. Historically, the program has brought together over 2,400 students with over 230 open source projects, to create millions of lines of code. The program, which kicked off in 2005, is now in its seventh year.
If you want more info, read GSoC FAQ
CS and GSoC
Crystal Space has participated in GSoC for the last years and has been accepted as a mentoring organization again this year. We hope we can once again provide a number of students with interesting projects related to 3D coding.
Mentors and administrators
To facilitate smooth operation as well as give you as student the best help Crystal Space has a number of mentors as well as organization administrators. If you have any questions related to your application or anything else related to SoC, contact them via the mailing list or on IRC.
- Jorrit Tyberghein (jorrit)
- Frank Richter (res2k / res|laptop)
- Mike Gist (Xordan)
- Jorrit Tyberghein (jorrit)
- Frank Richter (res2k / res|laptop)
- Mike Gist (Xordan)
- Scott Johnsson (jwir3)
- Vincent Knecht (vknecht)
- Andrew Dai (Khaki)
- Christian Van Brussel (kickvb)
You can also bug the hang-around Marten Svanfeldt (thebolt), former admin&mentor.
GSoC Student in CS
Not only do we as an organization want to provide you with the most awesome experience as a student within GSoC and our project, we also have some expectations on you as a student. Before applying to Crystal Space 3D we strongly suggest you to read the entire page as well as the ideas page. We also strongly advice you to read the Advice for students page on Google's wiki.
Further, we expect each and every student to (before applying):
- Have some experience and knowledge of the language(s) the project will be done in, which in most cases is C++. Crystal Space 3D is written in C++ and takes full advantage of many aspects of the language such multiple inheritance and templates. In parts it also contains platform dependent or performance sensitive code. CS shaders are written in Cg, many projects will require use of this. Knowledge of Python would be useful if you are interested in tools/exporter projects.
- Have (or setup) a development environment compatible with CS. The CS manual provides guidance on how to compile CS on Windows (MinGW or MSVC) and if you run into any problem just contact us.
- Be prepared for a short "interview"/chat conducted online before applications are accepted.
- As far as possible try to discuss your ideas with other members of the community, long time contributors, mentors and administrators before writing your final proposal so that the proposal is as good as possible.
If you are selected as a student, we further expect you to:
- Communicate with your mentor as well as the CS community at large. Crystal Space traditionally use two forums for discussing development. The first is the #crystalspace IRC channel on freenode network, the other is the crystal-develop mailing list. Subscribe to the mailing list, ask questions and discuss your ideas as much as possible.
- Do your very best to complete the project. If you run into problems, communicate; if you get stuck, communicate, ask for help and advice etc. The rest of the community is there to help you out.
- Follow normal Crystal Space development guidelines, code guide and version control practices.
Applications to GSoC is handled by Google, head over to their page http://socghop.appspot.com/.
During application we would like to ask you to use the following template:
Google Summer of Code - Student Application Template for Crystal Space: Thanks for considering joining Crystal Space for your summer of code project! We are sure that Crystal Space can be a good project to help you get up to speed in the Open Source world. To help us in identifying you as a good candidate, we want to ask a few questions: About Yourself * Describe any plans you have over the summer in addition to GSoC, such as classes, a summer job, vacation plans, master's thesis, etc. * What programming projects have you done so far? * Have you worked on other open source projects before? If so, please list and describe what you did. * Please list other projects you are applying to for GSoC. * Do you have any experience with C++ or Python? If so, provide a short summary of this experience. * Do you have any experience with computer graphics, OpenGL, DirectX, other 3D engines? Crystal Space Questions * When did you first hear about Crystal Space? * Have you worked with Crystal Space before? For what sorts of things? * If you have participated in Crystal Space previously, please describe what you've done (e.g. bug reports, questions on mailing list or IRC, etc.) * If you have contributed to Crystal Space before, please describe when and what you did (bug fixes, new features, testing, etc.) Tasks * Checkout the Crystal Space source code through Subversion and review it. * Introduce yourself on the Crystal Space developers mailing list, and post your project ideas for feedback, before submitting your application Your Project * Deliverables: What will the final output of your project be? Please note that documentation is important. * Schedule: Include an estimated timeline of the project with mini-milestone.
Project Evaluation: A commentary by Scott (jwir3)
A big question in the IRC channel is "How is my project graded?" I can't answer for all of the mentors, but I thought that I would give some idea of how I grade projects that students submit to Crystal Space for the Google Summer of Code. A quick note on this: I've been a mentor for several successive years now with the Crystal Space project and prior to that I was a student assisting in developing the COLLADA Conversion Project. The year before that, I applied to the Google Summer of Code as a student, and my project was not accepted. The reason I mention this is because I want to emphasize that you shouldn't feel discouraged if you aren't accepted for a project. If you applied last year and weren't accepted, we encourage you to apply again this year. It's possible that last year was just a really competitive year, or that we have since found that the project you propose has gained more favor in the eyes of the users, and would carry more weight this year. Sometimes, it's just a matter of getting to know some of the mentors and coders on #crystalspace and via the mailing list. So, don't feel bad if you don't get accepted. We have many very good applications and a limited number of slots to place applicants.
That said, here are the criteria I use when evaluating potential projects, in priority from highest to lowest:
1. Is this a feature that Crystal Space needs? One thing to consider is how much your project is desired by the Crystal Space design team, as well as the users of Crystal Space. If the project idea is part of the core features that CS wants to support (e.g. rendering), then it's probably pretty important. If it's a side topic that would be nice to have, but not required, it might not get as much emphasis as other projects. So, the question is, "How can I know which projects are the most important?" Excellent question. The answer is: ASK! Send an email to the list, or join us in #crystalspace to discuss potential projects.
2. Is the project description well written? I can't tell you how many project proposals we get that are like three lines, stating basically, that "I'd like to work with Crystal Space." You don't need to write a dissertation, but we want to see that you can communicate your ideas effectively. In addition, it's necessary to demonstrate that you have sufficient knowledge and background to take on a project over the course of a summer. We want to see that you can succeed at the project.
3. How will you deal with contingencies if they come up? Problems always come up. You always have less time than you expect to have. Make sure you know what will be cut from the project if you start running out of time, and how this will effect the overall submission that you are going to make. If you are going to cut things that are crucial to your project, then this doesn't help Crystal Space in the long run, because we can't integrate it until we work everything out. Make sure you consider this and communicate it in your project proposal. We want to know, up front, what you will spend time on and what you won't, if time becomes an issue.
4. How are you going to stay motivated and focused on the task? This is an issue that I've dealt with for a number of projects. Sometimes, no matter how much you love a project or area of study, there are going to be times you simply don't want to work on it. That's fine, and even expected. But, I'd like to know how you will be able to balance everything else you are doing over the course of the summer (e.g. studies, golfing, playing cricket, sailing, etc...) with this project. It's expected that some students will not have exams finished before the Summer of Code starts, and this is fine, but we want to know up front if there are issues that you foresee conflicting with your work on the project. If you're taking a two week vacation, this doesn't disqualify you from being considered, but we want you to let us know about this in your schedule, so that we can work around it if you're accepted.
Getting accepted: Tips by Mike (Xordan)
Scott has provided the perspective from a mentor, so I'm going to provide one from a student. I participated as a student in three previous Google Summer of Code years so I can give you some tips on how to increase your chances of being accepted. Here we go:
1. Know your project. Okay, this might seem a little obvious. However saying "I'm going to implement Bob's algorithm for Shiny Sparkles" and referencing some papers isn't a good application. Be detailed. Your mentor wants to know how you're going to implement it, the more specific you are to CS the better. This might mean that you have to do a little research into how CS works beforehand and ask some questions. The competition might be tough, maybe the guy who gets accepted instead of you did this and you didn't.
2. Spark interest. You need to get a mentor interested in your project. Although submitting a good proposal without any prior discussion is fine and will be looked at, it might be the case that all the mentors interested in your specific area have already gotten themselves super-excited about some other proposal. Get some discussion going on IRC or on a mailing list, make yourself noticed before deadline day.
3. Apply twice, keep your eyes open. Umm, what? You heard me. There's probably nothing more frustrating as a mentor than having two or more excellent proposals for exactly the same project. Although it's possible that two people can work on the same thing, it's unlikely to happen. If you really want to do a GSoC project on 3D then you might need to be sending multiple proposals to multiple mentoring organizations. Submitting two different project proposals to the same organization is likely to decrease the chance of you not being picked because another guy had the same proposal as you. Also, keep your eyes open in IRC and on the mailing lists for anyone likely to be proposing the same thing as you. If your project is pretty unique and there's no sign of another student showing interest in it then you're probably okay. If there are another three people who want to do it then you definitely want to pick a second as well.
4. Try next year. As Scott mentioned above, don't give up if you don't get accepted. Don't get disheartened, especially if you're a first year university student. Remember that you're competing against final year, Masters and PhD students for these projects. Give it another year, you will have learned a lot and will be in a much better position to be accepted.
Part of writing the application is to formulate the goals (or milestones) of the project. You have more than two months time to implement "Shiny Sparkles"; what should be the deliverables, and when?
1. Prioritize aspects. Very often, the thought seems to be along the lines of "Bob's algorithm for Shiny Sparkles, that won't keep me busy, I think I will also implement Charles' Polishing algorithm as well". But, this also relates to the contingency planning Scott mentioned, you may find out only later that Bob's algorithm took thrice as much time as you expected and that also implementing Charles' algorithm is practically out of the question in the remaining time. To deal with these possibility choose a baseline, or core target, that you _will_ deliver at the end. This could be "Bob's algorithm". Make further goals, like "Charles' Polishing", optional, ie implement "if time permits". Structure your work in a way that these optional goals can be dropped but the outcome of the other goals can still be used.
2. Quality instead of Quantity. Don't think you have to stuff in every possible idea into your application. Choose a few goals, with the intention of the best possible implementation for each. Make sure what you deliver is solid. If you finished a goal sooner than anticipated, spend the time on polishing the implementation. It's better to have one feature done really well instead of three that end up shabby due time pressure... having an implementation of Ernest's Waxing Finish is not much use if the basic Shiny Sparkles break half the time.
To help you out in your application we have collected a special page of ideas for possible projects: SoC Ideas. We would like to stress though, you are always welcome to submit your own ideas. You are in no way restricted to the ones we put up on our list and if you have a really cool idea, submit it. Also if you have a good idea but don't want to participate yourself in SoC (or cannot), or have many ideas, put them on the ideas page.