GithubHelp home page GithubHelp logo

learnlinux / tuxlab-app Goto Github PK

View Code? Open in Web Editor NEW
7.0 7.0 7.0 1.63 MB

A Platform for Creating Interactive Linux Courses

License: GNU General Public License v3.0

HTML 13.08% CSS 8.48% TypeScript 78.45%
docker education learning learning-by-doing linux tuxlab

tuxlab-app's Issues

[FEATURE] LabFile Export API

It would also be beneficial to give students the option to "reset" to various save points. In order to implement this, I believe we can use the Docker Commit action, which saves a diff between the current state and the original image.

In addition to the reset option, it would be good to have a way to pipe this into the database in case an instructor wanted to use it / review it / grade it.

UPDATE:
The best way to do this is with export. However, this is probably a post-beta feature.

[FEATURE] Loading Screen

When the user selects a lab, we need to display an interim loading screen so we can prevent any errors that the Markdown View / Terminal View would have otherwise.

[FEATURE] Example Data

We need to begin assembling a test which can insert the example data into the database, and test the mongo authentication roles and schemas within the application.

[REFACTOR] Fix Naming

  • The entire courseview folder should be called /course
  • The courseview/labview needs to be called lablist
  • GradeView should be called GradeList

[FEATURE] LabVM Creation post to ETCD

First, we need to make sure that Aaron is passing you the appropriate ETCD Authentication details, and that you are using them (if they exist) in connecting to ETCD.

Second, when the "magic method" is called and the LabVM is created, we need to use node-etcd to create two different records in etcd:

DNS Record

This record points the SSH address (username.cmu.tuxlab.org) to the IP Address of the Docker Host containing the LabVM environment. This should be a simple A record in the format of HelixDNS.

Proxy Record

The proxy record creates a pipe between an incoming WebSSH or SSH request and the destination VM. You need to create records which are formatted to the standard of RedRouter, which is a key at SSH::username with just the docker-container and allowed-auth-methods fields set.

[FEATURE] Caching Labfiles

In order to preserve memory, we should only have one copy of a given lab object open at a time. Instead of evaling every time a user loads a lab, you should check to see if that lab is already in the cache, and use that copy if possible.

[FEATURE] Dynamic User Menus

Be sure to ask @cemersoz about the schema. He is now an expert in the Meteor.user() object.

  • Dynamically display login button if not logged in (topbar)
  • Disable sidebar nav if not logged in
  • Dynamically Insert Profile Image and Name in Topbar
  • Dynamically Insert Profile Image and Name in Sidebar

[REFACTOR] Winston Logging

We need to implement a standard for logging in the tuxlab-app. I think the best framework, at least for our sake, is Winston, as it is machine readable, which will enable us to create status dashboards in the future. @trunkatedpig I want you to walk through the existing Meteor code and in any place where an error message would normally be outputted, replace it with the appropriate call for Winston. The Winston object should only ever be created once- probably in startup.

@cemersoz be aware this is happening, and start flagging possible things we want to log.

[FEATURE] Publish/Subscribe in LabView

We need to begin creating data bindings for the LabView (which would be the split view between the documentation and the terminal). @sandershihacker already has a template in place. @cemersoz I want you to begin by publishing the following data to the user:

  • SSH Password and Hostname
  • List of Tasks and Task Status
  • Markdown for a given task
  • Button which calls the verifier method
  • Initialize Terminal View using Password and Hostname (#32)

[REFACTOR] Instructor Views

Instructor views are not separate:
https://github.com/learnlinux/tuxlab-app/tree/master/client/imports/ui/pages/instructor

Rather, instructor views are handled in the same components as the regular user views, but will simply have a check to determine if the current user is an instructor.

With this in mind, we need to create one more static views for:

  • Users (so the instructor can see which users are in his class and choose one)
  • LabFile processing (discuss with @cemersoz )

and also update the existing views to include custom content for instructors:

  • Dashboard
  • Grade (Edit)

[REFACTOR] Template Fixes

As we approach a finished product, I want to begin making some tweaks to the template:

  • GLOBAL - Fix Scrolling Issue
    A) When the page is minimized below 1260px, a horizontal scrollbox appears at the bottom of the router. This needs to be disabled. Try minimizing the width of the explore page for example.
  • Topbar
    A) Logo link is broken on some pages.
  • Sidebar
    A) Update the sidebar menu to contain
    • Announcements
    • Terminal (which changes styling to show what lab is currently in progress)
    • Settings (goes to Account page)
    • Logout
      This is ultimately only going to be used on the mobile view, and is a fill in for the dropdown component.
  • Dashboard
    A) Title fonts need to be made smaller
  • Explore Page
    A) Implement css animations for the content inside of the tabs so that they look cleaner when switched. This may or may not be blocked by the Angular 2 Material Team (see Demo in Angular 1)[https://material.angularjs.org/latest/demo/tabs]
    B) the title font for the name of the course is too large. Decrease the size.
    C) The annoying right chevron is still there in the search bar. Can you move the search icon to where the chevron is, and put a compass icon where the search icon is?
    D) The icons in the search bar have more padding on bottom than on top (which is clearly visible when you hover over one). This needs to be adjusted using line-height, not the janky margin-top method you use.
  • Search Page
    A) Remove the option to change how many courses are displayed. Just set it to always be 15.
    B) Add an "Instructor Name" Field to the Table
    C) Remove the "Seats Left" view from the Table.
    D) Add Icons to the next and previous page buttons
    E) Reconfigure the page buttons to be like:
    < PREV 1-12 of 250 NEXT>
  • Footer
    A) Footer links should be made into Material Buttons with proper hover effects

[FEATURE] Handle Versioning

Currently, there would be major issues if the instructor chose to edit the lab after the student had begun. We need to fix this.

[REFACTOR] Check for Array Undefined

I20160711-11:45:24.677(-4)? Exception from sub user-courses id LDPG7KAyHX6of4i9M TypeError: Cannot call method 'concat' of undefined
I20160711-11:45:24.759(-4)? at Subscription. (collections/courses.ts:61:58)
I20160711-11:45:24.760(-4)? at Computation. (packages/peerlibrary_reactive-publish/packages/peerlibrary_reactive-publish.js:313:1)
I20160711-11:45:24.760(-4)? at runWithEnvironment (packages/meteor/dynamics_nodejs.js:110:1)
I20160711-11:45:24.760(-4)? at packages/meteor/dynamics_nodejs.js:123:1
I20160711-11:45:24.760(-4)? at packages/peerlibrary_server-autorun/packages/peerlibrary_server-autorun.js:446:1
I20160711-11:45:24.760(-4)? at packages/peerlibrary_server-autorun/packages/peerlibrary_server-autorun.js:424:1
I20160711-11:45:24.760(-4)? at Function.FiberUtils.synchronize (packages/peerlibrary_fiber-utils/packages/peerlibrary_fiber-utils.js:163:1)
I20160711-11:45:24.761(-4)? at Computation.Tracker.Computation.Computation._runInside (packages/peerlibrary_server-autorun/packages/peerlibrary_server-autorun.js:413:1)
I20160711-11:45:24.761(-4)? at packages/peerlibrary_server-autorun/packages/peerlibrary_server-autorun.js:438:1
I20160711-11:45:24.761(-4)? at Function.FiberUtils.synchronize (packages/peerlibrary_fiber-utils/packages/peerlibrary_fiber-utils.js:163:1)

[REFACTOR] lab.exec.js

  • Remove direct MongoDB calls. You should be using the Meteor collection object which is accessible via the Collections global variable.
  • Fix outdated references to other files (env.js)
  • Use proper Winston logging instead of console.log and throw statements.
  • Add comments to each method

[REFACTOR] FIX PUBLISH SUBSCRIBE

You CANNOT simply publish an entire collection (

Meteor.publish('courses', function() {
). What this will do is send a copy of all of the data in the courses database to the user. This is REALLY REALLY REALLY bad. Please revisit publish-subscribe, particularly concepts like pagination and authorization.

In addition, remember that you should be limiting what data is sent to the client- they do not need a copy of the labfile, or tasks (this should be hidden for them until they complete them). I have made this a lot easier by splitting courses and labs into separate databases.

[FEATURE] Hidden / Disable Labs

We should allow instructors to hide labs which we don't want users to be able to see, and disable labs if they are past due. Both of these fields should be booleans in the lab schema, and should be respected when using Meteor.publish and initializeLab methods.

[FEATURE] Tasks Schema

Tasks Schema needs to be updated to ensure that the task IDs are unique and are continuous from 1 to the length of the array.

[REFACTOR] Labs Database Split

I had to split the labs database off from courses (it is easier in the long run). This means you may need to update some of your code.

[BUG] Stop Using Visual Studio

I am having the same problem as @cemersoz - I have a lot of merge conflicts because of the tabbing which is being done automatically. Use Atom or Visual Studio or some self-respecting editor.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.