Changes between Initial Version and Version 1 of SoC2015


Ignore:
Timestamp:
Dec 20, 2014, 11:17:23 PM (8 years ago)
Author:
Niall Douglas
Comment:

first version

Legend:

Unmodified
Added
Removed
Modified
  • SoC2015

    v1 v1  
     1[[PageOutline]]
     2
     3= Google Summer of Code 2015 =
     4
     5Welcome to the Boost C++ Libraries' home page for Google Summer of Code (GSoC) 2015. This page provides information about suggested student projects, proposal submission templates, advice on writing good proposals, and links to information on getting started writing with Boost.
     6
     7=== Changes in process for both mentors and students over preceding years ===
     8
     9This year, 2015, is going to be slightly different from preceding years of how Boost has operated GSoC. The first new change was that last year we trialled extending the really superb GSoC 2014 projects by an additional three month period funded by Boost, and in 2014 the project we selected for extension was [https://ldionne.github.io/hana/ proposed Boost.Hana] by student Louis Dionne mentored by Joel Falcou. If these extensions prove successful, we may continue to extend the really outstanding GSoC projects from 2015. Note that the Boost Steering Committee can only consider extensions where the mentor is more than happy to continue mentoring the project in an extension, and where the GSoC administrators and the other GSoC mentors and Boost Steering Committee members all unanimously agree on the merit of the extension. To reach such a standard is exceptionally hard, and students interested may wish to review [https://github.com/ldionne/hana Hana's source code] to see what is demanded for a GSoC extension.
     10
     11The second new change is in how projects will be ranked by the community. Up until now, the community ranked student proposals by awarding a score, and we recommended to Google to select all those proposals which matched a single mentor to a single student based on the top of the score ranking. Unfortunately, this process has led to some disappointments for both student and mentor especially where the student was far better at writing proposals than writing code, and we also worry that the old system discriminates against non-native English speakers. As of this year, we therefore request a new part to student proposal ideas, that being of an exam or test the students interested in that proposal can take to demonstrate their programming capability. In 2015, student proposals with accompanying ability test scores for that candidate '''will be preferentially ranked above proposals without test scores'''.
     12
     13This runs the risk of excluding student proposals not suggested by this ideas page - in fact, Louis Dionne's Hana was not suggested here, it came entirely from Louis. We therefore add a second way of getting preferentially ranked: candidates who have written existing C++ libraries of at least 5,000 - 10,000 lines of code and who propose their own project, AND have prearranged a mentor through [http://www.boost.org/community/groups.html#main the Boost developer's mailing list], will also be preferentially ranked.
     14
     15The scoring by the community will work as before, but preferentially ranked candidates and proposals will be entirely consumed before unpreferentially ranked candidates and proposals, even if the candidate's exam results were poor (though note that in this case no mentor may wish to mentor such a student, and we shall have to exclude such a candidate as a result).
     16
     17To help community members write a student proposal idea matching the new format, please see the concurrent_unordered_map proposal.
     18
     19== Requirements ==
     20Students must submit a proposal. A template for the proposal can be found here [wiki:SoCSubmissionTemplate here]. Hints for writing a good proposal can be found [wiki:SoCHints here].
     21
     22We strongly suggest that students interested in developing a proposal for Boost discuss their ideas on the mailing list in order to help refine the requirements and goals. Students who actively discuss projects on the mailing list are also ranked before those that do not.
     23
     24Projects from previous years can be found [wiki:SoCPrevious here]. There are still a number of interesting projects found in these pages not listed here.
     25
     26=== Github's for standalone GSoCs past and present ===
     27
     28Since 2013 with Boost's transition to git we have kept a single umbrella org on github for those GSoCs which are fairly self standing. Incremental extensions to existing libraries usually enter that library's main git repo as an experimental branch. Here are those orgs:
     29
     30* GSoC 2013: https://github.com/BoostGSoC13
     31* GSoC 2014: https://github.com/BoostGSoC14
     32* This year's GSoC will be housed at https://github.com/BoostGSoC15
     33
     34= Suggested prewritten GSoC project proposals =
     35
     36== Self-contained standalone GSoC Projects with programming competency test ==
     37The following projects and programming competency test have been suggested by potential mentors. If the descriptions of these projects seem a little vague... Well, that's intentional. We are looking for students to develop requirements for their proposals by doing initial background research on the topic, and interacting with the community on the mailing list to help identify expectations.
     38
     39=== Concurrent hash tables (concurrent_unordered_map) ===
     40
     41
     42== Self-contained standalone GSoC Projects (no competency test) ==
     43
     44
     45= Ideas =
     46
     47If after reading all of the standalone project ideas above you are finding that none excites you, we have collected below a series of smaller work items none of which alone would be big enough to make up a full GSoC, but which could be combined to form a very valuable GSoC indeed. The following would be excellent start points for students to propose projects themselves (see below on how to do this). While these ideas are by far not as concrete as projects in the list above, they give students an idea what else they can work on within Boost. They also give students a chance to propose exactly the kind of project they'd like to work on instead of picking one from the predefined projects from above.
     48
     49Students interested in proposing a mix of the below work items should propose their mix on the Boost mailing list using the instructions below. We will then figure out a suitable mentor for you.
     50
     51=== How to propose a mix of the below work items on the Boost mailing list ===
     52
     53Please do not simply arrive on the list and ask "I want to do GSoC Idea item no X because I don't want to do one of the predesigned GSoC projects on the list. Give me a mentor." as you will likely be ignored as a probable time waster. If you are to propose your own GSoC project, '''it must be of equivalent quality to the precanned GSoC project proposals written by mentors''' already on the ideas page, and by "equivalent", we really do mean '''equivalent''' i.e. very high. This is why mentors take the time to write project proposals for you, because for mentors who are domain experts in their field it is easier to write a high quality GSoC proposal likely to pass peer review and Google's own proposal review than for students who are not domain experts. If you are still really sure you want to invest the very considerable work to propose your own project, do the following before writing to the Boost mailing list with your own proposal:
     54
     551. Research prior art i.e. provide proof in your approach email that you have researched alternative implementations in C++ and other languages of your project proposal. A list of pros and cons of those alternative implementations would be useful and show you really did study the problem.
     56
     572. Have a well designed, concrete, ''realistic'' as a summer project design based on synthesis of the prior art research. It's great to list known unknowns as far as possible. When designing, don't forget well over half the effort in writing a new Boost library goes exclusively into writing documentation and writing unit and functional testing. This is a big reason we need students to have good English, because a lot of writing Boost code is actually writing its documentation.
     58
     593. Ideally students who provide proof they have successfully written a high quality STL algorithm implementation before i.e. can supply a link to an open source copy of their work are far more likely to be well received than those students with no such proof of capability and depth of understanding just how hard writing high quality C++ code is. Be aware we don't really care what grades you received in some CS class - we want to see code you've written.
     60
     614. Failing item three, any evidence or proof demonstrating a good work ethic, and are humble and willing to learn, is always helpful. Good examples of such evidence are code commits fixing bugs in open source projects, or a history of improving documentation for open source projects, or a history of porting code to new platforms or fixing platform specific build problems - all these are excellent pieces of proof because we can verify their accuracy and look at the quality of your work.
     62
     63If you can provide at least two of the above four points, your custom GSoC proposal is highly likely to be taken seriously, and you'll get plenty of feedback on what needs fixing, plus mentors will volunteer themselves. Miss all of the above factors and no one - student or otherwise - will be taken seriously, and any emails by you to the Boost developers list will probably be ignored.
     64
     65With all that said, here are the smaller work items which could be combined to form a very valuable GSoC project:
     66
     67== Boost libraries (extending/overhauling/finishing) ==
     68* Reliable UDP (may UDT) for Boost.Asio. Note that forthcoming Boost.CRUX provides this.
     69* USB for Boost.Asio
     70* Extension/reflection library (http://boost-extension.redshoelace.com/docs/boost/extension/index.html)
     71* std::packaged_task scheduler (like Intel TBB's with task stealing) for Boost.Thread. Note proposed Boost.AFIO already implements this.
     72* Filesystem abstraction + path cleanup (http://thread.gmane.org/gmane.comp.lib.boost.devel/238103)
     73* Pipes for Boost.Iostream (and maybe Boost.Asio for named/asynchronous pipes)
     74* Protocol implementations for Boost.Asio
     75* Factories for Boost.Flyweight (http://tinyurl.com/bktkc3s)
     76* Replace all uses of CAS spinlocks in all Boost libraries with memory transactions via BOOST_BEGIN_MEMORY_TRANSACTION. See https://svn.boost.org/trac/boost/ticket/9615.
     77
     78== Algorithms ==
     79* Radix sort
     80* Approximate string matching
     81* Full text search
     82* Near Duplicate Detection (shingling)
     83* Parallel algorithms (sort, for_each)
     84* Algorithms for gpgpu
     85* Kinetic scrolling
     86
     87== Data strutures ==
     88* Trie data structure, extending the work done during GSoC 2013.
     89* B-tree data structure, extending the work previously done by Beman Dawes.
     90* Concurrent containers (unordered_map, unordered_set, vector, forward_list)
     91* Slim string (as opposed to the fat std::string interface, maybe immutable, maybe policy based)
     92
     93== Media ==
     94* Hardware graphics (OpenGL/OpenGL ES/DirectX abstraction)
     95* Audio library (OpenAL/FMOD/etc)
     96* Video processing library (gil for video)
     97
     98== Games ==
     99* Physics library (ODE/Havok/PhysX/etc abstraction)
     100* Input library (like DirectInput/XInput)
     101* Ranking algorithms (elo/TrueSkill)
     102
     103== Databases ==
     104* Relational database library (http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Relational_Database_Access)
     105* Document database library (couchdb/mongodb/etc)
     106* Spatial indexes
     107
     108== Math ==
     109
     110* Geometry library (convince the developers to submit Eigen 3 to Boost)
     111* Investigate exporting multiple-precision types to Python via Boost.Python and interoperability with "symbolic python". See: [http://sympy.org/en/index.html]
     112
     113== Memory ==
     114* Memcache library
     115* Memswap algorithm
     116
     117== File formats ==
     118* JSON parsing libary
     119* XML library
     120
     121== Communication ==
     122* Channel library (http://channel.sourceforge.net/)
     123* RPC
     124
     125== GUI ==
     126* GUI library
     127
     128== C++ "extensions" ==
     129* Type switch library (http://tinyurl.com/n3449)
     130
     131== Hardware ==
     132* CPUID
     133