Changes between Initial Version and Version 1 of SummerOfCode2015


Ignore:
Timestamp:
Jan 27, 2015, 1:24:54 PM (9 years ago)
Author:
Tim Graham
Comment:

Initial page

Legend:

Unmodified
Added
Removed
Modified
  • SummerOfCode2015

    v1 v1  
     1[[PageOutline]]
     2= Google's Summer of Code 2015 =
     3
     4The application process for [http://www.google-melange.com/gsoc/homepage/google/gsoc2015 2015 Google Summer of Code] is coming soon, and Django plans to apply to be a mentor organization (Read [https://developers.google.com/open-source/soc/ Google's page] for more information on how the program works.). If past results are an indication of the future, it's quite likely we'll be accepted as a mentor organization. This page is a placeholder for ideas in the meantime, since we seem to have a lot of eager people wanting to get started!
     5
     6Django's GSoC program is being run by TBA.
     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 (timograham@gmail.com) - Replace Form Media
     13
     14== Students ==
     15
     16Student application period opens March 16 ends on March 27.
     17
     18If you'd like to get started on your proposal early, we'll be looking for a few things. Note that we've widened our project scope this year!
     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== Communication ==
     51
     52This year we're doing all GSOC-related communication 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.
     53
     54Please 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, or having vital information drip-fed.
     55
     56== Ideas ==
     57
     58Here 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.
     59
     60When 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" or "[wiki:AddAPony Add a pony]") are not suitable for inclusion here.
     61
     62On 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.
     63
     64In no particular order:
     65
     66=== Replace Form Media Class ===
     67* "Complexity:" Moderate
     68
     69Quoting 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.
     70
     71Having each input widget pull it's own assets can also be a performance footgun, and IMO it's hardy something we should recommend."
     72
     73You will need to come up with a design here. There are a variety of third-party libraries from which you might glean best practices.
     74
     75=== Best practices updates ===
     76* '''Complexity:''' Moderate
     77
     78Over the years, as Django has evolved, the idea of what constitutes "best practice" has also evolved. However, some parts of Django haven't kept up with those best practices. For example, contrib.comments and contrib.databrowse aren't deployable apps in the same sense as contrib.admin. As a result, these apps can't be (easily) deployed multiple times, and they can't use URL namespacing.
     79
     80In addition, some features of Django's core have grown and evolved, and need refactoring. For example, validation is now performed in several places, but don't operate by hooking into the core 'validate' command. In addition, many aspects of the core validate command should be farmed out to the things that are being validated (e.g., the max/min conditions on a field should be validated by the field, not by a third party validator).
     81
     82In short, Django has been bad at eating it's own dogfood. The contents of contrib should be audited and updated to make sure it meets current best practices.
     83
     84Issues to consider:
     85 * What components need to be updated, and why?
     86 * How to do this update while maintaining backwards compatibility?
     87
     88See also:
     89 * #8579
     90
     91=== Test framework cleanup ===
     92* '''Complexity:''' Low
     93
     94Django 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.
     95
     96For the 1.4 release, we also included the basis of a client-side testing framework into Django (https://docs.djangoproject.com/en/dev/topics/testing/#django.test.LiveServerTestCase)
     97
     98However, 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.
     99
     100Issues to consider:
     101 * How would users declare which tests they want to run?
     102 * Which tests should be enabled by default, and how hard should this be to change?
     103 * How will it be app maintainers run their tests?
     104 * Should there be additional hooks to, for example, allow tests to be run against different database backends in sequence?
     105
     106See also:
     107 * #13873 (more of a symptom of this problem)
     108 * More tickets need to be added here
     109
     110=== Security Enhancements ===
     111 * '''Complexity:''' Medium
     112
     113Django has developed many security features over time. The existing set of security features is pretty good, but there's lots of room for improvement. Much of the work in this project will be related to cleaning up existing code to make it more obviously secure, eliminate edge cases, and and improve fallback handling.
     114
     115Some potential areas of work include:
     116 * Enhancing CSRF protection (#16859)
     117 * Centralizing randomized token issuance and validation
     118 * Building an interactive admin dashboard to display and check installation security parameters
     119 * Targeted Code audit for a specific list of security errors
     120
     121While an interest in security will make these tasks more interesting, most of them don't require you to be a security expert already. Your mentor will make sure your plan is correct before you code, and carefully review your work before it is committed to trunk. Most of these tasks will be significantly easier if you already have some familiarity with Django's codebase. A successful application will have a plan which selects related areas of work, provides details, and has a good estimation of complexity for the proposed tasks. Remember that (especially for security work) a good patch often has more lines of tests than code changes. An ideal applicant will be able to demonstrate the skill with Python and attention to detail necessary to make fundamental changes to Django without breaking existing code.
     122
     123Ideas that will probably not be accepted:
     124 * Adding database or cookie encryption support (unless you can provide a secondary mentor who is a crypto expert)
     125 * Proposals that strongly couple sessions with CSRF or Auth
     126 * Proposals to include external libraries in Django
     127
     128If you are interested in working on this project, please talk to us sooner rather than later! PaulM is usually available on IRC, and wants to help you write a really good application.
     129
     130=== Improve annotation and aggregation ===
     131 * '''Complexity:''' Medium
     132
     133The 2009 Summer of Code added the annotate() and aggregate() calls to Django's query arsenal. While these tools work well for simple arithmetic aggregates, they don't work well for date and string based queries. There are also use cases where you may want to annotate data onto a model that *isn't* an aggregate (for example, annotating the sum of two other aggregates).
     134
     135This project would continue where the 2009 GSoC aggregation project left off. This would be an excellent project for anyone wishing to gain an intimate understanding of Django's Query infrastructure.
     136
     137Issues to consider:
     138 * String concatenation and manipulation (e.g., annotate a model with the uppercase version of the first 5 characters of someone's name)
     139 * Grouping of results by date (e.g., show me a count of articles, grouped by day)
     140 * Allowing non-null defaults in aggregation (e.g., when a model has no related objects, use 0 not NULL)
     141 * Aggregates involving generic relations
     142
     143See also:
     144 * [https://code.djangoproject.com/query?status=assigned&status=new&keywords=~annotate&keywords=~aggregate&component=Database+layer+%28models%2C+ORM%29&col=id&col=summary&col=status&col=owner&col=type&col=version&order=priority Trac's list of ORM aggregation tickets]
     145 * The [source:django/trunk/django/db/query.py Django's QuerySet implementation]
     146
     147=== Reducing coupling in Django components ===
     148
     149* '''Complexity:''' Hard
     150
     151Django is currently delivered as a single monolithic download. This is largely for historical reasons; when Django started as a project, Python's packaging infrastructure wasn't especially mature. This situation has has improved over the years, and now Python has a rich set of packaging tools. In an ideal world, it would be possible to download "Just the Django template engine", or "Just the Django ORM", or "Just the Django forms layer"; the combined Django download would really be a meta-package install of all the required parts.
     152
     153There are two technical problems that need to be solved in order to make this happen.
     154 
     155 * Implement the packaging definitions to allow for multiple packages.
     156 * Clean up dependencies between components. Despite the best of intentions, there are some interesting dependencies between modules, some of which may need to be clarified or separated.
     157
     158The aim of this project would be to clean up one or more of Django's internal "parts" so that it could be delivered as a standalone package. This may not be something that can be immediately delivered - for example, it may be necessary to move or rename components to enable separate packaging. In this case, the project deliverable would be to document the strategy, and provide whatever initial moves in that direction are possible.
     159
     160A simpler version of this project would be to enable separate packaging and distribution of Django's contrib apps.
     161
     162=== Improving the less popular database backends ===
     163* '''Complexity:''' Medium
     164
     165Django 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:
     166
     167 * The handling of case in database object names is problematic (e.g. #20487)
     168 * Add more issues?
     169
     170While 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.
     171
     172Keep 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.
     173
     174See also:
     175
     176 * [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]
     177 * Similar queries for 3rd-party backends should be added here
Back to Top