ioos / colocate

Co-locate oceanographic data by establishing constraints
MIT License
5 stars 9 forks source link

Develop a dashboard app for colocate using Panel or Voila (GSoC Project 2) #24

Closed mwengren closed 1 year ago

mwengren commented 3 years ago

Project Description:

Note: this project should be done in combination with #16 to develop an overall dashboard/map application for a colocate GUI. Interested students should submit applications that consider both this issue #24 and #16 together.

This library app was started as a way to query the global constellation of ERDDAP servers and identify datasets that share common:

Presently, it does so via example Jupyter notebooks that leverage erddapy and custom code to match any ERDDAP-hosted datasets with user-supplied filter criteria from the above categories.

The end goal was to make an actual app that could be run either on the web or locally/on-demand by a desktop user to find, visualize, and download data of interest to them. The app has limitations - queries ERDDAP servers in serial, only displays a max of 10 datasets from however many are matched, limited plotting implementation in HoloViz, no download capability - which will hopefully be addressed in other projects.

With those resolved, a good project would be to wrap up the final code base in a nice UI using one of the two frameworks (Panel or Voila) that would allow users to run it locally via web browser or potentially be deployed on the web somewhere for public use.

Expected Outcomes: Improve/extend the existing code for either Panel or Voila to present the query/subset, dataset selection, mapping/visualization UI, and controls for selecting datasets to download in a nice dashboard-like interface.

Skills required: Python - Panel or Voila familiarity especially

Difficulty: Medium

Student Test:

Mentor(s): Micah Wengren @mwengren, Matt Biddle @MathewBiddle

mwengren commented 3 years ago

Related #15 and #4

HenryKobin commented 3 years ago

Hi Micah! Out of curiosity, I was wondering why the direction for this is towards using panel / viola / jupyter versus using a frontend framework with a python backend with colocate installed (such as flask?)

mwengren commented 3 years ago

Hi @HenryKobin Thanks for reaching out. We're starting with the simplest possible solution for demo purposes. Because the development of this app started in Jupyter with HoloViews for visualization, Panel seemed like an obvious choice to make a demonstration dashboard.

However, a more advanced full-fledged web application would be very useful as well. If you're interested in working on it, I'd suggest making a simple Panel based dashboard with controls that work (as they don't really now), and then it could expand into a more advanced web app as described.

HenryKobin commented 3 years ago

Thanks @mwengren! I'll fork the project and poke around a bit so I can start understanding how it works right now. You have an excellent point, the code could be ported over one day in the future if need be.

HenryKobin commented 3 years ago

@mwengren
Here is a live notebook based off of my fork of colocate with the param pulldown objects list updating based on another pulldown's selected values.

I was able to fix this by adding more @pn.depends() decorators with watch=True arg passed to them. These functions watch for changes to parameter selection and update the other parameter pulldown choices accordingly. I wasn't sure if I was to make other changes to the file, so I left it at that.

HenryKobin commented 3 years ago

Woops, looks like the link I posted for the hosted notebook didn't work. This one should: https://mybinder.org/v2/gh/HenryKobin/colocate/master?filepath=notebooks%2Fcolocate-dev.ipynb

mwengren commented 3 years ago

@HenryKobin It works! Great job. As you can see, there's a lot of cleanup that needs to happen with the code in some of these notebook cells for the Panel controls. These were done at the last minute during the 2020 OHW for a final presentation.

A good next step might be to refactor the Panel-related code into either the ui or plot modules and make a map that integrates with the DataFrame and Panel selector controls to plot datasets as selected. This would be a good start for a Project 2 proposal to submit during the application period for working on that and anything further with this project. You can get an idea for other goals for this app by browsing other issues. Capability to download datasets was another goal we had to improve this app (Project 1). Project 1 should probably happen after Project 2 in fact, so they may be named in reverse.

HenryKobin commented 3 years ago

Woo! great to hear @mwengren. Do you know if I can include goals from project 1 and 2 in a single proposal? I'm not sure just cleaning up the panel code and fixing up the map would take a full 10 weeks, it seems like something that could be accomplished in a month. Can I propose to fix some of the other issues like multithreading in my proposal or would that take away from other students working on this project?

mwengren commented 3 years ago

I think if the LOE looks too low for a single project to consume the entire 10 weeks, then combining both into a single proposal is reasonable. A fully working tool at the end of the project period would be excellent. If time is left over at the end, we can come up with some bonus goals. I tend to agree that by themselves there's not enough here for a single 10 week project.

HenryKobin commented 3 years ago

Awesome, we will be in touch then. I'll submit a proposal on the 29th, and I'll be around here checking in every now and then so I don't miss anything. Do you recommend applicants join any slack/gitter/mailing lists to keep an eye out for updates?

Also should I complete any of the other student tests before applying, or should I stick with just this one? I don't want to spoil the solution for any of the other ideas.

Thanks for your time!

mwengren commented 3 years ago

Submitting a proposal to enhance this tool as described in the two projects outlined, plus an additional web application like you mentioned or any work with erddapy would be a solid proposal, I think. We do have a mailing list called ioos_tech that you're welcome to join - see the org page on GSoC. GitHub issue discussions like this have been how most of the discussion has happened so far, however.

HenryKobin commented 3 years ago

Awesome! I'll start noodling on a solid gameplan to propose. I'm going to be thinking in terms of 2 week code sprints for the 10 weeks. I'm thinking about something along the lines of 2 sprints on Colocate (maybe something like 1 sprint on project 2 then one sprint on project 1) , 1 week of general cleanup / documentation / buffer room, then 2 sprints on erddapy with 1 week of documentation / cleanup / buffer time (adding up to the 10 weeks allotted).

garggaurangi commented 3 years ago

@mwengren Hey Micah! I am interested for a gsoc internship with this org and I have started working on this issue . I am a beginner and I am getting multiple questions along the way. I was hoping I could get someone to help me through them :) Could you please tell me what is the communication channel (if there's one now) or reply on the discussions thread on this issue I would love to communicate with you through email as well (I have already tried contacting through the Contact Email section on the gsoc website). I need help.

mwengren commented 3 years ago

@HenryKobin Are you still planning to submit a proposal for this project? I haven't seen anything yet via the GSoC dashboard. If not, that's ok, however if you'd like any input on a work plan please let me know as there are only a few days remaining.

swarnimstrange commented 2 years ago

@mwengren I couldn't help but notice that there is no activity on this issue and also there weren't any GSOC 2021 projects like this. So I was wondering if the issue is still open I would like to work on it. As I have good Knowledge of Python, Machine Learning, Django, and Voila as well. Also, have a basic understanding of this repository.

mwengren commented 1 year ago

Superseded by #29