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! Ask questions, and share your ideas: > Call for SoC mentors for 2020: https://github.com/publiclab/plots2/issues/7360 ## Questions [questions:soc] **** ## 2020 Ideas > Call for SoC mentors for 2020: https://github.com/publiclab/plots2/issues/7360 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**! **Part of: ** [Spectral Workbench](https://github.com/publiclab/spectral-workbench) **Description: ** Spectral Workbench is an open-source tool to perform low-cost spectral analysis and to share those results online. It consists of a Ruby on Rails web application for publishing, archiving, discussing, and analyzing spectra online -- running at [](http://spectralworkbench.org). Contains a core library for analyzing and manipulating spectral data, that has been spun out into its own self-contained JavaScript module, which is then included into this application. This a big project, that will involve good knowledge not only in Ruby on Rails and DevOps implementation. Since Spectral Workbench is a core module for the PL ecosystem, as elucidated by [this image](https://publiclab.org/system/images/photos/000/032/413/original/Screen_Shot_2019-05-22_at_5.37.11_PM.png), some of the changes will be aimed at infrastructure and sustainability, as we can't make big changes or improvements without, for example, better tests, ci/cd pipelines, low-level monitoring tools, a more up-to-date Rails stack and etc. Also some bug fixes, cleaning up and refactoring of the existing system. To list some tasks: - Rails 3 => Rails 6 - Deprecate SPRockets in favor of newer Webpack+Rails - Expanded tests (model, controller, integration, system...) - Remove unwanted files - Better CI/CD integration - Deprecate outdated callbacks - Refactor current Asset pipeline (use Yarn in favor of Bower) - Containerize all the modules (docker-friendly) **List: ** [plots-dev@googlegroups.com](plots-dev@googlegroups.com), [https://publiclab.org/chat](https://publiclab.org/chat) **Prerequisites: ** Ruby on Rails, DevOps **Difficulty level: ** Hard ### Editor repair and fortification (high priority) **Part of:** https://github.com/publiclab/plots2 **Description:** This is a big project that should be broken into multiple pieces: (i.e. user facing vs developer facing) The Public Lab Editor (https://github.com/publiclab/PublicLab.Editor/) is a WYSIWYG rich text editor built on the Woofmark library, which is full of bugs. At this point we don't want to change the overall UI design significantly, but are very interested in identifying the many bugs resulting in a bad editing experience for users of PublicLab.org (at https://publiclab.org/post, login required). Potential bugs: * toolbar positioning & stickiness * fix inserting stuff into lists, tables (or have the interface indicate why this not possible or preferred) * turning off `/` search bar hotkey * bold-ing errors * making text into headers and back Interface improvements: * Making the editor responsive on publiclab.org * Image upload popup box * Hover tooltips Development process refinement: testing, maintainability, ease of contribution Jest UI testing Coverage tracking Workflow for documenting bugs Wiki editor: https://publiclab.org/wiki/new consistency with https://publiclab.org/post editor **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript **Difficulty Level:** medium/hard **Potential mentors:** Jeff Warren, ADD YOUR NAME HERE ### Printability of posts and wiki pages **Part of:** https://github.com/publiclab/plots2 **Description:** Some of our users reference content made thru our community while they're offline or away from computer devices. We'd like to encourage and enable this dissemenation of the knowledge on paper. For this project, we'd like our wiki pages and other website posts to be implemented in a way that prints well. Currently, our site uses CSS print stylesheets (https://www.smashingmagazine.com/2018/05/print-stylesheets-in-2018/). But an option could also be a print-specific page view or optimizing the default view for printing. This project would ideally also create safeguards in the development process to ensure this functionality remains protected from inadvertent breakage by future contributors, during changes to the wiki page and layout. **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** HTML/CSS, some JavaScript, some Ruby on Rails **Difficulty Level:** easy **Potential mentors:** Jeff Warren, Emily Ashley, Sidharth Bansal ### Spam management dashboard **Part of:** https://github.com/publiclab/plots2 **Description:** We have a range of spam management tools and systems at PublicLab.org, for moderating incoming posts, comments, and wiki page edits. These include Recaptcha, manual review, a page at https://publiclab.org/spam (login and privileges required) and ways to moderate individual comments and revisions. This project would refine these systems, provide them with tests (including full-stack system tests for some), and provide some UI refinements to make spam management easier (bulk moderation, for example), while ensuring that members of the moderation team are on-board with any proposed changes. Stretch goal: option to receive daily digest of unresolved spam candidates Resources: * Style guide: https://publiclab.org/notes/warren/05-07-2019/introducing-a-draft-style-guide-for-public-lab * https://github.com/publiclab/plots2/milestone/14 **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Ruby on Rails **Difficulty Level:** medium **Potential mentors:** Jeff Warren, Sidharth Bansal, ADD YOUR NAME HERE ### Leaflet Environmental Layers (LEL): time slider UI **Part of:** https://github.com/publiclab/leaflet-environmental-layers **Description:** (more coming) add an optional control to the LEL library allowing layer data to be filtered by a time attribute. **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript **Difficulty Level:** hard **Potential mentors:** Jeff Warren, Emily Ashley ### Site-wide accessibility on PublicLab.org **Part of:** https://github.com/publiclab/plots2 **Description:** Improve site-wide accessibility of PublicLab.org, and develop systems to preserve and expand accessibility features as the codebase grows in the future. Project topics may include: alt-text, aria, accessibility scans, colorblindness analysis, intersection with our translation systems (https://github.com/publiclab/plots2/milestone/22), integration with our features system (https://github.com/publiclab/plots2/blob/master/doc/DATA_MODEL.md#Features ), adding a checkbox or automated accessibility/linting for pull requests. This would also involve a plan for maintaining coverage for accessibility for future development processes. Resources: * https://www.w3.org/WAI/ER/tools/ **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Ruby on Rails **Difficulty Level:** easy/medium **Potential mentors:** Jeff Warren, Sidharth Bansal,ADD YOUR NAME HERE ### Post Customization Mechanisms (i.e. "power tags") **Part of:** https://github.com/publiclab/plots2 **Description:** A variety of functionality can be added to posts and wiki pages, and in the back-end this is driven by the addition of special tags known as "power tags" -- for example, adding a location to a post, adding co-authors to a post, adding topical associations and adding other types of metadata. But the idea of "power tags" is confusing to people. Regular users should not need to know what power tags are, or how they work, to add these functions to their posts. This project will require user interviews and needfinding to better understand and document what functionality people want to add to their posts and what their goals are, and to build on this information to develop a) a proposed UI for adding functionality, and b) carefully collecting feedback on the proposal to refine it into a usable prototype for adding functions to posts (which will likely use power tags in the back-end to function). This is a system that has developed and changed over time; some users are accustomed to adding new functions to their posts using power-tags directly, but _____ is not legible or intuitive to new users. We are welcoming a re-examination of how the UI of this system works and strongly interested in decoupling the UI from how the underlying system works. Resources: * https://publiclab.org/wiki/power-tags * https://publiclab.org/n/15582 * https://publiclab.org/notes/liz/08-30-2016/check-out-these-activity-grids **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** UI/UX interests, JavaScript, Ruby on Rails? **Difficulty Level:** medium/hard **Potential mentors:** Jeff Warren, Sidharth Bansal, ADD YOUR NAME HERE **** ## 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! ### 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 from layer metadata - standardization of layer types (tile, rss, csv, geojson, polygonal, also subtypes like spreadsheet, esri) - and code to make adding new layers of a generic type eaiser - improved workflow for incorporating and accepting new layers (submission template) - minimial 'dots' ui - layer metadata -- description, source, docs for each, relevant bounding box and zoom levels, version, in a single file - UI for highlighting new layers in current viewport as you drag/zoom - submission form for new layers - unique-id based layer toggling in URL hash - standardization of per-item popover UI (image, description, source, toggle, link) All of this has been documented and further detailed in this planning issue: https://github.com/publiclab/leaflet-environmental-layers/issues/134 **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Leaflet JS **Difficulty Level:** medium **Potential mentors:** * Jeff Warren Igor Wilbert (@IgorWilbert) [prompt:text:LEL mentor names here] **** ### MapKnitter Rails 5 Upgrades **Part of:** https://github.com/publiclab/mapknitter **Description:** MapKnitter.org lets people upload their own aerial images, position (rubbersheet) them in a web interface over existing map data, and share via web or composite and export for print. It includes several sub-components, including a JS UI, but the core application is written in Rails. As part of our big upcoming upgrades to the MapKnitter platform, a range of Rails changes and improvements will make up the core of this project idea. Some of the changes will be aimed at infrastructure and sustainability, as we can't make big changes or improvements without, for example, better tests and a more up-to-date Rails stack. Others will be bug fixes and cleanup of the existing system. To list some: * Rails 3 => 5.1 upgrade: * expanded tests * expand test fixtures * deprecate very old MapKnitter 1 templates, controllers * compile list of routes/URLs to build functional tests around * move or refactor lots into models for unit testing * get CI running * map out JS API endpoints of MapKnitter, write functional tests for them * consolidate and reorganize editor vs. viewer vs. maps listing templates, exporter templates * attempt to remove all Way and Node code To see a full list of sub-projects, see https://github.com/publiclab/mapknitter/issues/300 **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** Ruby on Rails **Difficulty Level:** hard **Potential mentors:** * Jeff Warren Emmanuel Hayford souravirus Aman Jain [prompt:text:MapKnitter Rails 5 mentor names here] **** ### MapKnitter Image Management **Part of:** https://github.com/publiclab/mapknitter **Description:** MapKnitter is based around the upload of images, the positioning of those images on a map, and the compositing of those images into map export formats. This project idea focuses on the systems for tracking changes on those images, collecting them into sets, storing image history, and other improvements which we hope will simplify and reconfigure the MapKnitter codebase. This may include: * ability to order images in sidebar * ability to select collection of images to export * view of all images for given region in maps * ability to choose time bounding box (some kind of layer manager maybe needed) * refresh background images while dragging * ability to upload new versions of an image * ability to apply filters to images (with Image Sequencer) and upload new version * ability to select a set of images from which to generate an export * new templates and APIs to present images on any map, selected by bounding box * image versioning, locking, and reverting * possible collaboration with the Synchronous Editing project below on API and UI additions **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Ruby on Rails? **Difficulty Level:** medium **Potential mentors:** * Jeff Warren Emmanuel Hayford Aman Jain Gaurav Sachdeva [prompt:text:MapKnitter Image Management mentor names here] **** ### MapKnitter Synchronous Editing **Part of:** https://github.com/publiclab/plots2 **Description:** A long sought feature of MapKnitter is the ability to collaborate in real time on image upload and placement, as if it were Google Docs. This will involve changes from the MapKnitter codebase to the Leaflet.DistortableImage front-end image distortion UI. Parts of this project would likely involve: * a low-latency plan for real-time multi user image placement (locking/unlocking/transactions) * standardization and testing of image JS API * potential low-latency API, possibly using sockets * a simultaneous multi-user UI, highlighting images and animating their movement, like Google docs * edit history/reversion, accept changes UI, possibly in a "history" menu? * image "locking" or edit rejection UI for real-time use * javascript tests (Jasmine, perhaps) for many of these features * documentation of these features for downstream use by other libraries * possible development of an interface layer between or extension of Leaflet.DistortableImage and the MapKnitter API * possibly extract MapKnitter JS library from https://github.com/publiclab/mapknitter/tree/master/app/assets/javascripts/mapknitter as part of above **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Ruby on Rails? **Difficulty Level:** easy/medium/hard **Potential mentors:** * Jeff Warren Emmanuel Hayford [prompt:text:MapKnitter synchronous editing mentors names here] **** ### MapKnitter UI **Part of:** https://github.com/publiclab/Leaflet.DistortableImage **Description:** MapKnitter's interactive image distortion UI is implemented in a Leaflet library called Leaflet.DistortableImage, which needs some major improvements. The changes might be built into the core library or could be developed as a set of extension libraries. Tasks include: * multiple image selection * image ordering * simpler menu API to add new tools like `addMenu`, (even after initialization) * nested menus or modal for more tools * image menu overhaul * general debugging * debugging of menu placement, hide/show (list out bugs) * full res download from menu, esp. a way to pass in full-res original image src for this exporting function * 'place with geodata' tool, based on existing code * ability to set order in Leaflet DistortableImage (use z-index) using function like `map.order_by(f())`; integrate with MK UI **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Leaflet **Difficulty Level:** medium **Potential mentors:** * Jeff Warren Igor Wilbert (@IgorWilbert) [prompt:text:MapKnitter UI mentor names here] **** ### MapKnitter Cloud Exporter **Part of:** https://github.com/publiclab/mapknitter **Description:** An serverless Exporting system for MapKnitter maps built around a Docker containerized Image Sequencer image processor, and/or a GDAL/ImageMagick alternative. We are exploring parallel tracks for cloud-based MapKnitter exporting, and one option is a JavaScript based process, while the other is a more traditional approach with a containerized GDAL/ImageMagick approach as currently used in MapKnitter. The base idea is to run the export process as a scalable web service, possibly "serverless" or REST, in Google Cloud and/or other cloud providers like Amazon AWS Lambda (primarily Google Cloud but compatible with others). Importantly, either approach would ideally present the same API so that we could swap or compare their performance. A much more in-depth description of this project can be found here: https://github.com/publiclab/mapknitter/issues/298 **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** Ruby on Rails, serverless architecture, nodejs, possibly GDAL **Difficulty level:** hard **Potential mentors:** * Jeff Warren [prompt:text:MapKnitter Cloud Exporter mentor names 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: - text overlay module (multiple approaches; https://github.com/publiclab/image-sequencer/issues/431) (still needs work to function in node environment) - 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 - potentially showing a bunch of sequences in a gallery with descriptions - see Colorimetric testing project here: https://github.com/publiclab/image-sequencer/issues/979 - expanded testing (especially of UI and CLI), improved code organization, better maintainability via https://codeclimate.com/github/publiclab/image-sequencer **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, nodejs **Difficulty Level:** medium **Potential mentors:** * Jeff Warren Igor Wilbert (@IgorWilbert) Harshith Pabbati h [prompt:text:Image Sequencer mentor names 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 Igor Wilbert (@IgorWilbert) [prompt:text:Community Toolbox mentor names 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 Also see: https://github.com/publiclab/Leaflet.DistortableImage/issues/110 **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, NodeJS **Difficulty Level:** hard **Potential mentors:** * Jeff Warren Igor Wilbert (@IgorWilbert) [prompt:text:Microscope Live Stitching mentor names 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 [prompt:text:Spectral Workbench Capture mentor names here] **** ### 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 Souravirus [prompt:text:Sensor data upload mentor names here] **** ### Public Lab Notifications system **Part of:** https://github.com/publiclab/plots2 (though will be in standalone repository) **Description:** The Notifications API (https://developer.mozilla.org/en-US/docs/Web/API/notification) allows for UI notifications on mobile and desktop initiated from JavaScript. This project would build out such a system, with the backing of a new API on `plots2` for triggering such notifications when new comments or posts are created. The project would be made up of client-side code to display notifications (and prevent multiples from being posted if multiple windows are open), and a back-end API to trigger them when new content is posted, potentially using Action Cable. Read more at: https://github.com/publiclab/plots2/issues/2497 This project may need to be combined with other work to be large enough for a summer's work. **List:** plots-dev@googlegroups.com, https://publiclab.org/chat **Prerequisites:** JavaScript, Ruby on Rails **Difficulty Level:** medium **Potential mentors:** * Jeff Warren * Sidharth Bansal [prompt:text:Notifications system mentor names here] ****