開発日報

IT・WEB系備忘。日報は嘘です。

テストダブルの原則 ② ~テストダブル利用のテクニック~

テストダブル利用のテクニック モッキングフレームワーク モッキングフレームワーク:テストダブルをテスト内で容易に作成できるようにするフレームワーク。 C++では「google mock」、pythonでは「unittest.mock」などがある。 モッキングフレームワークはオ…

テストダブルの原則 ① ~概要と導入について~

テストダブルの原則 ユニットテストはコードが複雑になるに連れて、書くのが難しくなってくる。 また、本番のコードがいくつもの外部APIを呼び出していたり、その結果をDBに保存していたりする場合、それらの挙動を本番コードのみのユニットテストだけで再現…

【忘備】ブロックチェーン基礎 ~ブロックチェーンのトランザクション~

ブロックチェーンのトランザクション まず、トランザクションがあって そのトランザクションが一連の手順を踏んで最終的にブロックチェーンに格納される。 ブロックをネットワーク全体にブロードキャスト 各ノードは受け取ったブロックを検証する [Q.] なぜ…

【忘備】Terraform基本構文 ~外部から変数値を与える~

変数の上書き方法 外部から変数値を与える方法は3種類 環境変数:環境変数へあらかじめ設定してある値を利用 TF_VAR_【Name】 変数ファイル:あらかじめ決められた変数ファイル名のファイルに指定 terraform.tfvars コマンド引数:以下のコマンド引数で指定…

【忘備】イーサリアム基礎 ~Web3 (js) とは何か~

Web3とは何か web3 : イーサリアムをリモートまたはローカルで操作するJSライブラリ。Dappとブロックチェーンをやり取りするためのAPIを提供する。 イーサリアムブロックチェーンとスマートコントラクトの橋渡しをする(JSON-RPC) フロントエンド、Web3、ブ…

【忘備】Terraform基本構文 ~変数とデータ型~

変数 HCL2で利用可能な変数は2種類 locals : ローカル変数。プライベートな変数で外部から変更はできない。 variables : 外部から変更可能な変数。コマンドライン実行時にオプションやファイル指定で上書きできる。 locals の定義と参照 「localsブロックで…

【忘備】グーグルのソフトウェアエンジニアリング ~ ユニットテスト ③ -明確なテストを書く- ~

明確なテストを書く まず、初めに申し上げておきたいのはテストの失敗は良いことである。 なぜなら、失敗したテストは、エンジニアに有用なシグナルを提供し、ユニットテストが価値を提供する方法のうち主要なものだからである。 テストの失敗理由 テストの…

【忘備】Angular チートシート

nodeバージョン切り替え(n) 参考 $ sudo n list node/12.18.2 node/14.15.4 $ sudo n 14.15.4 新規プロジェクト作成 $ ng n <project-name> コンポーネント作成 $ ng g component <directory/component-name> --routing モジュール作成 コンポーネントをまとめてモジュールとして定義できる。 $ ng </directory/component-name></project-name>…

ブロックチェーン基礎 ~ マークルツリー ~

マークルツリー マークルツリー:バイナリハッシュ木の1種。ペアのデータをハッシュ化し、そのハッシュ値をさらにハッシュ化するといったことをマークルルートと呼ばれるルートノードまで繰り返す。 イメージ H() : ハッシュ関数。 木のどの位置を改ざんして…

ブロックチェーン基礎 ~ ブロックチェーンの構造 ~

ブロックチェーンとは ブロックチェーン:ブロックがチェーンのようにつながったデータ構造 ここでのブロックは、単一トランザクションあるいは1つにつながった複数トランザクションを意味する。 ハッシュポインタ:データブロック自体のハッシュ値。前伊の…

【忘備】グーグルのソフトウェアエンジニアリング ~ ユニットテスト ② -脆いテストを防ぐ- ~

脆いテスト: バグのない無害かつ無関係な変更で壊れるてすと。 変化しないテストを目指す 脆いテストを防ぐため、理想的には「変化しないテスト」を目指す。 → 仕様変更以外の理由で変更しないテストのこと。 プログラム変更の要因 ここではテスト変更の要…

【忘備】イーサリアム基礎 ~ イーサリアム仮想マシンとコード実行 ② -コントラクト実行詳細- ~

スマートコントラクト作成から利用まで 動作フロー (Solidityなどで)スマートコントラクトを書く スマートコントラクトをEVMバイトコードにコンパイルする EVMバイトコードでネットワークにコントラクト作成トランザクションを送る 動作結果 デプロイされ…

【忘備】イーサリアム基礎 ~ イーサリアム仮想マシンとコード実行 ① -概要説明- ~

イーサリアム イーサリアムはプログラム可能なブロックチェーンであり、ユーザーが任意の独自性のある複雑な処理を作成することができる。 EVM EVMはスマートコントラクトのランタイム環境として既往するイーサリアムの実行エンジンである。 全ノードがEV…

【忘備】グーグルのソフトウェアエンジニアリング ~ ユニットテスト① -テストの保守性- ~

Googleにおけるユニットテストの定義 Googleがテストを分類する際に使用する2つの軸 テスト規模:テストにより消費されるリソース、テストが実行されている内容に焦点を当てる テスト範囲:テストが検証を意図する実装コードの量 また、Googleにおけるユニッ…

【忘備】グーグルのソフトウェアエンジニアリング ~ テスト概観 ③ -テスト文化- ~

グーグルのテスト文化醸成のための取り組み 1. オリエンテーション 当初、Googleの新入社員向けのオリエンテーションにはテストについての講義は存在しなかった。が、2005年ころからオリエンテーションの講義に自動テストについての講義が組まれるようになっ…

【忘備】グーグルのソフトウェアエンジニアリング ~ テスト概観 ② -テスト品質- ~

コードカバレッジ テストにおいて、 コードカバレッジ:ある機能のコードのどの行がどのテストにより実行されるか計測する指標。 この指標はあくまでもテストによって実装コードがどの程度実行されているかを確認しているにすぎず、「コードの有用性」を表す…

【忘備】グーグルのソフトウェアエンジニアリング ~テスト概観① -概観解説-~

なぜ自動テストをするのか バグは補足されるのが開発サイクルの後ろになるほど修正のコストが高くつく。開発サイクルの早い段階で高速に自動化テストを回し、バグを捕捉したい。 また、「バグをほそくすること」はテストの同期の一部に過ぎない。ソフトウェ…

【忘備】イーサリアム基礎 ~コントラクト作成トランザクション~

イーサリアム上で実行されるトランザクションには複数種類あるが、今回はコントラクト作成トランザクションについて解説する。 初期化 まずは、すべての種類のアカウントが持つ4つの領域を初期化する * 「ナンス」は最初は0 * 「(アカウント)残高」は送信…

【忘備】イーサリアム基礎 ~イーサリアムのスマートコントラクト~

概要 ただの暗号資産であるビットコインとは異なり、イーサリアムはスマートコントラクトを活用することで多彩な処理が実行可能。 スマートコントラクトの特徴は大まかに以下の通り。 スマートコントラクトはブロックチェーンの中に置かれる スマートコント…

【忘備】イーサリアム基礎 ~ガスとトランザクションコスト~

はじめに イーサリアムブロックチェーン上でトランザクションを実行するためには、トランザクションに伴うコストを実行者が負担しなければならない。 この「コスト」の概念が何を意味するか、またコストの算出・支払いの仕組みについて以下の本文で説明する…

【マイクロサービス】サーガ概説

課題 DBが分散した状態でシステム全体としてデータ整合性どのようにして担保するのか(複数サービスにまたがったトランザクション制御どうやる)? 対策 1. 「2層コミット」を使って担保する 分散データベースに対してデータベース間の整合性を担保する方法。 …

【マイクロサービス】APIゲートウェイ概説

マイクロサービスにおける課題 クライアントからみたアクセス先のエンドポイントが複数になる。 サービスの数が増えるとアクセス先の管理、ルーティングが複雑になる 各サービスが共通で行う処理をすべてのサービスに実装すると冗長になる (店舗検索、予約…

【マイクロサービス】サービスディスカバリー概説

課題 マイクロサービスにおけるサービス内の個々のインスタンスは負荷の状況において動的に生成・破棄される。 動的に生成されるインスタンスへのルーティングはどのように行われるか? 対応 マイクロサービス群の内部にサービスディスカバリーが存在し、そ…

【マイクロサービス】サーキットブレーカー概説

課題 サービス間通信における課題として、マイクロサービス内の通信経路上の特定のAPI(サービス)が停止してしまった場合 * サービス間通信のリクエストがタイムアウトまで待たされる * 結果として、ユーザビリティが著しく低下する 対策 サーキットブレー…

【マイクロサービス】メッセージブローカー概説

マイクロサービスにおける課題 複数サービスが直列に連携されている場合、 直列に接続しているサービスのどれか1つがダウンすると、サービスとしての機能が正常に動作しなくなる 稼働率が下がる なので、直列に連携されているサービスがそれぞれ同期的何連…

Update Chrome for Ubuntu

Upgrade Chrome from Command Line on Ubuntu · GitHub

データマネジメントメモ

1. データストレージとオペレーション データベースの保守管理。 データウェアハウス製品 DWHのせんていにあたって。 サーバの保守運用にリソースを費やしても、ビジネス面での課題解決には直接寄与せず、増え続けるデータやユースケースに対応するために、 …

NodeJsでイーサリアム触ってみる

概要 こちらの公式サイトが参考になります。 ドキュメントやチュートリアルも豊富です。 ある程度ブロックチェーンの仕組みがわかっているとよいです。 今回のサンプル完成品はこちら。 準備 infuraサービス登録 今回Infuraというサービスを利用します。 開…

Kotlinで簡易的なブロックチェーンサービス(ビットコイン的)を作ってみた

以下、ReadMeのそのまま貼り付けで。。 こちらがリポジトリ 参考 : 現役シリコンバレーエンジニアが教えるPythonで始めるスクラッチからのブロックチェーン開発入門 解説 TODO 起動 # 起動 $ docker-compose up # 停止 $ docker-compose down http://localho…

【備忘】3大クラウドによるインフラ構成を考える際に使えるリンク

ちゃんと読んでないし、小生はAWSくらいしかまともに使えないが、、 勝手に3大クラウドとかいってるけど、AWS GCP AZUREで良いんだよね? AWS アーキテクチャセンター (AWS) 形で考えるサーバーレス設計 Google Cloud ソリューション デザインパターン Azure…