GSoC ideas
This is the ideas page for Public Lab's Google Summer of Code program. Many are slightly out of date or have already been built! Please go ahead and edit these if you see things that need changing, as well as add your new ideas.
For a quick flashback, see our 2013 GSOC page and 2013 mentor & student proposals
Mirrors of all our main repositories can be found here:
Who to contact with ideas/proposals
- plots-dev - the Public Lab developers discussion list. This is the list for programming related topics.
- plots-gsoc - the GSoC discussion list, more for GSOC logistics.
Either of these lists is fine; feel free to CC both.
How to post a proposal
Please first contact the above lists (even both!). Once your idea is more developed, please post a research note describing your proposal in detail. Tag it "gsoc".
High priorities
See more detail on these in the full ideas descriptions below; or add a more fleshed-out description if one is lacking.
Spectral Workbench
- the macros system
- the module which extracts the spectral data from an image
- auto-calibration
MapKnitter
- Re-implementation of image warping as a Leaflet plugin
- reading of image GPS (and tilt) EXIF data (such as time) for initial image placement
- Adding annotations layers to maps using a "text on image" style preferred by our users.
Infragram
- User interface overhaul
- Offline functionality (via HTML5 manifest) for in-the-field use (partially completed already: https://github.com/Pioneer-Valley-Open-Science/infragram-js/issues/45)
- Commenting, tagging, and RSS feeds for images
- OpenID integration with PublicLab.org
Spectrometry Projects
Related to the SpectralWorkbench.org open source spectral analysis platform
Links: https://spectralworkbench.org, http://github.com/jywarren/spectral-workbench
GPLv3
Project: automated spectrometer calibration
Description: Currently, in SpectralWorkbench.org, users manually click on known features in a fluorescent lightbulb spectrum to calibrate their spectrometer. Much better, easier, and more precise might be an automated way to pattern-match/recognize the mercury spectrum (such as this: ) and to auto-calibrate the spectrometer. The Capture interface could automatically recognize a mercury spectrum whenever you pointed the spectrometer at one, and prompt you to recalibrate. This could be developed in pure JavaScript using the Spectral Workbench API
Note: Much work has already been done on this, in two partially finished functions; $W.detect_peak(), found here, and $W.get_peak_pattern(), found here. Peak detection itself works all right, but the "peak pattern" method for matching it to a known reference needs a new approach.
List: plots-spectrometry
Links:
- http://publiclab.org/wiki/spectral-workbench-calibration
- http://publiclab.org/wiki/spectrometer
- https://github.com/jywarren/spectral-workbench/issues/45
Prerequisites: JavaScript, optional Ruby on Rails
Difficulty level: medium
Mentor: Jeff Warren (jeff@publiclab.org)
Project: import open spectral databases
Description: Determine which spectral databases can be used in an open source manner (such as perhaps the HITRAN and ASTER datasets) and import them, tagging them with their source and relevant metadata. Focus on near-infrared, visible, and ultraviolet ranges.
List: plots-spectrometry
Links: https://github.com/jywarren/spectral-workbench/issues/54
Prerequisites: Ruby/Rails, familiarity with open data licensing and database parsing/scripting
Difficulty level: easy
Mentor: Jeff Warren (jeff@publiclab.org)
Project: find closest matched spectra from database
Description: Given a spectrum from http://SpectralWorkbench.org, develop a search function for similar spectra. This project is largely technically complete, and needs mostly interface design and integration work.
List: plots-spectrometry
Links: https://github.com/jywarren/spectral-workbench/issues/53
Prerequisites: Ruby/Rails, some familiarity with (spectral) pattern matching
Difficulty level: easy
Mentor: Jeff Warren (jeff@publiclab.org)
Project: Baseline Macro to reset a baseline light source
Description: Use the JavaScript Spectral Workbench API and possibly some Ruby on Rails to develop a way to zero out baseline noise and input light source in the Spectral Workbench capture interface. This could simply involve storing the existing spectrum as an array and subtracting it from any new readings. It might involve a callback in the SpectralWorkbench API to filter incoming data from the device using a given function.
List: plots-spectrometry
Links: https://github.com/jywarren/spectral-workbench/issues/119 https://github.com/jywarren/spectral-workbench/issues/61 https://github.com/jywarren/spectral-workbench/issues/44
Prerequisites: JavaScript, Ruby on Rails
Difficulty level: Easy
Mentor: Jeff Warren (jeff@publiclab.org)
Project: Spectral Workbench Macros and API
Description: Expand and refine the API to a version 1.0, cleaning up existing functions and providing functions and good documentation for basic spectrometry analysis, data manipulation and visualization tools for the spectral data matching/search. Bonus: install an in-line JavaScript editor to make macro editing easier at https://spectralworkbench.org/macros
List: plots-spectrometry
Links:
- https://github.com/jywarren/spectral-workbench/issues?labels=matching&page=1&state=open
- Spectral Workbench API
- https://spectralworkbench.org/macros
Prerequisites:
Difficulty level: Easy
Mentor: Jeff Warren (jeff@publiclab.org)
Project: Revised Image to Spectrum converter
Description: Modularization and cleanup of the system for extracting quantitative spectral data from a line of pixels in an image from a spectrometer. Development of user interface for changing this extraction, using the format (x1,y1,x2,y2) to describe a cross section of the image to extract. Auto-detection of cleanest/best line to extract.
List: plots-spectrometry
Prerequisites:
Difficulty level: Medium
Mentor: Jeff Warren (jeff@publiclab.org)
Project: Expanded offline version of SpectralWorkbench
Description: The existing offline version of spectralworkbench.org, based on an HTML5 offline manifest, does not allow saving or calibrated data. This project would involve using HTML5 localStorage to store the image and metadata for offline-captured spectra for later upload.
Links: https://github.com/jywarren/spectral-workbench/issues/74 https://github.com/jywarren/spectral-workbench/issues/73
List: plots-spectrometry
Prerequisites:
Difficulty level: Easy
Mentor: Jeff Warren (jeff@publiclab.org)
Project: iOS version of SpectralWorkbench
Description: The current mobile version is web-based, and only runs on Opera for Android right now. But it is pretty nice: https://spectralworkbench.org/capture. The ideal is to wrap this already-working system in a native app so that any future interface changes can simply be pushed out on all platforms at once. A great deal of work has been done by Diego Rojas: https://github.com/inductionStep/spectralWorkbench_IOS
Note: the relevant HTML code in Diego's project is here: https://github.com/inductionStep/spectralWorkbench_IOS/blob/master/spectralWorkbench/spectralWorkbench/video.html We can substitute the necessary files from https://github.com/jywarren/spectral-workbench/tree/master/webserver/app/views/capture/ which are also listed in the offline manifest: https://github.com/jywarren/spectral-workbench/tree/master/webserver/public/index.manifest Is there a way to have it use the most recent version directly from https://spectralworkbench.org/capture ? Perhaps simply display a webview of that address, which will offline-cache?
List: plots-spectrometry
Links: https://github.com/jywarren/spectral-workbench/issues/116, https://github.com/inductionStep/spectralWorkbench_IOS
Prerequisites: iOS
Difficulty level: Medium
Mentor: Jeff Warren (jeff@publiclab.org)
Mapmaking Projects
Add an annotations layer to Mapknitter
Description: Use Leaflet to allow Mapknitter users to add layer of scale-locked polygons, symbols and text at a variety of angles to their maps.
List: grassrootsmapping, publiclaboratory
Links: http://publiclab.org/notes/mathew/03-14-2014/mapknitter-annotations-gsoc
Prerequisites: Javascript
Difficulty level: medium
Mentor: Mathew Lippincott (mathew@publiclab.org), Jeff Warren (jeff@publiclab.org)
MapMill Offline: cross-platform aerial image sorting app
Description: a desktop app that helps you sort big batches of aerial images quickly, with built-in filters:
Upon getting images from a camera:
- you'd plug the SD card in and drag the images into the app
- it'd plot the images' filesizes to help you find those with the sharpest focus
- it could do analysis to find if many images display the same region redundantly
- it'd offer to upload the images to MapKnitter for you as a batch, or copy them to a folder to share with other folks by SD card
List: grassrootsmapping, publiclaboratory
Prerequisites: desktop app design, or offline manifests for webapps
Difficulty level: easy-medium
Project: Sky Camera enhancements
Description: Sky Camera is an Android app that does continuous image shooting, taking a photograph automatically every 5-10 seconds, for attaching to a kite or balloon to take aerial photos. We'd like to improve it with any of the following:
- automatically rough-place images on a map in MapKnitter (see "georeferencing in Mapknitter" project below)
- Display info that'd be useful just before you launch:
- wind direction for your location (and/or a link to a website that shows it for any location)
- a link to our website for getting the materials to do a balloon or kite flight: http://publiclab.org/wiki/balloon-mapping
- And for after a flight (these are easy; just text and links):
- a link to MapKnitter.org and basic outline of how to make your images into a map
- tilt/compass data embedded as EXIF tags (this may already be working)
- KML output for the image overlay locations.
- Capture gps and other sensor data (yaw, pitch, roll, etc.) and simultaneously drive an interface to trigger a pair of Canon cameras in synch using CHDK.
- Consider ways to accommodate and record additional sensor inputs such as temperature and barometric pressure sensor. See (http://publiclab.org/notes/cfastie/10-8-2012/flight-temperature#comment-1635)
List: grassrootsmapping
Prerequisites: Processing and/or Java, Android
Difficulty level: easy-medium
Mentor: Stewart Long (stewart@publiclab.org), Jeff Warren (jeff@publiclab.org)
MapKnitter open source image rectification and GIS
Goal: spectrum pattern matching to identify oil contamination
List: publiclaboratory, grassrootsmapping
Links: http://github.com/jywarren/mapknitter
- GPLv3
Project: georeferencing in Mapknitter without base image data
Description: investigate and implement different methods of georeferencing images besides overlaying on existing aerial data. GPS, ground-target, or EXIF-embedded data could all be used.
List: publiclaboratory, grassrootsmapping
Links: https://github.com/jywarren/mapknitter/issues/64 https://github.com/jywarren/mapknitter/issues/10 https://github.com/jywarren/mapknitter/issues/65 https://github.com/jywarren/mapknitter/issues/73
Prerequisites: JavaScript/Prototype/Canvas element, Ruby/Rails
Difficulty level: medium
Mentor: Jeff Warren (jeff@publiclab.org), Stewart Long (stewart@publiclab.org), Ned Horning (horning@amnh.org)
Project: ability to upload just an image without making a map (drag-drop or from a phone), and it auto-geocodes and starts a map for you (prototype for MapKnitter.org 2.0)
Description: A simpler version of MapKnitter.org which streamlines the process of turning an aerial image into a georectified map -- this could use all the existing backend systems of MapKnitter, but would dramatically simplify the process of making a map out of a single image. It could even be done from a mobile phone.
List: publiclaboratory, grassrootsmapping
Links: https://github.com/jywarren/mapknitter/, https://github.com/jywarren/mapknitter/issues/73
Prerequisites: Ruby/Ruby on Rails, JavaScript
Difficulty level: Medium
Mentor: Jeff Warren (jeff@publiclab.org), Stewart Long (stewart@publiclab.org)
Project: implementing rubbersheeting in Leaflet, as a first step to porting the whole interface to Leaflet
Description: MapKnitter.org is built on lots of old, legacy code and uses OpenLayers for it's editing interface. We would like to port the editor (and the image-distortion interface) to Leaflet, and the first step would be to port the image distortion class (and matrix class) currently used in MapKnitter into a new Leaflet plugin.
List: publiclaboratory, grassrootsmapping
Links: https://github.com/jywarren/mapknitter/, https://github.com/jywarren/mapknitter/tree/master/public/cartagen/src/warper
Prerequisites: Javascript
Difficulty level: Medium
Mentor: Jeff Warren (jeff@publiclab.org), Stewart Long (stewart@publiclab.org)
Project: MapMill.org crowdsourced image sorting. Shift image storage to Amazon S3
Description: MapMill uses vast amounts of storage and we can't support large #s of uploads currently; this is better security and archiving too. Probably use paperclip gem in Rails along with jQuery Multiple File Upload: http://blueimp.github.io/jQuery-File-Upload/ So, batch upload with progress bars for each image.
List: grassrootsmapping
Links: http://github.com/jywarren/mapmill, https://github.com/jywarren/mapmill/issues/6
Prerequisites: Ruby on Rails, jQuery, Amazon S3
Difficulty level: Easy
Mentor: Stewart Long (stewart@publiclab.org), Jeff Warren (jeff@publiclab.org)
Improve warnings and provide alternatives when too many images to export a map with MapKnitter
List: grassrootsmapping
Description: One approach could be to warn user the number of images is more than can be exported and offer capability to clone map so user can delete images reduce the number to an exportable number. Another could warn user maximum number of images has been reached and not allow additional ones to be uploaded. Links: TBD
Prerequisites: JavaScript, Ruby on Rails
Difficulty level: Easy
Mentor: Stewart Long (stewart@publiclab.org), Jeff Warren (jeff@publiclab.org), Pat Coyle (pat@coyles.com)
Infrared Projects
Project: Image classification functions in Infragram.org
Goal: identify wetlands species and/or oil contamination with image classification methods
List: publiclaboratory, grassrootsmapping, plots-infrared
Links: http://github.com/Pioneer-Valley-Open-Science/infragram-js, http://github.com/jywarren/clashifier
- GPLv3
Links: https://github.com/jywarren/clashifier/issues/4 https://github.com/jywarren/clashifier/issues/3
Prerequisites: Node.js, some familiarity with classification algorithms like naive bayes or cartesian, or anything else
Difficulty level: medium
Mentor: Jeff Warren (jeff@publiclab.org)
Project: Commenting, tagging, and more social features for Infragram.org
Goal: Connecting Infragram.org via OpenID to PublicLab.org will allow for more peer support via image comments, annotations, and tags.
List: plots-infrared
Links: http://github.com/Pioneer-Valley-Open-Science/infragram-js,
- GPLv3
Prerequisites: Node.js, JavaScript, maybe Bootstrap
Difficulty level: medium
Mentor: Jeff Warren (jeff@publiclab.org)