<!-- In the name of God -->
# Session 01
## Introduction
### Objectives
1) Improving day-to-day engineering productivity
* Creating powerful interactive reports.
* Using a version control (using git) tool to prevent the "thesis", "tesis_2", "tesis_final", "thesis_final_final" mess and collaborate on a shared project as a team.
* Having the essential Linux knowledge which is necessary for working with almost all super computers and optimization platforms. "Linux" will shine in your resume.
2) Learning Data Structures and Algorithms
* Using Python to implement them.
* https://python.swaroopch.com/basics.html
* https://projecteuler.net/
* Solving generic programming interview questions.
* Chapter IX of [Cracking the coding interview](https://www.amazon.ca/Cracking-Coding-Interview-Programming-Questions/dp/0984782850) book.
* https://leetcode.com/
* Using the knowledge in other programming languages like Matlab.
* An important competitive advantage for Data Science career path.
### Non-objectives
* Teaching:
* I don't like teaching, except for very basic steps in the beginning. But I like facilitating your self-learning process by:
* [Pair Programming](https://en.wikipedia.org/wiki/Pair_programming)
* Answering your questions
* Reducing your search space and choices
* Being Boring:
* Every session must be super-exciting. Let's pivot whenever you felt bored.
* Being time-Efficiet:
* There are a lot of great online courses optimized for busy people who want to learn a lot in a short time.
* Programming is more about practice than knowledge. My objective is to make sure you have enough opportunities for trial-and-errors and practicing. It sounds like inefficient, but I believe that inefficiency is essential for absorbing the skills.
### Action Items
* Delay policy:
* After 6:02 Esmaeil's time -> CAD 10
* Every 5 minutes after 6:05 -> CAD 10
* Max per day -> CAD 30
* Usage: Donation.
* Give up penalty: CAD 100
* Accepted absense:
* 1 session per month with in-advance notice.
* Missing assignment:
* CAD 50 each session
### Notes
* in the bottom-right corner, right click on "ES" icon. Click on "Keyboard Layoub Handler Settings"

* Select "es" and click on "- Remove" button

* Click on "Close" button after having "es" removed:

* open terminal
* `conda init bash`
* `source ~/.bashrc`
* `pip install streamlit`
* `sudo apt update`
* `sudo apt install gedit` (it asks you a password. password is lubuntu)
* `cd ~/Desktop`
* `touch first_app.py`
* `streamlit run first_app.py`
* the last command opens a google chrome window. keep it open and go back to the terminal. Open a new tab in terminal:

* `gedit first_app.py`
* Resize the windows so that the google chrome is on the right and editor is on left. If your screen is large enough, you can have the terminal as well:

* Write the following code in the left window and save using "Ctrl + S" (for Mac users: ctrl not command):
```python
import streamlit as st
st.write("hello world")
```

* Once you save the file, click on "Always rerun" in the right window:

* Now you should see "Hello world" in the right window:

### Assignment
* Open https://docs.streamlit.io/en/stable/getting_started.html
* Read it and for every gray box (except the second one with content "streamlit run first_app.py") in that page, copy the command to the editor and save the file.
* Copy gray boxes one by one to the left window, save and see what appears in the right window.
* Here is what you should have in the end:

#### Optional:
* Try modifying the code and see what happens as many times as possible.