{"id":18560788,"url":"https://github.com/eepp/corr2","last_synced_at":"2025-11-01T12:30:33.222Z","repository":{"id":12388467,"uuid":"15040805","full_name":"eepp/corr2","owner":"eepp","description":"easy to use, Web-based grading tool","archived":false,"fork":false,"pushed_at":"2013-12-16T07:33:26.000Z","size":312,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-26T11:07:19.068Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eepp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-12-09T07:22:11.000Z","updated_at":"2016-02-08T15:49:54.000Z","dependencies_parsed_at":"2022-08-19T13:40:13.516Z","dependency_job_id":null,"html_url":"https://github.com/eepp/corr2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eepp%2Fcorr2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eepp%2Fcorr2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eepp%2Fcorr2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eepp%2Fcorr2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eepp","download_url":"https://codeload.github.com/eepp/corr2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239287712,"owners_count":19613980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T22:04:35.203Z","updated_at":"2025-11-01T12:30:33.123Z","avatar_url":"https://github.com/eepp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"cOrr2\n=====\n\nGrading is painful. It generally involves (at least in my case) repeating the\nsame thing hundreds of times in a row. This repetitive task is prone to human error\nand may also lead to severe mental disorder.\n\n**cOrr2** puts (more) fun into grading. [Try it here!](http://eepp.github.io/corr2)\n\ncOrr2 is a Web-based grading tool. The input is an XML description (hopefully\na more visual editor will be built in the future) of a grade sheet (called *template*)\nand the output is a Web template where you may easily fill grades in.\n\nHere's a simple example of a template:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!-- A very simple cOrr2 XML template. --\u003e\n\u003ccorr\u003e\n    \u003chead\u003e\n        \u003ctitle\u003eENG101: report #2\u003c/title\u003e\n        \u003csettings\u003e\n            \u003cunique-id section-id=\"id\" field-id=\"name\" /\u003e\n        \u003c/settings\u003e\n    \u003c/head\u003e\n\n    \u003cbody\u003e\n        \u003csection id=\"id\" title=\"Identification\"\u003e\n            \u003cgen id=\"name\" title=\"Student name\" /\u003e\n        \u003c/section\u003e\n\n        \u003csection id=\"report\" title=\"Text report\"\u003e\n            \u003cgen id=\"subject\" title=\"Report subject\" mandatory=\"true\" /\u003e\n            \u003cgrade id=\"title\" title=\"Folder/title page\" max=\"5\"\u003e\n                \u003cinfo\u003e\n                    \u003c![CDATA[\n                        \u003cp\u003eInclude:\u003c/p\u003e\n                        \u003cul\u003e\n                            \u003cli\u003eStudent name and ID\u003c/li\u003e\n                            \u003cli\u003eSchool name\u003c/li\u003e\n                            \u003cli\u003eDate\u003c/li\u003e\n                            \u003cli\u003eReport title\u003c/li\u003e\n                        \u003c/ul\u003e\n                    ]]\u003e\n                \u003c/info\u003e\n            \u003c/grade\u003e\n            \u003cgrade id=\"indexc\" title=\"Index cards\" max=\"10\" /\u003e\n            \u003cgrade id=\"ownwords\" title=\"Own words\" max=\"15\" /\u003e\n            \u003cgrade id=\"headings\" title=\"Headings\" max=\"15\" default=\"max\" /\u003e\n            \u003cgrade id=\"language\" title=\"Language\" max=\"20\"\u003e\n                \u003cinfo escape=\"true\"\u003eSpelling (5), grammar (10), punctuation (5)\u003c/info\u003e\n            \u003c/grade\u003e\n            \u003cgrade id=\"order\" title=\"Logical order, complete\" max=\"20\" /\u003e\n            \u003cgrade id=\"timeline\" title=\"Timeline\" max=\"15\" /\u003e\n            \u003cgen id=\"comments\" title=\"Comments\" multiline=\"true\" /\u003e\n        \u003c/section\u003e\n    \u003c/body\u003e\n\u003c/corr\u003e\n```\n\nAfter running cOrr2, go to its URL and you get this:\n\n![cOrr2 output example](http://0x3b.org/ss/pickaway641.png)\n\nOnce saved, the output is a JSON file which can later be processed to give back\nresults to students or a report to the school:\n\n```javascript\n{\n    \"infos\": {\n        \"date\": \"2013-12-16 02:20:23\", \n        \"hostname\": \"eeppdesk\", \n        \"max\": 100.0, \n        \"output_filename\": \"/home/eepp/dev/corr2/John Smith.json\", \n        \"template_path\": \"/home/eepp/dev/corr2/examples/simple.xml\", \n        \"title\": \"ENG101: report #2\", \n        \"total\": 62.5, \n        \"version\": \"cOrr 2.0.0\"\n    }, \n    \"sections\": {\n        \"id\": {\n            \"fields\": {\n                \"name\": {\n                    \"result\": \"John Smith\", \n                    \"title\": \"Student name\", \n                    \"type\": \"gen\"\n                }\n            }, \n            \"title\": \"Identification\"\n        }, \n        \"report\": {\n            \"fields\": {\n                \"comments\": {\n                    \"result\": \"Could be better, John. Pay attention to the logical order of your text next time.\", \n                    \"title\": \"Comments\", \n                    \"type\": \"gen\"\n                }, \n                \"headings\": {\n                    \"max\": 15.0, \n                    \"result\": 11.25, \n                    \"title\": \"Headings\", \n                    \"type\": \"grade\"\n                }, \n                \"indexc\": {\n                    \"max\": 10.0, \n                    \"result\": 7.5, \n                    \"title\": \"Index cards\", \n                    \"type\": \"grade\"\n                }, \n                \"language\": {\n                    \"max\": 20.0, \n                    \"result\": 10.0, \n                    \"title\": \"Language\", \n                    \"type\": \"grade\"\n                }, \n                \"order\": {\n                    \"max\": 20.0, \n                    \"result\": 5.0, \n                    \"title\": \"Logical order, complete\", \n                    \"type\": \"grade\"\n                }, \n                \"ownwords\": {\n                    \"max\": 15.0, \n                    \"result\": 10.0, \n                    \"title\": \"Own words\", \n                    \"type\": \"grade\"\n                }, \n                \"subject\": {\n                    \"result\": \"Animals and stuff\", \n                    \"title\": \"Report subject\", \n                    \"type\": \"gen\"\n                }, \n                \"timeline\": {\n                    \"max\": 15.0, \n                    \"result\": 15.0, \n                    \"title\": \"Timeline\", \n                    \"type\": \"grade\"\n                }, \n                \"title\": {\n                    \"max\": 5.0, \n                    \"result\": 3.75, \n                    \"title\": \"Folder/title page\", \n                    \"type\": \"grade\"\n                }\n            }, \n            \"title\": \"Text report\"\n        }\n    }\n}\n```\n\n\ndependencies\n------------\n\ncOrr2 is developed in Python 3 and needs the following packages to live:\n\n  * [lxml](http://lxml.de/)\n  * [Flask](http://flask.pocoo.org/docs/)\n\n[`lessc`](http://lesscss.org/) is also needed to build the CSS file.\n\n\ngetting started\n---------------\n\nClone:\n\n    $ git clone https://github.com/eepp/corr2 \u0026\u0026 cd corr2\n\nCompile the CSS file using `lessc`:\n\n    $ make -C less\n\nMake sure the project's root directory (where `example/` and `bin/` are) is in your\nPython's path:\n\n    $ export PYTHONPATH=$(pwd)\n\nStart cOrr2:\n\n    $ python bin/corr.py examples/simple.xml\n\nYou should see something like:\n\n```\nINFO:root:Starting cOrr2\nINFO:root:Parsing template \"examples/simple.xml\"\nINFO:root:Parsed template:\nINFO:root:    Title: ENG101: report #2\nINFO:root:    Sections:\nINFO:root:        Identification:\nINFO:root:            Student name  [general field]\nINFO:root:        Text report:\nINFO:root:            Report subject  [general field]\nINFO:root:            Folder/title page  [grade field]\nINFO:root:            Index cards  [grade field]\nINFO:root:            Own words  [grade field]\nINFO:root:            Headings  [grade field]\nINFO:root:            Language  [grade field]\nINFO:root:            Logical order, complete  [grade field]\nINFO:root:            Timeline  [grade field]\nINFO:root:            Comments  [general field]\nINFO:root:Starting cOrr2 server\nINFO:werkzeug: * Running on http://127.0.0.1:8080/\n```\n\nPoint your browser to `http://127.0.0.1:8080/` and start grading! When saving,\nJSON results files will be written to your current working directory. You may\nchange this output directory (and other stuff like the host address and port)\nusing options. Do\n\n    $ python bin/corr.py -h\n\nto see the list of options.\n\n\nkeyboard shortcuts\n------------------\n\nWithin the Web editor, the following keyboard shortcuts should work:\n\n  * `Down`: go to next field\n  * `Up`: go to previous field\n  * `Ctrl+Down`: go to next section\n  * `Ctrl+Up`: go to previous section\n  * specific to grade fields:\n    * `Z` or `Escape`: zero\n    * `X` or `Space`: max\n    * `A`: max × 0.25\n    * `S`: max × 0.5\n    * `D`: max × 0.75\n  * `Ctrl+Enter`: save (submit form)\n\nPlease note that, for obvious reasons, some keyboard shortcuts do not work\nwithin multiline text areas. When stuck there, you can always use `Tab` and\n`Shift+Tab` to get out.\n\n\ntodo\n----\n\n  * cOrr2 visual template editor\n  * XML template RELAX NG validation\n  * edit already saved results\n  * prevent results file overwriting\n  * use setuptools\n  * try AngularJS?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feepp%2Fcorr2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feepp%2Fcorr2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feepp%2Fcorr2/lists"}