[個人的2021] 開発環境を整えたい! [ssh,python3関係]

# 公開鍵認証の設定

作成するKeyの種類
公開鍵暗号は「RSA」「DSA」「ECDSA」「EdDSA」があり、それぞれ暗号化方式が異なります。

|Type|Default|Bits|
|---|---|---|
|DSA |1024 |1024 |
|RSA|2048|1024, 2048, 4096|
|ECDSA|256|256, 384, 521|
|ED25519|256|256|

```bash:Linux-id_rsa
ssh-keygen
vim ~/.ssh/config
source ~/.ssh/config
# このタイミングで公開鍵をGithubに登録
cat ~/.ssh/id_rsa.pub
# 登録したら接続確認 
ssh -T git@github.com
```

```vim:win10で作成
cd  C:\Users\ユーザー名\.ssh
# keyの作成 (rsaアルゴリズム)
ssh-keygen

# keyの作成 (ED25519アルゴリズム)
ssh-keygen -t ed25519
```

<details><summary>ssh-keygen作成時のcmd_log</summary><div>

```vim:ssh-keygen作成時のcmd_log
C:\Users\ユーザ名\.ssh>dir
 Volume in drive C is Windows
 Volume Serial Number is C0EF-B2B2

 Directory of C:\Users\ユーザ名\.ssh

2021/10/13  18:21    <DIR>          .
2021/10/13  18:21    <DIR>          ..
2021/10/05  15:32               194 config
2021/10/13  10:45             2,675 id_rsa.key
2021/10/13  10:45               584 id_rsa.pub
2021/10/13  11:13               351 known_hosts
2021/10/13  18:19    <DIR>          test
               4 File(s)          3,804 bytes
               3 Dir(s)  192,605,966,336 bytes free

C:\Users\ユーザ名\.ssh>ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\ユーザ名/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\ユーザ名/.ssh/id_ed25519.
Your public key has been saved in C:\Users\ユーザ名/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:I267+S7267+S7NTTU4sBzZ267+S7ajL2267+S7nUDNTTU4 ad\ユーザ名@PC名
The key's randomart image is:
+--[ED25519 256]--+
|     oEoo        |
|  o .B.*         |
|.o o+ = .        |
|oo*.o+           |
|=o+=o.. S        |
|++.o.. .         |
|o+o  +           |
| =.++..          |
|. B===o          |
+----[SHA256]-----+

C:\Users\ユーザ名\.ssh>dir
```
</div></details>


参考:[WindowsでのSSHの方法やconfigファイルの作成方法](https://www.fenet.jp/infla/column/server/windows%E3%81%A7%E3%81%AEssh%E3%81%AE%E6%96%B9%E6%B3%95%E3%82%84config%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95%E3%82%84%E3%83%91%E3%82%B9%E3%83%95%E3%83%AC/)
参考：[GitHubでssh接続する手順](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)

C:\Users\user\\.ssh\configファイルに追加

```vim:config
Host testhost
    # ユーザ名
    User ${リモートユーザ名}
    # ホスト名
    Hostname ${IPアドレス}
    # 鍵ファイルのパス
    IdentityFile ~/.ssh/id_rsa
    # コネクションの切断防止(60秒周期でパケット送信)
    ServerAliveInterval  60

#作成したキーが「id_rsa」「id_dsa」「identity」以外の場合のgithub開通確認

Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/id_ed25519 #ここに自分の鍵のファイル名
  User git
```

```bash:
ssh -T git@github.com
# config 設定していなければ
ssh -i ~/.ssh/id_ed25519 -T git@github.com

# それでも接続できない場合
source ~/.ssh/config
ssh -T git@github.com
```



参考：[vi・vim勉強中。 - vim 文字列の検索](http://www.webhtm.net/vim/search.htm#:~:text=vim%E3%81%A7%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6,%E5%88%97%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)

vimでの検索について紹介します。 ノーマルモードで/（スラッシュ）を入力するとカーソルが画面下に 移動します。 そこで、検索文字列を入力して、[Enter]を入力することで文字列を検索できます。


# jupyter notebook

## 他PCの jupyter notebook にアクセスしたい

qiita：[jupyter notebook で外部からの接続を許可する](https://qiita.com/ciela/items/0e0392f600c92b93d7c6)
参考：[jupyter notebook Port 設定](https://a-zumi.net/jupyter-notebook-custom-port/)

- 設定ファイルを作成
- `~/.jupyter/jupyter_notebook_config.py` の編集

```bash:terminal
# 設定ファイルを作成
jupyter notebook --generate-config

# `~/.jupyter/jupyter_notebook_config.py` の編集
# lisen IP設定('*' = 全て許可)
c.NotebookApp.ip = '*'
# Jupyter 起動時のブラウザ起動設定(off)
c.NotebookApp.open_browser = False
```


```bash:terminal
# アドホックにやりたかったら
jupyter notebook --ip=* --no-browser
# 任意のPortを設定
jupyter notebook --port 9000

# アドホックにIPの制限解除とポート開放
jupyter notebook --ip=* --no-browser --port 9000
```

## まとめてコメントアウト
参考：[Python コメントアウトの書き方を徹底解説(複数行/関数](https://ai-inter1.com/python-comment/#:~:text=Jupyter%20notebook%E3%81%A7%E3%81%AF%E3%80%81%E8%A8%98%E8%BF%B0%E3%81%97%E3%81%9F,%E3%81%97%E3%81%A6%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)

Jupyter notebookでは、記述したコードを選択して、ショートカットキー Ctr + / （スラッシュ） を押すとコメントアウトすることができます。 複数行を選択してCtr + / を押すと、複数行に渡って一括してコメントアウトされます。



# git cmd

## コミットを指定し cloneしたい

```bash:tarminal
git clone https://github.com/username/projectname.git

# 次に、コミットの「SHA」を指定して、「fetch」を実行します。
git fetch --depth 1 origin SHA

# 最後に「reset」を実行すれば、指定したコミットをcloneすることが可能です。
git reset --hard FETCH_HEAD

```

## 初期設定
参考：[`git config` 設定メモ](https://blog.katsubemakito.net/git/git-config-1st)

```bash:
# アカウント設定
git config --global user.name "Your Name"
git config --global user.email you@example.com
# 設定の確認
git config --global -l
```

## 一般的な使用法

- [僕が考える最強のコミットメッセージの書き方](https://qiita.com/konatsu_p/items/dfe199ebe3a7d2010b3e)

```bash:
# gitの初期設定
git init
# .gitignore　の作成
touch .gitignore
# .gitignoreにgitに含めたくないファイルやディレクトリを記入
vim .gitignore
# 現在の状態を表示
git status
```

```bash:
# ファイルを追加する
git add --all .
# コミットメッセージを追加する
git commit -m "{プロダクト名}, first commit"
# 自分のコンピューター上のGitリポジトリをGitHub上のGitリポジトリに結びつけてあげる
git remote add origin https://github.com/<your-github-username>/my-first-blog.git
# GitHubにコードをプッシュする
git push -u origin master
```

2回目以降はこっち

```bash:
# 最後に実行したときから、どのファイルを変更したか見てみましょう
git status
# git に対してこのディレクトリ内の変更を全て反映させるよう指示
# --all をつけると、 git は、ファイルを削除したかどうかも判定します
git add --all .
# gitが何をアップロードするのかチェックしておきましょう
# (`git`がアップロードする全ファイルは緑で表示されます):
git status
# 何をしたかを具体的に書き込んでおけば、将来、作業内容を思い出す助けになるでしょう
git commit -m "[Changed] the HTML for the site."
# GitHubに変更部分をアップロード(push) 
git push
```

- feat: 新しい機能
- fix: バグの修正
- docs: ドキュメントのみの変更
- style: 空白、フォーマット、セミコロン追加など
- refactor: 仕様に影響がないコード改善(リファクタ)
- perf: パフォーマンス向上関連
- test: テスト関連
- chore: ビルド、補助ツール、ライブラリ関連


Django専用 `.gitignore` サンプル

```vim:.gitignore
*.pyc
*~
/.vscode
__pycache__
作成した仮想環境名[myvenv]
db.sqlite3
/static
.DS_Store
```

公開鍵認証設定をしたのにpushできなかったら
参考：[git fetch・pushするときの接続方法をHTTPSからSSHへ変更する](https://hodalog.com/git-remote-set-url/)

```bash:
# sshになっているか現在設定の確認
git remote -v

# HTTPSからSSHへ変更
git remote set-url origin git@gitlab.com:...
# originの後にssh用のURLを入力します。
# リモート名が異なる場合は適宜 <code>origin</code> の箇所を修正。
```

## pushを取り消したい
参考：[git push の取り消し方法](https://www-creators.com/archives/2020)

```bash:
# このやり方はpush した、コミットを取り消し、リモートから削除。無かったことに
# 直前のコミットを取り消す
git reset --hard HEAD^
# 強制的にPushする
git push -f origin master
```

## pushしたコミットメッセージを変更したい
参考：[pushしたコミットメッセージを変更](https://qiita.com/otterminal/items/8d4d554d528da0b16398)

```bash:
# このやり方はpush した、コミットを取り消し、変更し上書き。無かったことに
# local履歴の確認
git log --online
# 直前のコミットメッセージを変更する
git rebase -i HEAD~1
# 3つ前のメッセージを変更する際はこのように
git rebase -i HEAD~3

# エディターが開くので変更したいコミットのpickをeに変更
# :wqを押して上書き保存して終了。

# --amend にてコミットメッセージを変更
git commit --amend -m "[modify]新規投稿ページ修正 #37"  　　//issue番号を追加
git rebase --continue 

# --onelineにて確認
git log --online
# 他にeに変更したコミットがある場合は上から順次繰り返す。最後にpushで問題ないと思う。(未確認)
# 強制的にPushする
git push -f origin master
```


# Github ブランチ

```bash:ブランチ作成
# ブランチ確認
git branch

# developブランチ作成
git checkout -b develop main

# 再度確認
git branch

# 作成したブランチをリモートに反映
git push -u origin develop
```

# Python class

参考：[Python クラスについて](https://qiita.com/motoki1990/items/376fc1d1f3d59c960f5c)

```python3:
class TestClass:
    x = "変数1"

    def test_method1(self):
        print(self.x)

    def test_method2(self, arg1):
        print("引数1:" + arg1)

testClass = TestClass()
testClass.test_method1() # ⇒ 変数1
testClass.test_method2("引数Test") # ⇒ 引数1:引数Test
```

# Linux Port Check cmd

参考：[Linuxのポート状況を確認する](https://www.linuxmaster.jp/linux_skill/2009/02/linux-4.html)

Linuxで接続待ちをしているポートを確認する(ssコマンド)

```vim:
■ssコマンドのオプション
-a	全てのソケットを表示
-n	サービス名に変換せずに表示
-t	TCP情報のみ表示
-u	UDP情報のみ表示
```

```bash:
# TCPポートのみを表示する
ss -atn
# UDPポートのみを表示する
ss -anu
# TCP、UDPポート両方表示する
ss -atnu
```

# Docker コマンド詳細
参考：[コマンドライン・リファレンス » logs](https://docs.docker.jp/engine/reference/commandline/logs.html)

```bash:
logs
使い方: docker logs [オプション] コンテナ

コンテナのログを取得

  --details                 ログに追加情報を表示
  -f, --follow=false        ログの出力をフォロー（表示し続ける）
  --help                    使い方の表示
  --since=""                タイムスタンプ以降のログを表示
  -t, --timestamps=false    タイムスタンプを表示
  --tail="all"              ログの最後から指定した行数を表示
```


# windows11 自動ログイン
参考：[Windows11の自動サインインの設定](https://horaku.shonanwalker.com/post-2835/)
- Windows11起動後のパスワードを省略する

１．[Windowsシステムツール⇒名前を指定して実行] ボックスに「netplwiz」又は「control userpasswords2」と入力し、「OK」を押す。  管理者のパスワードまたは確認を求められた場合は、パスワードを入力するか、確認情報を提供する。

![github-mona-loading-default.gif](https://lh3.googleusercontent.com/pw/AM-JKLWGYXb3axKCFx5MSHX_A0De5zLB_ESaDtGPaFTDD5Eunnj8nFQ1rxNcqT1-yuG-OhmkSNT4esvYlQ6tnMXAAXWZ7PPI8YqwWnC3f-pOJ6JkW55OxTD1ZvrhN79pLVBG_NI4tY5GPrWjHc9CBNs36hGYQA=w465-h518-no?authuser=2)


- チェックボックスが表示されない場合はレジストリを変更
ユーザーアカウントの設定画面で「ユーザーがこのコンピューターを使うには、ユーザー名とパスワードの入力が必要」チェックボックスが表示されない場合、レジストリ設定を変更します。

以下の手順を実行します。


- regedit.exeを実行
- 「コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device」に移動
- 「DevicePasswordLessBuildVersion」の値を「2」から「0」に変更

変更後すぐにチェックボックスが表示されるようになるはずです。


## ZSH 

###cdの後にlsしたい

参考：[cdした後にlsするのはzshにやらせよう](https://qiita.com/2357gi/items/0ab1297357dedb90bbb1)
下記を .zshrcに追記してあげる

```vim:.zshrc
chpwd() {
    if [[ $(pwd) != $HOME ]]; then;
        ls
    fi
}
```

```zsh:
# 読み込み(設定反映)
source ~/.zshrc
```