History
- In the beginning, there was Asbot for the first version of 6.002x.
- When we made a site for multiple courses, we discovered that Asbot didn't support multiple courses with different discussion forums well.
- Amondo Fox from Berkeley decided to write something.
- So originally written by a team (grad student and undergrads) at Berkeley.
- They set up the original architecture, which we still have.
Comments Service (basically a data store from the LMS perspective)
- written in Ruby
- data store in Mongo
- text search in Elastic Search
- all updates need to update both Mongo and Elastic Search
LMS
- originally written by Dave to provide a higher-level interface
- lms/lib/comment_client
- handles all communication to comment service
- lms/djangoapps/django_comment_client
- provides the django views
- common/djangoapps/django_comment_common
- shared between studio and lms
- studio uses it to seed the roles table when a course is created
- has role and permission data
- stored in RDS (mySQL) in its own tables
- table of very granular permissions
- e.g., open/close thread
- in practice, only (really) 2 roles with 2 permissions each
- Student
- Privileged User
- Administrators
- Moderators
- originally, all permissions, except grant/revoke moderator role
- but, these roles are managed in instructor dashboard so no need for separation between Moderator and Administrator
- Community TAs
- same as moderator role, except surfaced role name is different when displayed on a thread
- shared between studio and lms
- LMS uploads images to S3
Browser
- UX designers: Marco and then Brian
June 2013 -> Aug 2014, Forums team was formed: Greg, Jim, and Kevin (a contractor just for a few months).
- Forums performance improvement: 5 second timeout between LMS and Comments Service happening for over 1% of the requests.
- Heroku is not great for scaling.
- Introduction threads didn't perform well. They would get 1000-2000 comments for just saying "Hi!"
- supported them with infinite scroll rather than paging
- UX issues: front-end wouldn't tell you if there was an error. The UI would just continue to spin. There are still some front-end deficiencies there.
Discussion Content
- Markdown
- We use an open-source markdown editing tool.
- markdown format stored
- White-list of HTML tags
- honored on the browser-side when rendering the content
- possible to store non-white-listed tags if hackre circumvents browser, but the browser on the reader's end will filter out those tags
- Mathjax
- math formula renderer implemented in JS on the client-side
Future
Brian worked on designs to fix the navigation experience.
Need to improve search UX.