okinawa

勉強メモ

情報学へのとびら

放送大学情報コースの科目、情報学のとびらで学んだことのまとめ。

基本情報試験の範囲と近い。

教科書がわかりやすくてよかった。

授業はこれから見る予定。

1、情報化する社会を生きる

本科目の目的
  1. 情報リテラシー・ICTリテラシーの知識の習得
  2. 情報学の包括的な理解
 

2、情報デジタル表現とマルチメディア

デジタル情報処理の流れ

物理量→符号化→数値(列)→計算→数値(列)復号→物理量
 
デジカメに当てはめるとこんな感じ?
写真撮る(物理量)→符号化→数値(列)としてデータ保存→撮った写真を見る→計算→復号→画像表示(物理量)
 

符号化とは

符号化は情報の一面のみに着目した抽象化が行われる。
たとえば、文字は固有の番号(文字コード)に置き換えられる。
現実には文字情報には大きさや色、書体なども含まれているが、符号化ではこれらの情報は省かれる。
 
・標本化
電気信号を一定の時間間隔(周期)で計測すること。
計測の瞬間以外の情報はすべて捨てている。
例:音声の標本化
1秒間で100回音圧を計測。
 
標本化した値を一定の精度に丸めること。
例:標本化した値が36.944とする。
有効桁数3桁なら、四捨五入して36.9とする。
 

アナログ情報は劣化しやすい

例:写真の複製
撮った写真を現像して、またその写真を撮って現像を繰り返すと劣化していく
 

デジタル情報は劣化しにくい

誤り検出符号や誤り訂正符号でデータの誤りを防ぐ

誤り検出符号

誤りを検出する。
検出したらデータの再送依頼をして正確な情報を得る。
 
一定のビット数毎に1の数が奇数か偶数になるようにもう1ビットを加える方式。
例:1の数を偶数に
101100→1011001 1を加えて1の数を偶数にする。
110110→1101100 0を加えるので1の数は偶数のまま。
 
問題点:2つのビットが同時に誤っていた場合に誤りを検出できない。
例:110011→000011 どっちも1が偶数。
 

誤り訂正符号

検出するのではなく、訂正する。
例:元のビットを3つ連結する→1ビットごとに多数決で値を確定する。
1011→1011 1011 1011→1011で確定 全部正解
1011→0011 1011 1011→1011で確定 1桁目は0が1票 1が2票なので多数決で1になる
 
問題点:符号が3倍の長さになるので効率悪い。
たまたま同じ桁が誤っていたら訂正できない。
 

疑問:アナログとデジタルの境界とは?

例:音声のデジタル化の場合。
音をマイクで拾い、マイクの振動版を震わせ、その振動が電気信号に変換されて出力される。
その結果、音の波形と電気信号の波形が相似形になる。
ここまではアナログらしい。
電気信号に変換=デジタルだと思ってたけどそうじゃないみたい。
さらに標本化をするとデジタルになるようだ。
標本化によって捨てられる情報がある。
情報を削ぎ落すのがデジタル化?
アナログ:連続的
デジタル:離散的
離散的とは連続的ではないさま。数学で、値や数量がとびとびになっているさま。
 

3、コンピュータの構成要素とその機能

PCの構成要素

主記憶装置(メモリ)
中央演算装置(CPU)
入出力制御装置:周辺機器とのデータのやり取りの仲介
画像処理装置(GPU
その他の処理装置:音声処理装置やLANなど
バス:上記の装置間のデータのやり取りを行う通信経路
周辺機器:キーボード・マウスとか
チップセット:周辺素子をまとめたもの?
マザーボード:CPU・メモリ等の各装置を装着する基盤
I/O:CPUと周辺機器を接続し、データを入出力する。キーボード、マウス、HDD、ネットワーク、スピーカーなどとの接続。

コンピュータにおける計算の原理

否定(NOT)、論理積(AND)、論理和(OR)をいい感じに組み合わせると四則演算ができるらしいぞ。

2の補数

2進数で負の値を表現するためのもの。
10進数は数字の先頭に「-」を付けることでマイナスを管理(表して)いますが、2進数先頭1ビットが「1」の場合にマイナスであることを表します↓
2進数(4ビット)表現
2の補数
普通の2進数
0000
0
0
0001
1
1
0010
2
2
0011
3
3
0100
4
4
0101
5
5
0110
6
6
0111
7
7
↓ここから先が重要
先頭ビットが1のものは負とする↓
ここからも1ずつ増えていく↓
1000
-8
8
1001
-7
9
1010
-6
10
1011
-5
11
1100
-4
12
1101
-3
13
1110
-2
14
1111
-1
15
2の補数は2進数の符号を逆転する場合に使用する計算方法です。
・2の補数の出し方:ビットを反転して1を足す。
 10進数のー12=1100→0011+0001→0100
・2の補数と2進数の計算
例:4+(-2)
 0100 + 1110 =1 0010
 →溢れた1は取り除くと0010
 →答えは0010=2
・原理
 2の補数と元の2進数を足すと必ず0になる。
 N(元の2進数) + N2(2の補数)=0
 なので「N2=-N」ということになる。
 
 例:3
 0011+1101=1 0000 = 0
 こんな感じで必ず桁あふれで0になる。 
 

4、インターネットの歴史と仕組み

回線接続からパケット交換へ

昔の電話は2地点を電線で繋いで、アナログで音声を送っていた。
全ての家庭を直接電線で接続するのは不可能なので、電話局に交換盤を置いた。
交換盤を手動で繋ぎ変えて電話を繋いでいたらしい。
おもしろー。
 
交換盤にも限界があったので、1つの回線で異なる相手と通信できる方法が必要になった。
それがパケット通信方式。
送りたいデータを細かく分割し、データ自体に宛先情報を持たせた。
この1つの細かいデータをパケットという。
 

インターネットのパケット配送方式

パケットが持つ宛先とはIPアドレスのこと。
パケットがルータに送られるとバケツリレー方式で宛先に届く。

ルータの働き

パケットがルータに届く
→宛先が自分のネットワーク内ならそこに届ける
→他のネットワークなら経路表を元に隣接ルータに投げる
→経路表にもなかったらデフォルトゲートウェイに投げる

経路表(ルーティングテーブル)とは

IPアドレスの対照表とデフォルトゲートウェイが記入されたもの。
経路表は常に更新されていて、通信障害があっても迂回路を選択できる。
具体的には、
  1. 代表ルータに向けて各ルータが接続状態などの情報を送る。
  2. 代表ルータがその情報を元にネットワーク全体の地図を作り、各ルータに送る。
これを常にやっているらしい。すごすぎない?

ルータのさらに先は?

ルータ→中小プロバイダ→上位プロバイダ→インターネットエクスチェンジ(高速通信施設)
→再び上位プロバイダ→海底ケーブル!→海外へ
 

DNS(Domain Name System)による名前解決

DNSとはインターネットの住所録。
IPアドレスは数字の羅列でわかりづらいから、URLに変換する。
DNSドメインの階層構造に基づいて、1つのDNSサーバが1つの階層を受け持つ。
例えばwww.ouj.ac.jpなら下記の通り。
www.ouj.ac.jpへの問い合わせはキャッシュサーバ→ルートサーバ→jpサーバ→acサーバ→oujサーバと辿っていく。
 

インターネットの応用

さまざまなプロトコル

OSI参照モデル

番号が若いほど下位層。物理が最下位。アプリが最上位。
  1. 物理層:電圧や電波の周波数など物理的なプロトコル
  2. データリンク層:同一ネットワーク内で接続された通信機器とのデータ通信に関わるプロトコル
  3. ネットワーク層:ネットワークをまたがったデータ通信に関わるプロトコル。IPはココ。
  4. トランスポート層:データの信頼背の確保に関わるプロトコルTCPはココ。
  5. セッション層:通信相手との論理的な通信路の確立に関わるプロトコル
  6. プレゼンテーション層:データの表現形式の変換に関わるプロトコル。テキストや画像等の変換・逆変換。
  7. アプリケーション層:メールやうぇぶなどの特定の高度なデータ通信サービスに係るプロトコル。HTTP/SMTP/POP/IMAPはココ。
このような階層化を行い、上層及び下層とのデータ受け渡し方法を厳密化しておくことで、他の層に影響を与えずにプロトコル交換が可能になっている。
 

データのカプセル化

下位層→上位層
各層では、上位層より受け取ったデータに何も手を加えず、ヘッダと呼ばれるデータを付加し、それを下位層にわたす。
ヘッダにはその層で必要となる情報が入っている。
上位層から来た荷物を開けずに、その上からその層独自の梱包をかぶせて下位層に送るイメージ。
 
上位層→下位層
各層が下位層から受け取ったデータのヘッダ部を解析してからヘッダ部を除去して、適切な上位層のプロトコルに渡す。
これは下位層から来た荷物を開梱して中身だけを上位層に送るイメージ。
ある階層のプロトコルにとってみれば、それより下位層のプロトコルに関する情報は除去されているので、下位層のことを気にしなくてよい。
そのため各階層のプロトコルが交換可能になっている。
 
TCP: transmission control protocol。パケットの順番をそろえ、必要に応じて再送要求を行って完全なデータを復元する。
誤り検出や誤り訂正を行っているのかな?
 
UDP: user datagram protocol。パケットの誤り検出はするが訂正せずに破棄する。パケットの順番も気にしない。
データの正確性は低いが高速通信が可能。
 
ポート番号:パケットにポート番号という16ビットの数値を付けて、どのプログラムによって送受信されたか識別する。
例えば、IPアドレスだとPCまでは届く。
しかし、どのプログラムに届ければいいかわからないのでポート番号を使う。
 

情報セキュリティ技術

情報セキュリティ

機密性:許可されたものだけが情報にアクセスできること。
完全性:情報が正確で完全である事。
可用性:必要な時に情報にアクセスできること。
 

脆弱性

バッファオーバーフロー:プログラムが想定して否大きなデータが入力された時、データ用に確保していたメモリ領域を超えてデータが格納され、プログラムに書きかえが生じる恐れがある。
インジェクション:XSSSQLインジェクション。タグやSQL文の埋め込み。
DNSキャッシュポイズニング:DNSIPアドレスDNSキャッシュサーバに一時記憶する。キャッシしてあるホスト名とIPアドレスの対応情報を書きかえる。
マルウェア:コンピュータウイルス、ワーム、スパイウェア等の不正な行為を行うソフトウェアの総称。
  • ウイルスはプログラムやファイルに寄生して不正行為を行う。自己伝染・潜伏・発病機能の内1つ以上を持つもの。
  • ワームは寄生せずに単独実行可能なプログラム。
  • ボットは本来検索エンジンの情報収集を行うソフトウェア。DDoS攻撃を行うこともある。
  • トロイの木馬:正常な機能を持ったソフトウェアを装い、その裏で不正を働く。
  • スニファ:ネットワーク上のパケットをモニタする機器あるいはソフトウェアで、本来はネットワークの管理や研究開発用。盗聴に使用されることがある。
 

暗号

共通鍵暗号方式

暗号化のためのカギと復号化のためのカギが同一の暗号方式のこと。
例:アルファベットの暗号化
アルファベットを1文字ずらして暗号化する。
復号化するときも同じ。
japan→kbqbm
kbqbm→japan
 

公開鍵暗号方式

暗号化用と復号化用のペアになる鍵が生成される。
一方のカギで暗号化した暗号文はもう一方のカギでしか復号化できない。
暗号化した鍵では復号化できない。
また、一方のカギからもう一方のカギを生成、推測もできない。
つまり秘密鍵は復号化のみ。公開鍵は暗号化のみ。
例:Aさんが鍵のペアを生成。
→一方は秘密鍵として自分で保管
→一方は公開鍵としてBさんに渡す
→Bさんは公開鍵で文書を暗号化
→Aさんは秘密鍵で文書を復号化
→公開鍵が盗まれても、復号化できないから問題なし。
秘密鍵だけが盗まれなければ良い。
 

電子署名

公開鍵暗号方式電子署名にも利用される。
電子署名は、署名が本人のもので、メッセージに改ざんがないことを証明する。
電子署名はあくまでも本人確認が目的で、盗聴防止などはできないっぽい。(平文を送信するから)
例:Aさんの電子署名
Aさんはメッセージをハッシュ化する
→ハッシュ化されたメッセージ(メッセージダイジェスト)を秘密鍵で暗号化する
→この暗号化されたメッセージダイジェストが電子署名になる
秘密鍵で暗号化されているから、これを作成できるのはAさんのみという証明になる
→Bさんに電子署名とハッシュ化前の平文を渡す
→Bさんは平文をハッシュ化しメッセージダイジェスト生成
→さらにAさんの電子署名を復号化しメッセージダイジェストを得る
→2つのメッセージダイジェストが一致すれば改ざんがないことを確認できる
 

公開鍵基盤

公開鍵のなりすましを防ぐ仕組み。
Aさんから受け取った公開鍵が本当にAさんの物かを証明するもの。
認証局が本物であるという証明書を発行する。
HTTPSで使われている。
例:認証局がAの公開鍵を証明する
→BさんからAさんにデータを送りたい
→Aさんは認証局から証明書を受け取りBさんに送る
→Bさんは認証局の公開鍵で証明書の電子署名を検証
→その後にBさんはAさんの公開鍵でデータを暗号化しAさんに送信
 

プログラミング

プログラミング言語の変換方式

コンパイラ方式:プログラムを実行する前にソースコード全体を一度に機械語に変換する。
インタプリタ方式:ソースコードを逐次解釈し実行する。
中間言語方式:実行前にソースコードをCPUに依存しない中間言語コンパイルする。
実行時には仮想機械により解釈、実行される。
 
参考:5分で分かる教養としての低レイヤ -どうしてプログラムは動くのか(アセンブリ言語インタプリタJITコンパイラ)
 

OSによるハードウェアの抽象化

OS様々なハードウェアを抽象化している。
ユーザーにGUI操作を提供しているだけやないんやで。

CPUの抽象化

OSは短い間隔で実行するプログラムを切替えて、同時実行しているように見せている。
 

メモリの抽象化

物理的なメモリが細切れになっていると都合が悪い。
そこで仮想的なメモリアドレスを作り、細切れのメモリを繋ぎ合わせて仮想メモリとする。
 

補助記憶装置(HDD/SSD/DVD等)の抽象化

ファイル・ディレクトリ。
データをファイルとして統一的に扱えるように抽象化する。
ディレクトリ・フォルダによる階層化も抽象化である。
 

周辺機器の抽象化

周辺機器との接続はI/Oを通じて行われる。
例えば、プリンタなどは多くの製品があるが、プリンタなら製品に関わらずプリンタとして扱えるようにする。
 

APIとライブラリ

ハードウェアや他プログラムの隠ぺい。
プログラミングに置いてOSの機能を利用するにはOSが提供するアプリケーションプログラミングインタフェースAPI)を利用する。
APIを利用することによりハードウェアの詳細や同時に実行するほかのプログラムを意識せずプログラミンすることができる。
 

BIOS

ハードウェアの操作。
Basic Input /Output System
周辺機器の操作、I/Oの操作はOSではなくBIOS
BIOSはOSを含めた他のプログラムにI/Oを介したハードウェアの基本操作機能を提供している。
BIOSの機能はUFEIに移行してきている。
 

抽象化まとめ

プログラム
ライブラリ:OSによるAPIの差異を隠蔽
API:OSの機能を提供
OS:ハードウェアを抽象化
BIOS:直接I/Oを操作
 

ユーザインタフェース

インタフェースとは

interfaceとはもともと界面という意味を持つ。
界面とは液体と気体、液体と固体と言った質の異なるものの境界面の事。

ハードウェアインタフェース

ハード⇔ハード
複数のハードウェアのあいだでデータを転送するときに互いをつなげるケーブルのコネクタ形状、データのフォーマット、送受信の約束事(プロトコル)といったもののことです。
USB・HDMIwi-fiなど。
例:入出力制御装置I/OはCPUと周辺機器をつなぐ。

ソフトウェアインタフェース

ソフト⇔ソフト
プログラム間のデータやり取りの手順や方式を決めたもの。
OSが提供するAPIはソフトウェアがOSの機能を利用するインタフェース。

ユーザインタフェース

ユーザ⇔機械
ユーザと機械の間で情報をやり取りする仕組み。
入力インタフェース:キーボード、マウス、タッチパッドなど。
出力インタフェース:ディスプレイ、プリンタなど。
 

データベース

リレーショナルモデル

リレーショナルモデルでは、データをいくつかのデータ項目の組み合わせで表現する。

リレーションスキーマ

リレーションの構造を規定している情報。

リレーション

表のこと?

タプル

行のこと?

属性

列のこと?

リレーションの演算

射影

特定の列のみを抜きだす。
値が重複する行は除かれる。
※普通のRDBでは重複も表示される。

選択

特定の行のみを抜きだす。

結合

テーブル同士の結合。

直積(CROSS JOIN)

何の条件も付けずに2つのテーブルを結合すること。
対象となる2つのテーブルから行を1つずつ取り出し、合わせたものを新しい行とする演算。
新しいテーブルの行数=Aテーブルの行数×Bテーブルの行数、となる。
 
参考:直積結合とは
 
例:2行と2行のテーブルで直積すると4行
山田
10歳
田中
15歳
⇕直積
東京都
神奈川
結果↓
山田
10歳
東京都
山田
10歳
神奈川
田中
15歳
東京都
田中
15歳
神奈川

正規化

情報の損失が怒らないようにデータの重複を排除する手法。
 

ソフトウェアの開発

開発手法

ウォーターフォールモデル

要求分析・定義
外部設計
内部設計
実装
テスト
 

要件定義

目的:お客さんの要望を聞き、どんな機能が必要かユーザーと合意すること。
ユーザ向けに説明するための物。
ユーザとの話し合いで必要機能を洗い出す。

外部設計(基本設計)

目的:ユーザ向けの仕様設計。
画面設計・操作方法・ハード/ネットワーク構成・DB設計・セキュリティ。
開発するソフトと外部とのインタフェースの設計。
外部とはソフトの利用者や他のソフトなどのこと。
ユーザの目に触れる部分・ハード/ネットワーク構成・DB・既存ソフトの選定。
  • ソフトウェアの実現方法:ハードウェアやネットワークの構成、使用する既存のソフトの選定。
  • ソフトウェアの構成・構造:サブシステムへの分割方法、サブシステムの機能。
  • ユーザインタフェース:利用者が使うための画面設計。
  • データベース:DB設計。ER図を用いることが多い。

内部設計(詳細設計)

目的:実装者向けの設計。
外部設計で定めた仕様の実装方法を設計する。
仕様をどうコードに落とし込むかってところ。
外部設計はプログラミングを意識しない、内部設計は意識する。

実装

実装するw

単体テスト

目的:各機能の不具合検出。
各機能を1個ずつテスト。
例:検索機能のテスト。

結合テスト

目的:システム全体での不具合の検出。
各機能を組み合わせてテスト。
ここまでは開発環境で行うテスト。
例:登録機能+検索機能のテスト。
アカウント登録して検索でちゃんと出るか等。

総合テスト

目的:開発環境では見つからない不具合の検出。
本番に近い環境で行うテスト。
負荷テストとか。

受入テスト

目的:ユーザによる本番環境での不具合検出。
使用感の確認も目的の1つ。
ユーザが行うテスト。

リリース

納品すること。
ソフトウェアを1つのパッケージにまとめる。
バージョン番号を記載する。

アジャイル開発

アジャイル開発は特定の開発モデルではなく、様々な開発手法の総称!
知らなかった。
 

アドホックネットワーク

サーバーやアクセスポイント利用しないネットワークを指す。
アドホックad hoc)はラテン語で「一時的な、その場限り」の意。
「自立分散型無線ネットワーク」とも呼ばれる。
パソコン、携帯電話、タブレットなど、無線でネその場その場で動的に形成されるネットワークの事。
例:P2P無線LAN子機同士の接続。
 

ER図(実態関連図)の見方