GithubHelp home page GithubHelp logo

mitodl / edx-sga Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jazkarta/obsolete-edx-sga

34.0 19.0 107.0 2.81 MB

Staff Graded Assignment XBlock for the edX platform

License: GNU Affero General Public License v3.0

CSS 0.24% HTML 0.87% Python 12.70% JavaScript 85.63% Ruby 0.38% Shell 0.17%
xblock edx

edx-sga's Introduction

Staff Graded Assignment XBlock

This package provides an XBlock for use with the open edX platform which provides a staff graded assignment. Students are invited to upload files which encapsulate their work on the assignment. Instructors are then able to download the files and enter grades for the assignment.

Note that this package is both an XBlock and a Django application.

Installation

Devstack installation (for local development)

Since this involves changing version-controlled files in edx-platform, it's a good idea to create a branch in that repo for all SGA development. All of the edits below refer to edx-platform files or configuration files in devstack. No files in the edx-sga repo need to be edited to install and use the SGA XBlock in devstack.

  1. Configure file storage

    For file storage, SGA uses the same file storage configuration as other applications in edX, such as the comments server. devstack defaults to local storage, and fullstack defaults to S3. Using local file storage is the easiest option for hacking on and debugging SGA locally.

    To configure SGA to use local storage, edit lms/envs/private.py to include these settings (and create the file if it doesn't exist yet):

    MEDIA_ROOT = "/edx/var/edxapp/uploads"
    DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
    

    You can also configure S3 to be used as the file storage backend. Ask a fellow developer or devops for the correct settings to enable this. If you're using ansible to provision devstack, you may want to refer to this edX article on configuring data storage.

  2. Add SGA to the Advanced Module List for your course in Studio

    Open Advanced Settings for your course in Studio ("Settings" drop down in the top nav > "Advanced Settings"), and add "edx_sga" to the "Advanced Module List" value (i.e.: the value for "Advanced Module List" should be a JSON list, and that list should include "edx_sga").

  3. If necessary, add SGA to installed Django apps

    NOTE: This is only needed if edx_sga is not somehow included in INSTALLED_APPS already. In edx-platform, an app can make its way into INSTALLED_APPS in a few different ways, so the easiest thing to do is grep your edx-platform branch for 'edx_sga' and see if it appears in INSTALLED_APPS/OPTIONAL_APPS/etc. All releases of edx-platform since Dogwood already include edx_sga, so this step is likely unnecessary.

    If SGA is not already an installed app, add this as a top-level setting in /edx/app/edxapp/lms.env.json and /edx/app/edxapp/cms.env.json:

    "ADDL_INSTALLED_APPS": ["edx_sga"],
    

    Also in /edx/app/edxapp/cms.env.json, add this to the FEATURES object:

    "ALLOW_ALL_ADVANCED_COMPONENTS": true,
    
  4. Add the package as a dependency (or install manually)

    If you want devstack to install a local branch of edx-sga and use any local changes that you make, you'll need to do the following:

    1. Find any requirements files that list an edx-sga dependency and comment out those lines (there are many requirements files in the edx-platform repo, and they're all .txt files, as is convention with pip). Note that the app as it's recognized by Django is edx_sga with an underscore, but the repo is edx-sga with a dash.

    2. Sync/mount your edx-sga repo directory to the Docker container or Vagrant VM (depending on which method you use to run devstack on your machine).

      • In Vagrant, you can add this to the Vagrantfile within the Vagrant.configure block (after running vagrant up or vagrant reload, the directory will be mounted).:

        config.vm.synced_folder '/path/to/your/edx-sga', '/edx/app/edxapp/venvs/edxapp/src/edx-sga/', create: true, owner: 'edxapp', group: 'edxapp'
        
    3. Add the mounted edx-sga repo directory as a dependency in requirements/private.txt (creating the file if necessary):

      -e /edx/app/edxapp/venvs/edxapp/src/edx-sga
      

    You should now be able to work with SGA blocks when you run LMS or Studio, and any local changes you make to SGA should be seen if you restart the server.

    If the steps above don't suit your purposes (or they simply don't work), you may also try installing SGA manually (NOTE: These are old instructions):

    sudo su - edxapp -s /bin/bash
    . edxapp_env
    pip install -e git+https://github.com/mitodl/edx-sga@release#egg=edx-sga

Production Installation

Create a branch of edx-platform to commit a few minor changes:

  1. Add SGA to the platform requirements

    In requirements/edx/github.txt, add:

    -e git+https://github.com/mitodl/edx-sga@release#egg=edx-sga
    
  2. Add appropriate edx_sga settings

    • In both cms/envs/common.py and lms/envs/common.py, add 'edx_sga' to OPTIONAL_APPS
    • In cms/envs/common.py, add 'edx_sga' to ADVANCED_COMPONENT_TYPES
  3. Configure file storage

    In production, the edx-platform uses S3 as the default storage engine. If you want to use file storage see the devstack/full instructions above. To configure S3 storage properly in the platform, set the following values in your /edx/app/edxapp/lms.auth.json file or, preferably, in your additional yaml overrides in your edx/configuration setup.

    "AWS_ACCESS_KEY_ID": "your bucket AWS access key ID",
    "AWS_SECRET_ACCESS_KEY": "Your bucket AWS access key secret",
    "AWS_STORAGE_BUCKET_NAME": "Your upload bucket name",
    

Course Authoring in edX Studio

  1. Change Advanced Settings

    1. Open a course you are authoring and select "Settings" ⇒ "Advanced Settings
    2. Navigate to the section titled "Advanced Module List"
    3. Add "edx_sga" to module list.
    4. Studio should save your changes automatically.

    The Advanced Module List section in Advanced Settings

  2. Create an SGA XBlock

    1. Return to the Course Outline
    2. Create a Section, Sub-section and Unit, if you haven't already
    3. In the "Add New Component" interface, you should now see an "Advanced" button
    4. Click "Advanced" and choose "Staff Graded Assignment"

    buttons for problems types, including advanced types

  3. Write a question with an SGA response

    Since the Staff Graded Assignment doesn't support text within the problem, it is recommended to precede the SGA XBlock with a Text or HTML XBlock with instructions for the student. We recommend something using the following template:

    Use the "Select a File" button below to choose the file you wish to have
    graded. After you have chosen the file the button will change to the
    name of the file. Click the button again to Upload.
    
    When the upload is complete, a link will appear with the name of your
    file. Click it to confirm that the upload was successful. You can replace
    this file by simply selecting another file and uploading it. After
    the due date has passed, you will no longer be able to upload files.
    

    Note that any file type can be uploaded. If you expect a particular file type from your students, you should specify it in the instructions. If you wish students to upload multiple files, you can recommend they zip the files before uploading.

  4. Settings

  • display_name: The name appears in the horizontal navigation at the top of the page

  • Maximum Score: Maximum grade score given to assignment by staff

  • Problem Weight: Defines the number of points each problem is worth.

  • Show Answer: Specifies if and when the student will see the correct answer to the problem.

  • Solution: The solution that is shown to the student if Show Answer is enabled for the problem.

    sga settings

  1. Grading Policy

    SGA XBlocks inherit grading settings just like any other problem type. You can include them in homework, exams or any assignment type of your choosing.

Course Authoring in XML

XML for an SGA XBlock consists of one tag with the five attributes mentioned above. It is recommended to also include a url_name attribute. For example:

<vertical display_name="Staff Graded Assignment">
    <edx_sga url_name="sga_example" weight="10.0" display_name="SGA Example" points="100.0" showanswer="past_due" solution="solution text" />
</vertical>

You can specify the following values for the show answer attribute.

  • always
  • answered
  • attempted
  • closed
  • correct_or_past_due
  • finished
  • past_due
  • never

Staff Grading

  1. Navigate to the student view (LMS) of the course and find the vertical with your Staff Graded Assignment. (If you are in Studio, click "View Live").

  2. If you are Course Staff or an Instructor for the course, you will see a "Grade Submissions" button in the lower right corner of the XBlock (Be sure you are in "Staff View" indicated by a red label in the upper right corner of the page; if it says "Student View" in green, click on it once.)

    Staff view of LMS interface

  3. When you click "Grade Submissions" a grid of student submissions will display in a lightbox. Columns for username, (full) name, Filename and Uploaded (time) will be filled in.

    Staff view of grading grid

  4. Click the filename in any row to download the student's submission. If it can be displayed in your browser, it will.

  5. Click the Enter grade link to bring up an interface to enter grades and comments.

    Enter grade interface

  6. The grades and comments will appear in the grid. Use the "Upload Annotated File" button to upload a file in response to the student's submission. The student will be able to view the file along with her grade.

    Instructor view of grading grid after a submission has been graded.

  7. Course staff can enter grades, but they are not final and students won't see them until they are submitted by an instructor. When a grade is waiting for instructor approval, it appears in the submissions grid with the text (Awaiting instructor approval) after it.

    Detail of Staff Member view of grading grid after a submission has been graded and it is awaiting approval.

    After a course staff member has submitted a grade, the instructor will see a link to Approve grade instead of Enter grade.

    Detail of Instructor view of grading grid after a submission has been graded and it can be appproved.

    Clicking Approve grade will open the same grading dialog box where, in addition to approving the grade, she can change the grade and the comment.

    Once the instructor has approved or entered a grade, course staff members cannot change it. However, the instructor can always change a grade.

  8. After the grade has been approved, the student will be able to see it inline and also in her progress page. Annotated files, if any, will be available for download.

    Student view of graded assignment with annotated instructor response

Testing

Assuming edx-sga is installed as above, integration tests can be run in devstack with this command:

python manage.py lms --settings=test test edx_sga.tests.integration_tests

To run tests on your host machine (with a mocked edX platform):

# Run tests using different versions of Django
tox
# Run tests using a specific version of Django
tox -e py27-django111

To get statement coverage (in devstack):

coverage run --source edx_sga manage.py lms --settings=test test edx_sga.tests.integration_tests
coverage report -m

edx-sga's People

Contributors

agrendalath avatar aliaksandrb avatar amir-qayyum-khan avatar anas12091101 avatar arslanashraf7 avatar asadiqbal08 avatar carsongee avatar gsidebo avatar iamsobanjaved avatar ichuang avatar irtazaakram avatar itsbenweeks avatar jamiefolsom avatar jinder1s avatar justinabrahms avatar kdmccormick avatar lewisemm avatar libremente avatar mahyard avatar mamigot avatar morenol avatar mzulqarnain1 avatar notoriousmkd avatar odlbot avatar pakaponk avatar pdpinch avatar pkulkark avatar pwilkins avatar shadinaif avatar wassaf-shahzad avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

edx-sga's Issues

Student file upload should work in 1 step, like instructor annotated version upload does

When students upload their files, it takes two steps. First, they choose their file:

image

image

And then they need to click the button marked "Upload [filename]":
image
I'm concerned that many students will think they've finished the upload before hitting that second button, since so many web-based file upload interfaces don't require that second step.

In fact, a nice example of a web-based interface for uploading a file without that second step is in the instructor interface of the very same SGA Xblock. Instructors choose "upload annotated file":
image
and then when they choose the file itself:

image

they're all done. They get a progress indicator, which then gets replaced with an option to re-upload:
image
But they don't need to hit a button to accept the file the way the students do.

Could the student interface be changed to work like the way the Instructor interface does, with no extra button-click required?

Add javascript unit tests

Functions like the max upload check and other client side code should be validated with Jasmine unit tests.

Grade publishing

I found a bug: when you grade somebody, anyone don't see progress on it until this student view this block by himself or do something that can change his grade.

After I view through code, and found this comment:

Ideally we would do this when the score is entered. This write on

read pattern is pretty bad. Currently, though, the code in the

courseware application that handles the grade event will puke if the

user_id for the event is other than the logged in user.

...

and this:

This is how we'd like to do it. See student_view

self.runtime.publish(self, 'grade', {
'value': state['score'],
'max_value': self.max_score(),
'user_id': module.student.id
})

So, I understand why it doesn't work how I expect.
Do you plan to fix it? Or, at least, do you have an idea how to do it?

pylint cleanup

There are several pylint violations creeping in here. We should try and resolve them. Helpful command to show them in devstack: PYTHONPATH=lms:lms/djangoapps:lms/lib:common/djangoapps:common/lib pylint --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" edx_sga | tee /edx/app/edxapp/edx-platform/reports/lms/pylint.report

Edx-sga does not contain field url_name warning on import

We get this on import:XBlock <class 'xblock.internal.StaffGradedAssignmentXBlockWithMixins'> does not contain field url_name.

I'm not really sure, so it warrants research, but I believe this means we aren't handling url_name as we probably should (though I haven't looked at the xblock guidelines to know if that is required by XBlocks or is an old XModule thing). I'm guessing our XML people at least will likely want to be able to set the url_name any for friendly links and URLs

Redesign UI for grading workflow

(extracted from JIRA OSPR-337)

This is the trickiest and largest suggestion from this list, but shouldn't block merge of this to the platform I think. The suggestion here is to flatten the grading workflow to 1 screen / table, using state and color to communicate the next step for instructors. The quick sketch below is really just to illustrate a few few UI states. The first row shows an entry that has not been graded yet. The second row has been partially graded, but at this moment in time it can still be 'approved' by an instructor. The third row shows an approved grade (green) that can be reset by the instructor.

screenshot of proposed ui

Grading lightbox won't scroll

via the [edx-code] list, https://groups.google.com/d/msg/edx-code/fkrtwE2G2mw/Dg4KA5dYNAkJ

We have successfully implemented Xblock of Staff Graded Assignment from Jazkarta
(https://github.com/jazkarta/edx-sga/tree/master/edx_sga) & students have started using
it but when we as faculty are going for grading it, we are unable to see the complete list
of all students, there is a problem of iframe i suppose. please anyone help us how can
we see the all list of students (attached snapshot)

snapshot

an empty weight setting appears to export as "None" and then a subsequent import will not work

This needs further investigation.

In production, we saw an SGA block created in Studio with no weight set. On export, that manifested as weight="none" in the OLX XML.

On a subsequent import, this broke the progress bar because the weighted grade could not be calculated.

I think the error is in the grade calculation, or possibly the import. I believe the export did the common practice of casting an undefined value as none in OLX XML.

incorrect error message in studio

If you attempt to set the maximum score to anything other than an integer, you get the following error:

"Points must be an integer"

This should be changed to "Maximum score must be an integer greater than 0"

Multiple SGA components dont work

When we try to add Multiple SGA components in the same unit for multiple submission, the functionality doesnt work. Most of the times after selecting a file, the button doesnt get updated with file name nor it gets submitted.

This happens either both of them or sometimes any one of them.

Refactor to avoid accessing StudentModule models directly

from #52 (comment)

An XBlock should never directly access StudentModule models directly. Anything you need from the modulestore or form the StudentModule models should be available through XBlock services, or we should create new XBlock Services to safely expose what's needed.

The username should be available now. An XBlock user service was created recently and could be leveraged here. It appears the module state is being retrieved to view student state from one user to another. You can avoid the need for accessing the state directly by adding the annotated_filename to the submission JSON blob as an arbitrary attribute. This will be useful in debugging anyhow, to have all relative information captured in the submissions table.

'StaffGradedAssignmentXBlockWithMixins' object has no attribute 'published_date'

Having installed the Staff Graded Assignment XBlock I can upload a file as a student. However when I login as a Teacher I cannot preview the edx-sga xblock in the teacher profile. Instead I get:

'StaffGradedAssignmentXBlockWithMixins' object has no attribute 'published_date'

This is my Log:

Request Method: GET
Request URL: http://localhost:8000/courses/edX/DemoX/Demo_Course/courseware/interactive_demonstrations/d4faac500623426c941931724d8e9f42/
Django Version: 1.4.12
Exception Type: AttributeError
Exception Value:
'StaffGradedAssignmentXBlockWithMixins' object has no attribute 'published_date'
Exception Location: /edx/app/edxapp/venvs/edxapp/src/edx-sga/edx_sga/sga.py in update_staff_debug_context, line 191
Python Executable: /edx/app/edxapp/venvs/edxapp/bin/python
Python Version: 2.7.3
Python Path:
['.',
'.',
'/edx/app/edxapp/edx-platform',
'/edx/app/edxapp/venvs/edxapp/src/django-staticfiles',
'/edx/app/edxapp/venvs/edxapp/src/django-pipeline',
'/edx/app/edxapp/venvs/edxapp/src/django-wiki',
'/edx/app/edxapp/venvs/edxapp/src/lettuce',
'/edx/app/edxapp/venvs/edxapp/src/pystache-custom',
'/edx/app/edxapp/venvs/edxapp/src/zendesk',
'/edx/app/edxapp/venvs/edxapp/src/django-ipware',
'/edx/app/edxapp/venvs/edxapp/src/pygeoip',
'/edx/app/edxapp/venvs/edxapp/src/xblock',
'/edx/app/edxapp/venvs/edxapp/src/codejail',
'/edx/app/edxapp/venvs/edxapp/src/diff-cover',
'/edx/app/edxapp/venvs/edxapp/src/js-test-tool',
'/edx/app/edxapp/venvs/edxapp/src/django-waffle',
'/edx/app/edxapp/venvs/edxapp/src/event-tracking',
'/edx/app/edxapp/venvs/edxapp/src/bok-choy',
'/edx/app/edxapp/venvs/edxapp/src/django-splash',
'/edx/app/edxapp/venvs/edxapp/src/acid-xblock',
'/edx/app/edxapp/venvs/edxapp/src/edx-ora2',
'/edx/app/edxapp/venvs/edxapp/src/opaque-keys',
'/edx/app/edxapp/venvs/edxapp/src/ease',
'/edx/app/edxapp/venvs/edxapp/src/i18n-tools',
'/edx/app/edxapp/edx-platform/common/lib/calc',
'/edx/app/edxapp/edx-platform/common/lib/capa',
'/edx/app/edxapp/edx-platform/common/lib/chem',
'/edx/app/edxapp/edx-platform/common/lib/sandbox-packages',
'/edx/app/edxapp/edx-platform/common/lib/symmath',
'/edx/app/edxapp/edx-platform/common/lib/xmodule',
'/edx/app/edxapp/venvs/edxapp/src/djpyfs',
'/edx/app/edxapp/venvs/edxapp/src/edx-jsme',
'/edx/app/edxapp/venvs/edxapp/src/edx-analytics-data-api-client',
'/edx/app/edxapp/venvs/edxapp/src/edx-sga',
'/edx/app/edxapp/venvs/edxapp/lib/python2.7',
'/edx/app/edxapp/venvs/edxapp/lib/python2.7/plat-linux2',
'/edx/app/edxapp/venvs/edxapp/lib/python2.7/lib-tk',
'/edx/app/edxapp/venvs/edxapp/lib/python2.7/lib-old',
'/edx/app/edxapp/venvs/edxapp/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages',
'/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/newrelic-2.18.1.15',
'/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info',
'/edx/app/edxapp/venvs/edxapp/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info',
path(u'/edx/app/edxapp/edx-platform'),
path(u'/edx/app/edxapp/edx-platform/lms/djangoapps'),
path(u'/edx/app/edxapp/edx-platform/common/djangoapps'),
path(u'/edx/app/edxapp/edx-platform/common/lib')]
Server time: Fri, 5 Sep 2014 14:29:45 -0400

Uploading a too-large file should fail with an error message returned to the user.

I tried uploading a 5.2MB file, which should be too large for the 5MB limiit on nginx.

The upload indicator advanced to 100%, and then nothing happened. I am left without a browse button to upload another file.

The behavior should be to return an error message to the user and then allow him to upload again.

For the error message, how about "Sorry, that file is too large. Please upload a smaller file"

If it's possible to either report the size of the file that was too large or, even better, the limit (imposed by configuration) that would be nice to have in the error.

(see jazkarta#6)

When upload returns an error, focus should be set to the error message

OK, here’s some quick feedback on uploading a file:

  • I can find “"the browse button and press enter on it;
  • I get a standard browser file upload widgit;
  • I choose a file and press “open”;
  • no feedback, and my focus gets completely lost and I have to navigate back to find yet another button which says “upload [filename], what [filename] is the name of the file I thought I just uploaded;
  • once I click this button, no feedback and again focus is undefined;
  • I finally find the “error uploading file” at the end of the unit’s content;

use standard xBlock ui/styling for settings dialog in studio

extracted from JIRA OSPR-337

(Reference: https://github.com/mitodl/edx-sga/#course-authoring-in-edx-studio)
Course Authoring Step 4. - It would be great to be able to borrow the default xblock settings styling used by xblocks such as ORA2. This would mean there might be 1 active tab in the editing area called "Settings" with the three settings styled similarly to other settings in Studio. I mention ORA2 because they may have patterns that would make it easy to achieve a similar visual outcome. An example screenshot is included below.
ORA studio screenshot

Remove uses of assert()

edX has asked not to use assert, since it can be worked around. Presumably we should be raising exceptions in these conditions.

Various methods use assert as guard conditions, but these are
stripped out if anyone uses the -O flag in python. This flag is rarely
used, but programs should still not rely on asserts to enforce
security.

Chris, let me know if you have any questions about this.

Post submission, use ORA2-like ui/styling

(extracted from JIRA OSPR-337)

After submission, I had smaller copy and layout suggestions that resemble image preview submissions in ORA2. Rather than expect the submissions would be embedded via a preview tile, the idea was to still represent them as larger tiles if they were a part of the problem. Similar to the previous note, the student visibility of this step might make it worth reviewing again, more so than some of the other suggestions.

screenshot of suggested ui

Grade Submission screen hangs at Loading....

When I click the grade submission screen it hangs at Loading and uploaded assignments do not display. I am unable to move forward with this feature. Any thoughts on why this would be happening?

image

Better formatting of edit screen

Need to monkey with CSS to make edit screen look prettier.

Note for self: Was attempting to reuse styling from another xmodule. It appears that including the class "wrapper-comp-settings" on the outermost div would active css already in place to format these kinds of things, but something somewhere sees use of that class as an invitation to remove any subelements from the DOM. Quickest route is to probably duplicate the css for wrapper-comp-settings in another class.

(See jazkarta#2)

Race condition when removing grades

This appears to only be reproducible in production, where there are fewer resources and more data.

When a staff member removes grades, there's no feedback about the removal, which apparently can take several seconds. If the user repeatedly clicks the button, it will cause 500 errors (which the user never sees).

Must work with IDDE

  • Instructor must be able to grant an extension through the IDDE interface
  • When an extension is granted, student should be able to upload a file
  • When an extension is removed, and the due date has passed, student should no longer be able to upload

(See jazkarta#5)

Multiply assignments for one unit support

Hi!

Here is the situation: we have added two Staff Graded Assignments for one Unit. They displays at LMS correctly. But when user is trying to upload a file for any of them it gets the javascript error:
Uncaught RangeError: Maximum call stack size exceeded (Chrome) or too much recursion (Firefox), where both points to jquery.min file.

Does multiply assignments for single unit is supported functionality? If it is, seems as a bug for me.

Thanks!

set a default display name (and display it in lms)

extracted from JIRA OSPR-337

Small suggestion here would be to default display name to show for the problem similar to other problems and components in Studio, letting students know they're interacting with a Staff Graded Assignment

This has broader user facing impact, and thus may be more important than the other suggestions.

add support for roles and workflow

Allow staff to add grades, but they shouldn't be presented to the student (nor recorded in student state) until an instructor has approved them.

I think this can be done by adding an adding an "approved" field that can only be changed by an instructor. Grades are not returned to the student unless the approved field is set to true.

An enhancement would to have this be an optional feature, although I don't know where the option could be set -- perhaps when the problem is authored?

(see jazkarta#20)

Enhance setup.py

setup.py will need a manifest file so that templates are copied properly and other additional information added to it (license, author, etc).

(See jazkarta#22)

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.