---
# System prepended metadata

title: Session 01

---

<!-- 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" 
 ![](https://i.imgur.com/rMrSaWc.png)
* Select "es" and click on "- Remove" button
  ![](https://i.imgur.com/CGAK1Ak.png)
* Click on "Close" button after having "es" removed:
  ![](https://i.imgur.com/YrUHxF7.png)

* 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:
![](https://i.imgur.com/AbuKbrY.png)
* `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:
  ![](https://i.imgur.com/faQ6IXO.png)
* 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")
  ```
  ![](https://i.imgur.com/T7QneNZ.png)


* Once you save the file, click on "Always rerun" in the right window:
![](https://i.imgur.com/CeAEZaE.png)

* Now you should see "Hello world" in the right window:
![](https://i.imgur.com/ZeVXL5W.png)



### 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:
  ![](https://i.imgur.com/qwVmY1G.png)

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