{"action":"created","comment":{"url":"https://api.github.com/repos/mheon/checksims/pulls/comments/23135462","id":23135462,"diff_hunk":"@@ -1,121 +1,109 @@\n \\section{Requirements}\n \\label{sec:requirements}\n-The first step in any software engineering project is determining the key\n-requirements. Ours are based on our initial goals (listed in\n-Section~\\ref{sec:goals}) Some goals were solicited from our advisor (the\n-intended audience of the program), while others came from our literature\n-review. Our requirements, summarized below, drove the decisions which created\n-our solution.\n-\n-From Professor Lauer, we obtained the requirement that whatever we produce must\n-be easy to use. The program should be usable by course staff with very little\n-or no training, and should produce output which can easily be interpreted.\n-The output itself should not be a definitive accusation of academic wrongdoing;\n-instead, it simply should flag suspicious submissions for further review by\n-course staff. The detector should to be complete and usable within seven weeks,\n-placing a severe time limit on implementation and encouraging the\n-implementation of a relatively small set of features. Given the time constraint\n-and the potential that the detector would be used for a number of classes\n-taught using various languages, it was also desirable that the detector not\n-attempt to perform language-specific analysis of the source code, but instead\n-only interpret submissions as plaintext. Finally, the detector should be made\n-to match Professor Lauer's specific definition of similarity and academic\n-dishonesty, which is very permissive of relatively similar code so long as it\n-was typed in separately. The relaxed detection environment meant that some\n-types of similarity detection (for example, detecting  semantically-identical\n-code segments) are far less useful, as they match activities which are\n-considered perfectly acceptable by Professor Lauer.\n-  \n-From our literature review, we determined that source code similarity detection\n-tools almost universally parse input submissions into syntax trees, as it\n-is very easy to disguise (intentionally or unintentionally) similar code\n-through a number of small tweaks (swapping argument or operand order, for\n-example). It was apparent to us that performing any kind of syntax tree\n-analysis was incompatible with the previous requirement that the system\n-produced should operate on plaintext only. The plaintext requirement was the\n-overriding concern --- syntax-based parsing limits the number of languages\n-that can be used with a detector, and would also be difficult to implement\n-given our time constraints. Instead, we sought to identify methods used for\n-similarity detection in plaintext submissions which could be sufficiently\n-accurate and run in a reasonable amount of time.\n-\n-The requirements seem to lead to a product which is small in scope,\n-implementing only a subset of the functionality which might eventually be\n-desirable, We required that our solution be modular and easily extensible.\n-While we might not be able to implement all features we desired, we could pass\n-on the ability to quickly implement new features to future MQP teams, or to the\n-open source community. Proper documentation and unit testing of all produced\n-source code, and emphasis on extendability when designing the architecture, were\n-decided to be priorities.\n+Our advisor, Professor Lauer, commissioned the \\textit{checksims} similarity\n+detection tool with the following requirements:\n+\\begin{itemize}\n+\\item The program should be usable by course staff with very little\n+ or no training, and should produce output in a form that can be easily\n+ interpreted. \\\\","path":"doc/src/approach.ltx","position":55,"original_position":55,"commit_id":"9beff1e23a0c127de685452849dc560060eb16a6","original_commit_id":"9beff1e23a0c127de685452849dc560060eb16a6","user":{"login":"mheon","id":7735048,"avatar_url":"https://avatars.githubusercontent.com/u/7735048?v=3","gravatar_id":"","url":"https://api.github.com/users/mheon","html_url":"https://github.com/mheon","followers_url":"https://api.github.com/users/mheon/followers","following_url":"https://api.github.com/users/mheon/following{/other_user}","gists_url":"https://api.github.com/users/mheon/gists{/gist_id}","starred_url":"https://api.github.com/users/mheon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mheon/subscriptions","organizations_url":"https://api.github.com/users/mheon/orgs","repos_url":"https://api.github.com/users/mheon/repos","events_url":"https://api.github.com/users/mheon/events{/privacy}","received_events_url":"https://api.github.com/users/mheon/received_events","type":"User","site_admin":false},"body":"Why are we forcing linebreaks? This seems like really bad practice","created_at":"2015-01-18T18:21:32Z","updated_at":"2015-01-18T18:21:32Z","html_url":"https://github.com/mheon/checksims/pull/16#discussion_r23135462","pull_request_url":"https://api.github.com/repos/mheon/checksims/pulls/16","_links":{"self":{"href":"https://api.github.com/repos/mheon/checksims/pulls/comments/23135462"},"html":{"href":"https://github.com/mheon/checksims/pull/16#discussion_r23135462"},"pull_request":{"href":"https://api.github.com/repos/mheon/checksims/pulls/16"}}},"pull_request":{"url":"https://api.github.com/repos/mheon/checksims/pulls/16","id":27444513,"html_url":"https://github.com/mheon/checksims/pull/16","diff_url":"https://github.com/mheon/checksims/pull/16.diff","patch_url":"https://github.com/mheon/checksims/pull/16.patch","issue_url":"https://api.github.com/repos/mheon/checksims/issues/16","number":16,"state":"open","locked":false,"title":"Approach","user":{"login":"dmurvihill","id":1649120,"avatar_url":"https://avatars.githubusercontent.com/u/1649120?v=3","gravatar_id":"","url":"https://api.github.com/users/dmurvihill","html_url":"https://github.com/dmurvihill","followers_url":"https://api.github.com/users/dmurvihill/followers","following_url":"https://api.github.com/users/dmurvihill/following{/other_user}","gists_url":"https://api.github.com/users/dmurvihill/gists{/gist_id}","starred_url":"https://api.github.com/users/dmurvihill/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmurvihill/subscriptions","organizations_url":"https://api.github.com/users/dmurvihill/orgs","repos_url":"https://api.github.com/users/dmurvihill/repos","events_url":"https://api.github.com/users/dmurvihill/events{/privacy}","received_events_url":"https://api.github.com/users/dmurvihill/received_events","type":"User","site_admin":false},"body":"Correct Lauer's comments from December 24","created_at":"2015-01-15T17:07:34Z","updated_at":"2015-01-18T18:21:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bda0f6b81c89bfee23da49eb1c5e4d3e4ef2510e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mheon/checksims/pulls/16/commits","review_comments_url":"https://api.github.com/repos/mheon/checksims/pulls/16/comments","review_comment_url":"https://api.github.com/repos/mheon/checksims/pulls/comments/{number}","comments_url":"https://api.github.com/repos/mheon/checksims/issues/16/comments","statuses_url":"https://api.github.com/repos/mheon/checksims/statuses/9beff1e23a0c127de685452849dc560060eb16a6","head":{"label":"dmurvihill:approach","ref":"approach","sha":"9beff1e23a0c127de685452849dc560060eb16a6","user":{"login":"dmurvihill","id":1649120,"avatar_url":"https://avatars.githubusercontent.com/u/1649120?v=3","gravatar_id":"","url":"https://api.github.com/users/dmurvihill","html_url":"https://github.com/dmurvihill","followers_url":"https://api.github.com/users/dmurvihill/followers","following_url":"https://api.github.com/users/dmurvihill/following{/other_user}","gists_url":"https://api.github.com/users/dmurvihill/gists{/gist_id}","starred_url":"https://api.github.com/users/dmurvihill/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmurvihill/subscriptions","organizations_url":"https://api.github.com/users/dmurvihill/orgs","repos_url":"https://api.github.com/users/dmurvihill/repos","events_url":"https://api.github.com/users/dmurvihill/events{/privacy}","received_events_url":"https://api.github.com/users/dmurvihill/received_events","type":"User","site_admin":false},"repo":{"id":23435035,"name":"checksims","full_name":"dmurvihill/checksims","owner":{"login":"dmurvihill","id":1649120,"avatar_url":"https://avatars.githubusercontent.com/u/1649120?v=3","gravatar_id":"","url":"https://api.github.com/users/dmurvihill","html_url":"https://github.com/dmurvihill","followers_url":"https://api.github.com/users/dmurvihill/followers","following_url":"https://api.github.com/users/dmurvihill/following{/other_user}","gists_url":"https://api.github.com/users/dmurvihill/gists{/gist_id}","starred_url":"https://api.github.com/users/dmurvihill/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmurvihill/subscriptions","organizations_url":"https://api.github.com/users/dmurvihill/orgs","repos_url":"https://api.github.com/users/dmurvihill/repos","events_url":"https://api.github.com/users/dmurvihill/events{/privacy}","received_events_url":"https://api.github.com/users/dmurvihill/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dmurvihill/checksims","description":"software similarity detection service","fork":false,"url":"https://api.github.com/repos/dmurvihill/checksims","forks_url":"https://api.github.com/repos/dmurvihill/checksims/forks","keys_url":"https://api.github.com/repos/dmurvihill/checksims/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dmurvihill/checksims/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dmurvihill/checksims/teams","hooks_url":"https://api.github.com/repos/dmurvihill/checksims/hooks","issue_events_url":"https://api.github.com/repos/dmurvihill/checksims/issues/events{/number}","events_url":"https://api.github.com/repos/dmurvihill/checksims/events","assignees_url":"https://api.github.com/repos/dmurvihill/checksims/assignees{/user}","branches_url":"https://api.github.com/repos/dmurvihill/checksims/branches{/branch}","tags_url":"https://api.github.com/repos/dmurvihill/checksims/tags","blobs_url":"https://api.github.com/repos/dmurvihill/checksims/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dmurvihill/checksims/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dmurvihill/checksims/git/refs{/sha}","trees_url":"https://api.github.com/repos/dmurvihill/checksims/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dmurvihill/checksims/statuses/{sha}","languages_url":"https://api.github.com/repos/dmurvihill/checksims/languages","stargazers_url":"https://api.github.com/repos/dmurvihill/checksims/stargazers","contributors_url":"https://api.github.com/repos/dmurvihill/checksims/contributors","subscribers_url":"https://api.github.com/repos/dmurvihill/checksims/subscribers","subscription_url":"https://api.github.com/repos/dmurvihill/checksims/subscription","commits_url":"https://api.github.com/repos/dmurvihill/checksims/commits{/sha}","git_commits_url":"https://api.github.com/repos/dmurvihill/checksims/git/commits{/sha}","comments_url":"https://api.github.com/repos/dmurvihill/checksims/comments{/number}","issue_comment_url":"https://api.github.com/repos/dmurvihill/checksims/issues/comments/{number}","contents_url":"https://api.github.com/repos/dmurvihill/checksims/contents/{+path}","compare_url":"https://api.github.com/repos/dmurvihill/checksims/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dmurvihill/checksims/merges","archive_url":"https://api.github.com/repos/dmurvihill/checksims/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dmurvihill/checksims/downloads","issues_url":"https://api.github.com/repos/dmurvihill/checksims/issues{/number}","pulls_url":"https://api.github.com/repos/dmurvihill/checksims/pulls{/number}","milestones_url":"https://api.github.com/repos/dmurvihill/checksims/milestones{/number}","notifications_url":"https://api.github.com/repos/dmurvihill/checksims/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dmurvihill/checksims/labels{/name}","releases_url":"https://api.github.com/repos/dmurvihill/checksims/releases{/id}","created_at":"2014-08-28T16:28:51Z","updated_at":"2015-01-06T20:36:22Z","pushed_at":"2015-01-15T19:41:21Z","git_url":"git://github.com/dmurvihill/checksims.git","ssh_url":"git@github.com:dmurvihill/checksims.git","clone_url":"https://github.com/dmurvihill/checksims.git","svn_url":"https://github.com/dmurvihill/checksims","homepage":null,"size":1665,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":11,"forks":1,"open_issues":11,"watchers":0,"default_branch":"master"}},"base":{"label":"mheon:master","ref":"master","sha":"04a249f807ffcbf5bf6b01c71a73093e64b32a9a","user":{"login":"mheon","id":7735048,"avatar_url":"https://avatars.githubusercontent.com/u/7735048?v=3","gravatar_id":"","url":"https://api.github.com/users/mheon","html_url":"https://github.com/mheon","followers_url":"https://api.github.com/users/mheon/followers","following_url":"https://api.github.com/users/mheon/following{/other_user}","gists_url":"https://api.github.com/users/mheon/gists{/gist_id}","starred_url":"https://api.github.com/users/mheon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mheon/subscriptions","organizations_url":"https://api.github.com/users/mheon/orgs","repos_url":"https://api.github.com/users/mheon/repos","events_url":"https://api.github.com/users/mheon/events{/privacy}","received_events_url":"https://api.github.com/users/mheon/received_events","type":"User","site_admin":false},"repo":{"id":23548345,"name":"checksims","full_name":"mheon/checksims","owner":{"login":"mheon","id":7735048,"avatar_url":"https://avatars.githubusercontent.com/u/7735048?v=3","gravatar_id":"","url":"https://api.github.com/users/mheon","html_url":"https://github.com/mheon","followers_url":"https://api.github.com/users/mheon/followers","following_url":"https://api.github.com/users/mheon/following{/other_user}","gists_url":"https://api.github.com/users/mheon/gists{/gist_id}","starred_url":"https://api.github.com/users/mheon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mheon/subscriptions","organizations_url":"https://api.github.com/users/mheon/orgs","repos_url":"https://api.github.com/users/mheon/repos","events_url":"https://api.github.com/users/mheon/events{/privacy}","received_events_url":"https://api.github.com/users/mheon/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mheon/checksims","description":"software similarity detection service","fork":true,"url":"https://api.github.com/repos/mheon/checksims","forks_url":"https://api.github.com/repos/mheon/checksims/forks","keys_url":"https://api.github.com/repos/mheon/checksims/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mheon/checksims/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mheon/checksims/teams","hooks_url":"https://api.github.com/repos/mheon/checksims/hooks","issue_events_url":"https://api.github.com/repos/mheon/checksims/issues/events{/number}","events_url":"https://api.github.com/repos/mheon/checksims/events","assignees_url":"https://api.github.com/repos/mheon/checksims/assignees{/user}","branches_url":"https://api.github.com/repos/mheon/checksims/branches{/branch}","tags_url":"https://api.github.com/repos/mheon/checksims/tags","blobs_url":"https://api.github.com/repos/mheon/checksims/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mheon/checksims/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mheon/checksims/git/refs{/sha}","trees_url":"https://api.github.com/repos/mheon/checksims/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mheon/checksims/statuses/{sha}","languages_url":"https://api.github.com/repos/mheon/checksims/languages","stargazers_url":"https://api.github.com/repos/mheon/checksims/stargazers","contributors_url":"https://api.github.com/repos/mheon/checksims/contributors","subscribers_url":"https://api.github.com/repos/mheon/checksims/subscribers","subscription_url":"https://api.github.com/repos/mheon/checksims/subscription","commits_url":"https://api.github.com/repos/mheon/checksims/commits{/sha}","git_commits_url":"https://api.github.com/repos/mheon/checksims/git/commits{/sha}","comments_url":"https://api.github.com/repos/mheon/checksims/comments{/number}","issue_comment_url":"https://api.github.com/repos/mheon/checksims/issues/comments/{number}","contents_url":"https://api.github.com/repos/mheon/checksims/contents/{+path}","compare_url":"https://api.github.com/repos/mheon/checksims/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mheon/checksims/merges","archive_url":"https://api.github.com/repos/mheon/checksims/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mheon/checksims/downloads","issues_url":"https://api.github.com/repos/mheon/checksims/issues{/number}","pulls_url":"https://api.github.com/repos/mheon/checksims/pulls{/number}","milestones_url":"https://api.github.com/repos/mheon/checksims/milestones{/number}","notifications_url":"https://api.github.com/repos/mheon/checksims/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mheon/checksims/labels{/name}","releases_url":"https://api.github.com/repos/mheon/checksims/releases{/id}","created_at":"2014-09-01T16:15:09Z","updated_at":"2014-12-23T17:45:23Z","pushed_at":"2015-01-02T18:29:43Z","git_url":"git://github.com/mheon/checksims.git","ssh_url":"git@github.com:mheon/checksims.git","clone_url":"https://github.com/mheon/checksims.git","svn_url":"https://github.com/mheon/checksims","homepage":null,"size":1556,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":4,"forks":0,"open_issues":4,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mheon/checksims/pulls/16"},"html":{"href":"https://github.com/mheon/checksims/pull/16"},"issue":{"href":"https://api.github.com/repos/mheon/checksims/issues/16"},"comments":{"href":"https://api.github.com/repos/mheon/checksims/issues/16/comments"},"review_comments":{"href":"https://api.github.com/repos/mheon/checksims/pulls/16/comments"},"review_comment":{"href":"https://api.github.com/repos/mheon/checksims/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/mheon/checksims/pulls/16/commits"},"statuses":{"href":"https://api.github.com/repos/mheon/checksims/statuses/9beff1e23a0c127de685452849dc560060eb16a6"}}}}