
GSoC ideas
This is the ideas page for Public Lab's Google Summer of Code program. Please go ahead and edit these if you see things that need changing, as well as add your new ideas. And reach out for help on the plots-dev list, in the left sidebar!
For a quick flashback, see
Our main repositories can be found on our Github organization page, but a clearer listing with descriptions is on our main developers page
Important -- to learn how to contribute to Public Lab software, see: http://publiclab.org/wiki/contributing-to-public-lab-software
Who to contact with ideas/proposals
Reach out on plots-dev - the Public Lab developers discussion list. This is the list for programming related topics.
Later we'll begin to use plots-gsoc - the GSoC discussion list, more for GSOC logistics. Used once GSoC begins, not for proposals, thanks!
How to post a proposal
Please first contact the above plots-dev list, and tell us what you're interested in and a bit about your experience. It's also great to hear if you've forked one of our codebases) and installed it on a test server. Done with that? How about running tests? Tell us how far you've gotten!
Once your idea is more developed, please post a research note describing your proposal in detail. Tag it "gsoc". Here is the template we used last year.
Contribution guidelines
Our Contributing to Public Lab Software page has our preferred guidelines for submitting changes. Please read it over!
We also love it when students show that they can work well with us by checking out some of our easier issues in PublicLab.org, Spectral Workbench, or MapKnitter, and even submitting a pull request. This gives us confidence that you've read our contribution guidelines and would be ready to jump into a project.
Ideas list
Here are the project ideas we're most interested in; however, we are also interested in any major feature request listed in our top project repository issue trackers, at Spectral Workbench, PublicLab.org, or MapKnitter -- so contact the plots-dev list (see above) if anything there interests you!
Mapknitter Annotations
Part of: [Mapknitter.org](http://mapknitter.org]
Description: building on 2014 mapknitter annotations project to get it live and integrated into Mapknitter. Read more on the state of development..
List: plots-dev@googlegroups.com
Prerequisites:
Difficulty Level: hard
Potential mentors: Jeff Warren, Liz Barry
Rich Profile Pages on PublicLab.org
Part of: PublicLab.org
Description: A major build-out of profile pages on PublicLab.org. Implement profile tagging for geographic data, role, tools, skills, and barnstars -- all highly requested features by the Public Lab community! Including:
- a table and Rails model for
profile_tags
- a form for tagging users on the /profile page (only to admins or the user themselves)
- some features built upon these tags, such as that only user.role == "admin" or the user themselves may create them
- user.has_tag(), .powertag(), and similar methods based on drupal_node's examples: https://github.com/publiclab/plots2/blob/master/app/models/drupal_node.rb#L235-L283
- a user map using tags like "lat:45.01" and "lon:-91.341" similar to this example: https://github.com/publiclab/plots2/blob/master/app/views/notes/tools_places.html.erb#L4-L15 (view live here: https://publiclab.org/places)
- a form for inputting location tags on a profile using an autocomplete input, similar to https://mapknitter.org/maps/new (code here: https://github.com/publiclab/mapknitter/blob/master/app/views/map/_new.html.erb#L29-L84)
List: plots-dev@googlegroups.com
Links:
- powertagging your profile for location, topics, and gear: https://github.com/publiclab/plots2/issues/104
- barnstars: https://github.com/publiclab/plots2/issues/167
- barnstars custom graphics (extra fun): https://github.com/publiclab/plots2/issues/265
Prerequisites: Ruby on Rails
Difficulty level: hard
Potential mentors: Bronwen Densmore, Jeff Warren, Liz Barry, Bryan Bonvallet.
Search and sorting
Part of: PublicLab.org
Description: This project is to develop searching and sorting tools to help organize Public Lab's open science and technology knowledge base. These features will also be used by community managers to help people develop their projects and connect to others. Longer story: The search box is located in the top bar and at this URL: https://publiclab.org/search/. It does not search through the content on profile pages, which is the primary place that people communicate their research interests when they first join the site. Tags are hugely important to knowledge organization on the site: tags create relationships between pages by linking bodies of research, and powertags add hierarchy (parenting), trigger inclusion on metapages like /places, or change graphic styling as in /blog, and much more. The top level tag page needs the ability to sort alphabetically and by frequency of use. Tag sorting will also help moderate spam because even when spam is removed, any tags used remain in autosuggest. Sorting will also be useful on https://publiclab.org/people.
List: plots-dev@googlegroups.com
Links:
- add more types of sorting to /profiles (AKA /people) https://github.com/publiclab/plots2/issues/317
- implement tag sorting https://github.com/publiclab/plots2/issues/179 and tag optomization: https://github.com/publiclab/plots2/issues/99
- expand search to include profile content (for admin users): https://github.com/publiclab/plots2/issues/209, currently only accessible via datadumps: https://github.com/publiclab/plots2/issues/308
Prerequisites: Ruby on Rails
Difficulty level: hard
Potential mentors: Jeff Warren, Liz Barry, Bryan Bonvallet, Dan Henry
Browser-based Arduino sensor data transfer using WebRTC and headphone jack
Description: A way to read data off of sensors from a website, using only an audio cable, building on modem.js and SoftModem (see links). Dramatically eases connecting to a sensor using a laptop or smartphone directly from a web page, no software installation necessary.
List: plots-dev@googlegroups.com
Links:
- https://github.com/dolske/modem.js
- https://github.com/arms22/SoftModem (poor/no documentation)
- Example hardware, notes, and software links: http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_92&products_id=2199
- Discussion on using SoftModem in Arduino forums: http://forum.arduino.cc/index.php?topic=86351.0
- Another related tutorial: http://learn.linksprite.com/arduino/shields/softmodem-data-communication-a/
- discussion: https://groups.google.com/forum/#!searchin/plots-airquality/audio/plots-airquality/3b3Y2vrMsoI/xebM6kNBEgAJ
Prerequisites: JavaScript, Arduino
Difficulty level: medium/hard
Potential mentors: Jeff Warren
Distortable image ordering in MapKnitter
Part of: MapKnitter, Leaflet.DistortableImage
Description: Create simple methods for ordering images in Leaflet.DistortableImage, the heart of MapKnitter, and saving these asynchronously in MapKnitter. Modification of export system to accept an order
parameter. This could also integrate disabling images from export using: https://github.com/publiclab/mapknitter/issues/36
List: plots-dev@googlegroups.com
Links:
- https://github.com/publiclab/mapknitter/issues/116
- https://github.com/publiclab/Leaflet.DistortableImage
Prerequisites: Ruby on Rails, JavaScript/jQuery
Difficulty level: medium
Potential mentors: Diana Di Leonardo, Jeff Warren
Queue-based MapKnitter export system
Part of: MapKnitter
Description: De-couple MapKnitter main app from GDAL-based export queue to enable better scaling of exports and fewer interruptions of primary MapKnitter.org service during large exports.
List: plots-dev@googlegroups.com
Links:
- https://github.com/publiclab/mapknitter/issues
- https://github.com/publiclab/mapknitter/blob/master/app/models/map.rb#L200
- https://github.com/publiclab/mapknitter/blob/master/app/models/warpable.rb#L152
Prerequisites: Ruby on Rails, GDAL, asynchronous queue-based server architecture, Amazon S3
Difficulty level: medium
Potential mentors: Jeff Warren, Bryan Bonvallet, Dan Henry
Commenting on specific wavelengths in Spectral Workbench
Part of: Spectral Workbench
Description: Enable comments on specific wavelengths which highlight those wavelengths in the displayed spectrum graph.
List: plots-dev@googlegroups.com
Links: https://github.com/publiclab/spectral-workbench/issues/45
Prerequisites: JavaScript, Ruby on Rails, possibly d3.js
Difficulty level: easy
Potential mentors: Jeff Warren
Expanded Q&A system for PublicLab.org
Part of: PublicLab.org
Description: This is a critical step for moving from a separated email and website structure towards clearly answered questions prominently featured as the knowledge base of Public Lab. This project features a posting form, styling for presentation, answering feature, more outreach display for recruiting, integration with Rich Profiles to feature helpful people, displays of common questions. Longer story: Currently as things stand now, the same questions get asked again and again on the email forums, which is totally fine but we think we can do a little better. Often the questions are the same "getting started" questions that are commonly compiled into an FAQ, however, in our experience, static FAQs quickly expire as new developments outpace documentation. A "Stack Overflow" model would allow questions to be re-answered over time, while preserving links into the wikis and notes of PublicLab.org. Adding a Q&A layer over publiclab.org/research and publiclab.org/wiki would give a question-asker confidence that a particular bit of documentation answers a particular question they have.
List: plots-dev@googlegroups.com
Links:
- Closest: https://github.com/publiclab/plots2/issues/162
- Stub wiki page: https://publiclab.org/wiki/q-a
- more background: https://github.com/publiclab/plots2/issues/209
Prerequisites: Ruby on Rails, JavaScript/jQuery
Difficulty level: easy
Potential mentors: Liz, Dan Henry
Internationalize publiclab.org
Part of: PublicLab.org
Description: Internationalizing the plots2 codebase is the step required so that publiclab.org can be translated into other languages. Longer story: Internationalization is the process of designing a software application so that it can potentially be adapted to various languages and regions without engineering changes. Localization is the process of adapting internationalized software for a specific region or language by adding locale-specific components and translating text. Localization (which is performed multiple times, for different locales) uses the infrastructure or flexibility provided by internationalization (which is ideally performed only once, or as an integral part of ongoing development). So far, all we have is that you can tag a post or wiki with "lang:es" for spanish, you can see all content in Spanish by going to https://publiclab.org/tag/lang:es . You could do the same with any language code, like "lang:fr". We have also made sure all character sets work in page content, although are not sure about titles, due to URL generation. What would success look like for this project? Once internationalization is in place, people can localize the footer, header, sidebars, menus, posting forms, etc. A related project is to figure out which crowdtranslation platform would be good -- it would be simplest for the existing publiclab community to use github to track changes and versions, however, there are existing really successful platforms for translation especially in Chinese for video content. Finally, we would be able to have subdomains for each language like es.publiclab.org (for espanol) etc.
List: plots-dev@googlegroups.com
Links:
- start with the footer and header since they are not complex: https://github.com/publiclab/plots2/issues/393
- email thread that has been going on since 2014 (!): https://groups.google.com/forum/#!topic/plots-dev/zv78dEQC42o
- once this project is done, we can choose a platform for actually doing the translations: https://github.com/publiclab/plots2/issues/395
Prerequisites: Ruby on Rails
Difficulty level: easy to tackle the header and footer, but beyond that possibly hard because it would eventually touch almost every part of the template code.
Mentor: Liz Barry