9月2週
月曜:
- element uiのdata pickerで日にち単位での表示の仕方でハマった
- type属性にdaterangeを指定すればOK
<el-date-picker v-model="value1" type="daterange" range-separator="To" start-placeholder="Start date" end-placeholder="End date"> </el-date-picker>
9月1週
土曜:
TypeScript
- typeの結合
type PROFILE = { age: number; city: string; } type LOGIN = { username: string; password: string; } // 結合(新しい型を宣言して&で繋ぐ) type USER = PROFILE & LOGIN
リテラル型
- 定数を定義するときに使えそう
// その他の値はエラーになる let companty: 'Facebook' | 'Google' | 'Amazon'
ジェネリクス
- 使い道:関数の引数にnullを許容したくないとき
日曜:
lottery-batch
8月4週
土曜:
kubernates
- kubeconfigファイル
- 接続先(コントロールプレーン )のURL、認証情報、NameSpaceなどを保持している
podの削除でハマった
- 接続先(コントロールプレーン )のURL、認証情報、NameSpaceなどを保持している
kubectl delete pod nginx-pod
でやるとconnectエラーになっていた- 正しくは
kubectl delete pods nginx-pod
sが必要だった
アプリケーション運用を考えたときに作成する手順としては
System Manager
- 踏み台サーバへ入りツールをインストールしたいときなどに使える
- 踏み台サーバではgitとpostresClientをインストールする:
データベースのエンドポイントアドレスの確認
- アプリケーションで必要なのは以下3点
- データベースのエンドポイントアドレス:cloudFormationsから確認する
- データベース管理者用パスワード:
secretsmanager
から確認する - アプリケーション用データベースユーザのパスワード
PostgresqlでのDDL実行
- コンソールから
\i スクリプトの場所
で実行できる
ECRへのログイン
- パイプで繋いでshコマンドでログインできる。shコマンドの挙動はよくわかんないけど・・・
aws ecr get-login --no-include-email | sh
imageのタグ付け
- まずはローカルでビルド:
$ docker build -t k8sbook/batch-app:1.0.0 --build-arg JAR_FILE=build/libs/batch-app-1.0.0.jar .
- ecrのURIでタグ付け:
$ docker tag k8sbook/batch-app:1.0.0 ECRのURI:1.0.0
- push:
クラッシュしたら
- ログを見る(当たり前)
kubectl logs --previous YOUR-POD_NAME
サービス(ロードバランサ)の作成
apiVersion: v1 kind: Service metadata: name: backend-app-service spec: type: LoadBalancer selector: app: backend-app ports: - protocol: TCP port: 8080 targetPort: 8080
kubectl get all
するとフロントエンドから叩くべきURL(EXTERNAL-IP)が追加されている- コンソールからも確認する(ステータスが
InService
になっていることs3 + cloudFrontにてフロントエンドアプリケーションのデプロイ
- ビルド:
BASE_URL=http://ロードバランサのEXTERNAL-IP:8080 npm run build
- S3へプッシュ:
aws s3 sync dist s3://バケット名 --delete --include "*" --acl public-read
cloudFrontのキャッシュの無効化
- キャッシュを見に行かないようにする:
aws cloudfront create-invalidation --distribution-id E3DCTCVMANTC9N --path "/*"
aws-cliのバージョンによってaws ecr get-login
のオプションが異なる
- v1だと
get-login-password
が使えない(パスワードのみ出力) - とりあえずコレ使う:
aws ecr get-login | sh
全体の手順
Podを直接デプロイしない理由
- リクエスト量や処理の負荷に応じてPod数を増減させたり、Podが以上終了した際に別のPodを起動したりできない
- Deploymentを使用することでそれができるようになる
yamlファイルに変数を渡したい場合
- envsubstを使って渡すことができる
- こんな感じ
$ ECR_HOST=999999999978777.dkr.ecr.ap-northHOGEHOGHO envsubst < deployment.yaml kubectl apply -f -
Podの管理
readinessProbe
:正常性監視・・・ヘルスチェック に失敗するとServiceからのトラフィックを停止する。livenessProbe
:死活監視・・・コレに失敗するとPodの再起動をする。※readinessProbe
が成功してからコレを行わないともしlivenessProbe
に異常があった場合、再起動の無限ループになる。
月曜:
react
- オブジェクトに対するuseStateのsetの仕方
...product
を付与することでオブジェクトの要素を展開して、別々にセットできる。コレがないと初期化されてしまう。
import React, { useState } from 'react'; export const Basic = (props) => { const clickHandler = () => { alert('click') } const [product, setProduct] = useState({name: '', price: ''}) return ( <> <fonm> <input type='text' value={ product.name } onChange={evt => {setProduct({...product, name: evt.target.value})}}/> </fonm> </> ); }; export default Basic
テンプレートの挿入の仕方
- イロイロなテンプレートがWebstormに用意されているが
rsf
って打つと基本のテンプレートが展開される
useEffect
- vueでいうcomputedみたいなもの
useContext
- 親から孫のコンポーネントに直接値を渡せるようになるもの(Propsを使わないので可読性があがる)
- キーワード:
createContext
,ProviderとConsumer
,useContext
useReducer
- 単一コンポーネント内での状態管理(mutation的な)
グローバルな状態管理をするには(孫からdispatchをして親の状態を変えるには)
- useReducerとuseContextを使う
水曜:
- Docker image 全削除
docker rmi $(docker images -a -q) -f
PostmanとmodHeader(クロム拡張)で動作確認がラクになりそう
- PostmanはBodyに情報追加したりHeaderにも追加できる
- modHeaderはHeaderをセットできるのでadmin画面で認証情報を追加するときなどに使える
7月4週
土曜:
- デプロイについて
日曜
docker-compose でたてたMysqlのポートを変更する
my.cnf
,docker-compose.yml
に記載するmy.cnfはこんな感じ
[mysqld] character-set-server=utf8mb4 explicit-defaults-for-timestamp=1 general-log=1 sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_prepared_stmt_count=1048576 #default-time-zone='Asia/Tokyo' port=3305 [client] default-character-set=utf8mb4 port=3305
- docker-compose.ymlはこんな感じ
db: build: # dockerfileの名前だけ指定する dockerfile: Dockerfile # contextで場所を指定する context: ./mysql env_file: - .env command: > --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: - MYSQL_DATABASE=${DB_DATABASE} - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - MYSQL_USER=${DB_USERNAME} - MYSQL_PASSWORD=${DB_PASSWORD} - TZ=Asia/Tokyo ports: - 3305:3305 expose: - 3305 volumes: - ./dbdata:/var/lib/mysql
7月3週
とりあえずシステムトレードができるレベルまで作り込み完了
- 意外とすんなりできた。。。
土曜:
- 損切り機能作成
- 毎秒テーブルに書き込みしているので以下のように書き込み回数の上限をあげた。
show global variables like 'max_prepared_stmt_count';
で現状の数値を確認set global max_prepared_stmt_count=1048576;
たぶんこれがMax(64倍なのでよっぽどこれでOK)
日曜:
- 結局上記では起動時に初期化されてしまい上限がデフォルトに戻っていた
対応
- my.confをバインド
- ローカルのmy.confで
max_prepared_stmt_count=1048576
を追加
[mysqld] character-set-server=utf8mb4 explicit-defaults-for-timestamp=1 general-log=1 sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_prepared_stmt_count=1048576 [client] default-character-set=utf8mb4
月曜:
- golang
- ラベル付きfor文とgotoについて覚えた。goto便利。。。
火曜:
- caprese
storeの永続化
vuex-persistedstate
を使用- github.com
- 以下の感じでpluginsに登録してstoreを指定するだけ
// nuxt.config.ts plugins: [ { src: '~plugins/localStorage', ssr: false } ],
// localStorage.ts import createPersistedState from 'vuex-persistedstate' export default ({ store }) => { createPersistedState({ key: 'capreseStore', paths: ['authenticate', 'project', 'common'] })(store) }
参考
金曜:
default-time-zone='Asia/Tokyo'
mysql> show variables like '%time_zone%'; +------------------+------------+ | Variable_name | Value | +------------------+------------+ | system_time_zone | UTC | | time_zone | Asia/Tokyo | +------------------+------------+
- このやり方でできなくはないけど煩雑・・・
DockerのMySQLコンテナのタイムゾーンについて - Qiita
- 現状はdbコンテナ内で以下のようにしないとダメだ・・・
SET SESSION time_zone = 'Asia/Tokyo';
go側
jst, _ := time.LoadLocation("Asia/Tokyo") fmt.Println(jst.String()) fmt.Println(time.Now().In(jst))
7月2週
土曜:5h
caprese
- Nuxtにてjwtを使った認証をするときにauth moduleが便利そうなので使ってみる
- 基本は公式の通りで良さそう
個人開発
- 30秒用のテーブルを作成し1秒,30秒,1分,1時間のローソク足の管理用テーブルの作成が完了
- フロントはまだやる気にならないけどReactで以下のチャートライブラリを使用してチャートの表示とスタート・ストップくらいは行う
- github.com
- ちょうどいいのあったけど有料だったから1日でできなかったらコレ買おう
日曜:5h
個人開発
- 自動取引部分のロジック設計
月曜:11h
caprese
- 認証回り
火曜:11h
- カメラ系はhttpだと拒否されるらしい
- https化すればOK
caprese
- tokenはlocalStorageへついでにstoreの永続化
- hisasann.github.io
- qiita.com
水曜:11h
木曜:11h
金曜:11h
- caprese
- 認証系:localStorageへの保存