---
# System prepended metadata

title: Geek way coding
tags: [tutorial]

---

---
tags: tutorial
---
Geek way coding
===
This note introduces how to code geek!

Outline:
[TOC]

# Operating System
## Why Linux (Unix)?
![](https://i.imgur.com/Tl1dCGV.png =200x)
- easily to use SSH connection
- complete package manager for many tools, which can be installed in command line
- easy to find solutions on StackOverflow etc. because most developers use it
- coding in only one window by using: docker, tmux, vim, etc...
- above can do on server
- using Windows edit *.sh file cause `\r` !!?? (after all *.sh is for Linux not for Windows)

## Windows Subsystem for Linux (WSL)
![](https://i.imgur.com/pnYgDBe.png)
:::warning
WARNING: Reboot needed!
:::

# Touch Typing
## Typing without seeing keyboard.

## Logics
- __What is the bottleneck of operating system?__
    <details>
    <summary>Ans.</summary>
    IO.
    </details>
- __What is the bottleneck of a programmer?__
    ~~brain~~
    <details>
    <summary>Ans.</summary>
    Typing speed/correctness.
    </details>

## Why shouldn't I just type whatever I want?
- slow, not totally make use of 10 fingers.
- keep looking at keyboard.
- wanna be faster, faster and FASTER! ~~(摸斗嗨壓苦)~~

## Formal fingering
![](https://i.imgur.com/07MXTKC.png)

## Let's have a small [contest](https://www.typing-lessons.org/lesson_25.html).
Both accuracy and speed are important!
![](https://i.imgur.com/RW5PcGi.png)

## Advance
Ctrl, Alt key combinations.
No formal fingering, need to define yourself
Frequently used in VIM, tmux.

# Tips on Ubuntu
## Vim
- __What is the definition of "Algorithm"?__
    <details>
    <summary>Ans.</summary>
    Describe "step-by-step" procedures.
    </details>
- __Difference of coding with $O(n)$ and $O(n^2)$ steps?__
    Note that steps means how many keystrokes you press on your keyboard, which is independent of your typing speed.
    <details>
    <summary>Ans.</summary>
    O(n) is asymptotically fewer "steps" when n is large.
    </details>
- Memes
    - Meme of learning curve
    ![](https://www.tabnine.com/blog/wp-content/uploads/2020/08/gedit-1.jpg)
    ![](https://i.imgur.com/T20aRTy.png)
    ![](https://i.imgur.com/gmbVMLn.png)
    ```
    What Gives People
    Feelings of Power
    -----------------
    :s | **
    .  | ***
    @@ | *******
    ```
- [vim help](https://vimhelp.org/)
- Using vim key in chrome!!??
    [Vimium](https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb)
:::success
:tada: Keyboard Is All You Need! :tada:
:::

## tmux
- Multi-window, multi-session in only one terminal window.
:::success
:tada: One Terminal Is All You Need! :tada:
:::

## dotfiles
- __What is the essence of "Dynamic Programming"?__
    $\rightarrow$ CharlieL: D**** P****
    <details>
    <summary>Ans.</summary>
    Memo (take notes). Previous tasks results would be directly helpful for future tasks.
    </details>
- __How to "program dynamically"?__
    <details>
    <summary>Ans.</summary>
    Once done, used forever.
    </details>
- My dotfiles
    https://github.com/deeperlearner/dotfiles

## Remote access
:::info
Code at everywhere by sshing to lab PC/server and use tmux and VIM
:sunglasses: __Fast, Smooth and Geek!__ :sunglasses:
:::
Using ssh only consumes very few network resource, which is much better than Teamviewer or other remote desktop app.
As a coder,
:::success
:tada: focusing on one terminal is all you need! :tada:
:::

## Jupyter
[Jupyter Note](/2591KbgQT9mwOYQAMr7UCw)
However, in some cases, you need to check the images file. You can use jupter as a remote image file explorer.
But it crashs when entering directory with large amounts of images, I have no solution currently.

## Follow *deeperlearner* 0v0
https://github.com/deeperlearner
:::success
~~:tada: Following deeperlearner Is All You Need! :wink: :tada:~~
:::

# Python
## Anaconda v.s. pip
- Anaconda
    It has many preinstalled packages for data science & deep learning so that it is easily for start-up without installing packages manually.
    - tradeoff
        - larger disk usage (longer installation time)
        - good compatability between packages
    - usage
        - https://www.anaconda.com/
- pip
    If you are confirmed which packages you need, you can install packages manually by using pip.
    - tradeoff
        - smaller disk usage (shorter installation time)
        - you can customize your package configuration yourself (decide which packages to install)
        - sometimes it will encounter package conflict (that's why you need to use virtual environment)
    - usage
        - `sudo apt-get update`
        - `sudo apt install python3-pip`
        - `pip3 install <package_name>`
        - `pip3 install -r requirements.txt [--upgrade]`
        - `pip3 uninstall -r requirements.txt -y`
        - `pip3 list`
        - `pip3 freeze > requirements.txt`

## Virtual Environment
[Virtual Environment](/_xYQ7nRLRLWpn5OKWwqRXg)

## Basic
- check python version
    `python3 -V`
- Check manual of python
    `man python3`
- You can frequently use the following two functions and Google to check the usage of modules.
    - `dir([object])`
        check the attribute of object.
    - `help([object])`
        check the documentation of object.

## Useful modules
### Notes
Try to take your own notes.
[Python commonly-used packages note](/KA3cwMKeRyms2iKgOekxzQ)

### Frequently used packages in data science
- requirements.txt
    Customize your requirments.txt and execute the following command will install all the packages in the file.
    `pip install -r requirements.txt`

# ML coding
## CUDA & cuDNN
These two packages are for using gpu resources to train deep learning models.
[Procedures of reinstalling Nvidia driver, CUDA and cuDNN](/7eXZ54NBSqO8O2ENtXGZag)

## Why PyTorch?
- Install with CUDA automatically.
- 大金ML、DLCV、ADL choose pytorch as default package

## [Pytorch-Template](https://github.com/deeperlearner/pytorch-template)
- support tensorboard
- record training log
- It can deal with most kinds of machine learning models.
- To tune the model, all you need is to change the json file.

## [arXiv](https://arxiv.org/list/cs/recent)

## [paper with code](https://paperswithcode.com/)

# Ensemble Learning
Sharing geek tips with each others is the fastest way to learn.
- GitHub
- HackMD

# Explore more...
## Some suggestions for learning
- MIT missing semester: https://missing.csail.mit.edu/2020/
- [Hsuan-Tien Lin Youtube courses](https://www.youtube.com/channel/UC9Wi1Ias8t4u1OosYnHhi0Q)
- [Hung-yi Lee Youtube courses](https://www.youtube.com/channel/UC2ggjtuuWvxrHHHiaDH1dlQ)