This is the ideas page for Public Lab's [Rails Girls Summer of Code](https://railsgirlssummerofcode.org/) and [Google Summer of Code program](/gsoc), programs for student fellows to work on free and open source projects. **Important** -- if you're new to Public Lab software contributing, see our **[Welcome page](https://code.publiclab.org#r=all)** and our [Contributing page](/wiki/contributing-to-public-lab-software) ## Get in touch We love to hear from new contributors! Reach out on **[the developer mailing list](https://groups.google.com/group/plots-dev)** - or in [our chat room](/chat). We've embedded a small chatroom right here: ## Contribution guidelines Our [Contributing to Public Lab Software](/wiki/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 trying a `first-timers-only` issue, 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. To get started, see our welcome page: > Welcome page: https://code.publiclab.org/#r=all **** ### How to post a proposal (for students) Please first leave a comment on the post below, 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](/wiki/developers)) and installed it on your computer [or a test environment](). Done with that? How about running tests? Tell us how far you've gotten, and ask us for help -- we're happy to help you get started! Read the call for proposals, ask questions, and post your ideas: > [Brainstorm for our ideas list here](https://publiclab.org/notes/warren/01-02-2019/brainstorming-for-summer-of-code-2019) ## Questions [questions:soc] **** ## 2019 Ideas The following have been reviewed and formatted by our Summer of Code team. Mentors, please add your name by any project you'd be able to mentor with! ### Sensor data upload and display library **Part of:** https://github.com/publiclab/plots2 (though will be in standalone repository) **Description:** Many people across Public Lab and in DIY environmental work create and need to manage data easily without being a programmer. This will be a web-based JavaScript + HTML library which will allow drag-and-drop of CSV sensor data onto web platforms such as PublicLab.org, but will maintain modularity as a reusable library. It would feature: - simple configuration menu for graph type - use of a simple standard graphing library like chart.js or any reasonable alternative - data column selection - browse-able time slider - see https://github.com/publiclab/PublicLab.Editor or https://github.com/publiclab/inline-markdown-editor for modular examples - one-click "open in ____" system for WTFCSV and google spreadsheets (list of export options) - (additionally) display of per-user data list on publiclab.org, so you can see all the CSVs you've uploaded in a list; https://publiclab.org/data/_____, perhaps? **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, some Ruby on Rails **Difficulty Level:** medium **Potential mentors:** Jeff Warren, ADD YOUR NAME HERE **** ### Leaflet Environmental Layers **Part of:** https://github.com/publiclab/leaflet-environmental-layers **Description:** LEL - a collection of different environmental map layers in an easy to use Leaflet library. This new library is rapidly seeing many new layers, and we need some additional structure to help make the display/management of this amazing data smoother. This would include: - additional layers for oilandgasthreatmap.com, OpenStreetMap tag-based data layers, higher resolution wind data, and more - improved layer management system with bounding boxes + zooms - standardization of layer types (tile, rss, csv, geojson, polygonal) - improved workflow for incorporating and accepting new layers (submission template) - layer source versioning - unique-id based layer toggling in URL hash - standardization of per-item popover UI (image, description, source, toggle, link) **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Leaflet JS **Difficulty Level:** medium **Potential mentors:** Jeff Warren, ADD YOUR NAME HERE **** ### Image Sequencer (multiple possible projects) **Part of:** https://github.com/publiclab/image-sequencer **Description:** Image Sequencer is a general purpose, step-by-step image processing library in pure JavaScript, which we are building out to support a range of image-analysis tasks across Public Lab and beyond. We have a rang e of big projects we are eager to implement to dramatically improve performance, implement much-needed new module types, and more: - Opaque meta modules (ability to make a new module out of a combination of other modules): https://github.com/publiclab/image-sequencer/issues/315 - text overlay module (multiple approaches; https://github.com/publiclab/image-sequencer/issues/431) - Performance: webgl, webassembly acceleration, worker threads: https://github.com/publiclab/image-sequencer/labels/performance - Gallery of real-world and environmental use cases: Colorimetry tool, particle sizing + analysis https://github.com/publiclab/image-sequencer/issues/707 **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, nodejs **Difficulty Level:** medium **Potential mentors:** Jeff Warren, ADD YOUR NAME HERE **** ### Community Toolbox **Part of:** https://github.com/publiclab/community-toolbox **Description:** Community Toolbox has become a core part of our success in growing our community and welcoming newcomers. Now we seek to refactor, standardize it and build tests to ensure its stabiliity and maintainability. This will include a data storage layer following the MVC schema, though in pure client-side JavaScript. It will include better defined views and modular utility functions. The result will be a library more people and projects can take up to use themselves, as well as more ways to understand a growing community -- who is involved, who is stuck, who is supporting others for any given time period. It could include a "how to" for different orgs, a menu of common views, and integration of the all-contributors spec for defining what kinds of contributions are recognized and valued: https://github.com/all-contributors/all-contributors **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Nodejs **Difficulty Level:** medium **Potential mentors:** Jeff Warren, ADD YOUR NAME HERE **** ### Microscope live stitching, auto-stitch in MapKnitter (magnetic attraction) **Part of:** https://github.com/publiclab/image-sequencer, https://github.com/publiclab/Leaflet.DistortableImage **Description:** Multiple Public Lab projects, from microscopy to map stitching, require easy-to-use techniques for joining multiple images into a larger image. While high-end approaches for this often involve "bundle adjustment", we propose a different approach, which either a) runs blob tracking in video or sequential images to determine image offset, or b) runs low-res pattern matching between image pairs, and uses different UI approaches to indicate matches to the user (magnetic attraction, spiderwebs connecting matched points, highlight of matched image pairs). Other variations are possible but we envision a general purpose set of JavaScript utility libraries which accept two images, and output the matching pixel pairs, as well as one which takes sequential input images and attempts to place them on a growing virtual canvas based on matches. Other solutions are welcome but we hope to incorporate these into both Image Sequencer and Leaflet.DistortableImage, as well as potentially a web-based demo for use with a microscope live video feed. Read more on one approach: https://github.com/publiclab/image-sequencer/issues/300 **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, NodeJS **Difficulty Level:** hard **Potential mentors:** Jeff Warren, ADD YOUR NAME HERE **** ### Spectral Workbench Capture **Part of:** https://github.com/publiclab/spectral-workbench, https://github.com/publiclab/spectral-workbench.js **Description:** DIY spectrometry has long been part of Public Lab's open source work, but our software is showing its age and is too spaghetti-like. We are slowly refactoring the spectral capture interface from Spectral Workbench into a stand-alone library which can produce spectral data for upload to SpectralWorkbench.org or download locally in CSV or JSON format. UI testing in Jasmine and code modularity using Browserify would both be great. This could ultimately become its own library called `spectral-workbench-capture` and even a full app such as `spectral-workbench-capture-react` or similar. Possible components: - integration and tests - consolidation and testing of API for search, matching, etc - development of React app around basic ui modules (with compartmentalization of React code from core capture code) **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, some Ruby on Rails (for integration) **Difficulty Level:** hard **Potential mentors:** Jeff Warren, ADD YOUR NAME HERE ****