<!-- 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.