DOM (Document Object Model)

DOMとは
  • Document Object Modelのことです。Javascript などのプログラムからHtmlやXMLなどを操作するための仕組みです。
  • ツリー構造を持っていて、各々をノードと呼ばれる。
  • 利用シーンとしては、

例えばブラウザに表示される文字の色を変更したり、大きくしたりと、Webページの見た目をプログラムで処理をしたい場合があるだろう、しかし何もしていない状態のHTMLファイルではJavaScriptから手を出す事が出来ない。そこでファイルの特定の部分に目印を付けて「この部分」に「こういう事をしたい」という処理を可能にするための取り決めがDOMである。

以下のサイトを参考にさせていただきました。 eng-entrance.com

DOMの参照

DOMはChromeのDevelopperツールのElementで参照可能です。 例えば、以下のように見えます。 この,html,head.body,divなどの各々の要素がNodeにあたります。

f:id:lucky0523:20201016152046p:plain
DOM

DOMの操作

プログラムから各ノードのIDを指定して、操作をすることが可能です。 Javascript の場合、以下でノードの情報を取得できます。

document.getElementById(id);

具体的には、以下のような構文で、IDが"section-2"のカラーをREDに変更することができます。

document.getElementById('section-2').style.color = 'red';

財務分析

バフェットコードを利用した分析

1. バフェットコードにアクセス

www.buffett-code.com

2.財務表分析

財務表を確認する。 * 粗利率、営業利益率、純利益率

前年と比較して、上がっているか下がっているか?

f:id:lucky0523:20201010170603p:plain
財務表

https://www.buffett-code.com/ より

3.EPS,BPS

EPS, BPSを前年と比較する。

* EPS(Earnings Per Shares) 1株あたりの当期純利益  EPS(円) = 当期純利益 ÷ 発行済株式総数   EPS(1株当たり利益)は、株主が持つ1株について一会計期間における会社の成果を示しており、その会社の収益性を分析できる指標です。EPSは、会社の規模にかかわらず1株あたりの当期利益の大きさを表しているため、値が大きいほど良いとされます。当期の1株当たり利益を前期以前のものと比較することで、会社の収益性や成長度をおおむね把握できます。また、他社と1株当たり利益を比較することで、会社規模の影響を除外した収益性の分析も可能です。そのため、株式投資で銘柄の比較を行う際にも用いられます。一般的に、株価は「EPS×PER(株価収益率)」で計算されるため、EPS(1株当たり利益)が上がれば株価も上がり、EPSが下がれば株価も下がります。

*BPS(Book-value Per Share)  1株当たりの純資産。純資産は、企業の資本から負債分を除いた値。  企業の安定性を表す。

4.企業の健全性

経営が傾いている企業に投資するさいは、注視すること。

 自己資本比率 = 自己資本 ÷ 総資産 自己資本比率とは、総資産に占める自己資本の割合。 高い方が、安定はしている。

一般に自己資本比率が70%以上なら理想企業、40%以上なら倒産しにくい企業といえます。TKC経営指標のデータを見てみると、自己資本比率の平均は赤字企業で-4%、黒字企業で27%、優良企業(黒字企業中上位15%)で53%。自己資本比率は高いほどよいですが、まずは40%を目指したいところです。 https://www.kessansho.com/general/study/04_05.html#:~:text=%E4%B8%80%E8%88%AC%E3%81%AB%E8%87%AA%E5%B7%B1%E8%B3%87%E6%9C%AC%E6%AF%94%E7%8E%87%E3%81%8C,%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%93%E3%82%8D%E3%81%A7%E3%81%99%E3%80%82

ただし、負債を活用することで資本効率を高められるため、必ずしも自己資本比率が高い方が良いとは限らない。 (効率が悪い経営の可能性もある。)

  • ネットD純利益比率

ネットD純利益比率とは、当期純利益に対して何倍の純有利子負債を抱えているかを表す指標。 純有利子負債を返済するのにかかる、おおよその目安として見ることができます。 数字の目安ですが、たとえばバフェットが投資したどの優良企業も、すべての有利子負債を3~4年で返済できる純利益を毎年計上している。

5.株価が割高か、割安かの判断(PER)

前年度と比べてPERが低ければ、株安と判断できる。

  • PER(Price Earnings Ratio)  PER(倍)=株価 / 1株あたりの純利益(EPS)

株価が1株当たり純利益(EPS:Earnings Per Share)の何倍まで買われているか、すなわち1株当たり純利益の何倍の値段が付けられているかを見る投資尺度です。現在の株価が企業の利益水準に対して割高か割安かを判断する目安として利用されます。 PERの数値は、低いほうが株価は割安と判断されます。なお、1株当たり純利益は当期の予想数値を用いるのが一般的です。

  • PERの目安

一般的に上場企業の場合、PERの値は「15倍」がひとつの水準とされています。日本の企業におけるPERの全業種平均がおよそ15倍であることから、この数字が目安としてあげられているのです。PERが小さいほうが、株価は割安ということになりますので、まずはPERが15倍以下であるかどうかに着目してみるとよいでしょう。 https://batonz.jp/learn/3120/#:~:text=%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AB%E4%B8%8A%E5%A0%B4%E4%BC%81%E6%A5%AD,%E3%81%BF%E3%82%8B%E3%81%A8%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%80%82

データベース基礎 (Database)

データベースの用語

データベース用語

*1

ACID特製

  • Atomicity 原子性
    トランザクションが実行されるか、実行されないかのどちらかを保証する。
  • Consistency 一貫性
    データの矛盾がないように一貫性を保証する。 例えば預金システムで、片方の口座は振り込まれたはずなのに、もう片方には振り込まれないなどの矛盾を生じさせない
  • Isolation 独立性
    並列に処理した場合と、順列で処理した場合に同じ結果であることを保証。
  • Durability 永続性
    トランザクションデータが消えないことを保証。

データベースの関連

テーブル間の関連は、以下のような3種類で表現されます。
* 1対1
* 1対多
* 多対多
多対多を表現する場合は、中間テーブルが必要となります。
例えば以下の場合、Customer1人は、複数の注文(Order)をすることができるので、1対多を表現します。

正規化

  • 第一正規化
    繰り返し項目が存在しない。 以下のような場合Aさんは、二つのEmailを持っており、第1正規化に違反します。
id name Email1 Email2 Email3
101 Aさん A@test.com AA@test.com AAA@test.com
102 Bさん B@test.com
103 Cさん C@test.com

この場合、以下のように社員テーブルとEmailテーブルに分けます。 社員テーブルとEmailテーブルの間には、1対多の関係があります。
社員テーブル

id name
101 Aさん
102 Bさん
103 Cさん

Emailテーブル

社員id Email1 Email2 Email3
101 A@test.com AA@test.com AAA@test.com
102 B@test.com
1033 C@test.com
  • 第2正規化
     主キーの値が決まれば、各項目の値が自動的にきまる。⇒ 主キー以外の項目は、すべて主キーに従属することになります。
     

例えば以下の場合、主キーは、コースIDとコース日の複合キーで表すことができる。
しかし、Aコースはコースidの101によって一意に判別でき、コース日をキーにする必要はないです。
コース日だけでば、コース名を特定できません。 これを部分従属といい、第2正規化に違反します。

この時の問題点としては、例えば、コース名を変更する際、一部しか変更できずに矛盾が生じる可能性があります。

コースid コース日 コース名 参加者
101 2022/1/2 Aコース 30
102 2022/11/21 Bコース 30
101 2022/3/20 Aコース 30

この場合、以下のようにコースIDを外部キーとして、テーブルを分割します。

コースid コース日 参加者
101 2022/1/2 30
102 2022/11/21 30
101 2022/3/20 30
コースid コース名
101 Aコース
102 Bコース
  • 第3正規化
    主キー以外の項目の値によって、各項目の値が自動では決まらない。  主キー以外の項目に従属している項目を見つけ、それを別のテーブルに分離します。

インデックス

検索を高速化するための方法です。
* クラスタ化インデックス
フィールドにインデックスを張ると、一定の順番に並べて、ディスクに保存されます。通常は主キーなどに張ることが多いです。
インデックスを張った、フィールドで検索をかけると、高速に検索が可能です。クラスター化インデックスは、テーブルに1つしか張ることができません。 例えば、以下のようにindexが張られたCustomerID_indexで検索すると、高速で検索できます。  SELCT * CustomerTable WHERE CustomerID=551;

  • クラスター化インデックス
    テーブルとは別に、indexテーブルを持つことができます。1つのテーブルでいくつもの、非クラスター化インデックスを持つことができます。  
    辞書検索のようなもので、以下の例では、Last Nameを辞書順に並べることで、Last Nameを使ったSQL検索が高速化されます。

  • 注意点
    インデックスを作成すると、更新や削除の場合、非クラスター化インデックスの並び替えが発生します。そのため、頻繁に更新、削除する場合は遅くなります。
    また、小さなテーブルでは、効率が悪くなるのでIndexを張る意味がありません。

ストアードプロシージャ

複雑なSQL分を関数のようにまとめることができます。

セキュリティ勉強

セキュリティ脆弱性あれこれ

後で調べること

  • SQLインジェクション

  • OSコマンドインジェクション

  • クロスサイト・スクリプティング

  • パス・トラバーサル

  • HTTPヘッダインジェクション

  • クロスサイト・リクエスト・フォージェリー

  • セッション管理の不備少

  • 認可制御の不備少

  • 権限昇格少

  • メールヘッダインジェクション

npmのBuild/パッケージ管理等々

npmとは

パッケージ管理システムの一種。Node Package Manage

npm install

npm installは、npmリポジトリからライブラリ(正確にはパッケージと呼びます)をダウンロードしてくるコマンドです。 ライブラリそのものは下記のサイトから取得されます。

#npm install
npm run

npm runでビルドが実施される。

#npm run buildProd
npm トラブルシュート
  1. gyp ERR! stack Error: unable to get local issuer certificate のエラーが出た場合

  2. proxy設定をする。

  3. NODE_TLS_REJECT_UNAUTHORIZED=0 の設定をする。

#export NODE_TLS_REJECT_UNAUTHORIZED=0
  • Dockerfile に以下の設定を追加する。
RUN npm -g config set http-proxy http://proxyname:8080

RUN npm -g config set https-proxy http://proxyname:8080

RUN npm -g config set strict-ssl  false

RUN npm -g config set proxy  http://proxyname:8080

RUN npm -g config set registry  http://registry.npmjs.org
  1. npmでpermission deniedになった時の対処法

  2. npmディレクトリのパスを確認する npm config get prefixを実行するとおそらく/usr/localが表示される npmディレクトリのオーナーを自分のアカウントに変更する

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  1. npm install でgit repository に接続できないとき。

 以下のようなエラーが出ており、npm installに失敗する。

npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://git@github.com/eligrey/FileSaver.js.git
npm ERR! 
npm ERR! ssh: connect to host github.com port 22: No route to host
npm ERR! fatal: Could not read from remote repository.

解決策 npmのpackage.jsonで、sshプロトコルで、gitにアクセスするように指定している可能性がある。

package-lock.json:        "file-saver": "git+ssh://git@github.com/eligrey/FileSaver.js.git#e865e37af9f9947ddcced76b549e27dc45c1cb2e",

これを以下のようにhttpsプロトコルに修正すれば、アクセスできるようになる。

package-lock.json:        "file-saver": "https://git@github.com/eligrey/FileSaver.js.git#e865e37af9f9947ddcced76b549e27dc45c1cb2e",
npm list (パッケージの依存性確認)

npmで管理しているパッケージをリスト形式で出力 パッケージの依存関係やバージョンを調べるのに便利です。

#npm list

├─┬ @agm/core@1.1.0
│ └── tslib@1.14.1
├─┬ @angular-devkit/architect@0.1303.7
│ ├─┬ @angular-devkit/core@13.3.7
│ │ ├─┬ ajv@8.9.0
│ │ │ ├── fast-deep-equal@3.1.3
│ │ │ ├── json-schema-traverse@1.0.0
│ │ │ ├── require-from-string@2.0.2
│ │ │ └─┬ uri-js@4.4.1
│ │ │   └── punycode@2.1.1 deduped
│ │ ├─┬ ajv-formats@2.1.1
│ │ │ └── ajv@8.9.0 deduped
│ │ ├── fast-json-stable-stringify@2.1.0
│ │ ├─┬ magic-string@0.25.7
│ │ │ └── sourcemap-codec@1.4.8 deduped
│ │ ├── UNMET PEER DEPENDENCY rxjs@6.6.7 deduped
│ │ └── source-map@0.7.3
│ └── UNMET PEER DEPENDENCY rxjs@6.6.7 deduped
├─┬ @angular-devkit/build-angular@13.3.7
│ ├─┬ @ampproject/remapping@2.2.0
│ │ ├─┬ @jridgewell/gen-mapping@0.1.1
│ │ │ ├── @jridgewell/set-array@1.1.1

npm outdated (最新のパッケージの確認)

現在インストールされているパッケージが最新であるかを確認するコマンドです。

$ npm outdated
Package                                  Current         Wanted        Latest  Location
@agm/core                                  1.1.0          1.1.0  3.0.0-beta.0  nec-edge-ui
@angular-devkit/architect               0.1303.7       0.1303.9      0.1401.0  nec-edge-ui
@angular-devkit/build-angular             13.3.7         13.3.9        14.1.0  nec-edge-ui

npm audit (脆弱性の確認)

現在確認されているパッケージの脆弱性を報告します。

$ npm audit

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Regular expression denial of service in scss-tokenizer       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ scss-tokenizer                                               │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ No patch available                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-sass [dev]                                              │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-sass > sass-graph > scss-tokenizer                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://github.com/advisories/GHSA-7mwh-4pqv-wmr8            │
└───────────────┴──────────────────────────────────────────────────────────────┘

vmware ESXI

ESXIのシンプロビジョニングで、ゲストOSの容量を削減する。

ESXIでシンプロビジョニングでVMを作成している場合、ゲストOSからデータを削除してもVMのサイズは 減少しない。以下が、対応方法

https://rin-ka.net/thin-provisioning-disk-difference/#toc6

シンプロビジョニング・シックプロビジョニングの違い

  • シックプロビジョニング(Lazy zeroed) 仮想ディスク作成時に指定したサイズ分の領域を確保します。

  • シックプロビジョニング(Eager zeroed) 仮想ディスク作成時に指定したサイズ分の領域を確保し、ゼロで初期化します。

  • シンプロビジョニング 仮想ディスク作成時には最低限の領域のみ確保し、必要に応じて増加します。

GPUのパススルーモードでゲストOSが立ち上がらないとき

Bios設定でAbove 4Mの設定をしても、GUIをアッタチしたOSが立ち上がらない場合、同時に以下の設定をする必要がある。

いったんsshVMwareにログインし、各GestOSのファイルを設定する。 ファイルの場所は、以下の通り。 ./vmfs/volumes/[volumeのSerial]/[Volume名称]/[Volume名].vmx .vmxファイルを設定する。 ./vmfs/volumes/63d9ba3e-c2cf65dc-f5a7-d85ed3eaaa85/Ubuntu20.04__n1/Ubuntu20.04_n1.mvx

[blogs.vmware.com

Here, you add the following two parameters, with the value of the second parameter, as shown, set to TRUE

pciPassthru.use64bitMMIO="TRUE"

The value of the first parameter seen in the dialog above is adjusted to suit your specific GPU requirements:

pciPassthru.64bitMMIOSizeGB=

We calculate the value of the “64bitMMIOSizeGB” parameter using a straightforward approach. Count the number of high-end PCI GPU devices that you intend to pass into this VM. This can be one or more GPUs. Multiply that number by 16 and round it up to the next power of two.

For example, to use passthrough mode with two GPU devices in one VM, the value would be:

2 * 16 = 32, rounded up to the next power of two to give 64.

Kubernetes

k8sアーキテクチャ

f:id:lucky0523:20200905205729p:plain

The Linux Foundation より参照

最もシンプルな形式では、 Kubernetes はセントラルマネージャ( 別名:マスタ)と数個のワーカノード(以前はミニオンと呼ばれていました)で構成されています。(これ以降の章で、テストを目的のために 1 つのノードで全てを実行する方法を説明します)。マネージャは、 API サーバ、スケジューラ、さまざまなコントローラ、そしてクラスタの状態、コンテナの設定、ネットワークの設定を格納するストレージシステムを実行しています。

Kubernetes は(API サーバを通して)API を公開します: kubectl というローカルクライアントを用いて、もしくは自分のクライアントを作成し curl コマンドを使用して、API とやり取りができます。Kube-schduler はAPIに届いたコンテナ起動リクエストの転送を受け、コンテナを起動するのにふさわしいノードを見つけます。クラスタ内の各ノードでは kubelet と kube-proxy の 2 つのプロセスが動作します。 kubelet は、コンテナを起動させるリクエストを受け取り、必要なリソースを管理し、そのリソースをローカルノードで監視します。kubelet はローカルのコンテナエンジンと通信します。デフォルトのコンテナエンジンは Docker ですが、人気が高まっている rkt や cri-o を使うこともできます。

kube-proxy は、ネットワーク上でコンテナを公開するためのネットワークのルールを作成し、管理します。

API ベースの通信スキームを使うことで、Linux でないワーカノードとコンテナを使うことができます。Windows Server 2019 のサポートは 1.14 のリリースをもって Stable になりました。ただし、クラスタマスタになれるのは Linux ノードのみです。

Master nodeの構成コンポーネント

kube-apiserver

全ての内外からの処理はこのコンポーネントを通して行われます。全ての処理はこのエージェントを通して、受け取り、検証される。

kube-scheduler

どのノードでPodをホストするかを決定するエージェント。スケジューラーが結びつけるリソースを確認し、成功するまで、Podのデプロイを行う。

etcd database

クラスタの状態やネットワークなどの必要な情報をetcd databaseに格納される。データベースの更新は、エントリを見つけて更新するのではなく、末尾に値をつけることで更新されます。

kube-controller-manager

コントロールプレーン上で動作するコンポーネントで、複数のコントローラープロセスを実行します。

コントローラーには以下が含まれます。

  • ノードコントローラー:ノードがダウンした場合の通知と対応を担当します。

  • レプリケーションコントローラー:システム内の全レプリケーションコントローラーオブジェクトについて、Podの数を正しく保つ役割を持ちます。

  • エンドポイントコントローラー:エンドポイントオブジェクトを注入します(つまり、ServiceとPodを紐付けます)。

  • サービスアカウントとトークンコントローラー:新規の名前空間に対して、デフォルトアカウントとAPIアクセストークンを作成します。

Worker nodeの構成コンポーネント

全てのWorker nodeはkubelet と kube-proxy、Dockerなどのコンテナエンジンを起動します。

kubelet

クラスター内の各ノードで実行されるエージェントです。各コンテナがPodで実行されていることを保証します。 Podはストレージ、Secret,ConfigMapにアクセスすることが必要になります。Kubeletはそれらのアクセスや制裁を行います。

  • Podspecを使用する

  • PodにVolumeをマウントする

  • Secret をダウンロード

  • ローカルコンテナにリクエストをそうしん

  • クラスタにPodとNodeの情報をレポートする。

kube-proxy