= How to Code in a Terminal Window When you want to develop programs, e.g. in Python, on a server, the easiest connection option usually is via `ssh` access and the [https://en.wikipedia.org/wiki/Command-line_interface command line mode] in a [https://en.wikipedia.org/wiki/Terminal_emulator terminal window]. In case, you are not used to working in a terminal, we have gathered a small set of recommendations and tutorial links. The examples will be using the NLP lab server [https://aurora.fi.muni.cz aurora] as an example. * for the **primary access**, see the information for various OSes directly at https://aurora.fi.muni.cz * for **basic navigation** once you are logged in, see the [https://ubuntu.com/tutorials/command-line-for-beginners#3-opening-a-terminal Ubuntu tutorial for working in terminal]. * for **easy repeated access**, you should setup a ''SSH key authorization'', see the simple [https://aurora.fi.muni.cz/ssh-keys.html aurora SSH keys tutorial]. * choose and learn (at least) one **in-terminal text editor**. An easy option is the [https://www.nano-editor.org/dist/v2.2/nano.html nano editor] - just run `nano source.py` and start editing, save with `Ctrl+S`, exit with `Ctrl+X`. An advanced option is the [http://www.vim.org/ vim editor] - we suggest e.g. the [https://missing.csail.mit.edu/2020/editors/#vim MIT course VIM intro] for an initial engagement with `vim`. When you start `vim source.py`, you should press `i` to edit the text and `Esc`, `:w` to save changes or `:q!` to discard changes. * when developing a program, e.g. in Python, we suggest to **work in multiple terminal windows**. For each window start a separate terminal connection to the server (SSH key authorization comes very handy here), change to the same directory on the server and use for example: - one window for source code editing. Do not exit the editor, just save changes and test in another window. - one window for running the code and inspecting the results. - one window for running a debug (e.g. via `python -mpbd source.py`). - one window for working with auxiliary files, e.g. edit testing data. * for **easy data+code sharing** consider using an independent Git repository, e.g. https://gitlab.fi.muni.cz. In that case, you shall store all your source codes and data files in [https://gitlab.fi.muni.cz/ Gitlab] and just `git clone` the repository to the server. Use `git add`, `git commit -a` and `git push` to promote changes that you make on the server back to [https://gitlab.fi.muni.cz/ Gitlab]. Use `git pull` to update the previously cloned repository in the server directory with changes made elsewhere. See e.g. the [https://missing.csail.mit.edu/2020/version-control/#repositories MIT Git intro] for other details about working with Git. * how to **discover and fix errors** - we suggest two standard options: `logging` and `pdb` debugging: - **logging** is based on standard Python [https://docs.python.org/3/library/logging.html logging library]. It allows to supplement your program with messages of various levels of verbosity which can be turned on and off. A simple program may look like {{{#!python import logging logging.basicConfig( level=logging.DEBUG, format="%(message)s") logging.info("Program starting") a = 2 b = 2 logging.debug(f"About to sum {a} and {b}") logging.info(f"The result is {a+b}") }}} - **pdb debugging** is run from the command line with including the specific `pdb` module. Start the debugging via `python -mpdb source.py`, then use line-based commands as described in the [https://missing.csail.mit.edu/2020/debugging-profiling/#debuggers MIT code page]. Command `q` quits the debugger. * if you are curious enough to get to a **terminal pro level**, we suggest to go through the full MIT course [https://missing.csail.mit.edu/ The Missing Semester of Your CS Education].