GSOC 2015 Ideas

ofZach edited this page Feb 20, 2015 · 24 revisions

This page to collects ideas for suggested openFrameworks student projects for participation in Google Summer of Code 2015

If you're active in the openFrameworks community: If you have an idea that you would feel comfortable mentoring, feel free to add it. If you have an idea but need to find a suitable mentor, please bring it up on the oF mailing list; others can help you develop the idea and may volunteer to mentor.

If you're a prospective GSoC student: Read through the ideas and see if any interest you. But note that these are ideas, not project proposals; they may need details filled in or expanded to make a good project. Find an area that interests you and start a discussion on the oF-dev mailing list, even if it's just by asking more about the topic. Also, keep in mind that this list is just a starting point - some of the best projects are those that greatly expand on a proposed idea or are blue-sky proposals not mentioned on the ideas list at all.

A good proposal will be clear about the problem to be solved, the history of work in that area, and the specifics of the approach that the GSoC project will take. You can find some of those answers by reading the code and the issue tracker and searching the list archives, but discussing the idea with interested developers is a great way for both the student and mentor to reach an understanding of exactly what is to be accomplished. (Content adapted from git's excellent GSoC 2013 list)


Ideas:

openFrameworks project generator

Brief Description: A redesign for the OF Project Generator was recently proposed that simplifies the process, handles more use cases, and is more informative about what the process of preprocessing, compiling, and linking actually involves. This project would involve reviewing and tweaking the proposed design and implementing the functionality. It would be composed of two parts, a back-end app (with command line control) and a GUI app.

One of the largest challenges with getting beginners interested in C++ programming is dealing with different IDEs and making it easy to create new projects, modify existing projects, and deal with things like include paths, linking options and scripts to move resources around. This project will help address that, to allow users to spend less time fixing compile issues and more time sketching in code.

Expected results:

The creation of a library for parsing, modifying and saving project files for common IDEs. A graphical front end specific to openFrameworks that extends the current project generator with a host of new options and improvements. We've been developing CEF wrappers for openFrameworks that should be a great option for creating an easy-to-use GUI for the project generator.

Skill level: medium

Proposed by: Zach Lieberman (ofZach)

Possible mentors: Zach Lieberman, Patricio Gonzales Vivo

Internationalization

Brief Description: openFrameworks is an international project and must provide easy-to-use, standards-based international text / string support. For this project, we will make default encoding for strings UTF-8 aware, i.e. all functions that receive std::string (e.g. ofToUpper()) will assume UTF-8 encoded text. This can be accomplished using the updated Unicode support provided in POCO 1.6+ provides (Poco::UTF8::* functions for Unicode text transformations, digit information, UTF-8 codepoint traversal, etc).

Expected results:

  • Full Unicode integration and support
  • Initial Implementation of UTF-8 compatible StringUtils
  • Existing ofUtils string utilities (e.g. ofToUpper()) will point to StringUtils impl.

Skill level: medium

Proposed by: Christopher Baker @bakercp

Possible mentors: Christopher Baker @bakercp

Pixel density independence

Brief Description: Pixel density independence deals with the issue of rendering OF content exactly the same across displays with varying pixel densities. This includes seamless support for retina and non-retina devices and across any other pixel scale modes which may emerge in the future (e.g. ldpi, mdpi, hdpi, xhdpi, etc).

Currently on iOS devices and new-generation MacBook Pros, the retina feature means that 1 pixel on a non-retina device equals 4 pixels on a retina device under its default setting. Apple deal with different pixel densities by using ‘points’ for dimensions instead of pixels, so all calculations across non-retina and retina devices will be exactly the same and so will be the rendered content, irrespective of the different pixel dimensions. OF should implement the same strategy and deal with dimensions in terms of points, but also support the ability to work in pixels.

We should be careful to take into account other platforms apart from apple, Android has a much -more complex ecosystem so it’s probably a better reference as long as it doesn’t make things more complex than necessary for other platforms in which case it should be the exception. MS Windows High DPI support may also be considered.

Expected results:

  • Make variable pixel density work with ofFbo and ofTexture
  • Likewise, fonts, images and anything else that uses textures
  • Functions like getWidth() and getHeight() will need to return point sizes and not pixel sizes
  • ofTrueTypeFont (which already has DPI options on font loading) integrated to this new system and using screen DPI information

Proposed by: Zach Lieberman (ofZach)

Possible mentors: Zach Lieberman, Patricio Gonzales Vivo

Examples and tutorials publishing pipeline

Brief Description: openFrameworks has always had as it's core the methodology of showing by usage, and we've shipped the project with over 100 examples which has served us well. We think it's time to modernize this and include more examples from the community as well as update the existing examples to show newer modern conventions of using OF. We are also interested in finding a simple mechanism for helping people post examples and collating them in a site similar to ofxAddons. We have initial sketches for a publishing tool that would take screenshots or video of an application, add example code to a repo and provide a few simple forms to fill out for posting an example. The goal would be to make publishing and collecting OF examples as simple as calling a function ofPublish() or using a small tool that ships with openframeworks. These examples would be easily identifiable and collated on a larger site that helps people find, favorite and share interesting example projects.

Additional development effort could also be used in exploring how dynamic libraries such as DLLs and Dylibs could be used to help make openframeworks examples easier to load and unload. For example, projects like VAMP use a plugin model and easily allow you to move between different authors code.

Expected results:

  • updates to examples included with the openframeworks release
  • development of the ofPublish tool
  • initial proof of concept work on an examples site which collates community examples and helps you navigate them
  • proof of concept DLL / Dylib / .so pipeline for moving between different OF projects

Prerequisites: Knowledge of C/C++, git

Skill level: medium

Proposed by: Kyle McDonald

Possible mentors: Kyle McDonald

Installers

Brief Description: openframeworks has never had any installers (besides the Linux branch) as part of it's pipeline and several of the steps involved with installing openframeworks are easy to make mistakes on. For example, the codeblocks install on windows has very specific steps and having an installer would greatly improve peoples experience with openframeworks. In addition, we could see installers being an important part of any package management pipeline and/or helping us create system wide path variables that help mitigate some of the fragile-ness of our directory structure approach (ie, relative paths) to includes and linking.

Expected results:

  • installer pipeline for openframeworks for all major desktop platforms
  • a common architecture for cross platform management of OF installs
  • system level paths integration into project files, allowing for less breaking of projects as you move them around in your directory
  • provide system level (start menu, applications folder) integration of tools like the project generator, so that openframeworks becomes are more integrated part of the system

Prerequisites: Knowledge of C/C++, Bash scripting, osx/win/linux

Skill level: medium/high

Proposed by: Zach Lieberman

Possible mentors: Zach Lieberman / Write to the oF-dev mailing list.

Libraries management

Brief Description: openFrameworks at its core is a collection of outstanding 3rd parties libraries held together by a set of carefully designed bridge classes and functions that orchestrate novel interactions between these libraries and end user code. The addition of 3rd party libraries adds features, but also makes compilation across platform and staying up-to-date quite challenging. Thus, we must strike a balance between the number of 3rd party libraries shipped with the core and the features they offer. In some cases the right solution is to extract portions of other generously licensed open source libraries with proper attribution.

Currently, we are transitioning from hand-built libraries a home-grown scripting system called Apothecary. Much has been accomplished in preparation for the next OF release, but there is still quite a bit of work needed to streamline this process across platforms.

  • Streamline 3rd party library upgrade process
  • Use / Improve Apothecary.
  • Write and update Apothecary "Formulas" to automatically generate static 3rd party libraries for distribution.
  • Consider ways we can reduce OF's dependency on 3rd party libraries.
  • Further leverage existing libraries (e.g. Poco)
  • Host custom up-to-date ppas for Linux
  • Better leverage native shared libraries / features.
  • Upgrade all 3rd party libraries to latest versions.

Prerequisites: Knowledge of C/C++, Bash scripting, osx/win/linux

Skill level: medium/high

Proposed by: Zach Lieberman

Possible mentors: Elliot Woods @elliotwoods

Testing framework for openFrameworks

Brief Description: Come up with and implement a good and comprehensive automated testing system for oF. This is an effort which would greatly help OF development (as we could continually check PRs for breakage), but is of sufficient size and complexity to not be done in a week or so.

The challenge lies in both that OF, running on 5+ OSes, is heavily cross-platform (so it's tricky to get good coverage), and that much of the output of OF (sound, images, videos, network communication) is not easily testable with traditional (unit) tests. See issue #1068 for some discussion and some preliminary work with cpptest on the topic. See also this document developed during several online workshops.

Expected results:

  • An automated testing script/program (preferable using an established testing framework) which can be run either manually on multiple platforms or during a run of the build server, and is easily extensible.
  • Written tests for a significant/meaningful portion of the OF codebase.

Prerequisites: Knowledge of software testing will certainly be useful. Language will probably be C++, or maybe Python.

Skill level: medium/high

Proposed by: Christoph Buchner (bilderbuchi)

Mentor: Theo Watson

ofSketch - Version 1.0

The original prototype video is here.

Brief Description: ofSketch is a browser-based Processing-inspired integrated development environment (IDE) for openFrameworks. This IDE is designed to allow users to quickly test short sections of code and create sketches. During GSoC 2014, @bakercp and @brannondorsey successfully released an initial version of ofSketch that now runs on Windows, Linux and OSX. But there is still much work to be done!

Read an introduction to the first version here.

Other documents:

Expected results:

  • Further refine the ofSketch user experience.
  • Add smart code completion/indexing using clang (see this discussion).
  • Continue adding features and squashing bugs.
  • Create the ofSketch "eject" button, allowing users to export their project to Xcode, Visual Studio, etc.
  • Add better support for ARM based platforms (Raspberry Pi 2, etc)
  • Deploy ofSketch using Chromium Embedded Framework (CEF) or a similar system.
  • Integrate with ofDoc.

Prerequisites: Knowledge of web interface design will be useful, UI/UX experience will be very useful, and experience with the openFrameworks core will also be useful, but not required.

Skill level: medium

Proposed by: Christopher Baker @bakercp

Mentor: Christopher Baker @bakercp

Addon dependency management and packaging

Brief Description: One of the key components to openframeworks are the addons (ofxAddons.com), community contributed libraries. One of the hardest issues is helping to standardize and deal with dependancies between addons and we're sorely in need of some kind of package management solution. In addition, the site which houses addons ofxaddons.com could be overhauled to allow for more streamlined interaction with addons. This would involve discussion, conceptualization, design, and implementation of improved functionality and interface.

Prerequisites: For packagement work, experience with various package management systems and experience with python, bash, openframeworks and various IDEs. For ofxAddons development, the frontend is built with HTML/CSS/JavaScript, backend is written in Ruby.

Skill level: medium

Mentor: Write to the oF-dev mailing list.


Mentors:

If you're interested in being a mentor, add your name here. If there is a specific project you'd like to mentor, add the project in the ideas section. Otherwise, list any general areas of projects you'd be interested in mentoring.

  • Christopher Baker (openLab, SAIC)
  • Zach Lieberman
  • Patricio Gonzales Vivo
  • Theo Watson
  • Dan Wilcox
  • Also: of-dev list at large.


Application questions

1. Describe your organization.

openFrameworks is an open source C++ toolkit designed to assist the creative process by providing a simple and intuitive framework for experimentation. The code is written to be massively cross-compatible. Right now we support five operating systems (Windows, OSX, Linux, iOS, Android) and four IDEs (XCode, Code::Blocks, and Visual Studio and Eclipse). The API is designed to be minimal and easy to grasp. We are a diverse community of hackers, artists, designers, students, teachers from all over the world.

2. Why is your organization applying to participate in Google Summer of Code 2015? What do you hope to gain by participating?

openFrameworks has long been associated with education, but we've never had formal sponsorship or serious support for the project. Although it's not a teaching tool, per-se, it was designed to make programming in C++ easier for artists, designers and others who don't necessarily have a CS background or degree. We're an active community and would love to have stronger connections to students in the GSOC, and we've been heartened to see how beneficial it's been to Processing and other similar projects.

3. Has your organization participated in past Google Summer of Codes? (yes/no)

Yes (we participated with one slot "donated" by processing.org -- we were umbrella-ed under their application last year since our organization was not accepted).

4. If you answered “yes” to the question above, please summarize your involvement and the successes and challenges of your participation. Please also list your pass/fail rate for each year.

Last year we had one student, Brannon Dorsey who worked in collaboration with mentor Christopher Baker to successfully release the first version of ofSketch on Windows, Linux and OSX. The project is documented in our community generated book here. A quick video summer can be seen here. Since the summer, ofSketch has been used to teach C++ coding in numerous workshops around the country and in class settings at the School of the Art Institute of Chicago and elsewhere. We were particularly fortunate because both mentor and student were associated with the same school (The School of the Art Institute of Chicago), so quite a bit of in-person collaboration was possible. With the energy from the original release, development has continued and we hope to further develop this project during GSoC 2015.

Our pass rate is 100%.

5. If your organization has not previously participated in Google Summer of Code, have you applied in the past? If so, for what year(s)?

We applied for 2014, were not accepted and were given a slot under processing / processing.org.

6. What Open Source Initiative approved license(s) does your project use?

MIT license http://openframeworks.cc/about/license.html.

7. What is the URL for your Ideas list? This is the most important part of your proposal. Please make sure we can access it and it is complete when you submit this proposal. “Placeholder” or inaccessible ideas pages will be grounds for an automatic rejection for participation in Google Summer of Code 2015.

https://github.com/openframeworks/openFrameworks/wiki/GSOC-2015-Ideas

8. What is the main development mailing list for your organization?

of-dev@dev.openframeworks.cc (Subscribe/archive page here)

9. What is the main IRC channel for your organization?**

#openframeworks (freenode)

10. Who will be your organization administrators?

  • Zach Lieberman
  • Caitlin Morris
  • Christopher Baker

11. What criteria did you use to select the mentors? Please be as specific as possible.

Mentors are all active contributing members of the of-dev mailing list and openFrameworks community as a whole. The selected mentors have teaching experience in a range of environments. All mentors have expressed a strong interest in contributing time for mentoring and have indicated that they are available throughout the mentoring timeline. One mentor, Christopher Baker, was a mentor for the successful ofSketch project last year.

12. What is your plan for dealing with disappearing students? Please be as specific as possible.

Students will not work on their projects in isolation. Ideally, they will already be a part of the OF community and thus have reason to see the project through to a shareable result. They will also be integrated into the smaller of-dev community via the mailing list, IRC, meetups, etc. In addition to focused check-ins with their mentor, they will also share regular progress updates with the of-dev mailing list and receive further discussion and feedback from the group. These relationships will make students feel included and valued as part of the team and prevent them from disappearing. Building on the success of last year's project, we also aim to work with students with whom the mentors have some prior connection (either from school or some external collaborations), so we can be confident in their accountability prior to beginning.

13. What is your plan for dealing with disappearing mentors? Please be as specific as possible.

All mentors are highly active on the of-dev mailing list, which sees activity on a daily or near-daily basis. In case of a mentor being unresponsive, the organization administrators will reach out to the mentor through email, phone, and/or other networks. Other members of the mailing list have also indicated availability for support if mentors are in need of backup, discussion, or collaboration, or in case of emergency.

14. What steps will you take to encourage students to interact with your project's community before, during and after the program?

As students consider applying and develop their proposals, they are encouraged to join the of-dev mailing list and discuss their ideas and get feedback fleshing them out. Once accepted, they will give regular updates and discuss with mentors, the of-dev mailing list, and post on the OF blog to share with the entire community. At the conclusion, they will deploy their work and it will be shared with the community. Ideally, this might open conversations for future collaborations and contributions. Students could also serve as ambassadors in schools, helping to identify strong applicants for the following summer.

15. Are you a new organization who has a Googler or other organization to vouch for you? If so, please list their name(s) here.

The Processing Foundation has agreed to vouch for us.

16. Are you an established or larger organization who would like to vouch for a new organization applying this year? If so, please list their name(s) here.

N/A.

17. What will you do to encourage that your accepted students stick with the project after Google Summer of Code concludes?

As mentioned above, students will be fully integrated into the of-dev and larger OF community during the period of their projects. It is our hope that this experience will encourage them to continue participating and contributing, whether this is by continuing to develop the same project or working on some other aspect of OF development and outreach. We also plan to feature the results of their projects very publicly on the OF blog and social media, building support and recognition for their efforts and creative potential.