Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Google Summer of Code 2011

DavidSrbecky edited this page Mar 18, 2010 · 87 revisions

Google Summer of Code 2010

Google Summer of Code is a program that offers student developers stipends to write code for various open source projects. It has taken place for the last five years and the last year 150 organizations and 1000 students took part in the program. In order to participate in the program, you must be a student. The stipend is worth 5500 USD per accepted student developer - 5000 USD goes to the student and 500 USD goes to the mentoring organization.

For more information about the program see http://code.google.com/soc/

SharpDevelop

SharpDevelop is an open source IDE for C#, VB.NET and other languages on the .NET platform. It is typically used as an alternative to Microsoft's Visual Studio .NET. It includes features like a forms designer, code completion, code generation, integrated debugger, refactoring support, SVN integration, code conversion between C# and VB.NET, integrated support for testing and many other features. The project is as old as the .NET platform itself - it started in the year 2000 and it has been actively developed ever since. SharpDevelop is translated by the community to over 18 languages and it is downloaded 2000 times each day.

For more information see the homepage: http://www.icsharpcode.net/OpenSource/SD/

Screenshot of SharpDevelop

Our project participated in GSoC 2009. The following student projects are already part of SharpDevelop 4.0:

  • XAML Code Completion (Siegfried Pammer)
  • Entity Framework EDM Designer (Philipp Maihart)
  • Debugger Visualizers (Martin Konicek)

The customizable shortcut feature is scheduled for 4.0 inclusion, the C++ backend binding is part of the extension source samples.

Contacts

If you are interested in any project or if you have an idea of your own, please send us a short mail to: [[[email protected]]]

You can also reach us thought the public forum: http://community.sharpdevelop.net/forums/

We have set up an IRC Channel at irc://irc.freenode.org/#sharpdevelop

If you have any specific questions, please feel free to contact the mentors directly.

Mentors

David Srbecky Email/MSN/XMPP: dsrbecky(at)gmail.com
Skype: dsrbecky
ICQ: 153888796
Daniel Grunwald Email: daniel(at)danielgrunwald.de
Matt Ward Email: mrward(at)users.sourceforge.net
Bernhard Spuida Email: bernhard.spuida(at)gmail.com

How to apply

You need to submit your application before the 9th April 2010. The application is submitted via Google. Do not send the applications directly to us. You can can find the template of the application here.

If you want to discuss your idea with us, please feel free to contact us. (preferably sooner rather than later)

Please try to submit your application early even if the application still is not polished - just mention that you are still working on it. You can still edit the application after you submit it. This way, we might be able to give you some early feedback, but most importantly, you will have the application submitted. It is very easy for something to go wrong just before the deadline (eg. overloaded server or you can just get the time wrong) and the online system is very strict - if you are even just one minute late, it will not let you submit it.

We suggest that you start coding even before the application deadline. Some preliminary code allows us to see that you can understand and extend the SharpDevelop source code. It also show us that you are motivated and can write good C# code. Last year we had only 5 slots for 50 applicants so demonstrating you capabilities soon can really help you.

Note that you can submit multiple applications. We strongly suggest that you focus one application and try to make it as good as possible. However, you can submit an application for some other project(s) that you like as well. That would come handy if someone great applies to your project as well. We could accept you for the other project rather then having to pick just one of the students.

See this page for some advice: http://code.google.com/p/google-summer-of-code/wiki/AdviceforStudents

Project Ideas

Note that you will be expected to complete most of the projects in C#. This list is by no means exhaustive or fixed. Feel free to modify the ideas to your liking or come up with your own idea. We really value student generated ideas (see below).

Higher-Priority Project Ideas

{BR}

** VB 10.0 code-completion support **

**Difficulty:** Hard
**Required skills:** VB 10
**Mentor:** Daniel Grunwald

This involves adding support for the new VB 9.0 and VB 10.0 features to SharpDevelop's code-completion engine. This is shared between C# and VB, so some features for LINQ support are already present and just need some adjustment because VB has different LINQ features.

Links and References: {BR}

{BR}

** VB 10.0 parser (XML literals) **

**Difficulty:** Hard
**Required skills:** VB 10, Knowledge of LL-parsers
**Mentor:** Daniel Grunwald

The VB parser in NRefactory needs to be improved for VB 9.0 and VB 10.0. The main task would be to add support for XML literals. This requires adding the node types to the abstract source tree; and implementing a lexer and parser for VB's XML literals. The existing VB lexer needs to enter some kind of special mode when it detects an XML literal, as VB uses different lexical rules in XML literals. See the VB specification for details.

Links and References: {BR}

{BR}

** WPF designer **

**Difficulty:** Medium-Hard
**Required skills:** WPF, Xaml
**Mentor:** Daniel Grunwald

The WPF designer is the most important feature of SharpDevelop 4.x. It should contain different editing features. The basic grid editing features are implemented, things that need to be done include:

  • specific Canvas, Stackpanel, Dockpanel editing
  • adorners for different controls to increase usability (offer shortcuts)
  • etc.

Furthermore changes in the designer should be immediately visible in the XAML source code. Similarly, changes in the XAML source code should be immediately visible in the designer (that is, faster then reloading the whole XAML file). We have some ideas about how to do this. In particular, we have a our own custom XML parsing library that can notify you when parts of the XAML file are changed. (but this for you only if you're interested in implementing a difficult feature)

Difficulty varies based on which features you plan to implement. We expect your GSoC application to contain a detailed list of the features you want to implement. You could just try the existing WPF designer to see what's missing. Then, please discuss your feature list with us before submitting your application!

{BR}

Debugger GUI

**Difficulty:** Medium (A lot of work though)
**Required skills:** Reflection-API, WPF, (Multi-threading)
**Mentor:** David Srbecky

The debugging user interface needs some improvements and additions:

  • The pads need to be rewritten to WPF
  • Allow the user select which handled exceptions should break execution
  • Allow the user select which MDAs should break execution
  • Some usability improvements in the tooltips (Edit values, Search by name, "Star" some names, "Pin" the tooltip)
  • Rewrite options page to WPF
  • Parallel tasks pad (see Visual Studio 2010)
  • Parallel callstacks pad (see Visual Studio 2010) Low-priority?
  • Anything else you can think of...

The items are relatively small so you might be able to do all of them. However, doing just a few of them well would be fine as well.

{BR}

Medium-Priority Project Ideas

{BR}

** Debugger Visualizers **

**Difficulty:** Medium
**Required skills:** Reflection-API, WPF
**Mentor:** David Srbecky

Create some interesting and useful debugger visualizer. It is up to you to come up with some ideas. You can create one complex visualizer or several simple ones.

The visualizers should be written in WPF.

Porting of some open-source Visual Studio visualizers might also be an option - however, discuss that with me first.

Links and References: {BR}

{BR}

** Implement some ReSharper features **

**Difficulty:** Easy
**Required skills:** Experience with ReSharper advantage
**Mentor:** -

ReSharper provides many great features that make the work of Visual Studio programmers easier. You task would be implement some of these features in SharpDevelop as well.

For example:

  • Quick-fixes for some common compile errors
  • Navigation short-cuts
  • Refactorings(although SharpDevelop already implements several of these)

Feel free to pick any ReSharper features that you think are important or come up with your own ideas. The goal is to make life of SharpDevelop programmers easier. Most of the features do not seem particularly difficult so you might be able to implement quite a few of them.

Links and References: {BR}

{BR}

** Code Quality Analysis **

**Difficulty:** Medium
**Required skills:** NRefactory, Background in Code Analysis
**Mentor:** -

Code Quality Analysis is important, it is even more important to have that directly integrated into the IDE and that it works out-of-the-box. You can think of CQA as the following:

  • dependency graphs/matrices
  • analysis of code complexity using metrices
  • find unused/dead code
  • etc.

A good example of CQA is NDepend. It was launched as an OSSP, as it became very successful it was turned into closed source. Internally it used components created by the SharpDevelop team, e. g. NRefactory.

NDepend had a wide acceptance in the Windows .NET Open Source world and you can help to bring it back.

Links and References: {BR}

{BR}

** Code Generation / Model-First Support for EDM**

**Difficulty:** Easy-Medium
**Required skills:** Entity Framework
**Mentor:** -

Use T4 from MonoDevelop. T4 is text templating system which is supported in Visual Studio. It is quite similar to the other know templating systems such as MyGeneration and CodeSmith.

The goal of the project would be to implement support for T4 and then write templates for the Entity Framework that will generate SQL code necessary to create a database on the server.

Note that MyGeneration is open-source some parts of it might be useful.

Links and References: {BR}

{BR}

Lower-Priority Project Ideas

{BR}

** F# Code Completion **

**Difficulty:** Varies
**Required skills:** Knowledge of LL-parsers
**Mentor:** Daniel Grunwald

There is no code-completion for F# yet, which would be the most important feature for F# (visual designer support is rather low for this language)

{BR}

** Host WF4 Designer in SharpDevelop **

**Difficulty:** Varies
**Required skills:** -
**Mentor:** -

Includes Debugging support

{BR}

** Code-completion for C++/CLI **

**Difficulty:** Hard
**Required skills:** Knowledge in compiler theory;
**Mentor:** -

Low-priority project. Difficulty varies depending on the level of support of the language. Parsing C++ is extremely hard, you will be required to pick and reuse an existing open-source parser implementation. clang might be an option.

Forum Discussions:

{BR}

** Improve NRefactory Pretty Printing **

**Difficulty:** Easy
**Required skills:** -
**Mentor:**

Create a 'reformat code' command for C# and VB that uses the PrettyPrinter in NRefactory (see NRefactory in src\Libraries\NRefactory) to reformat the code. The code for the command itself is trivial - it's like the single-file C# <-> VB converter, just without the conversion part :)

The main work will be in these aspects:

  1. Create a user interface for the available formatting options. Please do not use XML Forms like existing SharpDevelop option panels - simply create a Windows Forms or WPF user control.

  2. Improve NRefactory output options (e.g. maximum line length).

  3. Improve preserving the position of comments. At least in the most common cases, should "stay in position" (currently NRefactory will move comments onto their own line).

NRefactory is also used by MonoDevelop, so you might want to coordinate with Mike Krüger.

Links:

{BR}

** Edit and Continue for C# **

**Difficulty:** Hard
**Required skills:** Compiler design
IL bytecode
**Mentor:** David Srbecky

Low-priority project.

You do not have to worry about the debugger/runtime side of this. What we need is a C# compiler that is able to generate updated IL code, metadata and symbols. Modifying the Mono C# compiler is probably the best way to go.

The scope of this project is limited to just being able to modify a body of a method. For example, adding of a new method is not supported. We are limited by the capabilities of the .NET Framework anyway.

The problem is that the current Mono compiler compiles the source code and then exits (forgets all the intermediate data). If a body of a function is modified, it is not necessary to recompile the whole project. It is only necessary to recompile the function and get the new IL code. However, to do so, the compiler has to remember some of the state - all the already compiled classes and their members.

Links and References: {BR}

{BR}

** Edit and Continue for any language **

**Difficulty:** Medium to hard
**Required skills:** IL bytecode
**Mentor:** David Srbecky

Low-priority project.

This is other approach to Edit and Continue. It is more general, but also slower. Instead for modifying the compiler, just recompile the whole program and then find differences between the old and new assembly.

Mono Cecil is probably best for reading the assemblies.

Links and References: {BR}

{BR}

Student generated Ideas

Feel free to come up with an idea of your own.

You can also look for additional ideas on the following two pages: {BR} (You might need to expand or trim down an idea to make it suitable as a project) {BR}

You can also find some ideas in the comments of this blog post

In any case, note that you will be expected to work on the project for over two months and you will be paid 5000 USD for it. The project has to be sufficiently large so that you deserve the money - we are unlikely to accept a proposal that we can accomplish ourselfs over the weekend. On the other hand, do not be too ambitious - it much better to do smaller project very well than to promise too much and fail.

Other random ideas (unsorted)

** Team Foundation Server source control plugin (using http://code.google.com/p/opentf/) **

** Silverlight (based on WPF Designer, support for Windows Phone 7 Series) **

** UML with roundtripping **

** DGML Viewer **

Clone this wiki locally