ITパスポートの学習でのポイント

点数の上げ方

点数の上げ方は要素として3つある。

  1. 知識がないものをあるものにする。
  2. ケアレスミスをなくす
  3. 知識はあるけれど、言い換えであったり組み合わせによる応用ができない。

以上3つになる。

これを一つずつ丁寧に潰していくことが点数向上はては、知識の深さにつながります。

要素がわかったとして実際にどう学習してくか?

知識がないものをあるものにする。

取り組んだ問題に対して取り組み方に対して評価する。その後知識がないものについては、理解が出来ないという現象がおきるのでそこからさらに、理解がなぜ出来ないのかを深ぼる。単語一つ一つを調べて言葉をつなげたり、例えを使って自分なりに表現をしたり。その工程が増えると知識の定着につながる。

ケアレスミスをなくす。

これは自分の中のミスのパターンを把握すること。何度も何度もミスをして次はミスしない!と決めてもやっぱりミスはするので、知識と同じくミスを理解して知識としてためていく。

知識はあるけれど、言い換えであったり組み合わせによる応用ができない。

これもケアレスミスをなくすと同様ですが、回数をこなしてパターンを把握していく事で自分の中の手札として蓄積することで応用を聞かせることが出来る。
その手札が多ければ多いほど、手札通しを組み合わせるパターンや短縮するパターンが出てくる。

回数をこなす事が辛い

とはいえ、何度も回数をこなすのは精神的にしんどくなかなかわかっていても取り組めないこともしばしば。
リフレッシュと学習の時間配分。最後は精神力。だらけてしまったり向かい合えなかったら、生活の悪いところ、背景や今の精神状態を冷静に見直す。

食べ物や睡眠は大丈夫?

 

参考記事

得点できない理由は3つしかない | 東大→東大大学院→600個超保有の資格王が教える点数稼ぎの勉強法 | ダイヤモンド・オンライン

情報セキュリティについて

情報セキュリティとは

 

情報セキュリティの国際規格であるISO/IEC27000において、

機密性、完全性、可用性を維持する事

と定義されています。

 

この機密性、完全性、可用性の単語の意味を明確に理解することでより明確にセキュリティに対する意識を強める事が重要になります。

 

機密性: 情報を漏洩しないようにすること。暗号化などが機密性向上の手段ですね。

完全性: 情報及び処理方法が正確であり完全であること。ディジタル署名などがその情報は正確ですよと証明することになります。

可用性: 利用者が必要な時に情報資産を利用できるようにすること。いつでも使えるようにすることが可用性の向上ですね。

 

ITを学習していく上で他にも〇〇性という言葉を使うことがあるので同時にその他の言葉も整理しておきましょう。

 

ソフトウェアの品質特性

機能性: 目的や要件に従って正しく動くこと。

使用性: 利用者にとって理解、習得、操作しやすいこと。

信頼性: 必要な時に使用でき、故障時には速やかに回復できること。

効率性: 応答時間や処理時間など求められる性能が備わっていること。

保守性: 修正しやすいこと

移植性: 他の環境へ移しやすいこと。

 

 

単語単語の理解が感覚でわかっているけれど実際にどういった物中を自分の言葉に置き換えていくと覚えやすい。

あぁ〇〇ということね!みたいな要領で。

nginxとは、、

nginxとは

ロシアのIgor Sysoev氏によって開発された、webサーバー兼プロキシソフトウェアです。エンジンエックスengine xと呼びます。

 

webサーバーはまぁ何となく分かる。ウェブページを見るために色々動いてくれるプログラムってことだと思う。

プロキシソフトウェア??

プロキシってなんか聞いたことがあるような。。

 

プロキシとは from wiki

代理」の意味である。インターネット関連で用いられる場合は、特に内部ネットワークからインターネット接続を行う際、高速なアクセスや安全な通信などを確保するための中継サーバプロキシサーバ」を指す。

便利に動かすために必要な中継サーバー

nginxtは中継サーバーである。

 

nginxの特徴

C10K問題に対応している。

C10K問題(クライアント1万問題)

要はパソコン使う人が多くなってサーバーの利用者が増えると本来の処理に時間がかかることをイベント駆動型アーキテクチャを採用して解決している。

イベント駆動型アーキテクチャ。。。これを調べてみたんですが、ちょっと難しくちゃんと理解するのにかなり時間がかかりそうなのでまた今度。

今のところは、たくさんの利用者がいても混み合わず渋滞整理をしてくれる機能があるよぐらいの認識で。

静的コンテンツを提供するwebサーバー

nginxはリバースプロキシを採用している。

リバースプロキシとプロキシの違いとは?それぞれのサーバーの仕組みは? | サイバーセキュリティ情報局

(クライアント側で直接やり取りしてるのがプロキシ。

(サーバー側でやり取りしてるのがリバースプロキシ。

 そのため、キャッシュが静的コンテンツをキャッシュとして保存可能になり、同じリクエストが来たら、そのキャッシュを使って高速通信が可能になる。

 

う〜ん難しい。。

簡単にまとめると静的コンテンツ(htmlとか画像とか)を動かす際にスムーズに動かしてくれる便利なやつ。

ひとつのプログラムに任せるんじゃなくて色んな動きを小分けにして分業していく事・

まだまだ浅いので単語一個一個の理解が必要。。

HTTPを理解する

HTTPとは

インターネット用語1分解説~HTTPとは~ - JPNIC

HTTPは、 「Hyper Text Transfer Protocol」の略です。 今やインターネットの代名詞となったWWW(World Wide Web)上でWebサーバとクライアントが、 HTML(Hyper Text Markup Language = Webページを記述するための言語)で書かれた文書などの情報をやりとりする時に使われる通信手順(プロトコル)を意味します。

 

と書かれています。

はい?????

もう言葉一つ一つがキャパオーバー。

一個一個分解していきましょう。

 

・www World Wide Web - Wikipedia ≒ インターネット

・webサーバー ≒ 自分のコンピューターとは別に動いてるコンピューター

今見てるページも何もナシに表示してるわけじゃなくて何か表示するための入れ物がある。文字を書くなら紙だったり書いた文字を表示する物が必要。情報通信をするときに通信した情報を表示するための媒体となる物とシステムがwebサーバー

・クライアント ≒ 自分

普段自分たちが見ているウェブページとかも、どっかの誰かが用意したコンピューターに〇〇見たいから表示して!って連絡して、その連絡がつくことで表示できてるんですね。

 

その連絡をする時にルールとかが無いと誰がどこに何の連絡したかがぐちゃぐちゃになるしわからんくなるってことで、そのルールを決めた。

そのルールがHTTP

で!今まで勉強してたことはそのルールね!

 

ではではどんなルールがあるのかな?ってことで

HTTP入門 - とほほのWWW入門

こちらを見たところ急にレベルがぶち上がってるじゃありませんか!!

また拒否反応が、、、

 

一個一個ゆっくり見ていきましょう。

HTTPのサンプル

ブラウザで Webページを開く際、ブラウザはサーバに下記のような要求メッセージを送信します。

HTTP
GET / HTTP/1.1
Accept: image/gif, image/jpeg, */*
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;)
Host: www.xxx.zzz
Connection: Keep-Alive

これに対してサーバは下記のような応答メッセージを返します。

HTTP
HTTP/1.1 200 OK
Date: Sun, 11 Jan 2004 16:06:23 GMT
Server: Apache/1.3.22 (Unix) (Red-Hat/Linux)
Last-Modified: Sun, 07 Dec 2003 12:34:18 GMT
ETag: "1dba6-131b-3fd31e4a"
Accept-Ranges: bytes
Content-Length: 4891
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

<!DOCTYPE html>
<html>
  :
</html>

急にこんな文字書かれても困る!!

 

冷静にゆっくり見ていきましょう。

 

普段自分たちが使っているグーグルクロームとかsafariなどのブラウザでは見えませんが、ちゃんと中ではこんなやり取りがされているんだそうな。

ホントに!?ほんと?とりあえずそうなんでしょう。

要求メッセージというのがこれ見たいんよ情報頂戴!ってクライアント側が送ってる方の書き方で、

応答メッセージというのが「あんたが見たいのこれでしょ!」って返してくれてる書き方。

 

役所でも住民票見たい時色々書かないといけないし住民票は色んな情報が入ってる紙で渡されるし、、、たぶんそんな感じ。これ伝わるのか!?

 

で送る側の一番のポイントその1

リクエスト行

リクエスト行は下記の書式で表します。

リクエスト行
メソッド パス名 HTTP/バージョン

パス名は通常、/aaa/bbb/ccc.html のような、スラッシュで始まるパス名や、http:// などで始まる URL が指定されます。バージョンは現在は 1.1 が主流です。

チョッチョチョット待ってこれブラウザは何も意識してなくても送ってくれてるけど手動でやる時どうするの!??ってことで

今回学習で使われたのが、telnet

 

telnetとは

Telnet - Wikipedia

Telnetテルネット Teletype network)とは、IPネットワークにおいて、遠隔地にあるサーバルーター等を端末から操作する通信プロトコル、またはそのプロトコルを利用するソフトウェアである。

 はい〜何でもかんでもプロトコル

簡単にいうと遠隔操作するためのソフトウェアとその決まりごと。

なんで遠隔操作??そうさっき

普段自分たちが見ているウェブページとかも、どっかの誰かが用意したコンピューターに〇〇見たいから表示して!って連絡して

って書いたようにどっかの誰かが用意したコンピューターを操作して表示して!って言わないといけないから。これが遠隔操作する事になるそう。

今は盗聴とか脅威からsshという守りが強いやり方でやってるのが主流。

今回は基礎の勉強ということでこちらを使用。

 

ではtelnetというソフトウェアをどうやってつかうの?

telnetコマンドをターミナルで使うんです!

ってことで早速使ってみましたがcommand not found。。。

mac os High Sierra 以降はhome brewでインストールしてね!ってことなので

brew install telnetでインストール。

M1 のbrew関係で詰まればまた色々設定がbrewを入れるところからやり直さないといけませんでしたが自分の場合は環境構築は一通り網羅してたのささっと導入。

 

じゃあさっそくtelnet

やりかたは

telnet 〇〇(ここにドメイン名かIPアドレス) ポート番号(今回は80)
※なぜ80かはHTTPを使って通信をするから。
ポート番号については珍しくwikipediaがわかりやすかった。

ポート (コンピュータネットワーク) - Wikipedia

ドメイン名については

分かりやすいURL構造を設計しよう「ディレクトリ名・ファイル名の付け方」 : ビジネスとIT活用に役立つ情報

こちらを参照。わかりやすかったです。

 

でやっと接続するサーバーに情報頂戴!って伝える一歩手前まで来ました。

 

じゃあここから何をするかって言うと、HTTPのルールに従ってリクエストを送るわけですよ。

リクエスト行
メソッド パス名 HTTP/バージョン

 これを使って

今回はまず普通に

GET パス名 HTTP/1.1 と入力。

その次に必須なのが、

◆ Host (要求)

HTTP/1.1 で唯一の必須ヘッダです。ブラウザからサーバに対して、サーバ名を送信します。サーバが名前ベースの仮想ホストをサポートしている場合、この名前を手がかりにどのサーバとして振舞うか決定されます。例えば、http://aaa.sample.dom/http://bbb.sample.dom/ は実は同じサーバ(IPアドレス:61.206.47.206)ですが、Host ヘッダでホスト名を指定することにより、仮想的に 2つのサーバとして振舞うことが可能になります。

Host: aaa.sample.dom

 こいつが必要とのこと。

telnetコマンドのときに書いたドメイン名をホストに記述

これで通信リクエストが成立!!

でサーバーから、はいっこの情報どぞ!ってくるのが応答メッセージ

その中に含まれているのが皆さんおなじみのHTMLの書き方達。

やっと馴染みあるものが表示されたよ。。

 

こんな感じにHTTPの通信の流れは

要求メッセージ

(〇〇が欲しいんだよ。例:日本語で!jepegで!そっちにデータ保存するために

メソッドPOSTで、保存したい文字はこれで、文字は全部で何bytesだからよろしく、とかとか)を送っていく。

それを受けたサーバー(ウェブページを表示させるコンピューター)が

応答メッセージを送り返してくれる。

 

という感じになっている。

ちなみにPOSTメソッド使うときは

POST - HTTP | MDN

ここの説明を参考にしました。

 

ブラウザはこれを自動で簡単にやってくれてるんですねーありがたや。

 

要求メッセージと応答メッセージについて

何が必要で、どんな時に何を書くのかはまた今度。

 

 

 

 

 

見直したら文字サイズとか日本語とかぐちゃぐちゃだけど、とりあえずアウトプット出来たから良しってことで。

 

 

 

wcコマンドで1単語で2単語文計算される日本語

今回wcコマンドをrubyで実装するにあたって、wcコマンドの挙動を確認していたところ表題の現象にぶち当たりました。

どの文字が1単語で2つカウントされているのかを調べていたところ文章という文字の後ろに文字が入力されると1単語とカウントされていることに気づきました。

では、なぜ文章が2つカウントされているのか?

原因

  1. wcは1バイトごとで読んでいる。
  2. 日本語はマルチバイト
  3. などの漢字はマルチバイトの中に16進数unicodeのNBSPに値する数列が入っている。
  4. そのため1バイトごとで読んでるwcコマンドはNBPSのせいでスペースが入っているとカウントして1語増える

フィヨルドブートキャンプの生徒さんの説明がめちゃくちゃわかりやすかったのでまるまる引用すると、

佐藤(@universato) さん

詳細を説明すると、不可解な挙動が起きる原因は、(オプションなしの)wcコマンドが、マルチバイトの日本語などへ対応しておらず、1バイト単位で見ているためです。
Rubyだとbytesメソッドで文字列をバイト単位に分割して、その数値をto_s(16)で16進数表記に変換することで、文字コードを見れます。

p "章".bytes # => [231, 171, 160]
p "章".bytes.map{ |b| b.to_s(16) }   # => ["e7", "ab", "a0"]

の文字にはA0が含まれており、これがwcの単語の区切りを示すうちの1つのNBSP(ノーブレークスペース)と判定されてしまうため、単語数が多くカウントされてしまいます。NBSP(ノーブレークスペース)の文字コードを調べれば、0xA0U+00A0と書いてあるはずです。このようにNBSPが含まれる単語は、日本語の中にそれなりの頻度で入っているので、カウント数がおかしくなります。

とのことでした。 

文字コード奥が深い!!!

・NBSP(ノーブレークスペース)のunicode番号

Unicode一覧 0000-0FFF - Wikipedia

・マルチバイトについて

マルチバイト文字(多バイト文字)とは - IT用語辞典 e-Words

・NBSPとは??

HTMLで空白を入れたい時に使う謎の文字&nbsp; とは? | あ総研

 

NBSPの実際の使用を想像できていないので半分ぐらいしか理解できてませんが、、

 

今日もまた学び

 

wcコマンドをrubyで実装

unix系のosにはwcコマンドがあり、それをrubyで実装するという事を学習しているのですが、そもそもwcコマンドに対する認識が弱かったのでおさらい。

 

wcコマンドとは

wc (UNIX) - Wikipedia

Word Count の略

UNIXオペレーティングシステムのコマンドの一種。

標準入力か指定されたファイルのリストを読み込み、各種統計情報を生成する。出力情報としては、バイト数、単語数、行数(改行文字の個数)などがある。複数のファイル名を指定した場合、各ファイルの情報と合計が表示される。

 ふむふむ。文字カウントのコマンドね。

 

通常の使用ではコマンドの横に入力したファイル名を読み込み文字をカウント。

ここまではわかる。wcのみで動かしたところ普通に文字を入力する状態が永遠に続いたので???と疑問がでた。

どうやらwcのみで入力したときは標準入力を受け付ける状態になり、標準入力を止めるにはCtrl+dを押して停止させて、その結果の文字数などをカウントしてくれるようです。

unixではCtrl+dは標準入力の終了を命じていているそうです。

ちなみにCtrl+z プログラムの一時停止(維持はしている。復帰にはjobsコマンドで維持しているプログラムを確認。fgコマンドで番号指定して復帰)

 

ということでだいたいの動きがわかったので、要件を確認

・-lオプションも実装すること。
・標準入力からも受け取れるようにして実行結果と出力を提出する。
・引数にファイル名が複数個来た場合にも対応し実行結果と出力を提出する。
・自作のls -lコマンドと自作のwcコマンドをつなげた出力を提出する。
・本物のls -lコマンド、本物のwcコマンドをつなげた出力を併記して提出すること。

 

・-lオプションも実装すること。

これは行数とファイル名が出力されればいいということ。

・標準入力からも受け取れるようにして実行結果と出力を提出する。

これはgetsメソッドなりを使って入力状態が実行結果?

出力はそれを処理した出力?ここらへんがいまいちわからない。

・引数にファイル名が複数個来た場合にも対応し実行結果と出力を提出する。

やっぱり実行結果と出力の認識がいまいち理解できていない。

・自作のls -lコマンドと自作のwcコマンドをつなげた出力を提出する。

・本物のls -lコマンド、本物のwcコマンドをつなげた出力を併記して提出すること。

これも結局出力の意味がターミナル出た結果なのか、ファイルに標準出力をリダイレクトさせることを意味しているのかが理解できていないので要質問。

 

 

ということで質問しないと始まらなさそうなので質問します!

人のアウトプットを見て真似る

フィヨルドブートキャンプは毎日学習終了時に日報を書くんですが、まぁ皆さんの日報が綺麗なこと!!

見てるとあぁ自分はこんなに綺麗なアウトプットできないなーと感じる事ばかりでしたが、

 

いつまでも感じてばかりはいられない!

 

ということで、今日の日報はいい人の日報をまるパク。。ではなく参考にさせていただきました。

 

やっぱり技術の進歩は真似ることからなんです。

いずれは0から1を生み出す側になって真似られたい。

 

この動画を聞いてるとゲーム業界も真似ることから初めて業界全体が向上してるそうです。

www.youtube.com

 

まぁこの場合の真似るは儲けるためですけど。。著作権問題とかこの話、おもしろいですね。

 

ステージは違えど根っこのプロセスは似てますよね。

臆面もなく真似ていきます。(自分の色出して)