Title is automatically set
==========================
.. highlight:: console
.. course::
About Linux
-----------
Linux is an operating system known for its flexibility and power. It
doesn't hide things from the user, which makes it especially suitable
for scientific computing, where you need to assemble your own pieces
together and have full control. Because of it's open-source spirit,
many other open-source tools are developed for it
Linux is not just one thing: there are many **distributions** which
combine software. Which one to choose is basically user preference
(ask your friends what they use), but there are two major types:
**Debian-based** (uses ``apt`` to install programs) and **Red-hat
based** (uses ``yum`` to install programs). In practice, Ubuntu is
a good default these days. These instructions (so far) are for
Debian-based distributions like Ubuntu.
On Ubuntu, the standard way to install things is ``sudo apt-get
install $package_names ...``
Shell tools
-----------
The shell provides an interface to efficiently access
the true power of a computer. Now we use it to install tools
but it can be used for many other tasks too.
Every Linux distribution comes with a shell already installed. Start
the "Terminal" or "Shell" to see it. To verify, try running this::
$ echo $SHELL
/bin/bash
The convention is the ``$`` represents lines you type (without the
``$`` - notice most shell prompts have it there already), the other
lines are what comes out. ``#`` represents comments.
If you want a crash course on using the shell, see `the Aalto shell
crash course `_. You
don't need this right now.
Version control (git)
---------------------
Using version control is like an insurance for your projects.
It is not only about tracking changes but also to improve your
project visibility and make it easier to collaborate.
Git is the most popular system for version control and GitHub is one of
the services that provide online storing for projects.
This comes included in all operating systems, but needs to be
installed. Here, we install git and some other useful frontends for
it::
$ sudo apt install git gitk gitg
Verify from the shell (see above to start the shell)::
$ git --version
git version 2.20.1
Your organization might provide you access to some other repository manager than GitHub
but since GitHub is a higher availablity solution, it does not hurt to create an account there.
You can sign up for Github `here `_
Anaconda (Python)
-----------------
In software development there are some standard packages that are
useful to have without the trouble of installing them separately with
their dependencies.
There are very many programming languages, and you probably won't only
use Python. But, it is quite common so we mention it here. We
install the Anaconda distribution of Python: it gets you all the basic
things you need, and can also install R and other programming
languages, too. Anaconda is large and has all the most common tools
people need - if you want to save space, install Miniconda instead
(then you have to decide what extra packages you want).
* `Anaconda `_
* `Miniconda `_
This will get you Jupyter and many other Python things, too.
Anaconda allows you to manage your development environment which is good
since you can have different environments dedicated to their designated purposes.
.. todo::
How to install it in the shell. How to start/use it. Easier install
instructions. Link the SWC video.
To verify from the shell (see above to start the shell)::
$ python3 -V
Python 3.6.8 :: Anaconda custom (64-bit)
$ conda info
active environment : None
...
base environment : /home/rkdarst/anaconda3 (writable)
Editor
------
It's good to have one command-line editor and one graphical Integrated
Development Environment.
Command line editor
~~~~~~~~~~~~~~~~~~~
For fast things, you want to be able to edit files quickly from a
the command line. ``Nano`` is the simplest to use. If you want, you can check out `vim
`_ or `emacs
`_,
but they certainly harder to use so we don't recommend them to start
off.
To install ``nano``::
$ sudo apt-get install nano
.. todo::
Is this the most useful verification?
See `this nano tutorial
`_ to
learn more. To verify nano from the shell (see above to start the
shell)::
$ nano my_file.txt
Integrated Development Environment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
** You should install one good **Integrated Development Environment
(IDE)**. This has coding, version control, and many more things build
in to one interface. These days, **VSCode** is the most popular.
Install from `the vscode website `_.
Out of principle, we recommend you `disable data collection
`_.
Emacs can also serve as an IDE once you learn enough about it.
Jupyter
-------
`Jupyter `_ is an interactive way to explore data
and do programming. It can be used to add code, output, titles, text and visualisations into one document.
It's already installed along with Anaconda. To start it in a certain directory, go to that directory in the shell and
run::
$ jupyter notebook # older notebook interface
$ jupyter lab # newer JupyterLab interface
Follow `this `_ to install useful extensions to your
environment. Especially ipywidgets are needed if you continue to do exercises.
Other programming tools
-----------------------
Install::
$ sudo apt install build-essential meld
* ``build-essential`` installs some basic compilers and so on.
* ``meld``: A graphical diff program
If you wish to obtain credits from the course, you might need
* NumPy
* Matplotlib
to complete exercises. These libraries are pre-installed with Anaconda installation.
Further information about installations can be found here: `NumPy `_
and `Matplotlib `_