You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: best_practices.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ Great examples can be found via [FAIR Software NL](https://fair-software.nl/reco
12
12
13
13
Use a version control tool like `git` to track changes in your codebase.
14
14
This allows you to retrace your steps when debugging, keep your repository clean, easily collaborate with others asynchronously and more.
15
-
More info: [The Turing Way chapter on Version Control](https://book.the-turing-way.org/reproducible-research/vcs), [RSQkit chapter on Version Control](http://everse.software/RSQKit/using_version_control).
15
+
More info: [The Turing Way chapter on Version Control](https://book.the-turing-way.org/reproducible-research/vcs), [RSQkit chapter on Version Control](https://everse.software/RSQKit/using_version_control).
16
16
17
17
**At the Netherlands eScience Center:** we always use version control and we preferably use GitHub as our online repository and collaboration platform (see the [Project Management Protocol of the Netherlands eScience Center](https://doi.org/10.5281/zenodo.17117777).
18
18
@@ -58,7 +58,7 @@ Examples include exchange formats like Unicode, NetCDF, and W3C web standards, a
58
58
## Licensing
59
59
60
60
Since source code is protected by copyright, to allow people to use your code it needs a license.
61
-
For more information, see [The Turing Way chapter on licensing](https://the-turing-way.netlify.app/reproducible-research/licensing) or the [RSQkit Licensing software task](http://everse.software/RSQKit/licensing_software).
61
+
For more information, see [The Turing Way chapter on licensing](https://the-turing-way.netlify.app/reproducible-research/licensing) or the [RSQkit Licensing software task](https://everse.software/RSQKit/licensing_software).
62
62
63
63
**At the Netherlands eScience Center:** our first choice is the Apache v2 license.
64
64
See the [our Project Management Protocol](https://doi.org/10.5281/zenodo.17117777) for more details on licensing and our intellectual property policies.
@@ -74,7 +74,7 @@ For more information you can also [read here](https://github.com/the-turing-way/
74
74
Releases are a way to mark or point to a particular milestone in software development.
75
75
This is useful for users and collaborators, e.g. I found a bug running version x.
76
76
For publications that refer to software, refering to a specific release enhances the reproducability.
77
-
See [the RSQkit task on Creating code releases](http://everse.software/RSQKit/releasing_software) for the most essential guidelines.
77
+
See [the RSQkit task on Creating code releases](https://everse.software/RSQKit/releasing_software) for the most essential guidelines.
78
78
The Turing Way offers many related tips in their [chapter on Making Research Objects Citable](https://book.the-turing-way.org/communication/citable), like how to make code citable with CITATION.CFF files.
Copy file name to clipboardExpand all lines: language_guides/ccpp.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ The latest ratified standard of C++ is C++17. The first standardised version of
15
15
There are two main-stream open-source C++ compilers.
16
16
17
17
-[GCC](https://gcc.gnu.org/)
18
-
-[LLVM - CLANG](http://llvm.org/)
18
+
-[LLVM - CLANG](https://llvm.org/)
19
19
20
20
Overall, these compilers are more or less similar in terms of features, language support, compile times and (perhaps most importantly) performance of the generated binaries.
21
21
The generated binary performance does differ for specific algorithms.
@@ -44,16 +44,16 @@ And linker flags:
44
44
45
45
### Interpreter
46
46
47
-
There **is** a C++ interpreter called [Cling](https://rawgit.com/vgvassilev/cling/master/www/index.html).
48
-
This also comes with a [Jupyter notebook kernel](http://jupyter.org/try).
47
+
There **is** a C++ interpreter called [Cling](https://rawcdn.githack.com/root-project/cling/master/www/index.html).
48
+
This also comes with a [Jupyter notebook kernel](https://jupyter.org/try).
49
49
50
50
### Build systems
51
51
52
52
There are several build systems that handle C/C++.
53
53
Currently, [the CMake system is most popular](https://www.jetbrains.com/research/devecosystem-2018/cpp/).
54
54
It is not actually a build system itself; it generates build files based on (in theory) platform-independent and compiler-independent configuration files.
55
55
It can generate Makefiles, but also [Ninja](https://ninja-build.org/) files, which gives much faster build times, NMake files for Windows and more.
56
-
Some popular IDEs keep automatic count for CMake, or are even completely built around it ([CLion](http://www.jetbrains.com/clion/)).
56
+
Some popular IDEs keep automatic count for CMake, or are even completely built around it ([CLion](https://www.jetbrains.com/clion/)).
57
57
The major drawback of CMake is the confusing documentation, but this is generally made up for in terms of community support.
58
58
When Googling for ways to write your CMake files, make sure you look for "modern CMake", which is a style that has been gaining traction in the last few years and makes everything better (e.g. dependency management, but also just the CMake files themselves).
59
59
@@ -70,7 +70,7 @@ With either one of these two (CMake or Autotools), any moderately experienced us
70
70
There are many other systems.
71
71
Microsoft Visual Studio has its own project model / build system and a library like Qt also forces its own build system on you.
72
72
We do not recommend these if you don't also supply an option for building with CMake or Autotools.
73
-
Another modern alternative that has been gaining attention mainly in the GNU/Gnome/Linux world is [Meson](http://mesonbuild.com/), which is also based on [Ninja](https://ninja-build.org/).
73
+
Another modern alternative that has been gaining attention mainly in the GNU/Gnome/Linux world is [Meson](https://mesonbuild.com/), which is also based on [Ninja](https://ninja-build.org/).
74
74
75
75
### Package management
76
76
@@ -111,7 +111,7 @@ You can point `pkg-config` to your additional libraries by setting the `PKG_CONF
111
111
This also helps for instance when trying to automatically locate dependencies from CMake, which has `pkg-config` support as a fallback for when libraries don't support CMake's `find_package`.
112
112
113
113
If you want to keep things organized on systems where you use multiple versions of the same software for different projects, a simple solution is to use something like `xstow`.
114
-
[XStow](http://xstow.sourceforge.net/) is a poor-mans package manager.
114
+
[XStow](https://xstow.sourceforge.net/) is a poor-mans package manager.
115
115
You install each library in its own directory (`~/.local/pkg/<package>` for instance), then running `xstow` will create symlinks to the files in the `~/.local` directory (one above the XStow package directory).
116
116
Using XStow in this way alows you to keep a single additional search path when compiling your next library.
117
117
@@ -168,7 +168,7 @@ People of this persuasion would usually recommend any of the following editors:
- Integrated debugging using [Clewn](http://clewn.sourceforge.net/)
171
+
- Integrated debugging using [Clewn](https://clewn.sourceforge.net/)
172
172
- Emacs:
173
173
- Has GDB mode for debugging.
174
174
- More modern editors: Atom / Sublime Text / VS Code
@@ -190,7 +190,7 @@ C++ (and C) compilers come with built in linters and tools to check that your pr
190
190
191
191
#### Automatic Formatting with clang-format
192
192
193
-
While most IDEs and some editors offer automatic formatting of files, [clang-format](http://clang.llvm.org/docs/ClangFormat.html) is a standalone tool, which offers sensible defaults and a huge range of customisation options. Integrating it into the CI workflow guarantees that checked in code adheres to formatting guidelines.
193
+
While most IDEs and some editors offer automatic formatting of files, [clang-format](https://clang.llvm.org/docs/ClangFormat.html) is a standalone tool, which offers sensible defaults and a huge range of customisation options. Integrating it into the CI workflow guarantees that checked in code adheres to formatting guidelines.
194
194
195
195
#### Static code analysis with GCC
196
196
@@ -240,7 +240,7 @@ which is a fast memory error detector. There are also other options available li
240
240
241
241
#### Dynamic program analysis using the valgrind suite of tools
242
242
243
-
The [valgrind suite of tools](http://valgrind.org/info/tools.html) has tools similar to what is provided by the `-fsanitize` compiler flag as well as various profiling tools. Using the valgrind tool memcheck to detect memory errors is typically slower than using compiler provided option, so this might be something you will want to do less often. You will probably want to compile your code with debug symbols enabled (`-g`) in order to get useful output with memcheck. When using the profilers, keep in mind that a [statistical profiler](https://en.wikipedia.org/wiki/Profiling_%28computer_programming%29#Statistical_profilers) may give you more realistic results.
243
+
The [valgrind suite of tools](https://valgrind.org/info/tools.html) has tools similar to what is provided by the `-fsanitize` compiler flag as well as various profiling tools. Using the valgrind tool memcheck to detect memory errors is typically slower than using compiler provided option, so this might be something you will want to do less often. You will probably want to compile your code with debug symbols enabled (`-g`) in order to get useful output with memcheck. When using the profilers, keep in mind that a [statistical profiler](https://en.wikipedia.org/wiki/Profiling_%28computer_programming%29#Statistical_profilers) may give you more realistic results.
244
244
245
245
### Automated code refactoring
246
246
@@ -273,7 +273,7 @@ These can typically be installed from a wide range of [package managers](#packag
273
273
These scientific libraries are well known, widely used and have a lot of good online documentation.
-[FFTW](http://www.fftw.org): Fastest Fourier Transform in the West
276
+
-[FFTW](https://www.fftw.org/): Fastest Fourier Transform in the West
277
277
-[OpenMPI](https://www.open-mpi.org). Use with caution, since it will strongly define the structure of your code, which may or may not be desirable.
278
278
279
279
### Boost
@@ -288,7 +288,7 @@ As a general rule, don't use Boost when there is equivalent STL functionality.
288
288
289
289
### xtensor
290
290
291
-
[xtensor](http://github.com/xtensor-stack/xtensor) is a modern (C++14) N-dimensional tensor (array, matrix, etc) library for numerical work in the style of Python's NumPy.
291
+
[xtensor](https://github.com/xtensor-stack/xtensor) is a modern (C++14) N-dimensional tensor (array, matrix, etc) library for numerical work in the style of Python's NumPy.
292
292
It aims for maximum performance (and in most cases it succeeds) and has an active development community.
293
293
This library features, among other things:
294
294
@@ -313,15 +313,15 @@ This library features, among other things:
313
313
### Parallel processing
314
314
315
315
-[oneAPI Threading Building Blocks](https://oneapi-src.github.io/oneTBB/) (oneTBB): template library for task parallelism
316
-
-[ZeroMQ](http://zeromq.org): lower level flexible communication library with a unified interface for message passing between threads and processes, but also between separate machines via TCP.
316
+
-[ZeroMQ](https://zeromq.org/): lower level flexible communication library with a unified interface for message passing between threads and processes, but also between separate machines via TCP.
317
317
318
318
## Style
319
319
320
320
### Style guides
321
321
322
322
Good style is not just about layout and linting on trailing whitespace. It will mean the difference between a blazing fast code and a broken one.
-[Google Style Guide - github](https://github.com/google/styleguide) Contains the CppLint linter.
@@ -343,18 +343,18 @@ IDE.
343
343
344
344
### Documentation
345
345
346
-
Use [Doxygen](http://www.doxygen.nl/). It is the de-facto standard way of inlining documentation into comment sections of your code. The output is very ugly. Mini-tutorial: run `doxygen -g` (preferably inside a `doc` folder) in a new project to set things up, from then on, run `doxygen` to (re-)generate the documentation.
346
+
Use [Doxygen](https://www.doxygen.nl/). It is the de-facto standard way of inlining documentation into comment sections of your code. The output is very ugly. Mini-tutorial: run `doxygen -g` (preferably inside a `doc` folder) in a new project to set things up, from then on, run `doxygen` to (re-)generate the documentation.
347
347
348
-
A newer but less mature option is [cldoc](http://jessevdk.github.io/cldoc/).
348
+
A newer but less mature option is [cldoc](https://jessevdk.github.io/cldoc/).
349
349
350
350
## Resources
351
351
352
352
### Online
353
353
354
354
-[CppCon videos](https://www.youtube.com/user/CppCon): Many really good talks recorded at the various CppCon meetings.
@@ -30,12 +30,12 @@ There exist many commercial performance profiling tools by Intel and the Portlan
30
30
## Editors and IDEs
31
31
32
32
Most lightweight editors provide Fortran syntax highlighting. Vim and emacs are most widely used, but for code
33
-
completion and refactoring tools one might consider the [CBFortran](http://cbfortran.sourceforge.net/) distribution of Code::Blocks.
33
+
completion and refactoring tools one might consider the [CBFortran](https://cbfortran.sourceforge.io/) distribution of Code::Blocks.
34
34
35
35
## Coding style conventions
36
36
37
37
If working on an existing code base, adopt the existing conventions. Otherwise we recommend the
38
-
standard conventions, described in the [official documentation](https://github.com/certik/fortran90.org/blob/master/src/best-practices.rst#fortran-style-guide) and the [Fortran company style guide](http://www.fortran.com/). We would like to add the following advice:
38
+
standard conventions, described in the [official documentation](https://github.com/certik/fortran90.org/blob/master/src/best-practices.rst#fortran-style-guide) and the [Fortran company style guide](https://www.fortran.com/). We would like to add the following advice:
39
39
40
40
- Use free-form text input style (the default), with a maximal line width well below the 132 characters imposed by the Fortran90 standard.
41
41
- When a method does not need to alter any data in any module and returns a single value, use a function for it, otherwise use a subroutine. Minimize the latter to reasonable extent.
Copy file name to clipboardExpand all lines: language_guides/javascript.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -74,7 +74,7 @@ Solid has a meta-framework called [SolidStart](https://start.solidjs.com/).
74
74
75
75
Most JavaScript is run in web browsers, but if you want to run it outside of a browser (e.g. as a server or to run a script locally), you'll need a JavaScript **runtime**. These are the main runtimes available:
76
76
77
-
-[Node.js](https://nodejs.org) is the most used runtime, mainly for being the only available runtime for a long time. This gives the advantage that there is a lot of documentation available (official and unofficial, e.g. forums) and that many tools are available for Node.js. It comes with a [package manager (npm)](https://www.npmjs.com/) that allows you to install packages from a huge library. Its installation instructions can be found [here](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs).
77
+
-[Node.js](https://nodejs.org) is the most used runtime, mainly for being the only available runtime for a long time. This gives the advantage that there is a lot of documentation available (official and unofficial, e.g. forums) and that many tools are available for Node.js. It comes with a [package manager (npm)](https://www.npmjs.com/) that allows you to install packages from a huge library. Its installation instructions can be found [here](https://nodejs.org/en/download).
78
78
-[Deno](https://deno.com/) can be seen as a successor to Node.js and tries to improve on it in a few ways, most notably:
79
79
-[built-in support](https://docs.deno.com/runtime/fundamentals/typescript/) for TypeScript
80
80
- a better [security model](https://docs.deno.com/runtime/fundamentals/typescript/)
0 commit comments