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](/wiki/gsoc-2013) and [2013 mentor & student proposals](/wiki/gsoc-2013-mentors-and-student-proposals) Mirrors of all our main repositories can be found here: https://github.com/publiclab ###Who to contact with ideas/proposals * **[plots-dev](https://groups.google.com/group/plots-dev)** - the Public Lab developers discussion list. This is the list for programming related topics. * **[plots-gsoc](https://groups.google.com/group/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](/post) 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 for initial image placement **Infragram** * User interface overhaul * Offline functionality (via HTML5 manifest) for in-the-field use * 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](http://publiclab.org/wiki/spectral-workbench-calibration). 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](https://spectralworkbench.org/capture) 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](/wiki/spectral-workbench-api) **Note:** Much work has already been done on this, in two partially finished functions; $W.detect_peak(), [found here](https://github.com/jywarren/spectral-workbench/blob/master/webserver/public/javascripts/api.js#L121), and $W.get_peak_pattern(), [found here](https://github.com/jywarren/spectral-workbench/blob/master/webserver/public/javascripts/api.js#L95). 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](/wiki/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](https://spectralworkbench.org/capture). 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](/wiki/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 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 **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 ###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](/wiki/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)