diff options
| -rw-r--r-- | bibliography.bib | 134 | ||||
| -rw-r--r-- | software/chapter.tex | 49 | 
2 files changed, 147 insertions, 36 deletions
| diff --git a/bibliography.bib b/bibliography.bib index 9039484..9e5921c 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -107,6 +107,19 @@    month =        {feb},
  }
 +@article{BarnesNick2010a,
 +  author =       {Nick Barnes},
 +  title =        {Publish your computer code: it is good enough},
 +  journal =      {Nature},
 +  volume =       467,
 +  number =       7317,
 +  pages =        {753--753},
 +  year =         2010,
 +  doi =          {10.1038/467753a},
 +  month =        {oct},
 +  publisher =    {Springer Nature},
 +}
 +
  @article{BesemannDanielM2004a,
    author =       {Besemann, Daniel M. and Meyer, Kent A. and Wright, John C.},
    title =        {{Spectroscopic Characteristics of Triply Vibrationally Enhanced Four-Wave Mixing
 @@ -223,6 +236,12 @@    pmid =         15332970,
  }
 +@misc{CRAN,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {The Comprehensive R Archive Network},
 +  url =          {https://cran.r-project.org/},
 +}
 +
  @article{CardDavidN1986a,
    author =       {David N. Card and Victor E. Church and William W. Agresti},
    title =        {An empirical study of software design practices},
 @@ -292,6 +311,14 @@    month =        {jul},
  }
 +@phdthesis{CarlsonRogerJohn1988a,
 +  author =       {Roger John Carlson},
 +  school =       {University of Wisconsin-Madison},
 +  title =        {Quantitative Aspects of High Resolution, Fully Resonant, Four-Wave Mixing
 +                  Spectroscopy For the Analysis of Vibronic Mode Coupling in Molecules},
 +  year =         1988,
 +}
 +
  @inproceedings{CarverJeffreyC2007a,
    author =       {Jeffrey C. Carver and Richard P. Kendall and Susan E. Squires and Douglass E.
                    Post},
 @@ -475,14 +502,6 @@ year = {1998}    publisher =    {American Chemical Society ({ACS})},
  }
 -@phdthesis{CarlsonRogerJohn1988a,
 -  author =       {Roger John Carlson},
 -  school =       {University of Wisconsin-Madison},
 -  title =        {Quantitative Aspects of High Resolution, Fully Resonant, Four-Wave Mixing
 -                  Spectroscopy For the Analysis of Vibronic Mode Coupling in Molecules},
 -  year =         1988,
 -}
 -
  @phdthesis{DonaldsonPaulMurray2007a,
    author =       {Donaldson, Paul Murray},
    school =       {Imperial College London},
 @@ -579,6 +598,12 @@ year = {1998}    month =        {may},
  }
 +@misc{FITS,
 +  note =         {Accessed: 2018-03-27},
 +  title =        {FITS: Flexable image transport},
 +  url =          {https://fits.gsfc.nasa.gov/},
 +}
 +
  @article{FangHui2014a,
    author =       {H. Fang and C. Battaglia and C. Carraro and S. Nemsak and B.
                    Ozdol and J. S. Kang and H. A. Bechtel and S. B. Desai and F.
 @@ -596,6 +621,12 @@ year = {1998}    month =        {apr},
  }
 +@misc{FileExchange,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {File Exchange - MATLAB Central},
 +  url =          {https://www.mathworks.com/matlabcentral/fileexchange},
 +}
 +
  @article{FlemingGrahmR1998a,
    author =       {Fleming, G. R. and Passino, S A and Nagasawa, Y.},
    title =        {{The interaction of solutes with their environments}},
 @@ -612,6 +643,17 @@ year = {1998}    month =        {feb},
  }
 +@inproceedings{FolkMike2011a,
 +  author =       {Mike Folk and Gerd Heber and Quincey Koziol and Elena Pourmal and Dana Robinson},
 +  title =        {An overview of the {HDF}5 technology suite and its applications},
 +  booktitle =    {Proceedings of the {EDBT}/{ICDT} 2011 Workshop on Array Databases - {AD}
 +                  {\textquotesingle}11},
 +  year =         2011,
 +  doi =          {10.1145/1966895.1966900},
 +  publisher =    {{ACM} Press},
 +}
 +
 +
  @article{FourkasJohnT1992a,
    author =       {Fourkas, John T. and Trebino, Rick and Fayer, M. D.},
    title =        {{The grating decomposition method: A new approach for understanding
 @@ -659,7 +701,6 @@ year = {1998}    pmid =         18832166,
  }
 -
  @article{FurutaKoichi2012a,
    author =       {Furuta, Koichi and Fuyuki, Masanori and Wada, Akihide},
    title =        {Cross-Term Selective, Two-Pulse Correlation Measurements by Phase-Shifted
 @@ -733,6 +774,12 @@ year = {1998}    pmid =         19449854,
  }
 +@misc{GitHub,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {The world's leading software development platform ยท GitHub},
 +  url =          {https://github.com/},
 +}
 +
  @article{GriffinGrahamB2013a,
    author =       {Graham B. Griffin and Sandrine Ithurria and Dmitriy S. Dolzhnikov and Alexander
                    Linkin and Dmitri V. Talapin and Gregory S. Engel},
 @@ -839,7 +886,6 @@ year = {1998}  	journal = {Science},
  	doi = {10.1126/science.37.955.610},
  }
 -
  @article{HyblJohnD2001a,
    author =       {Hybl, John D. and {Albrecht Ferro}, Allison and Jonas, David M.},
    title =        {{Two-dimensional Fourier transform electronic spectroscopy}},
 @@ -891,6 +937,7 @@ year = {1998}    month =        {apr},
    pmid =         19745871,
  }
 +
  @book{KahnemanDaniel2013a,
  	author = {Kahneman, Daniel},
  	title = {Thinking, Fast and Slow},
 @@ -1301,6 +1348,13 @@ year = {1998}    month =        {dec},
  }
 +@book{OliphantTravisE2006a,
 +  author =       {Travis E Oliphant},
 +  title =        {A guide to NumPy},
 +  year =         2006,
 +  publisher =    {Trelgol Publishing},
 +}
 +
  @article{OliphantTravisE2007a,
    author =       {Oliphant, Travis E.},
    title =        {{Python for Scientific Computing}},
 @@ -1517,6 +1571,18 @@ year = {1998}    publisher =    {{ACM} Press},
  }
 +@misc{PyPI,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {PyPI - the Python Package Index},
 +  url =          {https://pypi.org/},
 +}
 +
 +@misc{PythonProfilers,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {The Python Profilers (Python 3.5)},
 +  url =          {https://docs.python.org/3.5/library/profile.html},
 +}
 +
  @misc{QMutex,
    note =         {Accessed: 2018-03-27},
    title =        {QMutex Class.},
 @@ -1620,6 +1686,13 @@ year = {1998}    month =        {mar},
  }
 +@Misc{SciPy,
 +  author =       {Eric Jones and Travis Oliphant and Pearu Peterson and others},
 +  note =         {Accessed: 2018-04-04},
 +  title =        {{SciPy}: Open source scientific tools for {Python}},
 +  url =          {http://www.scipy.org/},
 +}
 +
  @inproceedings{SeamanCarolynB1997a,
    author =       {Carolyn B. Seaman and Victor R. Basili},
    title =        {An empirical study of communication in code inspections},
 @@ -1650,6 +1723,12 @@ year = {1998}  	doi = {10.1007/s10664-005-3865-y},
  }
 +@misc{SemanticVersioning,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {Semantic Versioning},
 +  url =          {https://semver.org/},
 +}
 +
  @article{ShanmugamMariyappan2012a,
    author =       {Mariyappan Shanmugam and Chris A. Durcan and Bin Yu},
    title =        {Layered semiconductor molybdenum disulfide nanomembrane based Schottky-barrier
 @@ -1690,6 +1769,12 @@ year = {1998}    month =        {feb},
  }
 +@misc{SnakeViz,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {SnakeViz},
 +  url =          {https://jiffyclub.github.io/snakeviz/},
 +}
 +
  @article{SpectorIvanC2015a,
  	author = {Spector, Ivan C. and Olson, Courtney M. and Huber, Christopher J. and Massari, Aaron M.},
  	title = {Simple fully reflective method of scatter reduction in 2D-IR spectroscopy},
 @@ -1904,6 +1989,17 @@ year = {1998}    month =        jun,
  }
 +@article{WickhamHadley2014a,
 +  author =       {Hadley Wickham},
 +  title =        {Tidy data},
 +  journal =      {Journal of Statistical Software},
 +  volume =       59,
 +  number =       10,
 +  pages =        {1--23},
 +  year =         2014,
 +  publisher =    {Foundation for Open Access Statistics},
 +}
 +
  @article{WilsonGreg2017a,
    author =       {Greg Wilson and Jennifer Bryan and Karen Cranston and Justin Kitzes and Lex
                    Nederbragt and Tracy K. Teal},
 @@ -1948,6 +2044,7 @@ year = {1998}    month =        {oct},
  }
 +
  @article{WrightJohnCurtis1997a,
    author =       {Wright, John C.},
    title =        {{New selective nonlinear vibrational spectroscopies}},
 @@ -2072,7 +2169,6 @@ year = {1998}    month =        {nov},
  }
 -
  @article{ZanniMartinT2001a,
    author =       {Zanni, Martin T and Asplund, Matthew C and Hochstrasser, Robin M},
    title =        {{Two-dimensional heterodyned and stimulated infrared photon echoes of
 @@ -2137,6 +2233,19 @@ year = {1998}    publisher =    {Wiley-Blackwell},
  }
 +@misc{git.chem.wisc.edu,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {GitLab (University of Wisconsin-Madison Chemistry},
 +  url =          {https://git.chem.wisc.edu/},
 +}
 +
 +@misc{h5py,
 +  note =         {Accessed: 2018-04-04},
 +  title =        {h5py: HDF5 for Python},
 +  url =          {https://www.h5py.org/},
 +}
 +
 +
  @misc{h5py.Group,
    note =         {Accessed: 2018-03-25},
    title =        {h5py Groups documentation.},
 @@ -2147,4 +2256,5 @@ year = {1998}    note =         {Accessed: 2018-03-27},
    title =        {PyQtGraph: Scientific Graphics and GUI Library for Python},
    url =          {http://pyqtgraph.org/},
 -}
\ No newline at end of file +}
 +
 diff --git a/software/chapter.tex b/software/chapter.tex index 0027c5f..b52764b 100644 --- a/software/chapter.tex +++ b/software/chapter.tex @@ -1,5 +1,4 @@  % TODO: add StoddenVictoria2016a (Enhancing reproducibility for computational methods)
 -% TODO: http://pubs.acs.org/doi/10.1021/cen-09535-scitech2
  \chapter{Software}
 @@ -146,11 +145,11 @@ parallelization paradigms''  \section{Good-enough practices}  % ================================================================
  In their [...] perspective, ``Good enough practices in scientific computing'', (from which this
 -section gets its name) [WILSON ET AL] describe a set of techniques that, in their words, ``every
 -researcher can and should consider adopting''.  %
 +section gets its name) \textcite{WilsonGreg2017a} describe a set of techniques that, in their
 +words, ``every researcher can and should consider adopting''.  %
  In this section, I attempt to very quickly summarize my personal perspective on what makes good
  software development good---with citations to literature that supports each idea.  %
 -These practices are not, generally, ``extra work''.  %
 +These practices are not, generally, \emph{extra work}.  %
  In fact, many of them save massive amounts of time and effort in the long \emph{and} short run,
  when properly applied.  %
 @@ -158,8 +157,8 @@ when properly applied.  %  Before you sit down and implement a piece of software, stop!  %
  First you should try hard to find a library that already has what you need.  %
  You'll often surprise yourself with what you can find.  %
 -Search the package repository for your language, such as PyPI [CITE], MATLAB File Exchange [CITE]
 -or CRAN [CITE].  %
 +Search the package repository for your language, such as PyPI \cite{PyPI}, MATLAB File Exchange
 +\cite{FileExchange} or CRAN \cite{CRAN}.  %
  Even if there is not a full solution to your problem out there, there is almost certainly a
  solution to some part of it.  %
  Much better to have a dependency than a custom implementation.  %
 @@ -177,8 +176,8 @@ As a general rule, once you have two classes you need multiple files.  %  Choose a non-proprietary format if at all possible---remember: you yourself might not have access
  to the proprietary software in 10 years.  %
  Choose plain text if you can.  %
 -Consider conforming to specifications, such as Tidy Data. [CITE]  %
 -If you must, use open binary formats such as HDF5.  %
 +Consider conforming to specifications, such as Tidy Data \cite{WickhamHadley2014a}.  %
 +If you must, use open binary formats such as HDF5 \cite{FolkMike2011a}.  %
  Put as much metadata as you can into the file.  %
  Any piece of metadata that can automatically be added by the computer is essentially free---you
  might as well do it.  %
 @@ -196,12 +195,13 @@ This is indispensable when trying to diagnose software problems.  %  In order to use version control as effectively as possible, try to save the package after every
  change (feature addition, bugfix, etc).  %
  Typically version control is coupled with uploading to a remote server, for example using git with
 -GitHub [CITE] or git.chem.wisc.edu [CITE], but version control need not be synonymous with
 -uploading and distribution.  %
 +GitHub \cite{GitHub} or git.chem.wisc.edu \cite{git.chem.wisc.edu}, but version control need not be
 +synonymous with uploading and distribution.  %
  Tools like git have a lot of fantastic features beyond simply saving [CITE], but those are beyond the
  scope of these ``good enough'' recommendations.  %
  Also consider defining a version for the software package as a whole.  %
 -Use semantic versioning [CITE], unless there is a strong reason not to.  %
 +Use semantic versioning (MAJOR.MINOR.PATCH) \cite{SemanticVersioning}, unless there is a strong
 +reason not to.  %
  If the language you are using has a convention for representing the version programmatically, such
  as a \python{__version__} attribute in Python, comply with that convention.  %
 @@ -220,7 +220,7 @@ unless your project becomes very important.  %  Distribute test datasets, when appropriate.  %
  Remember, your tests can serve double duty as simple minimal examples.  %
 -\textbf{Collaborate and share.} \cite{WilsonGreg2017a}  %
 +\textbf{Collaborate and share.} \cite{WilsonGreg2017a, BarnesNick2010a}  %
  If you are part of a team, consider sharing software and collaborating to create it.  %
  Try using practices like code review and issue tracking, but don't feel obligated to use them if it
  doesn't make sense for your project.  %
 @@ -228,7 +228,7 @@ When working as part of a team, making incremental changes and using version con  more important.  %
  Earlier we mentioned ``do not reinvent''.  %
  The other side of that coin is ``if you make something, consider sharing it''.  %
 -Put your software on an open platform, like GitHub, and mint a DOI.  %
 +Put your software on an open platform, like GitHub \cite{GitHub}, and mint a DOI.  %
  Cite your software, and ask other people who are using your software to do the same.  %
  Choose a license early, and choose permissive and commercially compatible unless you 1. know what
  you are doing and 2. plan to enforce.  %
 @@ -245,9 +245,11 @@ Try to follow the recommended style for your language, but don't obsess about it  Don't get pulled into the trap of trying to make things perfect the first time.  %
  Software design is typically a very iterative process, and for good reason.  %
  Write first, and if it works, consider optimization.  %
 -If you do need to make your software faster, use profiling tools like cProfile [CITE] and SnakeVis
 -[CITE] to empirically determine what operations are taking the longest, rather than trying to guess
 -or use intuition.  %
 +If you do need to make your software faster, use profiling tools like cProfile
 +\cite{PythonProfilers} and SnakeViz \cite{SnakeViz} to empirically determine what operations are
 +taking the longest, rather than trying to guess or use intuition.  %
 +Only optimize speed-limiting operations, and stop optimizing once the code runs as quickly as
 +needed.  %
  \section{Object oriented programming}  % ----------------------------------------------------------
 @@ -364,17 +366,15 @@ Certain metadata conventions were also introduced, including named dimensions.  NetCDF remains popular in the aerospace and 
  The Flexable Image Transform System (FITS) is a similar format with a focus on visualization and
 -backwards compatibility. \cite{WellsDC1981a}  %
 -% CITE https://fits.gsfc.nasa.gov/
 -% CONSIDER CITING https://fits.gsfc.nasa.gov/rfc4047.txt
 +backwards compatibility. \cite{FITS, WellsDC1981a}  %
  Fits is still popular in the astronomy community.  %
  Today, these hierarchical data formats have gathered under the umbrella of the HDF5 format, built
 -and maintained by the HDF Group. [CITE]  %
 +and maintained by the HDF Group. \cite{FolkMike2011a}  %
  This format has all of the advantages of FITS, CDF, and NetCDF.  %
  It can support arbitrary datatypes and is optimized to quickly process large and complex
  datasets.  %
 -In Python, HDF5 is supported primarily through the h5py package. [CITE]  %
 +In Python, HDF5 is supported primarily through the h5py package. \cite{h5py}  %
  \section{Scientific Python}  % --------------------------------------------------------------------
 @@ -383,7 +383,8 @@ SciPy is a collection of ``open-source software for mathematics, science, and eg  SciPy was an absolute essential component of this dissertation and the work it describes.  %
  There are packages under the SciPy umbrella.  %
  NumPy is a very powerful and fast package for working with multidimensional arrays.
 -\cite{vanderWaltStefan2011a}  %
 +\cite{OliphantTravisE2006a}  %
  The SciPy library contains a vast number of scientific computing tools, including many mathematical
 -operations that this work depends on. [CITE]  %
 -Matplotlib is a beautiful visualization package for 1, 2, and 3D plotting. [CITE]  %
 +operations that this work depends on. \cite{SciPy}  %
 +Matplotlib is a beautiful visualization package for 1, 2, and 3D plotting.
 +\cite{HunterJohnD2007a}  %
 | 
