Closed whedon closed 3 years ago
Hello human, I'm @whedon, a robot that can help you with some common editorial tasks. @nnadeau, @nthomasCUBE it looks like you're currently assigned to review this paper :tada:.
:star: Important :star:
If you haven't already, you should seriously consider unsubscribing from GitHub notifications for this (https://github.com/openjournals/joss-reviews) repository. As a reviewer, you're probably currently watching this repository which means for GitHub's default behaviour you will receive notifications (emails) for all reviews 😿
To fix this do the following two things:
For a list of things I can do to help you, just type:
@whedon commands
For example, to regenerate the paper pdf after making changes in the paper's md or bib files, type:
@whedon generate pdf
Attempting PDF compilation. Reticulating splines etc...
@gkthiruvathukal @KingZee my initial impressions:
The second and third authors have made no contributions to the repository:
solveMakespan()
is a large if-else block, limiting extensibility.QuickSolver
algorithm claims to be "heuristic", but appears to simply iterates through schedule permutations.@nnadeau Thanks for giving the excellent, constructive feedback. We are going to need more than a GUI wrapper to proceed with this submission. When I decided to put this forward for review, I was under the impression there was more of an API here and not just a GUI wrapper.
@KingZee Please take this feedback into account and let us know when you have been able to address the above. You should probably view the above feedback as a need for major revisions. You might find it convenient to make issues in the issue tracker for each of the key bullet points, including the issue about the list of authors. Once all of these issues are resolved, we can continue review. Alternately, we can make a checklist from @nnadeau's report.
@gkthiruvathukal @nnadeau, thanks a lot for your efforts.
I have to say I am a bit confused, but really willing to discuss and improve on anything that needs work here. What do you mean by a "GUI wrapper"? A wrapper to what? My own code for solving schedules?
What I built here is a documented structure that allows any future development to be extended from the same abstract class. You should know every piece of code in my project is mine, and the GUI isnt a wrapper for a single solver, it's an extension I myself chose to add that is agnostic to whatever solver type is used, making the software extremely easy to fork and improve upon. The Solver (and Benchmark) classes are made to handle solver work across multiple threads.
The solvers package has 2 solver algorithms that I coded and optimised myself for all 3 types. Like I mentioned before and in the readme, I plan to add many more solver types based on the same class structure explained above and in the Readme bullet points.
So, I really dont understand @nnadeau's argument here, the software doesn't just render a GUI, it actually solves any given matrix. The GUI is even more extra effort I added to make this software even more useful from an academic standpoint.
I even explained in my paper every step on how I modeled and made the conception of the exact algorithms in my software, which is why I am really confused on what am I missing here to make this clearer.
@KingZee please see my comments below:
Solution space
section of the paper, I am assuming that you are describing your QuickSolver
approach, but this is not explicit. Only the solution space is described, not the heuristic algorithm approach beyond for the exclusion of zero-time operations.makespan heuristic
reveals many many algorithms. How is your algorithm different? Why is it better than the existing literature?doxygen
, Read the Docs
).Interfaces
and Access Control
.
README
, or the statement of need, I am not convinced why a developer should use and extend this project as opposed to starting from scratch. The is especially true when reviewing the code health/quality, for example:
Thread.sleep();
.System.out.println()
for logging instead of a proper logging framework.System.gc()
javafx
in nearly every class is a heavy dependencySolver
class is a loose collection of some helper functions and a JobData
container.Thanks for the comments.
The solution space is for the exact, not the quick solver algorithm. I didn't mention anything about the quicksolver in the algorithm because it is a heuristic I am still trying to improve and maybe write a future paper on. This includes your second comment, I believe that part is not something to be included in the JOSS scope, in here I am including only my software, and the quick solver is included as a personal proof of concept.
For documentation I included explanation and input/output of every class/method, but I can absolutely provide better docs, I will look into the 2 examples you provided.
I did not use an interface, I used an abstract class. Interfaces aren't just a Java concept, it's an OOP structure choice. I could have chose to made the main Solver class either an interface, or an abstract class. Both of them come with different usecases and choices, I chose an abtstract class because some of the Solver class method need bodies because some of the threading code is common across all solvers.
As for your two last comments I am not sure in which category of the JOSS publication requirements you would include that. There are solvers like mine exclusively for TSP, for minimum spanning tree problem, and so on. I feel like you are being slightly subjective and too harsh with judging code quality. If it's because the number of algorithms is lacking that is something that I will be spending months and years researching to keep expanding and improving on this software. What I would like is some exact and specific things I can improve on if you feel like it is lacking, but there are absolutely respectable software created for the point of solving well known combinatorial problems. Not only is there no software like mine written in java, but there is no software that solves shop scheduling problems at all. The fact that this is open source helps even more in that other reaearchers can extend from the Solver abstract class and make their own implementation of solveMakespan(). Thank you.
I would love to hear the thoughts of @gkthiruvathukal and @nthomasCUBE as well about all of this, to be able to reach a consensus from diverse points of view.
!!! REVIEW NOT COMPLETE YETkdntribution of the other author in paper or github.
SOFTWARE aspect
-> authors
i agree that role of coauthors should be stated somewhere. Maybe they can be added into the github project.
-> installation Tool can be run easily with the description described on github. However, it does not work under the latest Java version. Maybe on can describe how the tool can be build and started in Eclipse where '--module-path C:/Users/thoma/Desktop/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml' has to be put in 'Run Configuration'->'Arguments'->'VM arguments' and maybe on can link directly to the jdk-11.0.4 download site.
-> software
gui looks nice and easy to use, probably would be nice to have a possibility to upload a matrix instead of manually adding values.
-> comparison to other tools missing
would be nice to list which other tools do similar analysis and whether the calculation time is better/worse etc.
PAPER aspect (not done yet)
p1. NP-hard, maybe to add a ref that these problems are NP-hard p2. would like to see on the github page an explaination how own algorithms can be included into the tool
Hi guys,
so far i still struggle with compiling and running, managed to use jre11 but now have to manage to make it run,.. then I will provide the comments probably in the next week or so hopefully
Hi, I plan to comment after both reviewers chime in.
Just a reminder that the purpose of review is to identify issues leading to improvements by the authors. So please focus on concrete issues and use the issue tracker. Many reviewers open up specific issues using the issue tracker. Once these are addressed (possibly with back and forth with author) we can move forward.
The goal is to ensure quality of the accepted submission. Hope that helps.
Hi @nthomasCUBE, thanks a lot for the comments. I have made a new joss branch, so as to get everything working there before merging with master.
SOFTWARE aspect
-> authors
i agree that role of coauthors should be stated somewhere. Maybe they can be added into the github project.
It's true that they are not contributors to the development of the project, but both of them have proof-read and partially co-authored the paper. I could ask them to make github accounts and make symbolic contributions if absolutely necessary. Maybe @gkthiruvathukal can chime in.
-> installation Tool can be run easily with the description described on github. However, it does not work under the latest Java version. Maybe on can describe how the tool can be build and started in Eclipse where '--module-path C:/Users/thoma/Desktop/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml' has to be put in 'Run Configuration'->'Arguments'->'VM arguments' and maybe on can link directly to the jdk-11.0.4 download site.
Thank you, I have made n edit to the readme added a link to JDK 11. (all of the changes are going to be in the JOSS branch for now). Also since each compiler has their own VM arguments prompt, I feel that including explanation on the exact steps for how to add the VM arguments isn't too relevant, as the VM arguments themselves should be enough.
-> software
gui looks nice and easy to use, probably would be nice to have a possibility to upload a matrix instead of manually adding values.
This is a very good feature request. I will try to implement it as soon as I have the time.
-> comparison to other tools missing
would be nice to list which other tools do similar analysis and whether the calculation time is better/worse etc.
As I mentioned before, I have found it very difficult to find software with a goal of scheduling jobs, when I looked for software that solves all job-shop, open-shop, and flow-shop problems I couldn't find any at all. There are some software that simply work as "GUI wrapper"s, and do not provide any solving framework. I have still found some software that generate Gantt charts for the job-shop variant. The motive of this software was in fact the lack of such a framework. There are algorithm implementations and libraries such as (https://github.com/fengelhardt/LiSA), with a large number of algorithms written across years of research, but there isn't that framework to help speed up setup time, as from the literature that I've read it simply seems each researcher re-writes their own implementation of shop scheduling from scratch, and only then proceed to code the solving part.
I reckon I still have to do my due diligence and make an exhaustive in-depth search of all software used here, and give a final answer backed with references.
PAPER aspect (not done yet)
p1. NP-hard, maybe to add a ref that these problems are NP-hard p2. would like to see on the github page an explaination how own algorithms can be included into the tool
I will add a section for contribution and explain extension of the Solver class.
I apologize if this reply is a bit late, comment edits don't trigger a notification so I just noticed your progress as I checked on this. It would be convenient if you raised an issue or made a new comment here for future review comments you might have. Thank you for your effort.
All, ok, now that there is reviewer feedback (thanks @nnadeau and @nthomasCUBE) and a response from @KingZee, we are heading in the right direction. Please keep in mind that JOSS operates differently from your typical academic journal. As an editor, I rarely put anything up for review that lacks some novelty or technical merit, and I see potential in this work. Ultimately, the formal peer review process is designed to improve the quality of the software submitted. I'm therefore going to focus on the quality issues. Being completely novel is not a prerequisite for JOSS submissions but clear motivation for why this is research software and having an audience (statement of need) is. Therefore, we will need to keep these in mind as we move forward.
I'm going to attempt to synthesize but here is a checklist of things I think need to be done before I can recommend acceptance, which is a union of the reviews + my own additions.
[ ] Add any and all additional contributors. I do not hold the view that one must make formal commits to a repository to be a contributor. Nevertheless, I do think all contributors should seriously consider getting GitHub IDs and being collaborators on the repository. Among other things, this can help with long-term sustainability.
[ ] Java build issues need to be addressed. I'd really like to see a continuous integration system used here (e.g. Travis, or perhaps the new GitHub Actions) to show a successful build and running the unit tests, especially on future commits. Java is a rapidly moving target now, and one hopes this software will continue to work in newer versions of Java.
[ ] Documentation needs improvements per earlier feedback. I've never been a huge fan of javadoc myself, but perhaps there is a way to organize it so the key interfaces are discussed in detail with many examples. Another possibility is just to build better docs within the repo itself, possibly with proper design diagrams or an overview of the code organization. The points about interfaces (an absolute must in professional Java programming), using proper logging frameworks, and Thread (concurrency) management need to be addressed.
[ ] Java code quality seems to be a valid concern. I think to meet y'all in the middle, the best way to address this is to run one of the "code smells" tools. This journal article has a nice overview, https://jserd.springeropen.com/articles/10.1186/s40411-017-0041-1. Might be a bit out of date now, but at least you can start there to get an idea of the leading tools. Upon doing this analysis, you will probably want to do a bit of code refactoring.
[ ] Related work. This is a must. There are other tools out there, I'm sure, but most probably don't have a GUI and--in some cases--are libraries. Please make sure to identify related work.
[ ] Statement of need. Please make sure this is well-motivated. Ultimately, the hope is that the work gets cited, especially if it supports other research projects (your or others).
I don't think any of the above is impossible to address. While it may take some time, we can work with your schedule, @KingZee. As long as you are willing to see the submission through the process, we can eventually get to a proper accepting state.
@gkthiruvathukal Thank you very much for your bullet points, I absolutely agree with them and feel that they all are very pertinent. I will do my best over the course of the next few weeks to check off everything.
I have a single concern about the second half of the third bullet point. I agree with both of you and @nnadeau that javadoc might not have been the best choice, and will do my best to re-write all of it in a repo-friendly manner.
But :
The points about interfaces (an absolute must in professional Java programming), using proper logging frameworks, and Thread (concurrency) management need to be addressed.
These are points that might need to be clarified.
There is a total of 4 System.out.println lines in all of my classes. Three of them are simple flags that print "Event running in background", "Event failed", and "Event canceled", which is already superfluous as I am already handling every class of throwable errors in the failed event for example. I could simply delete the lines to absolutely no effect on the code, which really just makes me feel they were low-hanging nitpicks to judge the quality of my code. I will proceed to delete them, I just didn't expect them to be that much of a topic here. I apologize for thinking use of System.out is "okay", because apparently it is not.
Thread management is a point that might need to be discussed on a separate issue, I invite @nnadeau to open one in the repo. The use of Thread.sleep() was justified in my opinion as the heavy nature of the computation would take up so much resources it hinders any use of the machine otherwise. But again, this is up for discussion.
I still am heavily not convinced about the use of interfaces, especially because the switch to using them would almost be trivial : As I am currently using an abstract Solver base class that handles all the threading code, all I would need would to take out the corresponding methods into an interface, and make this Solver class implement it.
But while an interface defines the contract future developers will need to implement, an abstract class inheritance still creates a much stronger contract, I can demonstrate that through many examples :
Using an interface opens up room for new parent classes, of which then more developers can branch out from. This is extremely harder to maintain than a single abstract Solver class that all solvers inherit from. This is a problem that is easily visible once this software has tens or dozens of algorithms, which each may have multiple variants.
A base Solver class provides a ready-to-go "plug and play" kind of structure for other algorithms, to benefit from the GUI interface, from the background threading code, and from repetitive utility methods. It would take seconds to add more algorithms to the GUI assuming they inherit from the existing class, and since abstract classes can have bodies, any computation method that could be repetitive across multiple solvers (like the existing cartesian multiplication, schedule permutation and parsing, etc...) can be added to the abstract class.
All future solvers will improve from common method improvements. If any of the methods I mentioned above are improved, every solver will have a performance boost. It is also true that this is a double-edged sword, as changes in these methods might also cause breakage. But that is why we have test suites.
I already coded the abstract class with the utmost freedom in mind. The solver method not only allows the algorithm to return a single optimal solution, but a list of solutions. This is extremely useful for many heuristics, like Ant Colony Optimisation, or genetic/evolutionary algorithms, that work with populations. I can already see the implementation of those algorithms and more working seamlessly with the code I have now.
Trust me I have had this discussion with myself, other developers, and have convinced myself of the use of abstract classes in this specific scenario. I understand that interfaces are common ways to define such contracts, but please understand that this was a logical choice with future implementations in mind.
That would be all, I would like to thank @gkthiruvathukal again for the great synthesis, I'll get to working on it as soon as possible. I would also like to thank both reviewers for their work in judging my submission.
Thanks for the follow up, @KingZee. Keep in mind that you don't need to apologize for anything. The purpose of peer review in JOSS is to improve your submission. When it comes to the System.out.println()
issue, we just want you to use proper logging, e.g. log4j. Even though I am a computer scientist and software engineer, I recognize that not everyone is necessarily well-versed in every software engineering practice. The reviewers and I are here to make sure what you have created suffers from as few issues as possible, especially if you want others to use (and perhaps adapt) your software for their research needs.
So please take your time to make the various improvements. I'll ask our reviewers to take a second look (or you can do so when ready). Please use my checklist to indicate where you are in the process, ok?
I'm going to mark this as paused for now - @gkthiruvathukal, you can remove this mark when there is progress.
I agree with you, @danielskatz. There are a significant number of issues that likely require significant time to be resolved.
@danielskatz @openjournals/joss-eics This submission has been paused since end of October. Should we go ahead and close the issue, for now?
@gkthiruvathukal I apologize for taking a while, but since that time I got caught up with other academic aspects of my phd (and other personal reasons), so I unfortunately had to delay working on this. I am definitely still interested in getting my paper & software published on JOSS, but I didn't think there was a deadline on this. If you guys have organizational reasons for closing the issue, I'd be fine with that, otherwise I will try to make serious time for this within the next month.
@KingZee There's no deadline, but I would like to have some estimate of when you can bring it to conclusion! I totally understand the need to focus on finishing your PhD and wish you the best with that! Can you give me a date to follow up with you? We'll keep this issue open.
Thanks a lot. I will try to get started on fixing all the issues after the first week of February, I will probably create issues on my own repo and ping you and the reviewers after making the relevant PRs.
@KingZee Just checking in. Let us know when you are ready for us to take another look. Ok?
👋 @KingZee - any progress to report?
@danielskatz I have currently began working on the mentioned issues. https://github.com/openjournals/joss-reviews/issues/1752#issuecomment-536621094 This comment summarized what needs work, I closed an issue related to the 3rd point just a few days ago, https://github.com/KingZee/shop-solver/issues/3 . I'm currently figuring out better documentation, I used doxygen as recommended but I did not see any benefit over javadoc, so I am figuring out better alternatives. I will probably make a new commit on the issue soon.
👋 @KingZee - any further progress to report? Can you provide an estimate on when the review will be able to progress again?
Dear authors and reviewers
We wanted to notify you that in light of the current COVID-19 pandemic, JOSS has decided to suspend submission of new manuscripts and to handle existing manuscripts (such as this one) on a "best efforts basis". We understand that you may need to attend to more pressing issues than completing a review or updating a repository in response to a review. If this is the case, a quick note indicating that you need to put a "pause" on your involvement with a review would be appreciated but is not required.
Thanks in advance for your understanding.
Arfon Smith, Editor in Chief, on behalf of the JOSS editorial team.
@KingZee - do you think you will have the time to restart working on this submission within the next few weeks or so? If not, in order to respect the reviewers' time and availability committment, I will propose to close (reject) this submission, and invite a resubmission at a later point in time.
@arfon Absolutely, I was working through the bullet points but due to COVID I was unfortunately unable to continue work on anything for the last quarter or so, I will now get back into finishing up what was left. Apologies for the delay.
@openjournals/joss-eics This submission has been dormant for some time. @arfon and I have both gently nudged @KingZee but it appears progress has stalled. We can follow @arfon's earlier suggestion and close (reject) this for now and give @KingZee the option to resubmit in the future.
OK thanks @gkthiruvathukal.
@nnadeau, @nthomasCUBE, @gkthiruvathukal - thanks for your efforts on this paper. Unfortunately it looks like this one isn't going to make it through review this time.
@KingZee - we'd welcome a resubmission in the future but at this point will assume you're no longer interested or able to pursue this paper in JOSS and therefore move to reject the submission.
@whedon reject
Paper rejected.
Submitting author: @KingZee (Abdelhakim Zakkari) Repository: https://github.com/KingZee/shop-solver Version: v1.2.0 Editor: @gkthiruvathukal Reviewer: @nnadeau, @nthomasCUBE Archive: Pending
Status
Status badge code:
Reviewers and authors:
Please avoid lengthy details of difficulties in the review thread. Instead, please create a new issue in the target repository and link to those issues (especially acceptance-blockers) by leaving comments in the review thread below. (For completists: if the target issue tracker is also on GitHub, linking the review thread in the issue or vice versa will create corresponding breadcrumb trails in the link target.)
Reviewer instructions & questions
@nnadeau & @nthomasCUBE, please carry out your review in this issue by updating the checklist below. If you cannot edit the checklist please:
The reviewer guidelines are available here: https://joss.readthedocs.io/en/latest/reviewer_guidelines.html. Any questions/concerns please let @gkthiruvathukal know.
✨ Please try and complete your review in the next two weeks ✨
Review checklist for @nnadeau
Conflict of interest
Code of Conduct
General checks
Functionality
Documentation
Software paper
Review checklist for @nthomasCUBE
Conflict of interest
Code of Conduct
General checks
Functionality
Documentation
Software paper