通信に関する理論

高速通信回線を支える多重化方式 高速の通信回線を同時に複数の利用者で使用できるようにする技術。 周波数分割多重化方式(FDM: Frequency Division Multiplex) アナログ回線で用いられる 複数利用者の信号を異なる周波数の信号に変調して、同時に送信する…

情報に関する理論

文字コード体系 1. ASCII(アスキー)コード アメリカ規格協会(ANSI)が制定した文字コード 1文字を7ビットの符号とバリディティビット(誤り検出用ビット)の8ビットで表す。 128種類(0~127=7ビット)の文字(0~9, A~Z, a~z, 各記号, 制御文字)が収録さ…

【離散数学】シフト演算

シフト演算 シフト演算は、桁を左右にずらすことでべき乗の計算をする方法。ひいては乗算や除算を行うことができる。 2進数のシフト演算 左にnビットシフト:元の数値の2n倍になる 右にnビットシフト:元の数値の2-n倍になる 論理シフトと算術シフト シフト…

【離散数学】2進数による文字としての数字の表現

文字としての数字 キーボードから入力した数字は10進数の文字として扱われる。これは表示用途としての10進数であり、10進数の体系を残したままのコード形式で記録される。なお、計算用途では内部で2進数に変換される。 10進数を表すコード体系 1. BCDコード…

【離散数学】2進数によるさまざまな数値の表現

ビットとバイト コンピュータが処理を行うときのデータの最小単位をビットという。ビットは2進数1桁を表すbinary digitの略。 さらに8ビットをひとまとまりとして扱う単位がバイトという。 固定小数点数形式 2進数を使った数値の表現方法の一つ。 - 表現する…

【離散数学】コンピュータで扱う「数」の工夫

コンピュータの個々の回路自体は電流が流れていないと流れているの二つの状態しか持たない。そこで、全てのデータを0と1の二つの数字のみで扱う2進数に置き換えている。 2進数 0と1の2種類の数字を使い、1の次に桁上がりをする。 基数 1つの桁が取りうる値の…

【AWS】仮想マシン: EC2インスタンスの起動と接続

AWS

仮想マシンについて 仮想マシン(VM)は物理マシンの一部であり、ソフトウェアによって同じ物理マシン上のほかの仮想マシンから切り離されている。 CPU, メモリ, ネットワークインターフェース, ストレージで構成されている。 物理マシンはホストマシン、ホ…

ドメインオブジェクトとWeb API

データ形式とドメインオブジェクトを変換する際に起こる不一致 JSONとドメインオブジェクトを単純に変換するだけでは、以下の不一致がある場合不都合になる。 関心事の不一致 ドメインオブジェクトの持つ全ての情報がAPIを利用する側で必要とは限らない。ま…

画面とドメインオブジェクトの設計を連動させる

関心事を分けて整理する 画面アプリケーションのコードが複雑になる要因は次の2つ。 画面そのものが複雑 画面の表示ロジックと業務ロジックが分離できていない 次の方針で関心事を整理すれば、画面アプリケーションの複雑さを改善し、変更を楽で安全にでき…

オブジェクトの設計とテーブルの設計

オブジェクトとテーブルは似てくる オブジェクトとテーブルはほぼ一対一に対応することがあるが、設計のアプローチや設計を変更する動機が本質的に異なる。 オブジェクトはプログラムのロジックを重複させないための仕組みで、データとロジックの組み合わせ…

ドメインモデルによる機能の実現

アプリケーション層のクラス アプリケーション層の役割は以下 プレゼンテーション層の依頼を受ける 適切なドメインオブジェクトに処理を依頼する プレゼンテーション層に結果を返す データソース層に入出力を指示する アプリケーション層のクラスは業務サー…

ドメインモデルの設計

ドメインモデルの作り方 1 部分を作りながら全体を作っていく オブジェクト指向のアプローチとして、個々の部品を作り始め、それを組み合わせながら全体を構築していく ある部分に注目してその部分に必要なデータとそれを使ったロジックを一緒に考え、クラス…

業務ロジックの整理 〜三層+ドメインモデルの構築〜

クラスとはデータとロジックを一つのプログラミング単位としてまとめるための仕組みであり、データをインスタンス変数として持ち、それに対するロジックをメソッドに書くのがオブジェクト指向におけるクラスの本来の使い方である。 データとロジックを別のク…

場合分けロジックの整理

場合分けロジックの望ましい書き方 判断や処理のロジックをメソッドとして独立させる elseをなくす(早期リターンする=ガード節にする)とコードが簡潔になる インターフェースを使って異なるクラスを同じクラスとして扱う クラスを区別するための場合分け…

ソースコードの整理

プログラムの変更が楽になる書き方 変数名・関数名にはわかりやすい名前を使う 長いメソッドは段落を分ける 段落をメソッドとして独立(抽出)させてもよい 変更箇所をそのメソッド内に限定できる(そのロジックを他の場所でも使うことになると、変更箇所が…

コントローラのユニットテスト

コントローラテストの概要 tests/TestCase/Controller 配下に テストクラスの ファイルを作成する。以下はArticlesコントローラに対するテストクラスArticlesControllerTestクラスの作成例。

テーブルクラスのテスト

Articleテーブルのテスト。公開済みの記事を取得するfindPublished()メソッドを持つ。 where([ $this->alias() . '.published' => 1 ]); return $query; } } tes…

フィクスチャ

フィクスチャ テストコードの挙動がデータベースやモデルに依存するとき、テストに使うためのテーブルを生成し、 一時的なデータをロードするために フィクスチャを使うことができる。 フィクスチャを使うことにより、 実際のアプリケーションに使われている…

テスト

テストケースの規約 テストを含むPHPファイルは、 tests/TestCase/[Type] ディレクトリーに置く ファイル名はFooBarTest.php とする テストを含むクラスは Cake\TestSuite\TestCase 、 Cake\TestSuite\IntegrationTestCase または \PHPUnit\Framework\TestCa…

PSR-12

PHP

Declare Statements, Namespace, and Import Statements 各ブロックは以下の順序で記述する。 開始タグ ファイルレベルの DocBlock 1つ以上の宣言ステートメント ファイルの名前空間宣言 1つ以上のクラスベースの use インポート文 1つ以上の関数ベースの…

トレイト

PHP

トレイトの基本 トレイトとは、メソッドやプロパティをまとめて切り出しておくための仕組み。「断片的なクラス」のようなもので、自分自身をインスタンス化することはできない。 starting; } } ?>

定数

PHP

クラス定数へのアクセス クラス名::定数でアクセスする。同クラスからは、self::定数でアクセスする。 cakePHPにおいて、他クラスの定数にアクセスする際の実装例。

エラーと例外処理

cakePHPでは、エラー処理と例外処理が用意されている。PHPエラーはトラップされ、表示またはログに記録される。キャッチされなかった例外はエラーページに自動的にレンダリングされる。 例外処理の設定 例外処理の設定はconfig/app.phpで行われる。デフォル…

コレクション

コレクションクラスは、配列(またはTraversableオブジェクト)を操作するためのメソッドを提供する。 コレクションの生成 反復処理に関するメソッド each コレクション内の各オブジェクトに対して関数を実行する。 each(function ($value, $key) { echo "…

フォームコントロール

フォームコントロールの生成 control('フィールド名', [オプション配列]); を使うと完全のフォームコントロールを生成できる。 Form->create($user); echo $this->Form->control('username'); echo $this->Form->control('password'); // 'approved' を date…

フォーム

フォームの開始 エンティティの新規登録と編集フォームはどちらも以下のロジックから開始される。 $articleが空のエンティティの場合、新規登録フォームが生成される。 $articleが既存のエンティティの場合、エンティティの編集フォームが生成される。 Form-…

アソシエーション

アソシエーション アソシエーションはテーブルオブジェクトの initialize() の中で定義される。関連付けたいテーブルのエイリアスをメソッドに渡す。デフォルトでは belongsTo('Authors'); } } ?> 関連付けたいテーブルのエイリアスをbefongsToメソッドに渡…

データの削除

エンティティの削除 deleteメソッドでエンティティを削除する。 Articles->get(2); $result = $this->Articles->delete($entity); ?> 連鎖削除 エンティティーを削除するとき関連データを削除することもできる。テーブルの初期化メソッドにおいてHasOne や H…

データの保存 ~リクエストデータからアソシエーションを保存する~

リクエストデータのエンティティへの変換 getData()で取得したリクエストデータをnewEntity()に渡し、エンティティに変換。 newEntity($this->request->getData()); ?> 複数のエンティティを変換する場合、newEntities()を用いる。 '一番目の投稿', 'publis…

データの保存

データの新規作成 データの新規作成は以下の流れで行われる。 newEntity()でエンティティをビルド エンティティのプロパティに値をセット save()でエンティティを保存 get('Articles'); $article = $articlesTable->newEntity(); $article->title = '新しい…