mtorpey / feedbackhelper Goto Github PK
View Code? Open in Web Editor NEWThis project forked from bhuvanbezawada/cs5099-project
Tool for efficiently creating bullet-pointed feedback on assignments, with exports for St Andrews' MMS.
License: Other
This project forked from bhuvanbezawada/cs5099-project
Tool for efficiently creating bullet-pointed feedback on assignments, with exports for St Andrews' MMS.
License: Other
This is probably another M1 issue... Apologies for my CPU :)
The tool worked fine for the first 5 students, but then stopped updating the snippets on the right hand side. I thought I would restart and ask it to resume.
Unfortunately when I try to resume I get the following error:
%d [%thread] %-5level %logger - %msg%n java.lang.RuntimeException: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.internal.recordstorage.RecordStorageEngine@209418da' was successfully initialized, but failed to start. Please see the attached cause exception "'int org.apache.commons.lang3.mutable.MutableInt.addAndGet(int)'".
at org.neo4j.kernel.database.AbstractDatabase.handleStartupFailure(AbstractDatabase.java:211) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.kernel.database.AbstractDatabase.start(AbstractDatabase.java:164) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.dbms.database.DatabaseLifecycles.startDatabase(DatabaseLifecycles.java:119) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.dbms.database.DatabaseLifecycles.initialiseDefaultDatabase(DatabaseLifecycles.java:88) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.dbms.database.DatabaseLifecycles$DefaultDatabaseStarter.start(DatabaseLifecycles.java:158) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:353) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:92) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.graphdb.facade.DatabaseManagementServiceFactory.startDatabaseServer(DatabaseManagementServiceFactory.java:246) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.graphdb.facade.DatabaseManagementServiceFactory.build(DatabaseManagementServiceFactory.java:193) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.dbms.api.DatabaseManagementServiceBuilderImplementation.newDatabaseManagementService(DatabaseManagementServiceBuilderImplementation.java:83) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.dbms.api.DatabaseManagementServiceBuilderImplementation.build(DatabaseManagementServiceBuilderImplementation.java:78) ~[FeedbackHelper-2.0-complete.jar:?]
at org.neo4j.dbms.api.DatabaseManagementServiceBuilder.build(DatabaseManagementServiceBuilder.java:42) ~[FeedbackHelper-2.0-complete.jar:?]
at database.GraphDatabaseManager.openGraphDatabase(GraphDatabaseManager.java:45) ~[FeedbackHelper-2.0-complete.jar:?]
at controller.AppController.loadFeedbackDocuments(AppController.java:221) ~[FeedbackHelper-2.0-complete.jar:?]
at controller.AppController.loadAssignment(AppController.java:155) ~[FeedbackHelper-2.0-complete.jar:?]
There is more in that output, but I suspect this would be enough?
Grade should just be autosaved like everything else.
More broadly, figure out and document exactly when autosaving happens.
Phrases are automatically annotated with a little smiley or sad face, and a feedback document can be highlighted with green and red, using automatic sentiment analysis. This is a cool feature, but not particularly useful, and often makes mistakes.
The tool takes more than 10 seconds to start up, and almost all of this is loading the Stanford NLP library. It also accounts for 591 MB of dependencies in the jar, which is nearly ¾ of the whole thing. Finally, it's something that needs to be maintained and updated.
Bhuvan did a great job with this, and it was excellent in the context of a dissertation project. However, I'm wondering if it's worth keeping for practical purposes. Has anyone found it particularly useful for marking, or does anyone have any thoughts about its removal?
For elite programmers like me.
This would require some more abstracting of colours, and an extra menu option of some kind. In future this could lead to a lot more configurability, but just light vs dark would be a good start.
At the moment the CSV is jumbled up randomly.
If you've done some marking in an fht file in a directory, then you move the directory and point the tool to it again, the program crashes with an error (I think a FileNotFoundException
).
I'm guessing the fht
file contains an absolute path to the assignment directory, which causes this. It'd be better if it were a path relative to the fht
file and things could therefore be moved.
When changing between students, the left window scrolls like absolute crazy. I have no idea what it's doing.
Long strings are not wrapped over the new line in the sentiment overview window.
It would be good to be able to change the width of the document section and of the phrases section. Currently I can only change the width of the left section with the list of assignments. With the other two sections, I can enlarge them when I enlarge the application window, but if I need to resize it again to make smaller, they do not shrink. As a workaround, I need to restart the application to return to the initial window layout.
This seems to be a problem with the bundled graphDB not opening. I should try this again and capture the output.
If anyone else has tried the tool on Windows, I'd love to know.
Filing as separate issue so it doesn't get lost. For 3.0-rc.2.
On Monterey 12.6.1 Intel, re-opening an existing assignment, the file picker can't see inside my ~/Documents
folder when I double click the jar file, but can when tool is invoked from the command line.
Something cool, preferably with dragons.
Not sure if this is possible, but it would be nice if not. Sorry if I am missing something.
While you are at it, and if it's easy to do so, it would be good to be able to add/remove sections as well. Removing would potentially mean data loss, of course.
It would be good to be able to edit and/or delete custom text.
Even just the ability to delete it may be useful as a workaround for editing.
It's been empty for several versions!
At the moment, a list of student IDs is required to start marking an assignment, and there is no way to add another student to the list after this. In practice, it is often necessary to mark a few extra, due to late hand-ins, absent colleagues and so on. Currently there's no way to do this, and the only option is hacks like overwriting previous feedback documents with new ones and changing the names.
I thought it was taking a long time to load big document databases, but this is a small assignment. 6.9KiB phrases and 104KiB documents.
Something inefficient is happening. I suspect it's in the document part, since the phrases are all loaded in one go, not section-by-section (right?).
On Monterey 12.6.1 Intel, crashes on attempt to resume existing assignment. I suspect it's something to do with not having been granted permissions for file access, since in the file picker dialogue the main user Documents folder is displayed as empty. Not sure how I managed to create the files on the first run, though.
Attached is screenshot of Console fault messages relating to Java.
We save frequently used phrases to a phrases.json file, but all the phrases are already stored in the document database. We should be able to re-populate the list on loading an assignment, rather than saving it again and again (slow and inelegant).
Not sure what the error is. I know a bunch of people used the tool without any issues, I am feeling a bit left out :)
This is what happens.
I did "start new assignment", then "manual setup", then "confirm".
$ java -jar FeedbackHelperTool-1.2-jar-with-dependencies.jar ✔
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator parse
[main] INFO edu.stanford.nlp.parser.common.ParserGrammar - Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [0.4 sec].
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator pos
[main] INFO edu.stanford.nlp.tagger.maxent.MaxentTagger - Loading POS tagger from edu/stanford/nlp/models/pos-tagger/english-left3words-distsim.tagger ... done [0.3 sec].
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator lemma
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ner
[main] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... done [0.5 sec].
[main] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... done [0.3 sec].
[main] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... done [0.3 sec].
[main] INFO edu.stanford.nlp.time.JollyDayHolidays - Initializing JollyDayHoliday for SUTime from classpath edu/stanford/nlp/models/sutime/jollyday/Holidays_sutime.xml as sutime.binder.1.
[main] INFO edu.stanford.nlp.time.TimeExpressionExtractorImpl - Using following SUTime rules: edu/stanford/nlp/models/sutime/defs.sutime.txt,edu/stanford/nlp/models/sutime/english.sutime.txt,edu/stanford/nlp/models/sutime/english.holidays.sutime.txt
[main] INFO edu.stanford.nlp.pipeline.TokensRegexNERAnnotator - ner.fine.regexner: Read 580705 unique entries out of 581864 from edu/stanford/nlp/models/kbp/english/gazetteers/regexner_caseless.tab, 0 TokensRegex patterns.
[main] INFO edu.stanford.nlp.pipeline.TokensRegexNERAnnotator - ner.fine.regexner: Read 4869 unique entries out of 4869 from edu/stanford/nlp/models/kbp/english/gazetteers/regexner_cased.tab, 0 TokensRegex patterns.
[main] INFO edu.stanford.nlp.pipeline.TokensRegexNERAnnotator - ner.fine.regexner: Read 585574 unique entries from 2 files
[main] INFO edu.stanford.nlp.pipeline.NERCombinerAnnotator - Using numeric classifiers: true
[main] INFO edu.stanford.nlp.pipeline.NERCombinerAnnotator - Using SUTime: true
[main] INFO edu.stanford.nlp.pipeline.NERCombinerAnnotator - Using fine grained: true
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator sentiment
[main] INFO edu.stanford.nlp.sentiment.SentimentModel - Loading sentiment model edu/stanford/nlp/models/sentiment/sentiment.ser.gz ... done [0.1 sec].
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Error starting org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory, /Users/ozgurakgun/work/teaching/2022-2023/JH/D1/graphDB
at org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:212)
at org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:135)
at org.neo4j.graphdb.factory.GraphDatabaseFactory.newDatabase(GraphDatabaseFactory.java:133)
at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:122)
at org.neo4j.graphdb.factory.GraphDatabaseFactory$EmbeddedDatabaseCreator.newDatabase(GraphDatabaseFactory.java:178)
at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:210)
at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:79)
at database.GraphDatabaseManager.openGraphDatabase(GraphDatabaseManager.java:40)
at database.GraphDatabaseManager.createGraphDatabase(GraphDatabaseManager.java:52)
at controller.AppController.createAssignment(AppController.java:96)
at view.CreateAssignmentScreen.lambda$setupConfirmationPanel$0(CreateAssignmentScreen.java:175)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6616)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3398)
at java.desktop/java.awt.Component.processEvent(Component.java:6381)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4991)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4823)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4823)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Suppressed: java.lang.NoClassDefFoundError: Could not initialize class org.neo4j.helpers.Exceptions
at org.neo4j.kernel.lifecycle.LifeSupport.shutdown(LifeSupport.java:189)
at org.neo4j.graphdb.facade.spi.ClassicCoreSPI.shutdown(ClassicCoreSPI.java:171)
at org.neo4j.kernel.impl.factory.GraphDatabaseFacade.shutdown(GraphDatabaseFacade.java:357)
at org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:220)
... 45 more
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.LinkageError: Could not get Throwable message field [in thread "AWT-EventQueue-0"]
at org.neo4j.helpers.Exceptions.<clinit>(Exceptions.java:417)
at org.neo4j.kernel.NeoStoreDataSource.start(NeoStoreDataSource.java:424)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111)
at org.neo4j.kernel.impl.transaction.state.DataSourceManager.start(DataSourceManager.java:116)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111)
at org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:207)
... 45 more
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.NeoStoreDataSource@272262a1' was successfully initialized, but failed to start. Please see the attached cause exception "Unable to make field private java.lang.String java.lang.Throwable.detailMessage accessible: module java.base does not "opens java.lang" to unnamed module @d8f74ec".
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:473)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111)
at org.neo4j.kernel.impl.transaction.state.DataSourceManager.start(DataSourceManager.java:116)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111)
at org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:207)
... 45 more
Caused by: java.lang.LinkageError: Could not get Throwable message field
at org.neo4j.helpers.Exceptions.<clinit>(Exceptions.java:417)
at org.neo4j.kernel.NeoStoreDataSource.start(NeoStoreDataSource.java:424)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452)
... 50 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String java.lang.Throwable.detailMessage accessible: module java.base does not "opens java.lang" to unnamed module @d8f74ec
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:180)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:174)
at org.neo4j.helpers.Exceptions.<clinit>(Exceptions.java:413)
... 52 more
[Thread-2] INFO org.dizitart.no2.Nitrite - Nitrite database has been closed by JVM shutdown hook without saving last unsaved changes.
Currently is only says "Java" and shows the used version of Java (of course, that's useful). Would be good to have information about developers, and the link to this issue tracker.
The window displaying custom text chunks has fixed size, so I can't see in full the phrases longer than three lines. It would be nice to at least be able to scroll the text.
As a workaround, I try to not to use long lines, and/or make the initial part informative and recognisable, so I don't have to look further.
For students from 14 years ago
A small thing: why do we need two separate menu items for the two exports (feedback documents & grades)?
I say we unify them, and if people wanted just one they can ignore the other one?
The common case is probably wanting both, right?
Would be useful if one could spellcheck the text they type.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.