アウトプットの部屋

エンジニアになるためのアウトプット

コンピュータ・サイエンス④

ファイルの圧縮

ファイルは、バイト・データの集合体。 LZHはLHAなどで圧縮されたファイルの拡張子。

ファイルの圧縮には2つの方法がある。

1.ランレングス法

AAABBCCCDDDDD(13ビット) => A3B2C3D5(8ビット)

このように「データ×繰り返し回数」で表す方法をランレングス法という。 画像ファイルやEXEファイル(クリックすると自動でプログラムが起動するWindowsのファイル)には向いているが、文書ファイルには向いてない。

2.ハフマン法

AAAAAAAABBCCDE =>Aが一番多いからAは1ビット、DとEは一番少ないからそれぞれ3ビットにしよう。

このように圧縮対象となるファイルごとに最適な符号体系を構築し、それを基に圧縮を行う方法をハフマン法という。

符号体系の決め方は、ハフマン木というものを使う。

可逆圧縮非可逆圧縮

可逆圧縮とは、圧縮したファイルを圧縮前の状態に戻せるファイル。 非可逆圧縮とは、圧縮したファイルを圧縮前の状態に戻せないファイル。

文章ファイルなどはもとに戻せないと文字や数値が読めなくなってしまうが、画像ファイルはもとに戻せなくてもある程度の画質があれば問題ない。

GIFは可逆圧縮BMP,JPEG非可逆圧縮

コンピュータ・サイエンス③

モリーのデータ型

モリー(メモリーIC)には、ROM,DRAM,SRAMなどがある。(ROMは読み出し専用、RAMは読み書き可能)

物理的なメモリーはそこまで意識する必要はないが、メモリーにおける「データ型」は意識する必要がある。

データ型とは、どのような種類のデータを格納するのかを示し、メモリーにとっては占有するサイズを表すもの。

C言語において、 charは1バイト、shortは2バイト、longは4バイトとなり、仮に同じ変数だとしても関数によってデータ型は異なる。よく使われるintは4バイト(32ビット)。 データの下位バイトをデータの下位アドレスに格納することをリトル・エディアンという。

ポインタとは、モリー・アドレスを格納するための変数のこと。これを使えば格納されたアドレスから一度にそのバイト数のデータを読み書きすることができる。

モリーのデータの保存の仕方

スタック・・LIFO方式。後入れ先出し。

キュー・・FIFO方式。先入れ先出し。リング・バッファと呼ばれるリングの形をしたキューがよく使われる。(末尾が先頭と繋がっている)

上の2つは配列やインデックスなどを考えずに済む。

リスト・・データの追加や削除などを行う時に適している。

二分探索木(バイナリー・サーチ・ツリー)・・データを検索する時に適している。

コンピュータ・サイエンス②

2進数・・0と1を使って数字を表す方法

左シフトと右シフト

2進数は左に1桁シフトすると、もとの値の2倍になる。(10進数なら10倍)

右シフトは2種類ある。

・論理右シフト・・グラフィックのパターンなどに使う(ネオンサインなど)。シフト後の上位桁に0を代入する。

・算術右シフト・・シフト後の上位桁に1を代入する。  (例) -4(11111100)を右シフトして上位桁に0を入れると63(00111111)になり1/4倍にならない。逆に上位桁に1を入れると、-1(11111111)となり正しい。

2進数でマイナスを表すときは補数を使う。

(例)1(00000001)の補数(-1)を求める。

00000001を反転(0と1を逆にする)=>11111110 これに1を加える=>11111111 これが-1。実際に00000001 + 11111111 = 100000000となり、9桁目は桁あふれで無視できるので0になる。

補数は「反転した1を加える」と覚えられる。

倍精度浮動小数点型と単精度浮動小数点型

倍精度浮動小数点型は全体で64ビット ・符号部 1ビット ・指数部 11ビット ・仮数部 52ビット

単精度浮動小数点型は全体で32ビット ・符号部 1ビット ・指数部 8ビット ・仮数部 23ビット

仮数部は「小数点以上の値を1に固定する正規表現」、指数部は「イクセス表現」で表す。

仮数部は、値が1になるまで右シフトをして小数点以下が23ビットになるよう0を追加する。最後に小数点以上を除外して完成。(小数点以上は1だとわかっているので)

指数部は、10進数に変換した値を127で引いたもの。 (例)11111111 => 255 -127 = 128 この128が指数部。エクセス表現は-127〜128しか取らない。

これらを用いて小数を表す。

コンピュータ・サイエンス①

1 プログラムとは?

コンピュータに実行させる処理の順番を示すもの

2 プログラムの中に含まれているものは?

命令とデータ

3 マシン語とは?

CPUが直接理解できる言語

4,実行時のプログラムは、どこに格納される?

モリー

5 メモリーのアドレスとは?

モリー上で命令やデータが格納されている場所を示す値

6.プログラムを実行・解釈する装置は?

CPU

CPUの中身

機能面だけで考えるとCPUには、演算装置、制御装置、レジスタ、クロックの4つが含まれている。レジスタは処理対象になるデータや命令を格納する領域(メモリーのようなもの)。

クロックは、CPUが動作するタイミングとなるクロック信号を発生させる。クロック信号が大きいとCPUの処理も速くなる。

CPUの中には、たくさんのレジスタが入っている。レジスタには演算を行う「アキュムレータ」や演算処理後のCPUの状態を保存する「フラグ・レジスタ」などがある。

中でも重要なのがプログラムの流れを決める「プログラム・カウンタ」。「次に実行する命令が格納されたメモリーのアドレス」を格納しているため、順次進行なのか条件分岐(ジャンプ命令)なのか、このプログラム・カウンタに格納されたデータで決まる。コール命令やリターン命令を使えば、関数を呼び出すこともできる。

またベース・レジスタとインデックス・レジスタをペアで使うことで特定のメモリー領域を区切って配列のように使うことも可能。

ITパスポート合格!!

Iパス結果

こんにちは!

昨日ITパスポートの試験を受けてきました。

結果は総合で670点でした。

書類が届いて初めて合格みたいな感じなのでまだ正式に合格とは言えないのですが、合格点が600点なので問題なく受かってると思います。

ITパスを受けて良かったことは、単純にITの知識が増えたことです。基本的にプログラミングばかりやってたので、もともとIパスに出てくるような知識は知りませんでした。その分勉強は大変でしたが、少しは成長できた気がします。受けて良かったです!

入院の時から勉強して退院中に資格をとる流れは、今回で2回目です(1つ目はRubyのシルバー)。僕は資格自体には大して意味はないと思ってます。大事なのはその資格の勉強で得た知識をなるべく忘れないことです。 忘れちゃうと意味ないですからね。そのために僕はブログでIパスの内容を書いてました。どんな勉強をしたか忘れても、ブログを見れば思い出せるのでオススメです。

今後の予定

今の所長めの入院の予定はないので、今後はがっつりプログラミングをやろうと思います(少しはやってました)。そこで学んだことややったことを書く予定です。言語はまだ選定中です。

では。

ITパスポートの過去問でわからなかったワード③

おはようございます!

現在過去問を3年分解きました。まだまだわからない言葉があるので、勉強のために載せていきます。

・ITガバナンス ・・・ IT戦略の策定と実行をコントロールする組織の仕組みのこと。経営陣が原則や方針を決め、各部署でその原則に沿って活動する。

DMZ(非武装地帯) ・・・ ファイアーウォールの内側でも外側でもない中間的なエリアのこと。外部とのネットワークと通信しつつ、内部ネットワークへの被害を抑えることができる。

・ホットリプリケーター ・・・ 複数のポートを備え、接続可能な周辺機器を増やすことができる機械。PCの横の部分に接続する。

JVN(Japan Vulnerability Notes) ・・・ソフトウェアの脆弱性についての情報が掲載されているWEBサイト。

デバイスドライバ ・・・ PCに接続されている周辺機器を制御・操作などをするソフトウェア。マウスやキーボードなどが正常に動くのもこのソフトのおかげ。

CPRM ・・・デジタルコンテンツの不正コピーを防ぐための著作権保護技術。(例えば、一度しか録画できないDVDが他の媒体にコピーできないのもこの技術)

ゼロデイ攻撃 ・・・ 脆弱性が見つかった時、その対策や改善が行われる前にサイバー攻撃を仕掛けること。

 

ITパスポートの過去問でわからなかったワード②

今回も前回と同じように、過去問(H30秋)でわからなかったところを復習します。

マルチスレッド ・・・ 1つのアプリケーションプログラムを複数の処理にわけ、並列に処理をすること。

トランザクション ・・・ 一連の処理をひとまとめにしたもの。例えば、銀行の送金なら、両者の口座の確認、通帳の記帳、送金、、、などの流れが1つのトランザクションになる。またトランザクション処理中に障害が発生した場合、DBの変更前の状態を更新前ジャーナルから取得して、トランザクション開始前まで戻します。この方法をロールバックといい、他にもバックアップデータからデータを復元するロールフォワードという方法もある。

MITB攻撃 ・・・ 主にオンラインバンキングにおいて、マルウェアなどでブラウザを乗っ取り、取引画面の間に不正な画面を介在させ、不正な送金などを実行すること。

プロキシサーバ ・・・ 内部ネットワーク内のPCに代わって、インターネットに接続するサーバ。(プロキシは代理という意味)

ボット ・・・ 多数のPCに感染し、ボット作成者の指示通りに動かせるようにするマルウェア

ターボブースト ・・・ CPUの消費電力に余裕がある時、コアの周波数をあげて効率を高める方法。

CSIRT ・・・ コンピュータやネットワークに関するセキュリティ事故の対応をおこなう組織。

ISP ・・・ 契約者にインターネットへの接続を提供する事業者。