Closed whedon closed 3 years ago
Hello human, I'm @whedon, a robot that can help you with some common editorial tasks. @hadware, @sneakers-the-rat it looks like you're currently assigned to review this paper :tada:.
:warning: JOSS reduced service mode :warning:
Due to the challenges of the COVID-19 pandemic, JOSS is currently operating in a "reduced service mode". You can read more about what that means in our blog post.
: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
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):
OK DOIs
- 10.3758/s13428-018-01193-y is OK
- 10.25080/majora-7b98e3ed-003 is OK
- 10.1038/s41586-020-2649-2 is OK
MISSING DOIs
- None
INVALID DOIs
- None
Software report (experimental):
github.com/AlDanial/cloc v 1.88 T=0.36 s (99.4 files/s, 20803.1 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Python 17 497 1683 3480
reStructuredText 8 256 228 776
Markdown 4 83 0 331
YAML 4 10 3 66
TeX 1 6 0 62
DOS Batch 1 8 1 26
make 1 4 7 9
-------------------------------------------------------------------------------
SUM: 36 864 1922 4750
-------------------------------------------------------------------------------
Statistical information for the repository '3a528629994e4938bced8c75' was
gathered on 2021/05/14.
The following historical commit information, by author, was found:
Author Commits Insertions Deletions % of changes
Marc 2 0 18 0.08
Marc Schoenwiesner 219 9413 5493 69.37
Ole Bialas 16 4205 2358 30.54
Below are the number of rows from each author that have survived and are still
intact in the current revision:
Author Rows Stability Age % in comments
Marc Schoenwiesner 2589 27.5 14.7 3.48
Ole Bialas 3071 73.0 1.9 11.01
:point_right::page_facing_up: Download article proof :page_facing_up: View article proof on GitHub :page_facing_up: :point_left:
@hadware, @sneakers-the-rat - This is the review thread for the paper. All of our communications will happen here from now on.
Please read the "Reviewer instructions & questions" in the first comment above.
Both reviewers have checklists at the top of this thread (in that first comment) with the JOSS requirements. As you go over the submission, please check any items that you feel have been satisfied. There are also links to the JOSS reviewer guidelines.
The JOSS review is different from most other journals. Our goal is to work with the authors to help them meet our criteria instead of merely passing judgment on the submission. As such, the reviewers are encouraged to submit issues and pull requests on the software repository. When doing so, please mention https://github.com/openjournals/joss-reviews/issues/3284
so that a link is created to this thread (and I can keep an eye on what is happening). Please also feel free to comment and ask questions on this thread. In my experience, it is better to post comments/questions/suggestions as you come across them instead of waiting until you've reviewed the entire package.
We aim for the review process to be completed within about 4-6 weeks but please make a start well ahead of this as JOSS reviews are by their nature iterative and any early feedback you may be able to provide to the author will be very helpful in meeting this schedule.
hope it's alright if i do my checklist in a separate comment & copy/paste it into the OP at the end so i don't accidentally mess up anything @hadware is doing.
I'll use these prefixes so you can ctrl-f them
?>>
questions for the authors->>
things i think need addressing (in collaborative discussion not like a dictation!)!>>
optional (hopefully useful) comments/suggestions for the authors*
before any of the above means that i think they have been resolved (in a linked issue)If i leave comments on a checkbox section but still check the box that means i'm fine with that section but just have some suggestions/clarifying questions.
note that i'm going to do this in a couple sittings so don't be alarmed if things are unchecked for a bit. feel free to respond to any of this at any time but i make no claims that it isn't a total mess until i mark it finished ;)
a naive whole-repo hercules ownership plot shows that the library is currently roughly a ~50/50 split between the two authors
so far so good. can't believe that slab
was still available on PyPI. like the minimal dependencies, good to see how much easier it's gotten to play sounds at an OS level from python.
*->>
(fixed in https://github.com/DrMarc/slab/issues/37) soundcard
seems like a major functionality point of the library. from the docs i would expect that it is installed by default, but it's not and there isn't a notice given to the user that it hasn't been found. I assumed it was being used until i tried to import it manually. I would recommend adding it as a default or else as a clear optional dependency, and warn the user if it can't be found if it's the expected default behavior. -
*?>>
(fixed https://github.com/DrMarc/slab/issues/38) Curious about the h5netcdf
and windows-ncurses
dependencies being described in the docs rather than included as a default or optional dependency, for example like
install_requires=[..., "windows-curses;platform_system=='Windows'"]
extras_require={
'hrtf': 'h5netcdf'
}
*!>>
I don't see a list of supported operating systems here, and see mentions of windows, linux & mac, it might be good to have specific installation sections for all supported operating systems, eg. how to install libsndfile with homebrew, etc.
first of all really impressed with the level of functionality here, and y'all should be proud of making a package that you can pip install and successfully play sounds (especially on a mac) without any additional system configuration -- in my experience that can be challenging!
though initially the class design of Sound
was a little odd to me as it combines generation methods with processing methods, but i started to see the benefits of it and really like it. being able to chain method calls like Sound.tone().filter()
will be super useful for being able to specify a complex sound programmatically, eg. something like Sound.from_list([{'type':'tone', 'frequency':500}, {'type':'filter', ...}])
.
I can see it getting difficult to maintain as the class is already ~1250 lines long, and think a little bit of refactoring would make it easier on y'all, but that's a "good problem" to have for a library of this maturity b/c after all it's big because it does a lot of stuff.
just getting to the Binaural section and i'm very excited, really cool stuff -jls 21-05-14
finished up -- extremely impressed with this package. nice work!!!!! very impressed with the experimental module, the filter module, and the hrtf modules as much as i am with the base sound module.
Explicit claims in manuscript:
generate and manipulate single- and multi-channel sounds
*->>
(addressed in https://github.com/DrMarc/slab/issues/23) sounds of different durations can't be added +
together. raised issue here: https://github.com/DrMarc/slab/issues/23
*!>>
(fixed https://github.com/DrMarc/slab/issues/35) calibrations are automatically saved and loaded, which is nice (might be good to give notice that a calibration has been loaded on import) but default samplerates are not. It seems appropriate for this package, since it's intended as a modular tool for users to hack around with/reconfigure/etc., to consolidate user preferences into a single getter/setter method, maybe in a single .pck or .json or .yaml or whatever file so this is easier to maintain.
*!>>
(fixed https://github.com/DrMarc/slab/issues/34 ) Binaural._apply_ild
(probably just .ild
) needs one more thing documented -- it takes the average of the existing levels of the sounds, and then uses that as the midpoint for the new levels, but it's ambiguous whether you would do that or anchor off of one of the existing levels. one sentence clarifying the behavior in the docs would help.
analyse sound by extracting basic sound features
*!>>
(addressed https://github.com/DrMarc/slab/issues/33 )waveform
autoscales the y-axis which makes it a little difficult to compare across amplitudes. maybe make that optional?
*!>>
(fixed https://github.com/DrMarc/slab/issues/32 )wrappers around functions with a lot of parameters should probably take kwargs
and give them to the wrapped function. eg. spectrogram
passes kwargs
to axis.imshow
but most of the other params are hard-calculated. would be good to be able to pass in spectrogram_kwargs
to override default calculated values if wanted. totally optional QoL thing that would be pretty cheap to implement.
*!>>
(fixed https://github.com/DrMarc/slab/issues/31) looks like the list of features in the .rst
description of spectral_feature
in the docs is broken
aid experimental design through stimulus sequence management and response simulation
calibrate the experimental setup (loudness calibration and frequency equalisation)
*->>
the documentation says to call slab.calibrate()
to calibrate sounds, but it is not imported to the top level of the module from slab/sound.py
*->>
(fixed) slab.sound.calibrate()
exits with an error, raised issue https://github.com/DrMarc/slab/issues/22
display and manipulate head-related transfer functions
- very impressive!!!Other claims in manuscript:
[x] enable ... without prior training in computer programming ... to implement [psychoacoustic] experiments
- really like the API y'all have set up, being able to apply filters and add sounds is really nice.
[x] Performance: If there are any performance claims of the software, have they been confirmed? (If there are no claims, please check off this item.)
Other assorted functionality comments
*!>>
(addressed https://github.com/DrMarc/slab/issues/30 ) the separation of level
from other parameters is odd, i would expect to be able to do slab.Sound.pinknoise(duration=0.5, level=60)
in addition to setting it as a property after instantiation. seems like it would be a good idea to add a **kwargs
to the @staticmethod
s that gets passed on to the Sound
init method, if eg. a level
is supplied it can be set there. would make maintainability of class-level features a bit easier.
*!>>
(implemented) the implementation of the Sound.play
method is a little opaque, i would expect a warning and a description of the fallback if soundfile
wasn't available. eg. since the fallback is to write to a .wav file and play with other cli tools, that would be something the user should probably know given the possibility of inconsistent state problems from eg. two sounds trying to write/play from the same file. I would strongly recommend a hash-based naming system rather than a hardcoded name as in https://github.com/DrMarc/slab/blob/fb1f270df712f7b3ce89f3dede69dd1487061fa8/slab/sound.py#L879 , so you can ensure that different sounds don't conflict but also can take advantage of caching advantages (eg. if a file with a particular hash already exists, you don't need to spend the i/o to write it again). you can do something like hashlib.sha256(Sound.data).hexdigest()
to generate the filenames (probably need to actually set a seed/etc.
*!>>
(addressed https://github.com/DrMarc/slab/issues/29) strongly recommend to create a user directory that is outside the repository or library location, maybe in ~/slab
as it makes it more difficult for new programmers to contribute/use the library and makes operation a bit more opaque. (where is my calibration file again?). also becomes a bigger problem when you aren't guaranteed permissions, eg in the case where someone installs it as a system package with sudo pip install slab
!>>
recommend making an explicit test/wrapper functionality to avoid Binaural getting out of sync with Sound - https://github.com/DrMarc/slab/issues/41
!>>
as someone going through this same thing right now, if you intend on developing experiments in the main repo then you'll want to eventually split them off or else freeze them as examples -- can get very messy to combine any active lab code with deployed code :)
The need is clearly described in the manuscript -- a simple script-based psychoacoustics library that incorporates HRTFs. Big fan of modular tools and think that's the route that most scientific software should take, often attempts to, and frequently misses (myself included) so I am interested to see the implementation.
Other assorted docs suggestions:
*!>>
(implemented) the individual pages in the docs are relatively long, and you've done a good job of writing headings in your .rst, so it would be a big usability improvement for very cheap to configure the docs to enable hierarchical navigation, see the docs here: https://sphinx-rtd-theme.readthedocs.io/en/latest/configuring.html#theme-options specifically setting collapse_navigation=False
in conf.py
(and adding sphinx-rtd-theme
to an additional optional 'docs' install configuration and etc)
*!>>
(not all that important) I think some of the introduction being split off to a FAQs page might be a good idea
!>>
format of trialsequence could use some additional clarity, assorted observations of psychoacoustics docs (and then just eventually the whole psychoacoustics section) : https://github.com/DrMarc/slab/issues/42
!>>
combined suggestions for filters docs and module here: https://github.com/DrMarc/slab/issues/43
->>
data_path()
is not found for hrtf: https://github.com/DrMarc/slab/issues/44
->>
label
is not found for Filter.tf():
https://github.com/DrMarc/slab/issues/45
Please just use the checklist at the top.
"!>> the individual pages in the docs are relatively long, and you've done a good job of writing headings in your .rst, so it would be a big usability improvement for very cheap to configure the docs to enable hierarchical navigation..."
Good point! We enabled hierarchical navigation as recommended.
"I would strongly recommend a hash-based naming system rather than a hardcoded name"
The hashed file names are an excellent idea. It's implemented now.
Hi @sneakers-the-rat, I put your comments in issues and we'll respond there. That may make it easier to keep track of progress.
Alright, it's a pass for me! Really great job on this lib @DrMarc (and your acolyte @OleBialas). I'll be telling my labmates working on psychoacoustics about it :)
Alright, it's a pass for me! Really great job on this lib @DrMarc (and your acolyte @OleBialas). I'm be telling my labmates working on psychoacoustics about it :)
:zap: thanks @hadware!
Many thanks @hadware for taking the time to evaluate the module!
@arfon - Ole and I would like to indicate that each of us contributed 50% to the work (sometimes called shared first authorship). Is there a preferred way to do that at JOSS?
See the example docs on how to do this (https://joss.readthedocs.io/en/latest/submitting.html#example-paper-and-bibliography). Basically add ^[co-first author]
after each of the names.
Excellent, thanks! I did not see that.
:wave: @sneakers-the-rat, please update us on how your review is going (this is an automated reminder).
Hi @sneakers-the-rat! From our side, we have addressed all comments so far (see resolved issues in the repo), except for the spectrogram kwargs suggestion, which I will implement later today. Your point about the data directory uncovered a major flaw and lead to the longest internal debate, and I think we have found a good solution there. All the smaller points were also really helpful and have helped to improve the code a lot.
Sorry for the delay! going to continue my review now and will try to have it finished early next week latest. I don't anticipate having any major complications, just want to make sure i actually make it through the whole package! Excited to see the discussion/what you've come up with re ^^
whup whup @DrMarc and @OleBialas this is a big pass from me!
I left some last (optional) comments in the final issues that might be helpful:
really excellent work! love this package, after i got a hang on the design i really enjoyed using it while testing it out. will absolutely recommend this to anyone looking for a simple to use but powerful psychoacoustics package!
Hi @sneakers-the-rat, Many thanks for the details comments and bug-hunting! This is very valuable. We will correct and expand the docs, as you suggested, and take care of the other issues. Some of these issues are intuitive to us, but may not be to others. The multi-channel filter is an example (#43). We work with multi-channel sound (48-channel speaker array in the lab), and our typical use case is applying each filter channel to each sound channel. But I can see that the sequential application may be useful in other scenarios. Thanks again for your work on this!
Hi @arfon , we have now addressed the optional suggestions by @sneakers-the-rat. I think this completes the revision.
@DrMarc – At this point could you make a new release of this software that includes the changes that have resulted from this review. Then, please make an archive of the software in Zenodo/figshare/other service and update this thread with the DOI of the archive? For the Zenodo/figshare archive, please make sure that:
I can then move forward with accepting the submission.
This is the Zenodo DOI with the same name and authors: 10.5281/zenodo.5029602
@arfon - sorry, forgot to tag you. See above.
@whedon set 10.5281/zenodo.5029602 as archive
OK. 10.5281/zenodo.5029602 is the archive.
@whedon recommend-accept
Attempting dry run of processing paper acceptance...
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):
OK DOIs
- 10.3758/s13428-018-01193-y is OK
- 10.25080/majora-7b98e3ed-003 is OK
- 10.1038/s41586-020-2649-2 is OK
MISSING DOIs
- None
INVALID DOIs
- None
:wave: @openjournals/joss-eics, this paper is ready to be accepted and published.
Check final proof :point_right: https://github.com/openjournals/joss-papers/pull/2417
If the paper PDF and Crossref deposit XML look good in https://github.com/openjournals/joss-papers/pull/2417, then you can now move forward with accepting the submission by compiling again with the flag deposit=true
e.g.
@whedon accept deposit=true
@DrMarc – could you please merge this PR before we proceed? https://github.com/DrMarc/slab/pull/47
@arfon - Done!
@whedon recommend-accept
Attempting dry run of processing paper acceptance...
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):
OK DOIs
- 10.3758/s13428-018-01193-y is OK
- 10.25080/majora-7b98e3ed-003 is OK
- 10.1038/s41586-020-2649-2 is OK
MISSING DOIs
- None
INVALID DOIs
- None
:wave: @openjournals/joss-eics, this paper is ready to be accepted and published.
Check final proof :point_right: https://github.com/openjournals/joss-papers/pull/2418
If the paper PDF and Crossref deposit XML look good in https://github.com/openjournals/joss-papers/pull/2418, then you can now move forward with accepting the submission by compiling again with the flag deposit=true
e.g.
@whedon accept deposit=true
@whedon accept deposit=true
Doing it live! Attempting automated processing of paper acceptance...
🐦🐦🐦 👉 Tweet for this paper 👈 🐦🐦🐦
🚨🚨🚨 THIS IS NOT A DRILL, YOU HAVE JUST ACCEPTED A PAPER INTO JOSS! 🚨🚨🚨
Here's what you must now do:
Party like you just published a paper! 🎉🌈🦄💃👻🤘
Any issues? Notify your editorial technical team...
@arfon - very nice! Thanks for the quick action and super friendly review. This was by far my most pleasant review experience. I'd be up for reviewing, in case you need people. Thanks again -Marc
@hadware, @sneakers-the-rat – many thanks for your reviews here! JOSS relies upon the volunteer effort of people like you and we simply wouldn't be able to do this without you ✨
@DrMarc – your paper is now accepted and published in JOSS :zap::rocket::boom:
@arfon - very nice! Thanks for the quick action and super friendly review. This was by far my most pleasant review experience. I'd be up for reviewing, in case you need people.
Thank you! Whedon will provide some information below in just a moment explaining how you can sign up as a potential reviewer 👇 ✨
:tada::tada::tada: Congratulations on your paper acceptance! :tada::tada::tada:
If you would like to include a link to your paper from your README use the following code snippets:
Markdown:
[![DOI](https://joss.theoj.org/papers/10.21105/joss.03284/status.svg)](https://doi.org/10.21105/joss.03284)
HTML:
<a style="border-width:0" href="https://doi.org/10.21105/joss.03284">
<img src="https://joss.theoj.org/papers/10.21105/joss.03284/status.svg" alt="DOI badge" >
</a>
reStructuredText:
.. image:: https://joss.theoj.org/papers/10.21105/joss.03284/status.svg
:target: https://doi.org/10.21105/joss.03284
This is how it will look in your documentation:
We need your help!
Journal of Open Source Software is a community-run journal and relies upon volunteer effort. If you'd like to support us please consider doing either one (or both) of the the following:
Submitting author: @DrMarc (Marc Schönwiesner) Repository: https://github.com/DrMarc/slab Version: v0.9.0 Editor: @arfon Reviewer: @hadware, @sneakers-the-rat Archive: 10.5281/zenodo.5029602
:warning: JOSS reduced service mode :warning:
Due to the challenges of the COVID-19 pandemic, JOSS is currently operating in a "reduced service mode". You can read more about what that means in our blog post.
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
@hadware & @sneakers-the-rat, 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 @arfon know.
✨ Please start on your review when you are able, and be sure to complete your review in the next six weeks, at the very latest ✨
Review checklist for @hadware
Conflict of interest
Code of Conduct
General checks
Functionality
Documentation
Software paper
Review checklist for @sneakers-the-rat
Conflict of interest
Code of Conduct
General checks
Functionality
Documentation
Software paper