Changes between Initial Version and Version 1 of SummerOfCode2017


Ignore:
Timestamp:
Jan 20, 2017, 2:49:21 PM (7 years ago)
Author:
Tim Graham
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SummerOfCode2017

    v1 v1  
     1[[PageOutline]]
     2= Google's Summer of Code 2017 =
     3
     4The application process for 2017 Google Summer of Code is coming soon, and Django applied as a mentor organization. Read [https://developers.google.com/open-source/soc/ Google's page] for more information on how the program works.
     5
     6Django's GSoC program is being coordinated by Tim Graham.
     7
     8== Mentors ==
     9
     10If you're interested in mentoring -- supervising a student in work on Django-related activities -- add your name, email, and the sort of projects you're interested in mentoring here:
     11
     12 * Tim Graham (IRC: timograham, timograham@gmail.com) - Anything, most likely.
     13
     14== Students ==
     15
     16Student application period opens March 20 ends on April 3.
     17
     18If you'd like to get started on your proposal early, we'll be looking for a few things.
     19
     20 * You'll need to have a concrete task in mind (some ideas are below) along with a solid idea of what will constitute "success" (you tell us). 
     21 * If your proposal is a single large feature, library or site, you'll need to present a detailed design specification. This proposal should be posted to [http://groups.google.com/group/django-developers django-developers], where it can be refined until it is accepted by the developer community.
     22 * We'll want to know a bit about you -- links to previous work are great, if any.  If you're proposing something ambitious, you'll need to convince us that you're up to the task.
     23 * You'll also need to provide us with a schedule, including a detailed work breakdown and major milestones so your mentor can know if and when to nag you :)
     24
     25Here's an example of an accepted proposal from a previous year:
     26* https://gist.github.com/chrismedrela/82cbda8d2a78a280a129
     27
     28Note that none of the ideas below are good enough to be submissions in their own right (so don't copy and paste)!  We'll want to know not just ''what'' you want to do but ''how'' you plan to pull it off.
     29
     30Don't feel limited to the ideas below -- if you've got a cool project you want to work on, we'll probably be able to find you a mentor.  We plan on approving as many projects as we possibly can.
     31
     32We're accepting any GSOC proposal that fits one of the following three categories:
     33
     34 * Work on Django itself - such as the ORM, forms, etc. This is what we've traditionally accepted GSoC entries in.
     35 * Work on tools to support Django - the dashboard (https://dashboard.djangoproject.com/) is a good example of an existing tool that would have fit into this category.
     36 * Work on libraries that supplement or add new features to Django to ease development - South and Django Debug Toolbar are good examples of existing projects that would have fit here.
     37
     38We're **not** looking for people to work on existing third-party libraries - we aren't able to guarantee commit access to them. We may allow an exception if a maintainer of the library in question agrees to help mentor beforehand.
     39
     40The broadening in scope is to allow people to work on new ideas to help Django development and developers without tying you down to having to implement it in the core codebase (and thus ruling out some projects that might otherwise be useful).
     41
     42We're still going to be strict with what we accept - you'll need to provide a strong use case for your idea and show that it would be useful to a majority of developers or significantly improve the development of Django itself.
     43
     44We're not looking for small groups of incremental updates - like "improve Django's Trac" - nor are we looking for impossible tasks, like "replace Trac with this brand new issue tracker I'm writing". What you propose should be a single project, achievable within the time period of GSoC, and something the core developers can help mentor you on.
     45
     46We're also not looking for sites or projects that are merely written in Django - this GSoC is not for you to propose your new forum hosting site or amazing Django-based blogging engine.
     47
     48Note that when you contribute code, you will be expected to adhere to the same contribution guidelines as any other code contributor. This means you will be expected to provide extensive tests and documentation for any feature you add, you will be expected to participate in discussion on [http://groups.google.com/group/django-developers django-developers] when your topic of interest is raised. If you're not already familiar with [http://docs.djangoproject.com/en/dev/internals/contributing/ Django's contribution guidelines], now would be a good time to read them - even if you're not applying to work on Django core directly, we'll still want the same level of contribution.
     49
     50== How can I improve my chances of being accepted? ==
     51
     52The best thing you can do to improve your chances to be accepted as a Django GSoC student is to start contributing now. Read up on [https://docs.djangoproject.com/en/dev/internals/contributing/ Django’s contribution documentation] and make yourself known to the core team by your contributions (ideally, related to the area of your proposal). That way, when it comes time to evaluate student applications, you’ll be a known individual and more likely to be able to get the attention you need to develop a proposal.
     53
     54== Communication ==
     55
     56All GSOC-related communication is handled via the [http://groups.google.com/group/django-developers django-developers mailing list]. Any proposals for GSOC should be submitted there, as well as discussion on the proposed projects and any updates that students post.
     57
     58Please be careful to keep content to the list clear and purposeful; if you have an idea, update, or criticism, please make sure you describe it in detail; it can be tedious asking people to clarify any vague statements.
     59
     60== Ideas ==
     61
     62Here are some suggestions for projects students may want to propose (please feel free add to this list!). This isn't by any means the be-all and end-all of ideas; please feel free to submit proposals for things not on this list. Remember, we'd much prefer that you posted a draft proposal and your rough timeline / success conditions to the [http://groups.google.com/group/django-developers django-developers list], even if it's already on the list below; it will help you get feedback on choosing the right part of a problem, as well as helping to see if there is any interest before you start drafting a full proposal.
     63
     64When developing your proposal, try to scope ideas/proposals to the 4-month timeline -- simply proposing to fix a ticket or two will probably result in your proposal being rejected in favor of a more ambitious one.  The GSoC '''does not cover activities other than coding''', so certain ideas ("Write a more detailed tutorial" or "Create demonstration screencasts") are not suitable for inclusion here.
     65
     66On the other side, though, be sure to be concrete in your proposal. We'll want to know what your goals are, and how you plan to accomplish them.
     67
     68In no particular order:
     69
     70=== Replace Form Media Class ===
     71* '''Complexity:''' Hard
     72
     73Quoting Loic on the [https://code.djangoproject.com/ticket/22298 ticket]: "My biggest issue with it is that it's a very naive approach to a complicated problem. It doesn't really fit with today's development practices where a project can easily grow to hundreds of static assets, where javascript offers concepts like AMD, where CSS gained preprocessors like LESS or SASS and where files are concatenated for performance.
     74
     75Having each input widget pull it's own assets can also be a performance footgun, and IMO it's hardy something we should recommend."
     76
     77You will need to come up with a design here. There are a variety of third-party libraries from which you might glean best practices however the frontend tech world is currently in a state of reinvention so it might be hard to develop a suitable API that might now but not in the future.
     78
     79=== Test framework cleanup ===
     80* '''Complexity:''' Low
     81
     82Django has an extensive test framework for Python code, a suite of tools to make server-side testing easier, and a project policy that no new code is added without tests. This has been a significant contributor to the stability of Django as a project.
     83
     84However, this now means that Django has a very large and powerful test suite without much separation or control from a user's perspective, so the goal of this project would be to add new options and suite types to allow running of specific types of tests, be they only a certain class (e.g. unit-tests only, selenium tests only) or excluding tests (such as the ones in contrib or third-party apps) from the main test run easily.
     85
     86Django's test suite is also very large with over 1000 models. In some areas, the tests are poorly structured and it is not clear where similar related tests should be placed. It is likely there may be some duplication of features tested, and there are certainly edge cases which are not tested. For example, standardising all the unit tests necessary for a particular model field type would be beneficial.
     87
     88Issues to consider:
     89 * How would users declare which tests they want to run?
     90 * Which tests should be enabled by default, and how hard should this be to change?
     91 * How will it be app maintainers run their tests?
     92 * Should there be additional hooks to, for example, allow tests to be run against different database backends in sequence?
     93 * Are there tools similar to the new `--debug-sql` option which would help developers working on Django?
     94
     95See also:
     96 * #13873 (more of a symptom of this problem)
     97 * Part of this task could be auditing [https://djangoci.com/view/All/job/django-coverage/HTML_Coverage_Report/ Django's coverage report] and adding missing tests and removing dead code.
     98
     99=== Improving the less popular database backends ===
     100* '''Complexity:''' Medium
     101
     102Django supports several database backends, but not equally. The less popular backends -- Oracle in core, as well as open-source backends outside core, could probably use some love. As an example, Oracle has some problems:
     103
     104 * The handling of case in database object names is problematic (e.g. #20487)
     105 * Add more issues?
     106
     107While these alone would not fill an agenda for a full GSoC project, an interested student could collect enough related issues -- perhaps in more than one backend -- to keep busy for the whole term.
     108
     109Keep in mind that for working on 3rd-party backends, a committer for the relevant backend will probably need to be involved in mentoring; however, given such involvement, Django will accept such GSoC projects.
     110
     111See also:
     112
     113 * [https://code.djangoproject.com/query?status=assigned&status=new&summary=~oracle&or&status=assigned&status=new&keywords=~oracle&col=id&col=summary&col=status&col=owner&col=type&col=component&order=priority Trac's list of Oracle issues]
     114 * Similar queries for 3rd-party backends should be added here
     115
     116=== SQLAlchemy / NoSQL integration ===
     117* '''Complexity:''' Medium
     118
     119With the success of the 2014 GSoC project to formalise Meta, we're now in a position to use that interface to do interesting things.
     120
     121A common request over the entire life of Django has been to use Django's forms (and in particular, Django's Admin) with data stores that aren't Django's ORM. SQLAlchemy is a popular choice for those using SQL databases; a number of NoSQL data stores have also been popular at various times.
     122
     123The aim of this project would be to take a set of models defined in a non-Django data store, and define the mechanisms necessary to expose those models in Django's contrib.admin interface. Daniel (last year's GSOC student) proved this was possible by providing a proof-of-concept interface to Gmail inside contrib.admin.
     124
     125There will be two parts to this project:
     1261. Developing a Django-Meta compliant interface for your non-Django data store of choice.
     1272. Fixes and improvements to Django itself as necessary to support (1)
     128
     129The code produced under part (1) would be a standalone repository and project, *not* a candidate for inclusion into Django itself. Django won't be gaining official SQLAlchemy support - but we will be able to point at a viable proof of concept.
     130
     131This project could be taken up by several GSoC students, with each student developing a backend for a different data store. If more than one student is accepted for this project, they'd be expected to coordinate efforts on any bug fixing and/or improvements required in Django itself.
     132
     133=== Template engine optimisation ===
     134* '''Complexity:''' Medium
     135
     136Django's Template Language is not known for its speed, but to date little work has been published on properly profiling its internals.  Many feel there is a lot of redundant work being done in the name of surety. The aim of this project would be to profile the engine and find ways to optimise the render process.
     137
     138This would best be achieved by constructing a suite of rendering benchmark tests so any chances can be evaluated meaningfully for their trade offs.
     139
     140=== Formset improvements ===
     141* '''Complexity:''' Low
     142
     143One of the big problems in web programming is making a request object available everywhere that it might be needed. Some frameworks tackle this problem by using a threadlocal. A threadlocal is essentially a global variable that allows you to access stateful information, such as the currently active request.
     144
     145Django takes a more structured approach, and encourages you to use function arguments and class attributes to pass around stateful information. This requires more discipline on the developer, but ultimately leads to more robust, less error-prone code that is easier to test.
     146
     147The counterargument to Django's approach is that passing the request around everywhere that it might be needed is difficult. Formsets are one example given in support of this - Django's formsets are a classic example where you might want to pass a request down to an internal form - but this is surprisingly difficult to do with Django's FormSet infrastructure.
     148
     149The problem isn't just about requests, either - there's a general problem in Django's FormSet and ModelFormSet objects that makes it difficult to pass in arguments to the Forms that are on them, or otherwise control the save process. This could be a request, the user that is making a particular change, or some other "ownership" related information.
     150
     151While it is *possible* to work around this problem, it *should* be a well documented, easy to use capability.
Back to Top