2021年4月26日月曜日

VMMap

 

名称説明
ImageEXEやDLLなど実行可能ファイルを示す
Mapped Fileディスク上のファイルに対応し、共有可能なメモリマップ度ファイルであることを示す
Shareable他のプロセスと共有可能なメモリを示す
Heapヒープ。アプリケーションのプライベートメモリ
Managed Heapマネージドヒープ。.NETランタイムによって管理されるプライベートメモリ
Stackスタック。関数のパラメータやローカル変数、呼び出し履歴を格納するのに使用される
Private DataHeap、Managed Heap、Stack以外
Page Tableカーネルモードのプライベートメモリ

2021年4月12日月曜日

C

 配列

  • 宣言:int data[] = {3,4};
  • 呼び出し:printf("%d\n",data[0]);
文字列の長さを求める
  • stringライブラリを使わないやりかた(終端文字を検索する)
    • for(int i=0;str[i]!='\0';i++);
  • string.hをインクルードするやりかた
    • strlen(str);

2021年4月8日木曜日

西暦変換

1925年~1999年の範囲

①89よりも大きいとき

→88を引けば平成になる。 例)1990→90-88=2:平成2年

②88よりも小さいとき

→25を引けば昭和になる。 例)1960→60-25=35:昭和35年


2000年~2099年の範囲

③18よりも小さいとき

→12を足せば平成になる。 例)2002→02+12=14:平成14年

④18よりも大きいとき、

→18を引けば令和になる。 例)2020→20-18=2:令和2年

2021年4月6日火曜日

C#

配列

  • 宣言 string[] team = {"a","b","c"};
  •  呼び出し string[1]
  • 配列の長さの取得 .Length
    • 例:string.Length
  • foreachで配列を回す
    • foreach(string job in team)
    • jobはその場限りの変数

Listクラス

  • 配列と異なり最初に要素数を決める必要がない
  • using System.Collections.Generic; 名前空間を追加すると使えるようになる
var team = new List<string>();
team.Add("勇者");
team.Add("戦士");
team.Add("魔法使い");

foreach(string str in team){
Console.WriteLine(str);
}
  • メソッド
    • Add
    • Insert
    • Remove

Parse

  • int.Parse() 対象をint型に変換する

string.Joinメソッド

  • 配列の内容を区切り文字を入れながら連結できる
  • Console.WriteLine(string.Join(":",team));

string.Splitメソッド

  • 文字列を指定した文字で分割して配列に収める
  • 詳しくはこちら(https://www.sejuku.net/blog/44242)
string str = "A B C";
string[] ary = str.Split(' ');



php

 paiza php学習まとめ

変数

  • 変数は$
  • .でつなげることが可能
    • echo $a.$b とかできる
    • echo $a."abc".$b みたいにして間に指定したリテラルを挟むことも可能

条件分岐、ループ構文

  • 基本Cと同じ

配列

  • $配列名 = array(要素1,要素2,要素3...);
  • 要素数の上限がバージョンで異なる
    • PHP4系は65535個
    • PHP5系は429467296個
  • 特定の要素の取り出し $配列名[要素番号]
    • 例:$team[1];
  • 要素の追加 $配列名[] = 追加内容
    • 例:$team[] = "ドラゴン";
    • いきなりこれをやっても配列は作られる
  • 要素のアップデートは追加の構文で要素番号を指定する
  • 要素の削除 unset($team[2])
    • unsetした要素番号だけ歯抜けになるので注意

連想配列

  • 0,1...ではなく文字列をキーとしたもの
  • Valueは文字列でも数字でも良い
  • 宣言:$item = array("ロングソード" => 2, "鉄の盾" => 1);
    • array関数を使わずに作る方法
    • $item = ["勇者","戦士","魔法使い"];
  • 要素の追加:$item["クリスタル"] = 3;
  • 要素の削除:unset($item["クリスタル"]);

配列のソート

  • sort関数を利用
    • sort($item);
    • 一文字目を取得して順番を並び替える
    • 一文字目が同じだった場合は二文字目で並び替える
    • 日本語ソート、ひらがな→カタカナ→漢字→全角数字の順で整列
    • 漢字の場合は文字コード順なので注意
  • 逆順は rsort関数を利用
    • rsort($item);

連想配列のソート

  • 連想配列にsortをかけると、通常の配列に変換されてしまう(使っちゃダメ)
  • asort:valueを小さい順に並べ替える
  • arsort:valueを大きい順に並べ替える
  • ksort:keyを小さい順に並び変える
  • krsoft:keyを大きい順に並び変える

二次元配列

  • 配列の中に配列を入れられる
    • $itemB = [$teamA[0],$teamA[1],$teamA[2]];
    • $itemB = [$teamA,$teamB,$teamC]; ABC=配列
  • print_rでもそのまま表示できる
  • 呼び出し:$teamB[0][1];
  • 直接の定義
$teams =
[
["勇者", "戦士", "魔法使い"],
["盗賊", "忍者", "商人"],
["スライム", "ドラゴン", "魔王"],
];
  • 配列の追加
    • 親要素に追加 $teams[] = ["A","B","C"];
    • 子要素の追加 $teams[0][] = "D";
  • 配列の削除
    • 親要素ごと削除 unset($teams[0]);
    • 子要素の削除 unset($teams[0][1]);
  • 二次元配列のforループ
for ($i = 0; $i < count($teams); $i++) {
for($j = 0; $j < count($teams[$i]); $j++) {
  • 二次元配列のforeachループ
foreach ($teams as $row) {
foreach ($row as $col) {
  • 二次元配列をarray関数で作成する
$teams = array(
array("勇者", "戦士", "魔法使い"),
array("盗賊", "忍者", "商人"),
array("スライム", "ドラゴン", "魔王"),
);

foreach文

  • foreach($ary as $value){}; $value = バリューを代入する変数
  • キーも同時に取り出す場合
    • foreach($ary as $key => $val){}; $key=キーを代入する変数、$val=valueを代入する変数

array_fill関数

  • 配列を指定した値で埋める
  • array_fill(0,20,"森"); index=0から20個分作る
  • array_fill(0,10,array_fill(0,20,"森")); 入れ子にもできる

rand関数

  • rand(1-5);とかすると指定した範囲内で乱数を作れる
  • 詳細はこちら(https://www.php.net/manual/ja/function.rand.php)

date関数

  • 指定された引数 timestamp を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返す
  • timestampが与えられない場合は現在時刻を返す
  • 詳細はこちら(https://www.php.net/manual/ja/function.date.php)

fgets関数

  • fgets(STDIN) paizaではこう
  • ファイルポインタから一行取得する
  • もう一度実行すると次の行に移動する
  • 詳細はこちら(https://www.php.net/manual/ja/function.fgets.php)

trim関数

  • 文字列の先頭および末尾にあるホワイトスペースを取り除く
  • 改行コードも取り除くことができる
  • 詳細はこちら(https://www.php.net/manual/ja/function.trim.php)

print_r関数

  • 指定した配列、変数に関する情報をわかりやすく出力する
  • 詳細はこちら(https://www.php.net/manual/ja/function.print-r.php)

var_dump関数

  • 配列の型を確認できる

explode関数

  • カンマでCSVを区切って分割などができる(指定した文字で分割する)
  • 分割して配列に入れられる
    • 例:$array = explode(",",$input);

count関数

  • 配列のすべての要素の数を調べる
  • count($array);
  • 二次元配列でも利用可能
    • count($array); count($array[0]);

インクリメント・デクリメント

  • ++やーーが使用可能

比較演算子

  • == > < >= <= !=
  • 型まで比較して同一なのか厳密な確認をする場合は === が使用できる

標準入力に値が入っている限り処理を継続

while($input = fgets(STDIN)){
    $array[] = trim($input);
}

※trimすると改行コードも消えるので、空白行への対応ができなくなる(trimを格納寸前で行えば標準入力読み込み時に空白行でストップするのを防げる

function文

  • function say_hello()
  • function say_hello($x,$y)
  • 引数省略の場合のデフォルト値は関数定義の際に変数=で直接書いておける
    • function say_hello($x = "こんにちわ")
  • 戻り値はreturnで返す
  • PHPでは小文字を使うことが多い
  • 動詞+名詞がスタンダード
  • 関数定義の前でも後でも変わらず動作する

クラス

  • オブジェクト=変数とメソッドがセットになったもの
  • オブジェクトの中にある関数はメソッドに変わる
  • クラス内の変数=メンバー変数と呼ぶ
  • phpではオブジェクトとインスタンスは同義
  • 変数とメソッドがセット→バグが出にくい
  • クラスとオブジェクトに分離→再利用しやすい
  • クラス名の最初の文字は大文字にする
  • クラスの実体化とメソッドの呼び出し
    • newで実体化して、ー>でメソッドを呼び出す
    • 内部の変数にアクセスする際は->$の$は不要なので注意
// クラスを作成する
class Player {
public function walk() {
$message = "勇者は荒野を歩いていた。";
echo $message;
}
}

$player1 = new Player();
$player1->walk();

  • コンストラクタ
    • public function __construct($name)で使用
class Player {
private $myName;
public function __construct($name){
$this->myName = $name;
}
public function walk() {
echo $this->myName . "は荒野を歩いていた。" . "\n";
}
}
$player1 = new Player("戦士");
$player1->walk();

$player2 = new Player("魔法使い");
$player2->walk();

$player1->walk();
  • インスタンスを配列に格納することもできる
$enemies[] = new Enemy("スライム");
$enemies[] = new Enemy("モンスター");
$enemies[] = new Enemy("ドラゴン");
foreach ($enemies as $enemy) {
$enemy->attack();
}
  • 引数と戻り値のあるメソッドを作る
    • returnで値を返すfunctionをメソッドとして持たせれば良いだけ
class Item {
public $price;
public $quantity;

public function __construct($newPrice, $newQuantity){
$this->price = $newPrice;
$this->quantity = $newQuantity;
}

public function getTotalPrice() {
return $this->price * $this->quantity;
}
}

$apple = new Item(120, 15);
$total = $apple->getTotalPrice();
echo "合計金額は" . $total . "円です。\n";
$orange = new Item(85, 32);
echo "合計金額は" . $orange->getTotalPrice() . "円です。\n";
  • アクセス修飾子
    • public:外からでも呼び出し可能
    • private:同じクラスの中から呼び出し可能
  • static修飾子
    • メモリ上に展開されたままになる
    • 全てのインスタンスで共通して利用ができる(オブジェクトを作成する必要はない)
    • $thisは自分のインスタンスを表す指定なので、staticの呼び出し時は使わない
    • 代わりにself::$taxのようにselfを使用する selfは自分のクラスという意味
    • インスタンスを指定するのか、クラスを指定するのかで異なるので注意
    • static宣言されたクラス内のメソッドを呼び出すには Item::getTotalAmoutみたいにする(selfの代わりにクラス名が指定されるだけ)

クラスの継承

  • クラスの継承時はクラス宣言時に「extends 親クラス」をつける
  • 継承元を親クラス、スーパークラスと呼ぶ
  • 継承した子どもは子クラス、サブクラスと呼ぶ
  • 子クラスで定義されていないクラスが呼び出された時、親クラスの方を見に行くようになっている
  • コンストラクタも親のものを継承するので、子クラス側では宣言なしでも良い
<?php
// クラスを継承する
class Box {
public $myItem;

public function __construct() {
$this->myItem = "新しいアイテム";
}

public function open() {
echo "宝箱を開いた。".$this->myItem."を手に入れた。\n";
}
}

class JewelryBox extends Box {
public function look() {
echo "宝箱はキラキラと輝いている。\n";
}
}
$box = new Box();
$box->open();
echo "\n";
$jewelryBox = new JewelryBox();
$jewelryBox->look();
$jewelryBox->open();
?>
  • メソッドのオーバーライド
    • 親クラスのメソッドを子クラスで再定義する
    • 単に子クラス側で同じ名前のメソッドを定義するだけ
<?php
// メソッドのオーバーライド
class Box {
public $myItem;

public function __construct($item) {
$this->myItem = $item;
}

public function open() {
echo "宝箱を開いた。".$this->myItem."を手に入れた。\n";
}
}
class MagicBox extends Box {
public function look() {
echo "宝箱は妖しく輝いている。\n";
}
public function open() {
echo "宝箱を開いた。".$this->myItem."が襲ってきた!\n";
}
}

$box = new Box("鋼鉄の剣");
$box->open();

$magicBox = new MagicBox("モノマネモンスター");
$magicBox->look();
$magicBox->open();
?>






2021年4月5日月曜日

VPC

VPCまとめ 

出典




  • AZ(アベイラビリティ・ゾーン)
    • データセンターの範囲のこと
  • リージョン
    • AZを束ねたもの
VPC=ネットワーク
マルチVPC
マルチアカウント
権限の管理によって変わる
1リージョンに最大5つのVPC
小さなネットワークにサブネットで分ける

データセンターを跨いでサブネットは分けられない

VPCのアドレスレンジ 16-28までしかサブネットできない

インターネット接続可・インターネット接続不可

故障に備えてAZ1とAZ2で同じ構成のサブネットを取る


AWS

 AWSとは

Amazonのクラウドサービス

EC2(仮想サーバー)

ストレージサービス

200種類以上も様々なサービスを提供


代表サービス例

  • Amazon
  • Cousera
  • Netflix
  • ソニー銀行
  • 自治体、公共団体

AWSのメリット

メリット

  • 手軽に利用を始められること
  • 小規模→大規模 に柔軟に拡張
  • 初期費用が安い
  • 運用をサービス提供者に任せられる(責任共有モデル)

デメリット

  • ハードウェア機器の構成に制約がある(特殊な要件には対応できない)→一部利用者機器の持ち込みが可能なところもある
  • 大規模運用の場合、維持費用が高額になる場合がある(時間単価が高額になるので、比較するとクラウドの方が高額になる場合が多い)

AWSとほかのサービスの違い

  • アジュール等と比べて機能が特段充実しているわけではない(基本的に追従するので)
  • AWSは運用実績が長いため信用性がある
  • しばらくは大丈夫

学習方法

書籍

  • AWS しくみと技術がしっかりわかる教科書
  • AWS認定クラウドプラクティショナー 認定資格試験テキスト
  • クラウドエンジニア養成読本

セミナー

  • connpass
  • TECHPLAY
  • ストリートアカデミー

AWSサービス

  • EC2:仮想サーバー 例:オンプレサーバーの移行や数か月程度の短いプロジェクト、災害配置対策での分散配置
  • EBS:Elastic Block Store EC2のドライブ(記憶保存)
  • S3:EBSと比較して容量制限がなく価格が安価 仮想サーバーのドライブとしては使えない 99.9999%の高可用性 静的なWEBの表示も可
  • Aurora:データベースの初期構築、設定、バックアップが自動化されている Auroraはクラウド向けに進化したDBパッケージ(AmazonRDSは従来のDBをインストールして使用するタイプ) オンプレのDBをクラウド移行することが可能
  • DynamoDB:非定型のデータを格納できるNoSQLデータベース 拡張性にすぐれ、高性能と低遅延を保ちながら、データベースの性能を増強させることができる データベースに対する読み込みや書き込みが多数並走する環境での採用事例が多い(例えばECサイト等)
  • Lambda(ラムダ):サーバレスのプログラム実行環境
  • VPC:AWS内のネットワークを論理的に分離でき、相互のルーティングやアクセス制御を設定できる サービスの規模を柔軟に拡張したり、耐障害性を高めたりするのに利用される ルーティングサービスのRoute53と組み合わせて利用されることが多い
  • SageMaker:機械学習のサービス ほかにもPolly Translate Rekognitionなどがある
出典


2021年3月19日金曜日

VS2019備忘録

 VS2019備忘録

アプリケーション構成ファイル(Web.config)

  • Webアプリケーションで利用する設定情報をXMLで保存したもの(環境変更に強くなる)
  • プロジェクト新規作成時に自動的に生成される
  • DBへの接続情報は<connectionStrings>タグに記述される
  • DBサーバーを変更したい場合はこちらを書き換えるだけで良い

ポストバック(ASP)

  • ASPでは、ボタンコントロールはASPタグで配置されている
  • 通常のHTMLボタンではなく、サーバーコントロール
  • 実行時にはsubmitのinputタグに変換される
  • 通常のHTMLではボタンを押すたびにフォームの内容がリセットされてしまう
  • ASPでは「ビューステート」と呼ばれるhiddenのinputタグとして値を保存しているため、ボタンを押しても内容が復元される(各コントロールの状態も復元される)
  • 通常は、ポスト→処理後のページに遷移 ASPは、データ送信・処理を行い自身のページに戻る

日付のカスタム書式

書式指定子説明出力例
yyyy4けたの年2004
yy0埋め2けたの年04
MM0埋め2けたの月08
dd0埋め2けたの日24
ddd曜日の省略名(カルチャに依存)
dddd曜日の完全名(カルチャに依存)火曜日
HH0埋め2けたの時間(24時間表記)20
hh0埋め2けたの時間(12時間表記)08
mm0埋め2けたの分23
ss0埋め2けたの秒06
引用:https://www.atmarkit.co.jp/ait/articles/0408/27/news104.html

  • フィールドバインドで形式を指定する時は、{0:yyyy/MM/dd}のように指定
  • 文字列への変数埋め込みをするため0:みたいな書き方になる(https://blog.hiros-dot.net/?p=6407)
  • 詳しくは(https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings)

ディティールビューとフォームビュー

  • ディティールビューは簡単にきれいなレイアウトのカード型を作成できるが、テンプレートの編集機能を利用して自由なレイアウトを組むことはできない
  • ディティールビューは項目数の少ないデータを簡単に表示したい場合に使う
  • 詳細に設計する場合はフォームビューを使う
  • ディティールビューについてはこちら(https://www.atmarkit.co.jp/fdotnet/dotnettips/840aspdetailsview1/aspdetailsview1.html)

HyperLinkフィールド

  • DataNavigateUrlFields:遷移先のフォームでデータを表示するための値を示す列名(例:customerID)
  • DataNavigateUrlFormatString:遷移先のWEBフォームのアドレス(同一フォルダの場合はプログラム名のみでOK)(例:CustomerCard.aspx?id={0} ?以降はクエリ文字列となる id=customerIDとしても良いが、id={0}とするとDataNavigateUrlFieldsで入力した値となる)
  • DataTextField:グリッドビューの一覧に表示する列名(例:customer_name)
  • SortExpression:並べ替えに使用する列名(例:customer_name)
  • HeaderText:グリッドビューの一覧における項目名(例:顧客名)
  • 呼び出される側の処理
    • DBの抽出条件でQueryStringを設定する(URLでid=で呼ばれる場合はidとする)→呼び出し側のクエリ文字列のパラメータと同じにする

CommandNameプロパティ

  • ボタンやリンクボタン等をクリックしたときに実行するコマンドを指定する
  • Editとすると編集用テンプレートを表示する
  • Newと指定すると新規追加用テンプレートを表示できる
  • Edit→編集モード
  • New→挿入モード
  • Insert→入力された内容でデータを挿入する
  • Update→入力された内容でデータを更新する
  • Delete→データを削除する
  • Cancel→ユーザーの操作を取り消して表示モードに戻る

フィールドのバインドが選択できない場合

  • 表示形式を{0:yyyy/MM/dd}にしたいのにフィールドのバインドが選択できない場合は、カスタムバインドのコード式ボックスに直接入力を行う(今回の例だとBind("first_action_date","{0:yyyy/MM/dd}"))

EvalとBindの違い

  • Bindメソッドは、データベースとの双方向(読み取り・書き込み)のバインディング(結合)を可能とするもの
  • Evalメソッドは、読み取り専用のため更新はできない

AppendDataBoundItemsプロパティ

  • ドロップダウンリストで使用する
  • 参考(https://blog.jhashimoto.net/entry/20110225/1298589836)
  • 使用時の問題点(http://natchan-develop.seesaa.net/article/49164594.html)

CommandNameプロパティ

  • Updateと指定 → フォーム上のBindメソッドが指定されたコントロールのデータを更新する
  • Cancel → キャンセルして編集を終える
  • Insert → コントロールに登録された値を利用して新規追加する(データソースに指定したInsertステートメントを利用)
ページロード時にクエリ文字列idが指定されているかどうかを判定して、指定がない場合は新規追加用テンプレートを表示する

Updateボタン、リンククリック後の処理の流れ

  • 「ItemUpdatingイベント」→「データベースの更新」→「ItemUpdatedイベント」

SQL文備忘録

 SQLステートメントの備忘録

角括弧[]の使い方

  • 列名などに特殊な名称(ハイフンなどの記号、数字から始まる)の場合はエラーになるので、それを防ぐために列名が括弧で囲われる(VS2019ではDBから読み込むSQL文は自動でつくようになっている)
ワイルドカード指定
  • 「%」がワイルドカード指定になる(ほかにも「_」があるが、「%」は0個以上の文字、「_」は1個の文字を表す)
  • 文字列+'%'とすれば文字列前方一致、'%'+文字列とすれば後方一致、'%'+文字列+'%'なら部分一致となる
  • VS2019のWHERE句の追加でパラメータのプロパティの部分の規定値は「%」にしておけば最初すべてが表示されるようになる
  • ワイルドカード文字はDBによって異なる → ACCESSの場合は「%」→「*」、「_」→「?」に置き換える必要がある

HTML5 & CSS3備忘録

HTML5とCSS3についての備忘録

HTML5

HTML5の思想

  • HTML5では見栄えに関する設定はすべてCSSに任せることになった→ HTML5準拠のためにはCSSは必須
    • 例:tableのcellpaddingやcellspacingはHTML5では非推奨
    • cellspacing1はtable-collaspeで代用できる

CSS3

複数classを適用する

  • class指定時にスペースで繋ぐ

IMEモードについて

  • IMEモードは現状MS系のブラウザ以外では使用できない
  • 業務では非常に便利なので、MS系ブラウザでの使用前提なら使ってもよい

2021年3月10日水曜日

SQLのN+1問題備忘録

N+1問題とは

ループ処理の中でSQLを発行 → 大量増殖(ねずみ講式)


回避方法

  • JOINする → 予めJOINしてテーブルをくっつけておく
  • Eager Loadする → 予めSELECTで引っ張っておく
大量の別テーブルをループで回していくから増殖する

EagerLoadとLazyLoadの違い

EagerLoad



先にがばっとセレクトしておく方法

LazyLoad

都度都度SQLを発行する(ねずみ講式)

当たり前だが、EagerLoadの方がパフォーマンスが速い(SQLの発行数が少ない)

対策時の注意点

  • メモリオーバーする可能性がある(スワップの発生)
  • 必要に応じて件数を区切りながら処理する必要がある

出典