コンピュータの基礎
情報
Unixコマンド、暗号、サーバー、画像、CPU、アルゴリズムなど
第一回
この授業の目的
・情報の概念を使って考えられるようになる
アルゴリズム、計算量、情報量、モデル、ネットワーク
・情報を扱うメタな能力を身につける
問題解決、複雑さの克服、論理的推論、コミュニケーション
・コンピュータを利用するスキルを習得する
ブラウザ、メール、文書ソフトウェア、表計算ソフトウェア
パイプはあるコマンドの出力を別のコマンドの入力とする機能。|を用いる。前のコマンドの出力を後ろのコマンドの入力とする。
history
Pwd:カレントディレクトリを確認できる
絶対パスはルートディレクトリから順番に辿って指定する方法
相対パスはカレントディレクトリとの相対的な位置関係から指定する方法
ホームディレクトリを指すときに~を使える
cp コピー元 コピー先
コピー先に同じ名前のファイルがあった場合、コピーしたファイルで上書きされ、元の内容は永久に抹消されてしまう
mv 移動元 移動先
rm ファイル名
rm -r ディレクトリ名
ファイルの作成
コマンドラインを利用してファイルを作成する場合、>を使ったリダイレクしょんという方法を使うことが多い。
Touchでからファイルをを作ることもできる。
ファイルの圧縮
Unixでよく用いられる圧縮と伸張のコマンドとして、gzipとgunzipがある。これらは損失のない圧縮なので伸張することが可能である。
Tarコマンドを使うと複数のファイルをまとめて圧縮、伸張を行うことができる。
chmod パーミッションの指定 対象とするファイル・ディレクトリ
シェルスクリプトはコマンドを順番に並べたプログラム。
コマンドが実際にはどの実行ファイルであるかはwhichコマンドで調べられる
パイプ
ls | more
more filename
ls | grep .txt
リダイレクしょん
Moreコマンドなどの入力先や出力先をファイルに変更することをリダイレクションという。
Echoはパラメータに与えた文字列を標準出力に出力するコマンドである
>でリダイレクトすると出力結果がすでにあるファイルの末尾に追加される
nkf -w8 filenameというコマンドを使うと、filenameという名前のファイルをutf-8に変換してその結果を画面に表示する。
オンラインマニュアル
man lsというコマンドを入力すると、lsの使い方を調べられる。
1つのファイルを別の場所から別の名前でアクセスできるようにしたい場合にはリンクと呼ばれる機能を使うと便利である。ハードリンクとシンボリックリンクと呼ばれる複数の種類のリンクがある。
シンボリックリンク
一見ファイルのように見えるが、実態は他の場所のファイルやディレクトリの名称を持っているだけのもの。
Ln -s 実態の名前 リンクの名前というコマンドで実行する。
ハードリンクは全く同じもの
複数ファイルの指定・ファイルの検索
*:あらゆる文字列を意味する
?:任意の1文字を意味する
文字列:[]内にある文字の中でどれか1文字を意味する {文字列1,文字列2}:カンマで区切って並べられた文字列のどれか1つを意味する
Emacsは名前が~で終わるバックアップファイルを大量に作る
コマンドライン上からファイルを検索するにはfindコマンドやlocateコマンドを使うのが便利であるfindコマンドの方が高機能、locateの方が高速
Xargsはファイル名の一覧を標準入力から受け取ってそのファイル一覧を任意のコマンドに引数として渡すコマンドである。
拡張子
Macではそれぞれの拡張子がそのファイル形式を扱えるようなアプリケーションに関連づけられています。
隠しファイル
名前がピリオドから始まるファイルはプログラムの設定などを記述したファイルであり、いわゆる隠しファイルとなっている。通常ユーザーが触れるべきでないファイルがこのような名前になっている。
第2回
Guiでのダブルクリックに相当するのがopenコマンドである。
Openの-aの後にアプリケーション名を書くと、ファイルを開くのに使うアプリケーションを明示的に指定することができる。
Lprコマンドを使うと、印刷ジョブをプリンタに送ることができる。
lpr hoge.txtなど。
第3回
Pdfにするとhpの背景は消えるので、背景を入れたいときはアプリケーション/ユーティリティの下のグラブというソフトで画面コピーしてpdfに変換してアップロードすべき。
第4回
ホスト名とドメイン名
コンピュータに付けられた名前はホスト名とドメイン名で表される。ネットワーク関係のコマンドを使うときは他のコンピュータの名前を指定する必要があるので。
コンピュータやプリンタなど、ネットワークに繋がれている全ての危機には名前が付いている。
自分のコンピュータの名前はhostnameコマンドで確認できる。
.で区切られた、インターネット上でコンピュータを識別するための名称をドメイン名という。
IPアドレス
インターネットを経由うした通信では通信先のコンピュータの住所に当たるものが必要になる。それをIPアドレスという。IPにはバージョン4とバージョン6がある。
バージョン4は32ビット、バージョン6は128ビット
IPアドレスはいくつかの期間が連携して管理をしている。一番上に立つのはICANNという組織。ICANNの下に地域別インターネットレジストリ(RIR)と呼ばれる組織があり、その下に国別インターネットレジストリNIRという組織があり、上が下にIPを割り当てる。
ドメイン名からIPアドレスを調べるための手段をDNS(domain name system)という。
DNSの文脈ではドメイン名に対応するIPアドレスを調べることを名前解決という。名前解決にはDNSリゾルバ、キャッシュDNSサーバ、権威DNSサーバの3つが登場する。1つ下の階層に属する全てのドメインとIPアドレスを記憶するサーバを権威DNSサーバという。
Pdfはもともとadobe社が作った文書フォーマットであり、特徴は、環境に依存せず、同じ見た目を保つことである。きちんと作れば誰に絵も同じ見た目の文書を見せられる。
見せ方に特化したファイルなので他の情報は内部で失われる。
Xmlは符号化方法が公開されている。microsoft以外の組織でもoffice形式のファイルを読める。
画像の符号化
ラスタ表現とベクタ表現
ラスタ表現
Bmp形式:あか、緑、青のそれぞれに付いて8bit=1byteのデータが必要なので、縦横1000pixelの画像をビットマップ形式で表現すると1000*1000*3byteというファイルサイズになる。
Gif形式:lzwというアルゴリズムを用いて画像を圧縮する。色の強さは8段階のみ。pngも似てる。
Jpeg:ここまでの形式は無圧縮か可逆圧縮でしたが、jpegは非科学圧縮形式である。
音声の符号化
十分細かな感覚絵データを記録しておけば、アナログデータをある程度復号できるだろうという方針で波形を記録するのでPCM方式である。
標本化定理
周波数が与えられた時にどの程度の細かい標本化が必要かを教えてくれるのが標本化定理である。
ある周波数の波形を正確に記録するにはその2倍の周波数以上で標本化すれば良い
第5回
暗号化とは、情報を規則に従って変換して特別な情報がないと元の情報に復元できないようにすることです。暗号化された情報を元の情報に戻すことを復号化と呼びます。
暗号の方式は共通鍵暗号か方式と公開鍵暗号化方式に分けられる。
・共通鍵暗号か(秘密鍵暗号)
データを暗号化、復号化する際に用いる小さなデータを鍵と言います。共通鍵暗号化方式とは、暗号化に用いる鍵と復号化に用いる鍵が同一であるような方式の暗号化のことを言う。どうやって相手に安全な方法で鍵を渡すかが重要になる。公開鍵暗号化方式はカギの受け渡し方式として用いられる
・公開鍵暗号
公開鍵暗号化方式のアイデアは鍵を1つではなく2つペアで用意し、一方の鍵で暗号化したデータを、他方の鍵のみで復号化できるようにするというものです。
・電子署名
電子署名とは、インターネット上で通信の相手が本物であることを証明するための手法です。公開鍵暗号方式を応用することで、電子署名の仕組みを実現することができます。メッセージを暗号化する。
情報量と平均情報量(エントロピー)
計算機の中では全ての情報がビット列で表現されていますが、符号化の方法は1通りではない。この説はどのような符号化をすれば効率よく情報を記録できるかという問題に焦点を当ててみる
例えば、欠席を00遅刻を01早退を10出席を11としてn回の出欠を記録すると2nビットのデータが作られる。
この符号化は最適なのでしょうか?
出席・欠席などの頻度を考慮すると、もっと符号化を単純化できそうです。
圧縮アルゴリズム
huffman符号化
zip形式をはじめとする多くのアルゴリズムで部分的にhuffman符号化が用いられる。
huffman符号化は出現頻度の高い文字には短い符号を、出現頻度の低い文字には長い符号を割り当てるというアイデアで全体を短く符号化する方法です。
この符号化ではhuffman木という木を作ることがカギになる。
1.各文字ごとにその文字だけからなる木を作り、文字の出現頻度でラベルをする
2.最もラベルの小さい2つの木を子とする木を作り、元々の2つの木は除去する。新しくできた木のラベルは元になった2つの木のラベルの和とする。また、新しく作った辺を0と1でラベルとする。この操作をできなくなるまで繰り返す
3.根ノードから葉ノードまでを読んでできる0,1の列を符号化とする
第6回
この説では音声のデータをどのように符号化するか、また、アナログ情報をデジタル情報へと変換する方法について説明します。
PCM:pcmは波をギザギザの段階で近似する。
標本化と量子化
pcm方式では、音声を録音するのにサンプリングレートおよびビット数という値を設定します。
pcm方式を使うには上で挙げた図のように、時刻と振幅をどれくらい細かい刻み幅で記録するかを決めたい。
この時、時間感覚を設定して、一定時間ごとに振幅のデータを記録することを標本化
振幅の刻み幅を設定して、振幅の強さを刻み幅の何倍という形で段階的に表すことを量子化という。
一秒間あたりの標本化の回数をサンプリングレート
振幅の刻み幅を表現するのに用いるビット数をビット数という。
サンプリングレートが44.1kHzの時は一秒間に44100回の割合で振幅を記録し、ビット数が16の場合2^16の段階の細かさで振幅を記録できるようになる。
まず、波形データを記録するのに必要な標本化の感覚は記録したい波形のデータの周期によって決まるという事実があります。
どんなにサンプリング感覚が細かくても周期がそれよりも大幅に小さければ無意味です。
第7回
Fourier変換
Fourier変換をすると波形をサインカーブの足し合わせに分解できる。
・どの程度の周波数までの情報を拾うかを決め
・拾うと決めた周波数の上限に対して、十分な標本化間隔を決める
という順番で標本化間隔を決めれば、元の波形がそれなりの精度で再現できる
標本化定理
周波数が与えられた時にどの程度の細かい標本化が必要か、を教えてくれるのが標本化定理と呼ばれるもの。標本化定理は、「ある周波数の波形を正確に記録するにはその二倍の周波数以上で標本化すればよい」ことを主張する定理です。
第8回
文字コード
文字とビット列の対応関係を文字コードと呼びます。
・様々な規格でこれらの文字を使うことにするという文字の範囲が定められている
・文字集合の各文字に対して、コンピュータ内部で扱えるビット列を対応させる
ASCIIとJIS仮名
ディレクトリのパーミッションの実行権限とは
これはアクセス権で、これがないと中にあるファイルの中身を見ることはできない
第9回
コンピュータアーキテクチャ
略
第10回
アルゴリズム
略
第11回
正規表現とオートマトン
正規表現はテキスト検索のための手段である一方、理論的には有限状態オートマトンと深い関わりがあります。
オートマトンとは、
・いくつかの状態を保つ機械で
・何か入力があると、それに応じて別の状態へと移動する
というものである。
正規表現
?、*、+はそれぞれ直前にある文字の「0回または1回の繰り返し」「0回以上の繰り返し」「1回以上の繰り返し」を意味する。
文字種を表す記号
.は1文字を意味する
文字グループを表す記号
[]の中に文字をいくつか書くと、かっこの中に書かれた文字のいずれかにマッチという意味
かっこの中に書きたい文字が多い場合、-を使うことでどこからどこまでという形の指定ができる。
かっこの直後に^をつけると、かっこの中に書かれていない文字のいずれかにマッチという意味になる。
行頭と行末
^と$はそれぞれ行頭と行末を意味する。
グルーピング
()の中に|で区切って単語を並べるといずれかにマッチする
正規表現中で特別な意味を持つきごうを検索したい場合、その記号の直前にバックスラッシュを入れる
grepとはターミナル上で、文字列検索をするためのプログラムである
grepで正規表現を使うには-eオプションをつければいい
sedコマンドはgrepよりも高機能で、正規表現を使ってマッチした文字列を別の文字列に置き換えるなどいろいろなことができる。
sedでは、指定したパターンが最初に出てきた場所だけを置換するという仕様になっている
sedは
1.ファイルから1行ずつデータを読み込みパターンスペースと呼ばれる記憶領域に保存する
2.パターンスペースに保存されているデータに対して置換などの指定された処理を行う
3.パターンスペースに残っているデータを画面に出力し、パターンスペースを空にする
sedはどの行で、どのコマンドを実行するかという2つの項目を指定することで記述される。行を指定する部分をアドレスという。
sedスクリプトは行を番号で指定することができる
例えば、10pというスクリプトは10行目でpコマンドを実行するという意味です。
第11~13回
アルゴリズムと計算量
略
コンピュータシステム
網羅的に浅く広く!良い!
Pythonで簡単なWebアプリ作れるとこまで
コンピュータシステムを利用した情報サービスの知識はあらゆる分野で求められている。 本講義では、情報サービスの提供に必要な知識・スキルに加えてそれらの獲得方法を学ぶ。 具体的には、Web サービスの提供を想定し、その実現に必要な知識・技術を解説する。 併せて、具体的なサービス構築を通じ知識・技術の活用に加え、それらの獲得方法を実践的に体得する。 課題発表の時間に学生が設計・構築したサービスのデモをおこない、学生同士で評価する。
第1回 環境構築
GitHubの登録など
第2回 ソフトウェア構成管理
第3回 Python Programming1
第4回 Python Programming2
第5回 デジタルデータ形式
第6回 SSHによる遠隔ログイン
第7回 コンピュータの構成要素と性能
第8回 ログ管理
第9回 データベース
第10回 SSL/TLS