This year the Scala team applied for the third time for the Google Summer of Code [1] program to work with enthusiastic students on challenging Scala projects and got accepted again!
Google invites students to come up with interesting, non-trivial problems for their favourite open-source projects and work on them over the summer. Participants get support from the community, plus a mentor who makes sure you don't get lost and that you meet your goals. Aside from the satisfaction of solving challenging problems, students get paid for their work. But wait, there's more! Successful participants also receive an official Google Summer of Code t-shirt! This is an incredible opportunity to get involved in the Scala community and get helpful support along the way.
Below we have collected a list of project ideas. The suggestions are only a starting point for students. We expect students to explore the ideas in much more detail, preferably with their own suggestions and detailed plans on how they want to proceed. Don't feel constrained by the provided list! We welcome any of your own challenging ideas, but make sure that the proposed project satisfies the main requirements mentioned here below.
The best place to propose and discuss your proposals is our "scala-language" mailing list (scala-language @ Google Groups, instructions to subscribe are available at http://www.scala-lang.org/node/199#scala [2]). This way you will get quickly responses from the whole Scala community.
This is the third time Scala team will apply for the GSoC. We had 6 projects in 2010 edition and 4 in 2011 and they were widely accepted by the Scala community. We encourage you to have a look at our Summer of Code 2010 [3] and 2011 [4] page to get an idea on what we and you can expect while working on Scala.
Please make sure to read carefully the instructions at the end of this page for requirements and submission details.
Here are some project ideas for you (our community members have posted more on the mailing list so have a look there as well):
Parallel collections [1] available in the Scala programming language since version 2.9 [2] are an easy way to leverage parallelism for multithreaded applications which are data-parallel. They parallelize bulk operations like collection traversal, transformation or filtering. This framework is generic in the sense that it can be extended with new collection types and it's modular in the scheduler implementation. Parallel collections can also be used from within Java, at the cost of a less clean syntax. Scala applications and libraries are compiled to the JVM bytecode, so they can easily be ported to the Android platform [5] [6].
Parallel collections have shown to be a useful extension to the Scala collection framework and can bring significant speedups for the JVM programs. With the arrival of the new multicore devices for the Android platform, an opportunity presents itself to port parallel collections to mobile devices and tablets. The goal of this project is to implement a task scheduler for the parallel collections on the Android platform, based either on a port of the fork-join pool for Java [3] [4] or the thread pool executors available on the Android platform, followed by a detailed performance evaluation to see how big the benefits are on Android.
[1] http://infoscience.epfl.ch/record/150220/files/pc.pdf [5]
[2] http://www.scala-lang.org/api/current/scala/collection/parallel/ParIterableLike.html [6]
[3] http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html [7]
[4] http://gee.cs.oswego.edu/dl/cpjslides/fj.pdf [8]
[5] https://github.com/jberkel/android-plugin [9]
[6] http://lampwww.epfl.ch/~michelou/android/scala-to-android.html [10]
The candidate should have experience with Scala and javascript. Knowledge of Play! [16] desired but not required.
Giter8 (https://github.com/n8han/giter8 [17]) is a command line tool to generate files and directories from templates published on github.
Scala IDE (http://scala-ide.org/ [18]) is the extension to Eclipse providing advanced editing and debugging support for the development of pure Scala and mixed Scala-Java applications.
Eclipse is a great platform to create development environments, but it can lack of flexibility as all extensions need to implemented in a Java VM compatible language inside a plug-in. This makes implementing and updating small features like a project template cumbersome.
Giter8, on the other side, is a project defined to allow everybody to create project templates with little to none knowledge on anything but the templating system used.
The idea is to combine these 2 projects together, to allow to create new Eclipse projects based on giter8 templates. The goal is to have a New Project wizard to choose and configure a template, and run the template engine to generate the new project. And to provide a set of templates for some of the Scala frameworks like Akka or Play, and some documentation about the specificity of creating a project template for Eclipse.
This may require to improve and extend giter8 to extract configuration information, and to make it support some of Eclipse characteristics.
Scala IDE is an application written in Scala for Scala. Giter 8 is written in Scala, is using sbt (https://github.com/harrah/xsbt/wiki [19]), and is mostly used by Scala projects. And we expect this project to be written in Scala. But the result will be usable by all, for any type of projects.
Sbt (http://github.com/harrah/xsbt [20]) is the build tool of choice for Scala projects. Sbt is infinitely configurable and can do a multitude of tasks: resolve dependencies, package projects, deploy artifacts, build and run tests, to name just a few. Sbt can be used to build both Java and Scala projects, and it widely deployed. The goal of this project is to add an Sbt console in the Scala IDE for Eclipse.
The Sbt console should work similarly to the command line console of Sbt. It should support command history, command completion, color highlighting. The console should be designed to be usable by other command line tools, such as the Scala Repl.
If time allows it, we can tackle a deeper integration of Sbt in the Scala IDE:
The candidate should have experience with Scala, and ideally with Sbt. You'll get to work closely with the Scala IDE and gain experience in Scala, Sbt and the Eclipse API plus your work may reach more than 10k users!
* List[T] but found List[List[T]] -> suggest .flatten or list.head
* Array[T] but found List[T] -> suggest .toArray (likewise for other types)
* etc
specs2 [22] is a library for Scala which provides support for writing "executable software specifications" in the form of Behavior-Driven-Development specifications or Test-Driven-Development unit tests. specs2 is integrated with Intellij IDEA at the moment but not ScalaIDE.
ScalaIDE is an environment development for the Scala language based on Eclipse. It support the editing/navigation of Scala code, incremental compilation, refactoring tools, "run" configurations and more.
Expected results:
An Eclipse plugin to execute specs2 specifications from the ScalaIDE. This plugin will allow:
This plugin could be either independent or based on the work-in-progress plugin for ScalaTest and offer a generic API for executing Scala tests/specifications.
Knowledge Prerequisite: Scala, Eclipse API
Skill level: medium to high.
Of course the list is non-binding and any reasonable project related to Scala that is proposed by student will be thoroughly reviewed.
This is the second time the Scala project has applied to the Summer of Code, and from last years experience, increased popularity of the language and stories of other mentor organizations we expect a high number of applications. First, be aware of the following:
The proposal will be submitted via the standard web-interface at http://socghop.appspot.com [25], therefore plain text is the best way to go. We expect your application to be in the range of 700-1500 words. Anything less than that will probably not contain enough information for us to determine whether you are the right person for the job.
Your proposal should contain at least the following information, but feel free to include anything that you think is relevant:
Links:
[1] http://code.google.com/soc/
[2] http://www.scala-lang.org/node/199#scala
[3] http://www.scala-lang.org/gsoc2010#
[4] http://www.scala-lang.org/gsoc2011#
[5] http://infoscience.epfl.ch/record/150220/files/pc.pdf
[6] http://www.scala-lang.org/api/current/scala/collection/parallel/ParIterableLike.html#
[7] http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
[8] http://gee.cs.oswego.edu/dl/cpjslides/fj.pdf
[9] https://github.com/jberkel/android-plugin
[10] http://lampwww.epfl.ch/~michelou/android/scala-to-android.html
[11] http://www.codeschool.com/
[12] http://tryruby.org/levels/1/challenges/0
[13] http://docs.scala-lang.org
[14] http://tryruby.org
[15] http://simplyscala.com
[16] http://www.playframework.org/
[17] https://github.com/n8han/giter8
[18] http://scala-ide.org/
[19] https://github.com/harrah/xsbt/wiki
[20] http://github.com/harrah/xsbt
[21] https://github.com/mysema/scalagen
[22] http://etorreborre.github.com/specs2/
[23] http://google-melange.appspot.com/document/show/gsoc_program/google/gsoc2012/faqs
[24] http://www.google-melange.com/gsoc/events/google/gsoc2012
[25] http://socghop.appspot.com/