5/15(金)〜18(月) の学習ログです(主にC言語)

こんばんは。

いつもありがとうございます。

安藤です。

今日はこんな時間に更新です。

 

ここ数日は雨が続いていて少し肌寒いです。

外出の予定がなければ、雨はけっこう好きです。

音や匂い、雰囲気などが好きです。

 

ここには僕の個人的な学習ログをあげております。

 

2020.5.15(金) 
 
C言語(ドットインストールより)
●変数
これはデータにつけるラベル。
データ型の種類
・int(整数)  %d
・float(実数)  %f
・char(1文字)  %c
※他にも色々あるってよ。
 
使い方は、宣言して、代入する。
・int x = 10;
・float y =5.2;
・char  c = “A”;
 
 printf(“x = %d, y = %f, c = %c\n”, x, y, c);
 
 
 
C言語(web記事「苦しんで覚えるC言語」)
●while文
while(条件式) {
繰り返す文;
}
 
ループ回数が分からない場合は、条件式だけのwhile文が便利。
while文は、for文の条件式だけと同じ。
 
●do~while文
後判定と先判定
C言語には、全部で3つのループ文が用意されている。
while文、for文、そして、do~while文。
do~while文は、while文とほとんど同じ。
 
do {
繰り返す文;
} while (条件式);
 
条件式の意味も動作も、while文と全く同じ。
while文との違いは、条件式が後判定なのか、先判定なのか。
while文は、繰り返しの実行の前に条件式を判定する。
do~while文は、繰り返す文の実行後に条件式を判定する。
 
●入力チェック
do~while文は、後判定なので必ず1回は実行される。
その利点は、なんと言っても、入力チェックの時に活躍する。
 
 
◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」
オブジェクト指向プログラミングを構成する3原則は、
ポリモーフィズム(動的結合)
・データ抽象(情報隠ぺい)(カプセル化
・継承
であると言われている。
 
オブジェクト指向という考え方は、1960年代後半から40年近くかけて段階的に発展してきたもの。
 
●Simula(シミュラ)の発明
オブジェクト指向プログラミングという考え方は、1960年代後半のスウェーデンで開発されたSimulaというシミュレーション用プログラミング言語が発祥だと言われている。
 
 
 

2020.5.16(土) 
C言語(ドットインストールより)
演算子について
単項演算子
++   --

代入を伴う演算子
x += 5;


C言語(web記事「苦しんで覚えるC言語」)
●プログラムの部品化
作成したプログラムを再び使うことを再利用と呼び、関数として再利用することを部品化と呼ぶ。
部品をたくさん用意しておけば巨大なプログラムであっても、そ部品を組み合わせるだけで完成するので、効率的。

プロトタイプ宣言
予め先頭で関数の形を宣言しておくことで、いつでも宣言した関数は使えるようになる。

唯一、main関数だけはプロトタイプ宣言は不要。

●#includeの正体
これは、printf関数などのプロトタイプ宣言だった。
#include<stdio.h>を記述する理由はこのため。

関数は、
関数名();
このように記述すれば呼び出せる。

●引数
関数に数値を渡す
そのための仕組みが「引数」
引数は、関数に渡す情報の総称
引数は、関数の()の中に書いて指定する必要がある。
引数を使う場合、()の中には渡された数値を格納する変数を宣言しておく。

int sum (int max);

このように使用する変数を指定する部分を仮引数と呼ぶ。
仮引数とは、関数宣言に書かれた引数の型の名前のこと。

関数を変更した場合はプロトタイプ宣言も変更する必要があるけど、
プロトタイプ宣言では変数の型だけで良い。変数名は省略可能。

引数に指定した変数は、その関数の中では普通の変数と同じように使用できる。

●関数に数値を渡す
引数を持つ関数を呼び出す場合、数値を渡す必要がある。
それには、呼び出す時に、()の中に数値を書き込む。
関数に渡す数値のことを、「実引数」という。

引数付きの関数を呼び出す場合は、必ず数値を渡さなくちゃいけない。

●複数の引数
引数はたくさん持たせられる。

int sum (int min , int max)

複数の引数を使う場合は、それぞれを「,」カンマで区切って指定する。
型を混ぜても大丈夫。
複数の引数を持つ関数は、全ての引数に数値を渡さないと実行されないよ。


◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」
1980年代、米AT&T社のベル研究所では、C言語オブジェクト指向機能を追加した「C with Class」という言語を開発。この「C with Class」が後の「C++」になる。
Cとの互換性を強調したC++には、低レベルなことも記述できるというメリットと、低レベルなことも記述しないといけないデメリットが共存していた。
その点を改善するべく、1990年代に登場したのがJava
Javaは、C++からCへの互換性を取り除き、その代わりにLispなどからより良い機能を取り込んで誕生した。1990年代に誕生した言語の中で最も成功した言語として世界中で使われている。

ソフトウェア開発の最大の敵は、「複雑さ」。
人間の脳は複雑なものを扱うことに弱い。記憶力と理解力に限界があるため。
年々性能が向上するコンピュータの処理能力の限界よりも人間の理解力の限界によるソフトウェア生産性の限界の方がより厳しい制約になってきている。



2020.5.17(日) 
C言語(web記事「苦しんで覚えるC言語」)
●戻り値(関数値)
関数の前に記述する「型名」は、関数から返る数値の型を示している。
return文は、数値を返すという機能がある。
 
戻り値の制限
戻り値は1つだけしか返すことができない。
 
 
◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」(現在5.4%)
サブルーチンは入力となる引数と出力となる戻り値だけが分かれば、内部でどのような処理をしているのか気にせず使える。システムがブラックボックスの組み合わせで構築されていると、システムの複雑な構造がブラックボックスに隠されているので全体の見通しがよくなる。
 
※サブルーチンとは、コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたもの。
 
 

 

 

2020.5.18(月) 
C言語(web記事「苦しんで覚えるC言語」)
●変数の寿命
関数内で寿命が尽きる変数
ローカル変数の寿命
関数の中で宣言された変数は、関数が終了すると捨てられてしまう。
再び同じ関数が呼び出されたら、もう一度変数を作り直す。
この時、前回とは別のメモリが使われるので、値も変わる。

つまり、関数の中で宣言された変数の寿命は関数の中だけであるということ。
このように、関数の中で寿命が終わる変数を「ローカル変数」と呼ぶ。
また、変数の寿命や有効範囲などをまとめて「スコープ」と呼ぶことがある。

●ローカル変数
関数の中で宣言された変数。
仮引数の変数も同様。
その関数が終わると捨てられ、再度関数が呼ばれた時には新しく作られる。
また、他の関数から使用することはできない。

●スコープ
識別子が有効な範囲を制限する仕組みの総称。
一般的には、変数の寿命と有効範囲を決定する仕組み。

●同じ名前でも別の変数
ローカル変数が有効なのは、宣言された関数の中のみ。
別の関数で同じ名前の変数が宣言されていても、それは別の変数となる。

●関数の独立性
関数を他のプログラムでも簡単に使えるようにするためには、各関数が独立している必要がある。
変数の値が突然変更されるというリスクから解放される。
特に大規模開発では必須。
※古典的言語には、この仕組みがない。

●正確にはブロック内
ローカル変数の寿命が{関数内というのは、正確には「ブロック内」ということ。
ブロックとは、{ }で囲まれている範囲のこと。

グローバル変数
関数外で宣言された変数。
プログラム全体が終了するまで生き残り続け、宣言されたソースファイル内の全ての関数から使用できる。
グローバル変数は、プログラムの開始時に自動的に0に初期化される。

ローカル変数は、関数の呼び出しのたびに作られるので、その度に初期化していると、無駄ななるので自動的に初期化しない。
グローバル変数は最初に初期化すればいいので、それでです。

グローバル変数は、その関数からでも代入や値の取得ができるので便利な反面、どこで値が変更されるか分からない怖さがある。なので、グローバル変数はプログラム全体で共有する特別なデータのみみ使うこと。

※関数内にグローバル変数と同じ名前のローカル変数がある場合
エラーにはならず、ローカル変数を宣言することはできる。
グローバル変数と同名のローカル変数では、ローカル変数が優先される。
これは、関数の独立性を維持するための仕組み。

グローバル変数のスコープは、ファイル内。
基本的には、他のファイルでは使えない。参照できない。
しかし、他のファイルで、変数名と型を指定すると、使用できるようになる。

●関数内で生き残る変数
静的なローカル変数の寿命
ローカル変数とグローバル変数の中間的な存在である変数がある。

関数内で変数を宣言する時に、型名の前にstatic(スタティック)とつけることで、「静的なローカル変数」を宣言することができる。

関数内で宣言されているので、使用できるのは宣言された関数のみだけど、その値はプログラムが終了するまで残る。
また、初期化しなくても自動的に0に初期化される。

この変数は、関数が以前に呼び出された時の値を覚えておきたい場合に使用される。


◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」
オブジェクト指向プログラミングは、データによる複雑さへの対抗手段として登場した。
正しい結果を得るためには、処理とデータを常に一貫して保つ必要があり、そのために使われたテクニックが「抽象データ」。
抽象データとは、データと手続きをまとめたもの。
データとその取り扱い方法をまとめてブラックボックス化できる。
抽象データの利点は、
①変化に強いこと
②処理のイメージがつかみやすいこと

コードの抽象化により、イメージが具象化する。
このようなインテリジェントなデータを「オブジェクト」と呼ぶ。
これが「オブジェクト指向プログラミング」の由来になっている。

●プロトタイプ型とクラス型
抽象化の原則から言えば、同じものが数多く登場する場合にはグループ化してまとめてしまうべき。
このことを、DRY(Don’t Repeat Yourself)原則と呼ぶ。

重複を避けるために同種のオブジェクトをまとめる方法は大きく分けて2つ。
①プロトタイプ型
元になるオブジェクトのコピーを作ることで同種のオブジェクトを作りだす。
プロトタイプとは、ひな型のこと。
JavaScriptもプロトタイプ型。

②鋳型
これは、例えるなら、たい焼きの型とたい焼きの関係。
このたい焼きの型に相当するものをオブジェクト指向プログラミングでは、「クラス」と呼ぶ。
同じ種別のオブジェクトはそれぞれ同じクラスに属し、操作や性質を共有する。

プロトタイプ型と違って、クラス型オブジェクト指向言語は、ひな型となるクラスとひな型から作られたオブジェクトを明確に区別する。
たい焼きの型は、たい焼きではないことと同じように。

クラスと対比し、違いを際立たせるためにオブジェクトのことをしばしば「インスタンス」と呼ぶ。

 

 

 

今回はこれで以上です。

先のことは全く見えていませんが、歩を進めて景色を変えていきたいと思っています。

次回は5/22(金)に更新します。

ではまた!

 
 
 

 

 

 

5/12(火)〜14(木) の学習ログです(主にC言語)

こんばんは、安藤です。

今日も風が気持ちよくて幸せな気分になっております。(そうです、閾値が低いですw)

 

最近思うことの一つに、結婚式はしたくないけど結婚はしたい人にとって今はすごい良いタイミングなんじゃないか、と思っております。はい、すみません。

 

さて、学習のログです。

C言語に加えて、Rubyを創られたまつもとゆきひろ さんの著書などもここへ残していきたいと思います。

 

 

5/12(火)

C言語(web記事「苦しんで覚えるC言語」)
●else文(偽の場合の処理)
if(条件式)真の場合に実行する文;
else偽の場合に実行する文;
 
●switch文〜case文
switch(条件式) {
case数値:
実行文;
break;
case数値;
実行文;
break;
}
 
●default
case文の数値に当てはまらない場合に実行される。
 
●同様の処理をまとめる
case文は、複数caseを連続して使うことができる。
 
break文を除くとcaseをつなぐことができるけど、逆に言うとbreak文を忘れるとcase文が関係ないところでつながってしまう。
 
switch文〜case文で使えるのは整数のみ。
実数、変数、条件式は使えない。
 
 
 
2020.5.13(水) 
C言語(web記事「苦しんで覚えるC言語」)
●for文
C言語には、回数の決まっている繰り返しには、for文を使う。
Int I;
for(I= 1;i <= 繰り返し回数;i++) {
繰り返す文;
}このiは整数型の変数であり、繰り返しの回数を数えるために使われる。
このiはfor文の前に宣言しておく必要がある。
この時使用する変数を、「カウント変数」と呼ぶ。
カウント変数は、iでなくても何でも良い。
C言語では、慣習的にiを使用する人が多いみたい。◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」(現在4.6%)
オブジェクト指向プログラミングを構成するテクニックの中で最も重要なテクニックは「ポリモーフィズム」あるいは「多態」と呼ばれるもの。
ふむふむ。
この技術があるから、シンプルなコードが書けるのだと理解が進みまくり。Matzさんすげーっす。
 
 
 

2020.5.14(木)

C言語(web記事「苦しんで覚えるC言語」)
●for文、ループ動作の仕組み
for(初期化;条件式;更新) {
繰り返す文;
}

初期化とは、カウント変数の初期化を行うための文。
ここの書かれた式は最初に1回だけ実行される。

条件式とは、ループの終了条件を設定するための文。
ここに書かれた式の値が真の間は、繰り返す文を実行し続ける。

更新とは、カウント変数の更新を行うための文。

※無限ループとは、同じ動作を無限に繰り返すプログラムのこと。

実は無限ループは、非常によく使われるテクニックで、
例えば、メモ帳などのアプリでは、キーの入力があったら、それを表示させる処理をユーザーが「×」ボタンを押して終了するまでは永遠に繰り返す。

このようにユーザーが明示的にプログラムを終了させない限りプログラムを終わらせないようにしたい時に無限ループを使うのだ。

for文の途中で処理を終わらせることができるのだ。break文を使えば、強制終了できる。

◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」(現在5.4%)
数学的には、ほとんどのプログラミング 言語は「チューリング完全」と呼ばれる言語のクラスに分類されるようなので、どの言語でも等価なプログラムを記述可能なのだそう。
チューリング完全とは、英国の情報科学アラン・チューリングさんが考案した仮想的な計算機であるチューリングマシンと情報処理能力において等価であることをいう。
ここでもチューリングさん登場するのね。本当すごいわ。

 

 

以上です。

Matzさんがすごくて、本を読み進める度にテンション上がってます。

C言語も相変わらず楽しいし、学習が良い感じです。

継続は力なり、ということで引き続き頑張ります。

 

次回は、来週の火曜日に更新させて頂きます。

それでは、また!

 

 

5/8(金)〜11(月) の学習ログです(主にC言語)

おはようございます、いつもありがとうございます。

爽やかな日が続いてますね。風が気持ち良くてそれだけで幸せな安藤です。(閾値が低いw)

このような状況の影響か、「幸せ」を感じる感性がいい感じに性能アップしてます。

3月にありました、トイレットペーパーが品薄で買えない状況の時は、人生で一番ウォシュレットへの感謝が深まりました。w

 

さて、このブログに載せている内容は毎日仲間と一緒に取り組んでいる学習フォームのまとめになっています。

学習した内容をずらずらと学習フォームに投稿するのもどうかと思いより良い学習フォームになるように模索中ですが、ここにはずらずら書かせていただいております。ご容赦ください。密かに将来、伝説の一つにでもなったら嬉しいと思ってます。

このブログには僕の日々の学習内容をログとして載せているので、学習時間とか戦略・戦術とかも載せてもいいのかな、ともぼんやり思っています。

前回からC言語の学習を再開しましたが、危なげなく続いています。Vue.jsよりセキュリティより楽しいです。(正直な気持ち)

理由はブラックボックスが少ないからかな。まだはっきり言語化はできません。

5/10より、Matzさんの本も読み始めたので、それもここ載せようか迷ってます。

内容がすごくいいので、しっかり検討しようと思います。

いずれRubyPythonはものにしたいと思っています。理由の一つはシンプルにコードが綺麗なので、好き。だからです。あと開発者お二人の顔がなんか「もってる」感がすごいからです。ここけっこうマジで思ってます。w

 

5/8(金)

C言語(web記事「苦しんで覚えるC言語」)http://9cguide.appspot.com/s_readme.html
C言語の仕組みを基礎から勉強してます。
一旦、Vue.jsと情報セキュリティはお休みして、C言語に集中することにしました。
 
●書き方の慣習
C言語はフリーフォーマットだから自由に書けるんだけど、みんながバラバラな書き方をすると訳が分からなくなるので、ある程度書き方の慣習がある。
・Tabキーを使ってインデントを使うこと
・複雑なコードには、コメント(説明文)をつける
 
プログラマーにとって大事なことは「楽をすること」
コンピュータにできることは全てコンピュータに任せられるように取り組む
 
●文字列の表示
<printf関数>
文字列を表示させる関数 printf(“文字列”);
 
関数の中ではシンプルに上から順番に動く。
そして、return文に到達すると関数の実行は終了する。
 
ただこの時点では、C言語コンパイラはprintf関数のことは知らない。
コンパイラを動作させるには、コンパイラにprintf関数の説明書を読ませることが必要。
そのための命令が、#include(インクルード)擬似命令。
#include <説明書のファイル名>
printf関数の説明書は、stdio.hというファイル。
 
#include<stdio.h>  これを記述すると、printf関数が使えるようになる。
これは、プログラムの説明書なので、プログラムの前に記述する必要がある。
 
この擬似命令とは、プログラムコードではない命令で機械語には翻訳されない。翻訳の前段階で処理される。
 
●改行文字
C言語で改行をするには、エスケープシーケンスを使う。
エスケープシーケンスとは、画面に表示できない制御を行うための特殊文字列。
改行をするために使う 「\n」もエスケープシーケンスの一つ。
「\t」は、頭揃えのためのエスケープシーケンス。
 
●数値
文字列では計算をすることはできない。
計算を行うためには数値を扱う必要がある。
ちなみに、数値と数字はコンピュータ的には区別されている。
数値は計算に使える。
数字は、数値なのか、文字列なのかによって扱いが変わる。
 
printf関数は、文字列を表示させるための関数。
文字列は、””(ダブルコーテション)で囲う。
“”で囲まれた文字列を「文字列リテラル」と呼ぶ。
 
C言語で数値を記述する場合は、そのまま記述すれば、数値として扱われる。
 
Printf関数には、数値を表示する機能もある。そのためには、出力変換指定子を使う。
出力変換指定子とは、文字列の中に埋め込んで使われる記号の一種で、外部のデータを文字列に変換して表示したい時に、その変換方法を指定する記号。
 
出力変換指定子には色々な種類がある。
最もよく使われるのは、整数値を文字列に変換する「%d」指定子。この指定子の後ろで指定した数値を数字に変換した結果が表示される。
printf (“%d”,100);
このように記述すると実行結果は「100」と表示される。
 
※日本語は表示するだけなら問題ない。ただし、海外製のコンパイラでは問題が起こることがる。
Printf(“%d円\n”,100);
「100円」と表示される
 
●基本的な計算
printf(“%d\n”,100+200);
結果「300」と表示される
 
●整数と実数
数値には、整数と実数がある。
整数とは、自然数に0と負の数を加えた数のこと。
実数とは、整数に小数値を加えた数のこと。
 
整数は3種類の書き方ができる。
・10進数(書式:数字)
・8進数(書式:0数字)
・16進数(書式:0x数字)
先頭に0をつけない数は10進数として扱われる。
先頭に0をつけた数は8進数として扱われる。ほぼ使わない。
先頭に0xをつけた数は16進数として扱われる。よく使われる。
 
実数の表記は10進数しか使えない。
コンピュータで実数を扱う方法は色々あるけど、C言語では浮動小数点方式を使用している。このため、C言語の世界では実数のことを浮動小数と呼ぶことがよくある。
 
浮動小数点方式とは、実数値を数値の並びと小数点の位置で表す方法。
巨大な数から極小な数まで扱えて便利だけど計算は遅い。
 
●実数の計算
コンピュータで正確な計算を行うのは困難。実数を使用すると必ず割り切れない数が発生する。
また、2進数で計算しているために起こる誤差もある。え、そうなんだ。
※実は2進数では、0.1などの数値を正確に表すことができない。正確さが必要な銀行のコンピュータなどは10進数の分数として計算する仕組みを持つらしい。
 
実数で計算したい時は、数値を実数にすれば自動的に実数の計算になる。
表示する時に使う出力変換指定子は「%f」になる。
 
 
5/9(土)
●型の変換
C言語では、整数と実数とで計算したら、その結果は実数に変換される。
%f指定子を使うこと。%d指定子だと正しく計算結果が表示されない。
実数を使った計算結果を整数で表示させることもできる。
C言語には、型を強制的に変換する機能として、「キャスト変換」がある。
(変換する型名)数値や変換名
printf(“%d\n”,(int)(1.05*360));
return0;
 
この結果は「378」となる
計算式をカッコで囲うのは、カッコがないと1.05が先に整数に変換されてしまうから。
 
キャスト変換は変数にも使うことができる。使い方も同じ。
 
●数値の桁揃え
printf関数は、表示する文字や数値の桁数を指定することができる。
%桁数d
 
出力変換指定子の間に数字を付けると、その桁数になるように空白を入れて表示してくれる。
マイナスの値を表示させると、-記号も1桁として扱われるので、1桁分多く指定しておくこと。
 
実数値の表示では全体の桁数とともに小数点以下の桁数を指定できる。
%全体桁数.小数桁数f
 
小数点も桁数に含む。
例えば、%6.2d では整数部分が3桁、小数点が1桁、小数部分が2桁の6桁と解釈される。
 
5/10(日)
C言語(web記事「苦しんで覚えるC言語」)http://9cguide.appspot.com/s_readme.html
●scanf関数(入力用の関数)
scanf(“入力変換指定子”,&変数名);
 
入力変換指定子とは、入力された数字をどのような数値に変換するかを表す文字のこと。
変数名には、入力されたデータを記憶しておく変数名を指定する。
scanf関数を使う場合は、変数名の前に「&」の文字をつける必要がある。
この「&」には変数の場所を知らせる意味がある。
 
scanf関数を実行すると、プログラムは入力待ち状態となる。
プログラムを使う人がデータを打ち込んでEnterキー押すと、そのデータが指定した変数に代入される。
scanf関数を使用するには、#include <stdio.h> が必要。
 
#include <stdio.h>
 
int main (void) {
int data;
scanf(“%d”,&data);
printf(“%d\n”,data);
retirn 0;
}
 
scanf 関数は、整数も実数も入力可能。
実数の場合は、「%lf」指定子を指定する必要がある。
※printf 関数では「%f」指定子。
 
一度に2つのデータを入力する場合は、入力するときに2つの数値を、スペース、タブ、改行などで区切って入力すること。
 
●scanf関数と入力ミス
scan関数は色々な問題を抱えている。本格的な開発には使われない。
scanf関数は、正しく使っていれば問題ないが、入力ミスがあった場合にこわいわけ。
 
①区切り記号の入力を間違えると、
 コンパイラによって入力した数値と異なる数値がデータとして翻訳されてしまう。
 
②極端に大きい数値を入力した場合は、
記憶できる範囲の限界を超えてしまうと、やはり入力した数値とは異なるデータとして扱われてしまうリスクがある。
 
③文字列を入力した場合は、
ここもやはり想定外の数値がデータとして扱われてしまう。
 
5/11(月)

C言語(web記事「苦しんで覚えるC言語」)
●条件判断
C言語には、if文が用意されている。
if(条件式)文;

C言語では、条件による判定を行う場合、「0」を偽の値、「0以外」を真の値、と呼んでいる。

真の値…条件判断の呼び方で、0以外の数値(負の数ですら)を意味する。trueと表記することもある。
偽の値…条件判断の呼び方で、0を意味する。falseと表記することもある。

初期化…変数の宣言と同時に数値を代入すること。

比較のための演算子としての使い道もある。
ただ、C言語には、比較専用の演算子が用意されている。
2つの数値が等しいかどうかを調べるには、「==」演算子を使う。
この演算子は、2つのの値が等しい時には結果が真になるという計算を行う。

●等値演算子
先ほどの「==」のような系統の演算子を等値演算子と呼ぶ。
次の2種類がある。
①「==」2つの値が等しいと「真」になる。
②「!=」2つの値が等しくないと「真」になる。

多くのコンパイラでは「真」は1、「偽」は0となる。

●関係演算子(<,>,<=,>=)
この演算子は、2つの値の大小を調べる演算子

●論理演算子
複数の条件を統合したり、判定を反転するために使われる。

&& かつ(AND)の意味
|| または(OR)の意味
!  否(NOT)の意味

if文では、1度に1つの条件での判定しかできないけど、論理演算子を使うと複数の条件での判定が可能となる。

●ブロック文
C言語には、複数の文をひとまとめにする機能がある。それがブロック文(複文)と呼ばれる機能。
{ } で囲むことで複数の文をまとめることができる。

ブロック文を使えば、if文の結果に対して複数の処理を実行させることができる。

 

 

また今日から(5/12)勉強を頑張っていきたいと思います。

少しでも世の中や人の役に立てる人間になりたいです。

次は、今週の金曜日に投稿します。

それでは、また!

 

 

学習教材

苦しんで覚えるC言語

http://9cguide.appspot.com/02-02.html

 

5/5(火)〜8(金) の学習ログです(主にvue.jsとセキュリティ、そしてC言語)

こんにちは、いつもありがとうございます。

家の作るカフェラテを気に入ってしまった安藤です。

 

まだまだ大変な状況は続いておりますが、僕の肌感ですが、徐々にこの状況に適応してきている方々が増えてきているように感じます。

 そう感じたのはここ数日。

もっと前から色々考えていたのだろうけど、改善改革に向けたアウトプットをする方が増えてきたように感じます。

逞しいと思い、すごいなと思います。なんか嬉しい感じもします。

感性、知性、行動力が活性化されているように思います。

自分ももっと頑張ろう!とエネルギーをもらっています。

前を向いて頑張る人は格好良いです。

周りの困っている人に寄り添って一緒に前を向こうとしている人はさらに格好良いです。

 

さて、今回の学習ログですが、

今までは主に、Vue.jsとセキュリティを学んできましたが、私の周りの素晴らしい方々からの助言を頂き、改めてC言語を学ぶことにしました。

なぜか分かりませんがすごくこわいです。なので、これをやりきる覚悟がまだ完全に定まりません。不思議な感覚です。

今までは視野を広げるフェーズでしたが、これからは深く深く掘っていくフェーズにすることを決めました。

スコップで深く掘ろうとすると、穴の直径は次第に広がっていくので、周辺の情報も拾いながら進めていこうと思います。

人がやらないこと、できないことにチャレンジして何か面白いことを5年以内に実現します。

一応ここで宣言しておこうと思います。まだ何も見えていませんが。笑

 

5/5(火)

◎Vue.js
APIを使ったqiitaの記事検索について

 

◎セキュリティについて
●公開情報の収集
ターゲットが自分から公開している情報
・ネットワーク情報
ドメイン情報
DNS情報
・会社情報
・求人情報
<ホームページ>
・URL
ドメインIPアドレス
・所在地
・役員名
・取引先
SNS
・フォロワー
・レビュー
・地図

得られた情報からさらに情報を収集
・電話番号で検索
・住所で検索
・「@ドメイン名」でメールを検索

媒体から収集
・TVコマーシャル
・折り込みチラシ
・WEBニュース

●ネットワーク情報の収集
ドメイン
ここから手に入る情報は、
IPアドレス
・使用しているネットワーク範囲(または上位プロバイダ)
DNS情報
・担当者情報(名前、所属、電話番号)

ドメイン情報>
「.jp」ドメインの場合 → JPRSWhoisサイト http://whois.jprs.jp/
ここのサイトから詳細を調べることができる

DNSからの情報収集
現在はDNSからは情報はほとんど得られない
指定したDNSサーバは管轄しているドメインの情報しか返さないのが正しい仕様

検索エンジンの活用
Googleでのテクニック
・AND検索 「 検索語句① 検索語句② 」  
・OR検索 「 検索語句① OR 検索語句② 」
・()を使用した検索 「 検索語句① ( 検索語句② OR 検索語句③ ) 」
・とは検索 「 検索語句とは 」
・特定語句の除外 「 検索したい語句 ー 除外したい語句 」
ワイルドカード検索 「 検索語句*検索語句 」
・フレーズ検索 「 “検索語句” 」

コマンド検索
・サイト内検索 「site:サイトTOPのURL 検索語句」
・タイトル検索 「intitle: 検索語句」
・本文内検索 「intext: 検索語句」
・URL検索 「inurl:  検索語句」
・リンク検索 「link: 検索語句」
・ファイルタイプ検索 「filetype:  ファイル拡張子 検索語句」
・キャッシュ検索 「cache:URLからhttp://を除く」
・インフォ検索 「info:URLからhttp://を除く」
・関連検索 「related:URL」

SNSを利用した情報収集
facebookの勤務先を上手く使うと、facebookが勝手に「知り合いかも」と情報をくれる。
SNSは情報の宝庫

 

 

5/6(水)

◎セキュリティについて
<スキャニング技術>
●サーバの特定
●ネットワークトポロジ
●スキャニング手法
ポートスキャン → ターゲットサーバが稼働しているオープンポート(稼働しているサービス)を特定すること
・ポートの数は65,535個
・ウェルノンポートだけでも1,024個
・繋ぐとログが残る
代表的なポートスキャンツール
・Nmap(Zenmap)
・Hping2/Hping3
 
TCPポートスキャン(接続スキャン Connect Scan)
・指定したポートに次々に繋いでいくことによってオープンポートを確定する
・信頼性は高い
・欠点はログが残る
 
Idleスキャン
ハッカー、ゾンビ、ターゲット
この仕組みはよくできてる。すごい。
 
●サーバのフットプリンティング
サービスを行っているホストの情報を収集すること
可能であればホストのOSを特定したい
ポイントは脆弱性の程度を知ること
 
集めた情報からOSを推測
・webサーバが「IIS」なら、Windowsとわかる。
 
脆弱性情報の収集
集めた情報から攻撃手法を探す
・CVE … 確定した脆弱性のこと
JVN と JVN iPedia … 日本の脆弱性関連情報のデータベース
 
 
セキュリティの学習内容が一気に深く難しくなってきました(汗)
1回で全部を理解しようとせず、とりあえず前に進むことを意識していきます。
 
 
この日はプログラミングを一緒に学んでいる仲間とミーティング。
その中で有限なリソースの配分や自分の適正などの貴重なお話を聴かせて頂きました。
すごく良いきっかけとし、視野を広げるフェーズを終了し、C言語をマスターするための道を歩もうと思いました。
完全に覚悟が定まらないけど、覚悟が定まるまで待っているのは勿体無いので、走り出すことにしました。
一本道なので気持ちがいいです!
この場を借りて感謝申し上げたいです。ありがとうございます。
 
 
5/7(木)
C言語(ドットインストールより)
もともとは Unix という OS を開発するための言語。
OS なので、ハードウェアの性能を最大限に引き出すためにかなりハードウェアに密着した書き方をしていて、他の言語では到達できない高速処理を実現しているのが大きな特徴。
ただし、ハードウェア寄りの書き方をしているので、間違えた書き方をすると簡単に暴走してしまうので、注意すること。
様々な言語の基礎になっているので、C 言語を勉強しておくと、他の言語も分かりやすくなる。
 ハードウェアの仕組みを勉強する必要がある。
Linux に標準でついてくる gcc というプログラムを使って勉強。「GNU C Compiler」
 
printf  は文字列を出力するための命令
「\n」 は「改行」という意味
文の最後には、必ず「;」を付ける。これが文の区切り。
 
実行するときは C 言語はコンパイラ言語なので「gcc -o hello hello.c」という書き方をするが、ソースファイル(hello.c)を実行ファイル(hello)に変換してから hello を実行する、という流れ。
hello というファイルに出力しなさい、という意味での「-o(output)」
そうすると…、2 つファイルが出来る
「hello」の方を実行すると、ちゃんと「hello world!」と改行付きで表示される。
 
 
 
 
C言語(web記事「苦しんで覚えるC言語」)http://9cguide.appspot.com/s_readme.html
C言語の開発者は、Dennis Ritchie(デニス・リッチー)さん。
B言語を改良して作成した。1972年のこと。
 
●プログラムとは何か?コンピュータとの関係
プログラムとは、コンピュータを動かす最も基本的な方法。
そのプログラムを書くためにプログラミング言語がある。
ちなみに我々人間が使う言語のことは、「自然言語」という。
プログラミング言語を理解する上で大切なことは、自然言語との違いを理解することから。
1つ目の違いは、プログラミング言語自然言語に比べて文法が単純。
プログラミング言語の文法は、単語の順序が決まっているだけ。
「reflect hello」 これは 「映せ こんにちは」
なんか「開け、ごま」みたい。w
プログラミング言語で使われる品詞は、ほとんどが動詞と目的語。 
2つ目の違いは、プログラミング言語自然言語に比べて、意味が明確。
これは、明確に 命令をしなければならないということ。曖昧ではいけない。  
 
コンピュータの動作を分解すると、記憶、判断、計算の3つ。
①1つの数値を記憶する。(記憶)
②1つの数値が0であるか判断する。(判断)
③2つの数値を足し算する。(計算)
ここで言う足し算といは、0+0、0+1、1+0、1+1の4つだけ。
 
この3つを組み合わせればどんな計算もできる。
 
プログラミング 言語と自然言語の最大の違いは、その目的にある。
プログラミング 言語は「計算のための言語」ということ。
コンピュータは数値が全てであり、それ以外の概念は存在しない。
要は計算用言語。
 
コンピュータができる計算は、足し算だけ。
指示された命令の順番に従って計算を行うだけ。
 
C言語の構造
何を作るにしても構造の理解が大事。
ガンプラガンダムのプラモデル)は、パーツを組み合わせて作る。
ミニ四駆も、シャーシ、ボディ、モーター等々。
プログラムもパーツ(部品)を組み合わせて作る。
プログラミング における部品とは、関数のこと。
C言語のプログラムは、関数の集合体。
C言語の関数には基本的に順番の概念はない。好きな順番で使える。
 
●関数の作り方、関数の構造
明確な構造になっている。
【 型名 関数名(引数){ 処理 }  】
・型名とは、関数が計算結果を返す時に使う数値の種類のこと。
「int」とは、整数を意味している。
・関数の命名規則は、
①半角アルファベット、半角数字、半角_(アンダースコア)が使える。
②1文字目には数字を使うことはできない。
③予め決められた予約語は使用することはできない。
 
C言語では、予約語の他、予約済みの識別子も名前に使えない。
予約済み識別子とは、内部で使われている名前のことで、アンダースコアに大文字が続く名前も使用できない。
 
引数とは、関数に渡す数値の種類のこと。
関数は渡された数値を元に計算を行って結果を返すことができる。
渡した数値は「引数」、結果は「戻り値」。
情報がないことは「void」で表現する。
 
関数を終了させる処理は「return」文。
return文には、計算結果の数値を返す機能があるので、何もしない場合は「0」とする。
 
C言語には、基本的に関数の順番は決まっていないが、「main」という名前がついた関数から動作するという決まりがある。
つまり、main関数から実行される。
従って、もしプログラムの中に、main関数がどこにもなかったら、そのプログラムは動作しない。
逆にいうとmain関数があればC言語のプログラムは動く。
 
コンパイラは翻訳ソフト
コンピュータにとって理解できるのは2進数で書かれた命令だけ。
2進数で書かれた命令とは、機械語マシン語)のこと。
 
コンピュータ黎明期は、実際に2進数でプログラムしてた。マジで気が遠くなる。
その次に効率化のために、16進数を使うようになった。
その次が、数字を文字化したアセンブリ言語
こうして効率的にと考えられ、世界初のプログラミング 言語、「FORTRAN(フォートラン)」が登場。1957年のこと。このFORTRANから高級言語と呼ぶ。
高級言語とは、人間に分かりすく書くことができる言語のこと。
機械語アセンブリ言語は低級言語と呼ばれている。
 
C言語翻訳ソフト
高級言語は人間には理解できるけど、コンピュータには理解できない。なので、コンピュータに伝えるために翻訳することが必要。
 
翻訳方法には2種類ある。
・同時通訳(インタプリタ
柔軟な構成ができる反面、低速。
・全部一気に翻訳してから通訳(コンパイル
とにかく速い。この時に使うソフトを「コンパイラ」という。
 
コンパイラは、3段階の仕組みで動作する
①まず最初に、プリプロセッサというソフトで文字列の調整が行われる。空白や改行の結合、記号の置き換えなどを行いプログラムを解析しやすくする。
②次に、コンパイラによってコンパイルされる。この時に最適かされる。
同じC言語のプログラムでも翻訳の仕方によって動作時の速度が変わるので、より高速になるように翻訳を行っている。これを「最適化」という。
③最後に、翻訳したプログラムをリンカというソフトで結合される。
リンカで結合することを「リンク」という。
リンクすることでマシン語のデータが実行可能なファイルに変わる。
プリプロセス、コンパイル、リンクをまとめて、コンパイルということもある。
 
●書き方のルール
日本語の文章は、文字、単語、文、段落のように、文章を構成している要素に分解することができる。
C言語も同様に各要素に分解することができる。
文法的に分解した際にその最小単位は「トークン」。
トークンとは、単語のこと。
 
C言語は、「フリーフォーマット」、つまり自由書式。
プログラムの書き方の制限がほとんどないので自由に書くことができる。
C言語の書き方で明確なルールは、たった1つ。それは、「トークン同士を繋げて書いてはいけない」ということ。スペースを空けること。記号は繋げても大丈夫。カッコ、セミコロンなど。
 
その他のルール
・大文字、小文字は区別される。
・文の終わりには「;」をつける。
・全角文字は使えない。全角スペースも使えないので注意。半角のみ使える。
 
 
と、まあこんな感じです。
ブログは週に2回の更新を心がけています。
次は来週の火曜日。それまでどれだけC言語と仲良くなれるか、どんな自分が待っているのか、それを楽しみにしながら頑張ってみようと思います。
それでは、また!
 
 

学習教材①

Udemy

Vue JS入門決定版!jQueryを使わないWeb開発

中村祐太さん

 

学習教材②

Udemy

情報セキュリティEthical Hacking

阿部ひろゆきさん

 

学習教材③

ドットインストール

 

学習教材④

苦しんで覚えるC言語

http://9cguide.appspot.com/02-02.html

 

5/1(金)〜4(月) の学習ログです(主にvue.jsとセキュリティ)

こんばんは。

家の中で過ごす時間が増えに増え、宅配サービスを利用していたら、外食ばかりだった頃より美味しくて良いものを食べられていることに気づき、自粛が終わってからもこの食生活を手放せなくなりそうな安藤です。

 

最近、ファイナルファンタジー4を始めたのですが、ゲームを進めていて「あ!ここはランダム関数を使って実装したんだな」「ここは、if文を使ってるな」とかプログラミングの視点からゲームの世界を見れて面白いです。

 

さて、学習のログです。

 

5/1(金)

◎Vue.js
<算出プロパティについて>
●算出プロパティ(Computed)の基本
関数によって算出したデータを返すことができるプロパティ
 
●算出プロパティとメソッドの比較
3つ違い
違い①
・computed…プロパティ→ ()不要
・methods…メソッド→ ()必要
違い②
・computed…getter と setter 両方定義できる
・methods…getter のみ定義できる
違い③
・computed…キャッシュされる
・methods…キャッシュされない
巨大な配列を使う際などにパフォーマンスに影響する。
キャッシュされていれば、関数の処理は毎回行う必要はない。
 
◎セキュリティについて
●情報セキュリティの基礎
情報セキュリティとは、情報及びインフラ環境が健全で情報やサービスといった情報資産が盗難・改ざん・破壊といった事象の可能性が低い、もしくは許容範囲内であるもの。
 
●セキュリティの3大要件
・Confidentiality 機密性…第三者から見られないこと
・Integrity 完全性…改ざんされないことを保証すること
・Availability 可用性…正当なユーザーがきちんと使えること
EX) 宝箱には鍵がかかり鍵がないと開けられない(機密性)
中身を入れ替えられていない(完全性)
鍵があればちゃんと開く(可用性)
 
この3大要件を満たすことがセキュリティ要件を満たすこと
その手法は、
・認証
・暗号化
・認可
PKI公開鍵暗号基盤 )など
PKI(Public Key Infrastructure)とは、公開鍵と秘密鍵のキーペアからなる「公開鍵暗号方式」という技術を利用し、インターネット上で安全に情報のやりとりを行うセキュリティのインフラのこと。
 
●セキュリティを構成する要素
・情報資産
・人
・物理
・ネットワーク
・ホスト
・アプリケーション
 
組織が情報セキュリティのために何を行うかを明確にし、またそれぞれの構成要素が、何をどのように、どこまで行うか、といった要件とルールを文書化したもの。
セキュリティポリシーは国の法律・規制に則っていなければならない。
順序) 法律→規制→ポリシー →基準・規格→実践・手順ガイドライン
 
●日本におけるセキュリティ関連の法律(総務省情報セキュリティ関連の法律)
・刑法(第161条の2:電磁的記録不正作出および併用など)
・サイバーセキュリティ基本法
電子署名等に係る地方公共団体情報システム機構の認証業務に関する法律
・電波法
不正アクセス行為の禁止等に係る法律
・有線電気通信法
 
●海外におけるセキュリティ関連の法律・規格
・ISO/IEC27XXX(セキュリティに関する国際規格)
PCI-DSS(クレジットカード業界のセキュリティ規格)
・HIPPA(医療に関するセキュリティの規格)
・Sarbanes Oxley Act (SOX法)
 
セキュリティポリシーを実現するために文書化し、全関係者に公開し、納得させ適切なトレーニングを行うことが大事。
そして、適切にセキュリティレベルが保たれているか定期的に検証し評価しなければならない。
 
●セキュリティの検証と評価
・リスク→情報資産に被害が及ぶ可能性
・脅威→情報資産を危険にさらす事象
脆弱性→情報資産を危険にさらす欠陥
この3つの項目を適切に把握し管理することが大事。
 
式にすると、
・リスク=脅威 +脆弱性+影響度
・脅威 =脆弱性+攻撃
脆弱性を正確に検証・評価することがセキュリティにおいて不可欠なこと。
 
 

5/2(土)

◎Vue.js
●算出プロパティgetter,setterについて
算出プロパティで、getとsetを設定する
次に、テンプレート側で双方向データバインディングを設定する
※parseInt → 整数を返す関数
※Math.ceil → 小数点以下を切り上げる関数
 
●算出プロパティのキャッシュについて
 
 
◎セキュリティについて
●情報セキュリティの防御
3つのフェーズがある
・予防フェーズ → 初期準備およびフィードバックによる設定変更など
・運用フェーズ → 通常運転時におけるセキュリティレベルの維持
・対処フェーズ → インシデント発生時の対応方法
 
1)予防フェーズ
情報資産の選定とラベリング、リスク評価、防御方法の検討
機器が必要ならば、選定・導入、構築・設定
(1)情報資産の選定とラベリング
・守るべき情報資産の基準
・つけるべきラベル
これらは、セキュリティポリシーによって決まっているはず。
Ex) 機密レベル【関係者外秘(開示範囲を明示)、社外秘、その他】
(2)リスク評価
・リスクのレベルを設定する
・リスク要素によるマトリックスでリスクを判断し対応を決める
リスクの構成要素
リスク=脅威+脆弱性+影響
(3)防御方法の検討
リスクを軽減するための方法を検討
・機器の導入
・手順の策定
・人員の検討
・外部委託
・多層防御となっているか(人→物理→ネットワーク→ホスト→アプリケーション→情報資産)
 
人:セキュリティポリシー、手順など
物理:物理ロック、監視カメラなど
ネットワーク:ルータ、F/W(ファイアーウォール)、NIDS(ネットワーク型のIDS)など
※IDS:侵入検知システム(IDS:Intrusion Detection System)
ホスト:OSの設定、パッチ、HIDS(ホスト型のIDS)など
アプリケーション:セキュアプログラムなど
情報資産:暗号化、データ損失防止など
 
防御機器
・ネットワークファイアーウォール
・IPS/IDS
・UTM
・WAF
 
ネットワークファイアーウォール
・ネットワーク境界で出入りする通信情報を管理する
・判断基準はパケットヘッダの情報となる
・あらかじめ定めたルールにおいて制御する
 
IDS/IPS
・IDS ( Intrusion Detection System )
・IPS ( Intrusion Prevention System )
・IDSは侵入の検出のみ、IPSは侵入を検知し防止する。
・ネットワーク監視型とホスト監視型がある
 
UTM(Unified Threat Management)
・複数のセキュリティ検知技術を統合管理する概念、また、その機能を持ったシステム・アプライアンス製品のこと
 
WAF(Web Application Firewall
・Webアプリケーション攻撃検知に特化
・基本的にHTTPリクエストを監視
シグネチャー(署名)ベースが主だが、最近はインテリジェンス(知識)型や学習型もある
 
・攻撃しやすいサーバをあらかじめ設置し攻撃者に攻撃させる
→攻撃の誘い込み、攻撃者の追跡、攻撃者の手法解析、学習機能へのフェードバック
 
2)運用フェーズ
監視、分析、レポーティング、定期的な評価・検証、フィードバック
(1)監視
・インシデントの兆候(アラート・ログ)
・ネットワークに限らない(物理的アクセス)
(2)分析
・誤検知や見落としの排除
・セキュリティレベルの維持
(3)レポーティング
監視、分析をレポーティングする
(4)評価・検証
脆弱性の検証(新たな攻撃、設定不備、新たしい機能の追加)
 
3)対処フェーズ
IH&R( Incident Handling and Response )
・迅速かつ効率的にセキュリティインシデントを特定し、阻止し、回復することが目的
・対応手順または対応するための組織は予め定められていなければならない。
<手順>
(1)対応チームの編成とトレーニン
(2)検出と分析
(3)分類と優先順位付け
(4)通知
(5)封じ込め、根絶と復旧、フォレンジック(法医学の)調査
(6)事後処理
 
5/3(日)
◎Vue.js
●監視プロパティ
監視プロパティは、「ウォッチャ」とも呼ばれる。
特定のデータまたは、算出プロパティの状態を監視して、変化があった時に登録した処理を自動的に実行できるもの。
例えば、検索フォームの値が変わったタイミングで自動的にAjax通信を行って結果を一覧表示するなど。
 
 
◎セキュリティについて
●ハッキングの手順
CEHにおけるハッキングフェーズの区分
※Certified Ethical Hacker : 認定ホワイトハッカー
1)偵察…事前準備
・公開されている情報を中心に収集する。
2)スキャニング…事前準備
・偵察フェーズで得られた情報を元にネットワークやサーバに直接アクセスして情報を収集する。
3)アクセス権の取得…攻撃
・ターゲットのサーバにアクセスをする。脆弱性を攻撃したり、外部への認証機能を利用する。権限昇格もこのフェーズに含まれる。
4)アクセスの維持…攻撃
・サーバに自由にアクセスできるようにする。
5)痕跡の消去…事後処理
・侵入した痕跡を消去し後からの遺跡を困難にする。
 
●攻撃の手法と目的
動機によって目的は変わる
<攻撃のターゲット>
・ホスト → サーバへの攻撃、後処理、マルウェア
・ネットワーク → Dos攻撃、ネットワーク盗聴
・アプリケーション → Webアプリケーション攻撃
 
●ホワイトハッキングの活用
・ホワイトハッカーの持つ知識と技術はセキュリティのあらゆる局面で活用できる。
・注目されるポイントとしては、やはり攻撃者と同等のスキルを持っていること。
・そのスキルが一番活かされるのは脆弱性評価。
脆弱性のフェーズ>
検出→資産の優先順位付け→評価→レポート→軽減・改善→検証
1)検出
・ネットワーク機器の特定
・特定された機器のフットプリンティング
※フットプリンティングとは、攻撃者が攻撃を行う前に攻撃対象となるコンピュータやネットワークに対して弱点や攻撃の足掛かりを得るために行う事前調査のこと。
2)資産の優先順位付け
・検出された機器を識別し優先順位をつける
・検出された機器のリストアップが必要
3)評価
・セキュリティの脆弱性を調査
・攻撃に対する脅威となるか
・新しい攻撃手法に対して
・新しく追加された機能に対して
4)レポート
・検出された脆弱性を報告
5)軽減と改善
・検出された脆弱性に対して、改善するのがベスト、できない場合はリスクを軽減する
6)検証
・検出された脆弱性が解決しているか確認
・検証は評価時と同じ手順(つまり、もう一度攻撃してみる)
 
5/4(月) 
◎Vue.js
●算出プロパティと監視プロパティの比較
どちらも実装できる場合、基本的には、算出プロパティの利用が推奨されている。
理由は、算出プロパティの方がシンプルに記述できるため。
テンプレートの記述は算出プロパティも監視プロパティも共通。
 
●監視プロパティのオプション
・deep … ネストされたオブジェクトも監視
・immediate(即座に、という意味) … 初期読み込み時にも呼び出す
 
 
◎セキュリティについて
●情報収集の手法の分類
1)受動的情報収集
・ターゲットが提供している情報を収集。多くの場合、合法。
2)能動的情報収集
・ターゲットに直接コマンド等を打ち込む。状況によっては、非合法。
 
<偵察>
公開されている情報を中心に収集する
・URL
・ネットワーク情報(IPアドレス、使用しているIP範囲、DNSなど)
・ホームページ
・所在地
・電話番号
・役員名簿
・株式情報
・公開されているメールアドレス
・社員のブログやSNS など
 
<スキャニング>
偵察フェーズで得られた情報を元にネットワークやサーバに直接アクセスして情報を収集する
・ネットワーク内で稼働しているサーバ
・サーバが提供しているサービス
・認証機能の有無
・有効なアカウント
 
●列挙 (Enumeration)
収集した情報の中から攻撃に有効なものを分類してリストアップすること。
<列挙すべき項目>
・生きているIPアドレス
・有効なユーザーアカウント など
 
ex)「ユーザー名が違います」など、不適切なエラーメッセージによって有効なユーザーアカウントが列挙される問題がある。
これは、ユーザー名が違った場合とパスワードが違った場合で表示されるエラーメッセージが違うケース。
このエラーメッセージは「親切なエラーメッセージ」「饒舌なエラーメッセージ」とも呼ばれている。
Webアプリの検査時には、指摘事項となる。
 
さらなるテクニックとしては、有効なアカウントが見つかったら、その有効なアカウントを検索エンジンで検索してみる。
すると、その人のブログやSNSが発見できる可能性がある。そのプロフィール情報から色々な情報を取得することができる。
生年月日や趣味、車のナンバー、出身学校など。
このような情報はパスワードに使われたり、パスワードリマインダー(秘密の質問)に使われていたりする。
 
・これらの情報を、パスワードクラック用の辞書に追加
・有効なメールアドレスの列挙。メールアドレスの「@ドメイン」前はシステムのログインアカウントである可能性が高い。
 
 
5/5(水)0:21 このブログを書き終え、これから投稿です。
どんなことも続けていくことって大変だな、と思います。
一つずつ積み重ねていくと道は開けると信じて引き続き頑張ります。
頑張るよ!
 

学習教材①

Udemy

Vue JS入門決定版!jQueryを使わないWeb開発

中村祐太さん

 

学習教材②

Udemy

情報セキュリティEthical Hacking

阿部ひろゆきさん

 
 

4/27(月)〜30(木) の学習ログです(主にvue.jsとセキュリティ)

こんにちは、安藤です。

今日は夏を感じるくらいの陽気で気持ちがいいです。

 

有り難いことに僕には一緒にプログラミングの学習をしている仲間がいます。

その仲間が先日のミーティングでファイナルファンタジーの話で盛り上がっていまして、僕もその話に入りたくて昨日からFF Ⅳを始めました。

 

このFF4のアクションを、有名な本「7つの習慣」などに出てきます「緊急度と重要度」の4象限で分類すると、私にとっては「緊急ではなく重要なこと」になります。

ここに分類されるものは、それこそ今勉強しているプログラミングや英語などです。

ゲームなので、一見「緊急ではなく重要でもないこと」に分類されそうに見えますが、共通言語として相互理解のため、またエンタメのエッセンスを知るため、また文化を知るためと、かなり多くの要素が含まれています。コスパいいやん。

一言でいうと「楽しい」です。

また、これから最新の技術を学びアウトプットして世の中にリリースするには、ゲームの世界はとても適しているとも考えています。

理由は、そこで起こることが「人の生死に直接関わらないから」です。

誤解がないように説明すると、医療では人の生死が関わります。自動運転の技術も同様だと思います。この分野では最新の技術を運用してテストを繰り返し、安全の確証を得てから出ないとユーザーにお届けできません。

つまり、最新の技術から一周遅れで世の中にリリースされます。

ゲームは直接生死を司りませんので、技術をユーザーに届けやすい分野かなと考えています。

 

長くなりましたが、自分の思考のログとしてこのブログに残しておきたいと思います。

ということで、学習のログです。

 

4/27(月)

vue.jsで、「bitcoin価格表示アプリ」の学習をしました。

bitcoinの価格はAPIからデータを取得して表示させる
HTTPクライアントaxiosを使う
Coin Desk Bitcoin Price Index APIを使う
、、、と、進めていたらこのAPI使えねーじゃんか!!
ということで、手を動かす学習から動画閲覧のみの学習へ。

 

余談です。
ドラマ「M 愛すべき人がいて」が面白くて、影響を受けて高校生ぶりに浜崎あゆみさんを聴ました。懐かしかったw

 

 

4/28(火)

◎Vue.js
<テンプレート構文について>
●v-onceディレクティブ
初回だけテンプレートを評価し、それ以降は静的なコンテンツとして扱いたい場合に使う。
描画更新のパフォーマンスを上げたい時に使う

●v-preディレクティブ
要素と全ての子要素のコンパイルをスキップしたい時に使う
ユースケースとして
・生のmustacheタグを表示したい時
xss対策
・ディレクティブのない大量のノードをスキップすることで、コンパイルのスピードを上げる

●v-htmlディレクティブ
プレーンなhtmlを挿入したい時に使う
指定したinner htmlの要素を更新できる
【注意点】
xss脆弱性を引き起こす可能性があるため、慎重に使用すること。
・使用するデータやテンプレートは信頼できるもののみとする
・サービスを利用するユーザーが入力したコンテンツには絶対に使用しないこと。

●v-cloak(クローク:覆い隠す)ディレクティブ
使いどころは、ページを表示開始し始めてからインスタンスの作成が終わるまでの間にmustacheタグなど、コンパイル前のテンプレートが表示されてしまうのを防ぎたい場合。
要はチラつきを防止したい時ということ。
【流れ】
インスタンスコンパイルが終了するまで非表示にしたい要素に、v-cloakディレクティブを設定する。
CSSでv-cloakがついている要素を非表示にする。
v-cloakをCSSセレクタとして使うには「[ ] 」ブランケットを使う。

ex) [v-cloak] { display: none; }
③v-cloakディレクティブはインスタンスコンパイル)の準備が終わると自動的に取り除かれる。そのタイミングでCSSも当たらなくなる。

●v-textディレクティブ
mustache構文の代わりにディレクティブを使いたい場合に使用する。
どちらを使ってもいいけど統一すること。

 

4/29(水)

◎Vue.js
<テンプレート構文について>
バインディング
mustacheタグのテキストはバインディング式と呼ばれている。
【式の種類】
JavaScript
データバインディング内部でjs式を利用できる
※注意点として、各バインディングは、単一式のみを含むことができる。文は動作しない。

式は「=」の右辺に記述できるもの。
フロー制御も動作しないので、三項演算子を使う。
・フィルタ

 

4/30(木)

◎Vue.js
<テンプレート構文について>
●ローカルフィルタ(vueインスタンス内に定義)
式の終わりに任意のフィルタを追加することができる
{ { 式 | フィルタの名前  } }
●グローバルフィルタ(vueインスタンス生成前に定義)
Vue.filter(フィルタ名、フィルタ動作)
●フィルタの連結
複数連結することができる
パイプでつなぐ
●フィルタには引数を渡すことができる●v-bind 省略記法
「:」を残して「v-bind」は省略できる
出力されるhtmlは同じ
可読性は完全な構文。記述を統一することも大切

 

◎セキュリティ
ホワイトハッカーについて
攻撃者としてのハッカーと同等のスキルを持ち、その知識と技術をセキュリティのために使う人間のこと。
●ホワイトハッカー(Ethical Hacker)のスキル
・防御→防衛手段の立案、機器の構築・設定など
・監視→状況の確認、対策など
・検出→異常の確認と特定など
・分析→インシデントの確認や根本原因の特定など
・対応→適切で効率的な対応とフィードバックなど

経済産業省情報処理振興課より、今後必要となるセキュリティ人材
・ホワイトハッカーのような高度なセキュリティ技術者
・安全な情報システムを作るために必要なセキュリティ技術を身につけた人材
・ユーザー企業において、社内セキュリティ技術者と連携して企業の情報セキュリティ確保を管理できる人材

●ホワイトハッカーに必要な基本項目
【知識】
・OSやネットワークの基礎知識
・セキュリティの基礎知識
・攻撃者に関する基礎知識
・攻撃手法の基礎知識
・リスク評価手法や脆弱性診断手法
・インシデント対応や運用手順
【技術】
使用する技術は攻撃者が使うものとほぼ同じ。
一見、攻撃されているのか、ホワイトハッカーに調査されているのか見分けがつかない。
【倫理観】
クライアントの同意と強い倫理観攻撃面に加えて防御面の知識と技術も必要
・過去の事例
・最新のテクニック

ハッカーとクラッカーについて
ハッカーとは?
→優れたコンピュータスキルを持つ個人で、コンピュータのソフトウェアやハードウェアを作成して調査することができる人物のこと。
クラッカーとは?
→ハッキングの技術を犯罪に利用する人
Crime Hackerの略
一般的はハッカーと区別するために使われる言葉。

●攻撃が生まれる方程式
攻撃 = 方法 + 脆弱性 + 動機
【動機の種類】
・国家的な利害関係
・金銭
・享楽
・怨恨
【攻撃特定性】
・高い→そのターゲットを攻撃するしか意味がない場合
・低い→攻撃できればどこでもいい場合
多くは動機に依存する。ハッカーの種類1】
・ブラックハット → 犯罪
・ホワイトハット → セキュリティ
・グレーハット → ブラックとホワイトを行ったり来たりする人。再犯者。ハッカーの種類2】
サイバーテロリスト → 国家的な破壊行為
ハクティビスト → 政治的なもの。自分の主義主張のため。
・国営ハッカー → 国家的な活動ハッカーの種類3】
・スーサイドハッカー → 自爆型。サイバーテロリストに多い。
スクリプトキディ → スキルの低い人達

 

とうとうフロンドの技術に飽きてしまい、セキュリティの学習を再開しました。

深夜3時、 「もう頭も体も動かない」ってところからでしたが、 なんか停止してたはずの頭が動くわって(笑)

この状況で始めちゃう時点でバグってますが。。。学び始めたら楽しい。

vuejsも継続するけど、学習内容を増やして並列で行っていくことにしました。

仲間がすでにそのように多動的な学習に取り組んでいて、刺激を頂きました。

 

Vue,jsは「一旦やっとかなきゃ」ってことで。

セキュリティは単純に興味があること。

だから楽しさが全然違うのですね。

多動するとそういったことが明確になるのでいいですね。比較できるから。

医学を学んでいた時は、解剖生理、薬理、生化学みたいに飽きたら次、また飽きたら次って色々してました。結果、めちゃ成果が出ました。

今回も同じようにめちゃ成果が出ると嬉しいです。

 

ということで、引き続き、vue.jsとセキュリティを中心に学習を進めていきたいと思います。

頑張ります。

 

学習教材①

Udemy

Vue JS入門決定版!jQueryを使わないWeb開発

中村祐太さん

 

学習教材②

Udemy

情報セキュリティEthical Hacking

阿部ひろゆきさん

4/24(金)〜26(日) の学習ログです(主にvue.js)

こんにちは、安藤です。

あ、私、安藤と申します。

改めてまして、宜しくお願い申し上げます。

 

山里さん×田中さん×弘中さんの「あざとくて何が悪いの?」が好きです。

男女の心模様にフォーカスされていて面白いです。

 

さて、ということで、今日も僕の学習ログです。

 

4/24(金)

この日はブログの執筆と
「ソフトウェア・ファースト」を読み進めた

以上でした。

勉強時間を作れないことってあるよね!って日でした。

こんな日も仲間は変わらずにめちゃ努力していて、「明日こそはなんとか時間を捻出したい!勉強したい!」とパワーをもらってます。

そうそう、プログラミング関連のタスクをチームでトレロを使って管理しているのですが、これが良いんです! チームのどなたかに動きがあると自分も頑張らなくちゃ!と素直に思えてやる気が増し増しになるのです!

仲間のパワーで本当にすごい。

 

4/25(土)
フロントエンドオンラインイベントに参加
声が聞きにくくて短い時間しか視聴できなかった。
でも、いい経験になりました。これも経験しないと分からないことだからね。

 

vue.js
これまでの復習をしました。
やっぱいこのフレームワークは本当に使いやすそう。

jsFiddleを使わず、テキストエディタを使った開発について
jsFiddleは本格的な開発には向かない
Vue.jsは、「vue.js cdn」で公式サイトへ遷移して、cdn のセクションで読み込みのコードがあるのでコピーする。
それをbody終了タグの直前に貼り付ける。
JavaScriptの読み込みコードは、vue.jsコード(cdnの)の直後に記述する。
HTMLがファイルを読み込む順番として、vue.jsを読み込んでから、javascriptを読み込む。
CDNとは「Content Delivery Network」の略で、同一のコンテンツを、 多くの配布先、多くのユーザーの端末に効率的に配布するために使われる仕組みのこと。

 

ソフトウェア・ファーストを読み進めた。コツコツ少しずつ読んでます。
今日は頭がスッキリしなかったので、仲間からランニングが良いとお聴きしたので僕も走ってきました。ついでに筋トレも。スッキリしました!

運動はいいですね!全然汗が出ない体になってて危機感を覚えましたが(汗)

違う意味で汗をかきました(笑)

 

 

4/26(日)

この日は、vue.js の学習頑張ったと思う。
Udemyの講座に沿って、todo管理アプリの開発をしました。
●Viewインスタンスとルートテンプレートの作成
テンプレートにvue.jsを読み込ませる。cdnからコードをコピーしてくる。
Viewインスタンスは変数に入れておく(変数は使わなくても良い)
テンプレートにルートテンプレートを作成する
Vueインスタンス側でルートテンプレートをマウントする。
el: オプションに要素を指定する。値は、idセレクタで指定するので「#」をつける。

●追加ボタンのイベントハンドリングについて
●inputのvalueを双方向データバインディング
●タスクの追加
追加された分を配列に格納する挙動が思うようにいかず苦戦。。
メンター欲しいと思ったけど、自分で調べて、、、
もしやこれは勝手にリロードされてるんじゃないか!
と当たりをつけて調べたらヒット!
buttonタグは属性を持たせないと自動でリロードしちゃうのね。
自力で解決できて嬉しい。

●インプットタグ内が未入力ならタスクを追加しない
If文でメソッド内で条件分岐させる。未入力なら、return;で返してその後の処理に進まないようにする。
プログラミングって実はすげーシンプルかも。

●タスクのリスト表示
配列のデータをリスト表示させる。

●タスクの完了、未完了の管理
各タスクへのチェックボックスを作る
変数todoに、isDone: falseを書いたらエラーとなった。
v-model=“todo.isDone”とテンプレートに記述するだけで良かった。自動でやってくれてるんか。。

●スタイルの設定
cssでリストマークを非表示にする
cssで完了したタスクにチェックしたら横線で消える処理

●タスクの削除
buttonタグでdeleteボタンを作り、v-on:clickでイベントハンドリングする
ハンドリングするのは楽しい。

●動作確認
デバッグ用のコードはコメントアウト
ということで、完成だー!!

vue.jsでtodoアプリを作ることができました。

面白かった。
分かりやすいし、書きやすいし、これならフロントもいけそうで嬉しいです!

 

◎ソフトウェア・ファーストを読み進めた。これは変わらず。

1日1ページでも1節でも1行でも取り組むようにしています。

 

この日は久々のコーディングをしました。

自分の書いたコードでプログラムが動いた時ってなんでこんなに嬉しいんだろう。

そう思って考えたところ、困難なこと越えているから。 という答えが出た。

簡単なことは面白くないし、できるようになったら興味はその次に移ってしまうから、

この1回1回の「やったー!!」という喜びを噛みしめたい。

 

ということで、引き続き、vue.jsを中心に学習を進めていきたいと思います。

頑張ります。

 

 

学習教材

Udemy

Vue JS入門決定版!jQueryを使わないWeb開発

中村祐太さん