PIL->Tensor, Tensor -> PIL変換

import cv2
import PIL
import torchvision.transforms as T
import torchvision
import torch

#cv2 imread
cv2_img = cv2.imread("pic/dogAndPerson.jpg")
cv2.imwrite("pic/img.jpg", cv2_img)
print(f"cv2_img.shape: {cv2_img.shape}, type: {type(cv2_img)}")
# => cv2_img.shape: (533, 800, 3), type: <class 'numpy.ndarray'>

#PIL Image Open
pil_img = PIL.Image.open("pic/img.jpg")
print(f"pil_img.size: {pil_img.size}, type: {type(pil_img)}")
#=>pil_img.size: (800, 533), type: <class 'PIL.JpegImagePlugin.JpegImageFile'>

#PIL -> Tensor
transform = T.Compose([
    T.Resize(800),
    T.ToTensor(),
    T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
tensor_img = transform(pil_img)
print(f"tensor_img.shape: {tensor_img.shape}, type: {type(tensor_img)}")
#=>tensor_img.shape: torch.Size([3, 800, 1200]), type: <class 'torch.Tensor'>


#Tensor -> PIL
# 標準化の逆変換
mean = torch.tensor([0.485, 0.456, 0.406])
std = torch.tensor([0.229, 0.224, 0.225])

denormalized_tensor = tensor_img * std[:, None, None] + mean[:, None, None]
torchvision.transforms.functional.to_pil_image(denormalized_tensor).save("pic/img2.jpg")

vim tips

記号を挿入

  1. 挿入したい行の先頭で"Ctrl + v"(ビジュアル 矩形モード)
  2. jやk(あるいは方向キーの↑↓)で範囲選択
  3. 大文字のIで("Shift + I"で)挿入モードへ
  4. 挿入したい文字列を入れる.
  5. "Esc"(あるいはCtrl + [でもよい)を押すと選択したすべての行に文字列が挿入される.

記号を削除

  1. 削除したい行の先頭で"Ctrl + v"(ビジュアル 矩形モード)
  2. jやk(あるいは方向キーの↑↓)で範囲選択
  3. d これによって行頭の1文字が削除されます.

自己証明書でChromeのエラーを消す方法

前提

  • UIはコンテナk8s上のコンテナで動いているものとする。
  • OSはUbuntu20.04
  • UIにアクセスするドメイン名はgui.10.165.8.86.nip.ioであるとする。

 手順

自己証明書の作成
openssl genrsa -out server.key 2048  
openssl req -out server.csr -key server.key -new  
  Common Nameでgui.10.165.8.86.nip.ioを入力する。ここではUIのドメイン名を入力する  
SAN.txt ファイルを作成
subjectAltName = DNS:gui.10.165.8.86.nip.io  
openssl x509 -req -days 3650 -signkey server.key -in server.csr -out server.crt -extfile SAN.txt  
k8sのSecret作成。secret名はgui-tls
 kubectl create secret tls gui-tls --key server.key --cert server.crt
マニフェストファイルにtlsのせくしょを追加(★の箇所)
apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    annotations:
      meta.helm.sh/release-name: gui-frontend
      meta.helm.sh/release-namespace: default
    labels:
      app.kubernetes.io/managed-by: Helm
    name: gui-frontend
    namespace: default
  spec:
    tls:                          ★
    - hosts:                        ★
      - gui.10.165.8.86.nip.io         ★ドメイン名
      secretName: gui-tls                ★ secret名を入力
    rules:
    - host: gui.10.165.8.86.nip.io
      http:
        paths:
        - backend:
            service:
              name: 
              port:
                number: 80
          path: /
          pathType: Prefix
 Uninstall/Deployを実施する。

Conda

Conda環境の作成・環境の確認

  • 環境の作成
    python=3.5でpythonのバージョンを指定します。
    指定しないと最新のバージョンがインストールされます
conda create -n [環境名]  python=3.5
  • 環境の確認
conda info -e

*がついている箇所が現在の環境

base                     /home/ubuntu/miniconda3
sinetplus39           *  /home/ubuntu/miniconda3/envs/test2
test                     /home/ubuntu/miniconda3/envs/test
  • 環境をActivateする
conda activate [環境名]

仮想環境の削除

conda remove -n 環境名 --all

ライブラリInstall

  • ライブラリの検索
    ここで表示されるライブラリはInstallが可能です。
conda search ライブラリ名
  • ライブラリのInstall
conda install ライブラリ名

ライブラリの確認

conda list 

Redis

Redisの概要について

概要

  • In-Mmoeryのデータベース
  • cache, vector database, document database, streaming engineなどで利用されるNoSQLの のDB。
  • Key-Value型のDB
 型

複数の型がありますが、代表的なものを記載します。

  • String型
    KeyとValueが1対1の関係で管理されるデータ型です
  • Hash型
    親Key、子Key、Valueにより管理されるデータ型です。
  • List型
  • Set型
  • SortedSet型
  • Streaming型
    Redisストリームは、Redis用に構築された新しいデータ構造で、時系列データを扱います。
    Redisリストに似ていますが、以下の2点において異なります。
    オリジナルインデックスではなく、タイムスタンプを使用
    各ストリームは、Redisハッシュに似た複数フィールドを持つことが可能
 redis-cli

redis-cliはredisを管理するCLIです。

ログイン

redisにログインする場合は、以下のコマンドを利用します。

 redis-cli  -p 6382 -h localhost

-pはredisサーバが動作しているポート、-hはホスト名です。

共通操作
keyの確認

登録されているKeyの一覧が表示されます。

> KEYS *
1) "data2"
2) "data1"
3) "test"

もしくは、SCANで登録されているKeyを確認します。

localhost:6381> SCAN 0
1) "0"
2) 1) "data3"
   2) "data2"
   3) "data1"
   4) "test"
Keyの型の確認

keyの型を確認します。

TYPE key
Keyの型のTTLの確認

以下のコマンドで、各KeyのTTLが確認できます。

ttl Key
  • 0以上:残り秒数
  • -1:TTLの指定がない、または指定したキーが既に存在しない
Hash型のCLI操作
  • HGET
    keyのfieldに登録されているValueを表示します 。 ワイルドカードなどは利用不可。
HGET key field
  • HKEYS Keyに登録されているフィールドをすべて返します。
HKEYS key
  • HGETALL keyに登録されているすべてのfieldとValueを返します。
HGEALL key
  • HLEN keyに登録されているフィールドの個数を返します。
HLEN key
Stream型のCLI操作
  • 特定の範囲内のエントリを取得。XRANGEコマンド
  XRANGE stream-name start end [COUNT count]

ストリーム名 mystream から、すべてのエントリを取得する場合は、以下のように- +をつけます。

XRANGE mystream - +
  • 逆順にエントリを取得する。XREVRANGE コマンド
XREVRANGE stream-name end start [COUNT count]

こちらは、すべてのエントリを取得する場合は+、- をつけます。

XREVRANGE mystream + - COUNT 5

nerdctlのBuild環境構築手順

以下の手順で、nerdctlのBuild環境構築を構築できます。 手順は、ubuntu20.04で実施しています。

  1. nerdctlのBinaryを入手。
    以下からnerdctlのBinaryを入手できます。
    この時にnerdctl-full-1.7.3-linux-amd64.tar.gz のようにnerdctl-full-xxx のBinaryを取得します。
    rootlesskitのシェルなどが含まれているためです。
    Releases · containerd/nerdctl · GitHub

  2. /usr/local/binに展開します。

#sudo tar Cxzvvf /usr/local/bin nerdctl-0.18.0-linux-amd64.tar.gz
  1. rootlessモードでInstallします。
containerd-rootless-setuptool.sh install

この時、以下のエラーが出たら、uidmapをInstallします。

INFO] Checking RootlessKit functionality
[rootlesskit:parent] error: failed to setup UID/GID map: newuidmap 1747 [0 1000 1 1 100000 65536] failed: : exec: "newuidmap": executable file not found in $PATH
[ERROR] RootlessKit failed, see the error messages and https://rootlesscontaine.rs/getting-started/common/ .
sudo apt install uidmap
  1. DockerfileをBuildする場合は、以下の手順でBuildkitを有効かします。
CONTAINERD_NAMESPACE=default containerd-rootless-setuptool.sh install-buildkit-containerd

./buildkitdでもよいです。

以上で、手順は完了です。
nerdctl build . でBuildできるはずです。

会計 英語

会計 英語

  • 利益率:profit margin
  • 粗利益(売上総利益):gross profit (GP)
  • 営業利益:operating profit / operating income (OP)
  • 経常利益:ordinary profit / ordinary income(※米国基準の会計には経常利益はない)
  • 税引前当期純利益:income before taxes / pretax income
  • 当期純利益:net income / net profit / net earnings