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

Google Summer of Code 2010

Daniel Grunwald edited this page Sep 15, 2012 · 2 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/

Results

These projects were worked on during GSoC 2010:

  • Visual Basic 2008 and 2010 support for SharpDevelop (Siegfried Pammer)
  • Code Quality Analysis (Tomas Linhart)
  • ReSharper features for SharpDevelop (Martin Konicek)
  • WPF Designer (Kumar Devvrat)

All projects were considered a success; and three of the four projects have shipped with SharpDevelop 4.0.

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

How to apply

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

If you want to discuss your idea with us or if you just want to introduce yourself and say hi, please feel free to contact us (preferably sooner rather than later). You reach us via email ([[gsoc@icsharpcode.net]]), the public forum (http://community.sharpdevelop.net/forums/) or IRC (irc://irc.freenode.org/#sharpdevelop). If you have any specific questions, please feel free to contact the mentors directly.

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 can really help you. Start by downloading ShaprDevelop from the SVN (see AccessingTheRepository) then study the parts of code related to your project. You can try to either write a quick prototype of your project or you can add some small feature.

Note that you can submit multiple applications. We strongly suggest that you focus on one application and try to make it as good as possible. However, you can also submit other application(s) for project(s) that you like as well. That would come handy if two really good students happen to apply for the same project. In that case we could still accept both of you and let one of you work on the backup project.

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

You can find the list of projects that you can work on bellow. 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. The project are grouped into categories depending on how important we consider them. Don't feel pressured to work to the high-priority ones - you might have less competition for the other projects. Ultimately, the most important thing is that you convince us that you are a capable student.

Requirements

You will have to write the code in C# and you should base it on the current SVN trunk (SharpDevelop 4.0). See AccessingTheRepository.

You are expected to be already familiar with the .NET and C#. You might also need to familiar with technologies related to the project you want to work on. Familiarity with SharpDevelop and the SharpDevelop source code is advantage but not necessary. All new GUI should be written in WPF.

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

Higher-Priority Project Ideas

{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 task is to update the parser to the VB 10 grammar, including 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.

For other language changes, take a look at the VB 10 language specification.

On top of improving parser support, the code completion implementation in SharpDevelop.Dom should be extended to handle the new node types. However, complex features like completion for XML literals (based on schema) are outside the scope of this project.

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
  • allow editing menus and toolbars
  • adorners for different controls to increase usability (offer shortcuts)
  • edit attached properties
  • allow using resources (maybe even creating/editing them?)
  • etc.

Furthermore changes in the designer should be immediately visible in the XAML source code (think side-by-side view, as in Visual Studio). Similarly, changes in the XAML source code should be immediately visible in the designer (that is, faster than 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 is 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:** WPF, (Reflection-API and Multi-threading wouble be advantage)
**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:** WPF, (Reflection-API wouble be advantage)
**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:** Medium-Hard (depends on the features)
**Required skills:** Experience with ReSharper advantage
**Mentor:** Matt Ward

ReSharper provides many great features that make the work of Visual Studio programmers easier. Your task would be to 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}

** F# Code Completion **

**Difficulty:** Varies
**Required skills:** F#, 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}

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

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

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}

** Host WF4 Designer in SharpDevelop **

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

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