計算機科学入門1 (後半)
高田 秀志(K1,K3) ホームページ
原田 史子(K2) ホームページ
立命館大学 情報理工学部 情報システム学科
連絡先・居場所などの情報は各教員のホームページをご覧下さい。
アクセス数:
シラバス
オンラインシラバスのページへ
レジメ
- 第9週から第11週 プログラミング: PDF版
- 第12週 World Wide Web: PDF版
- 第13週 データ構造とアルゴリズム: PDF版(←誤って穴空きのスライドを掲載していたので,穴を埋めたものに更新しました)
- 第14週から第15週 ソフトウェア工学: PDF版
参考になる資料
お知らせ
教室が暑いとの意見が多数寄せられていますが,冷房の運転については立命館学園全体として以下のように運用されており,我々教員ではいかんともしがたいことをご承知下さい。
夏期冷房及び冬期暖房の運転基準と期間等について
Q&A
コミュニケーションシートに記載された質問にお答えします。なお,質問の意図が分かりにくかったものは省いているものもあります。なお疑問の消えない人は,上記連絡先までお知らせ下さい。
第一週目(6/3,6/8)
第二週目(6/10,6/15)
第三週目(6/17,6/22)
第四週目(6/24,6/29)
第五週目(7/1,7/6)
第六週目(7/8,7/13)
第七週目(7/15,7/20)
第一週目(6/3,6/8)
Q: ニーモニックとは? ニーモニックとアセンブリ言語との関係は?
A. 教科書のp.85-86や以下の説明を参照して復習して下さい。
ニーモニック: 機械語の一命令を,人間に分かりやすい英単語(オペランド)とオペコードの組合せで表現したもの.
アセンブリ言語: ニーモニックを使って記述したプログラム.ニーモニックで記述された命令群の他,プログラム内の位置を示すラベルや,アセンブラへの指示文を含む.

Q: アセンブリ言語はなぜ必要? 低水準言語と高水準言語についてもっと詳しく.「機能性とわかりやすさのトレードオフ」の意味は? 高水準/低水準言語の具体例が欲しい。なぜアセンブリ言語はたくさんの種類を必要としているか?
A: 低水準言語と高水準言語の違い,利点・欠点について以下にまとめます。
- 低水準言語
- 機械語,アセンブリ言語
- CPUの種類毎に異なる機械語,アセンブリ言語を用いる
- 高水準言語
- 人間の思考に近い記述
- 機械語,アセンブリ言語以外のプログラミング言語
- Fortran, Lisp, COBOL, Basic, C, Pascal, Prolog, C++, Java, Python など多数
- 低水準言語
- 利点
- 高速でサイズの小さいプログラムができる
- CPUの動作を直接指定できる
→ハードウェアの性能が低いときに,高速で小サイズのプログラムを作る工夫が可能
- ハードウェア制御やI/O制御ができる
→制御するためのレジスタやメモリアドレスを指定した,データの読み書きが可能
- 欠点
- CPUなどハードウェアの特性に大きく依存するため,移植性が悪い
- 人間が見てわかりにくいため,プログラム開発に時間がかかる
- 高水準言語
- 利点:
- 抽象性の高い,人間の思考に近い記述が可能
- ハードウェアの特性を意識しなくて良く,移植性が高い
- 欠点:
- コンパイラの機械語プログラムへの変換のしかたによっては,低速になったり,意図しない動作をしたりする
- ハードウェア制御やI/O制御が不可能
Q. アセンブリ言語にはいろいろな種類があるか?
A. CPU毎に命令が異なるので,CPU毎にアセンブリ言語があります。
Q. コンパイルされた機械語を見て,そのプログラムがどの言語で書かれたか分かりますか?
A. 分かる場合もあれば,分からない場合もあると思います。コンパイルの際に用いる知識がある特定のパターンとして見いだせる場合には,どの言語で書かれたものか分かる場合もあると思います。
Q. オペコード,オペランドとは?
A. CPUの一つの命令に相当する「ニーモニック」は「オペコード」と「オペランド」で構成され,「オペコード」は「どのような処理をするか」(足し算なのか引き算なのか),「オペランド」は「何に対してその処理をするか」(データが格納されているメモリ上のアドレスやレジスタなど)を指定するものです。
Q. コマンドライン引数は,プログラムのどこに渡されるのか? どうやって使うのか?
A. プログラム中の int main(void) を,int main(int argc, char *argv[]) とする.変数argc, argvを使い,コマンドライン引数をプログラムから参照できる.
実は,int main(void) は,整数を返し引数のない関数mainを定義することを示している.
int main(int argc, char *argv[]) に置き換えることで,整数argcと文字列の配列argvを引数に持つ関数mainを定義できる.
普通の関数の中で引数を参照するのと同様に,関数mainの中で引数argc, argvを参照できる.

Q. 情報技術の発展の行く末は?
A. もともと情報技術とは,「情報を蓄積して,加工し,伝達するための技術」の総称を指します.コンピュータの発達により,膨大量の情報の蓄積と伝達が既に可能な状態です.現在は情報をどう「加工」するか,即ち,流通している膨大量の情報を使ってどのようなサービスを提供するかが,情報技術の発展の一つの方向と考えられます.
サービス実現の一要素として,膨大量のデータのなかから個人あるいは特定のグループに関連する有用な情報を見つけ出し,それを色々な局面で利活用する技術が現在着目されています.例えばネット上の書籍店で,Aさんがコンピュータ関連の書籍を多く購入したというデータがあった場合,そのデータを加工することで,「Aさんはコンピュータに興味がある」という情報が得られます.この情報を使い,未購入のコンピュータ関連書籍をAさんに推薦したり,コンピュータ技術に関連するイベントの案内を提示したりできます.
あらゆる場面で情報を蓄積・利活用する技術の行く末が,「ユビキタス社会におけるサービス提供」と考えられます.ユビキタス社会とは「あらゆる場所・時間に,あらゆる人やコンピュータがネットワークにつながる事で,様々なサービスが提供され,人々の生活を豊かにする社会」をいいます.当該社会におけるサービス提供は,日常生活のあらゆる場面で,各人が携帯するコンピュータ(携帯電話など)や,各人を取り巻く環境に埋め込まれたコンピュータから,その人に関するデータを収集し,収集したデータに基づいて,日常生活のあらゆる場面で,その人のそのときの状況に最も適切なサービスを提供する,ということを理想とします.
かかる社会が便利なのか,それとも監視のようで怖いのかは各人の考え方次第ですが,情報技術の発達により実現の可能性が増しており,またそれによって監視になることを避ける技術がますます求められていると言えるでしょう.
Q. フローチャートは今は使われないのか?
A. プログラムの大まかな流れとアルゴリズムを把握するための,制御構造可視化の基本として使われます.この他にもPAD, NSチャートなどの可視化手法も用いられます.
Q. コンピュータはどうして英数字だけでプログラムを実行できるのか?
A. 「英数字の羅列=ソースコード」と解釈すれば,単にプログラミング言語やOSが,英数字および記号の羅列だけでプログラムを作成できるような機構を提供しているということです.
コンピュータは0/1の羅列である機械語しか実行できませんが,プログラムが大規模になってくると人間には非常に分かりにくいし開発に時間がかかります.そこで,各機械語を人間に分かりやすい言葉で置き換えれば,プログラムが分かりやすくなり開発時間も短縮できるのでは? という話になり,アセンブリ言語が導入されました.ここで,人間に分かりやすい言葉を,英数字と記号の羅列で表すこととしました.さらにプログラムが大規模になってくると,アセンブリ言語では複雑なプログラムを作成しにくくなり,より抽象的な言葉をやはり英数字と記号で表す,高水準言語とコンパイラが導入されました.
こんな答えでOKでしょうか?
Q. Emacs以外にエディタはあるか?
A. Linuxのソースコードエディタの主流は,Emacs系とvi系です.Viはソースコード編集時のモードが,エディタ自体にカーソル移動や保存などの命令を与えるコマンドモードと,ソースコード内の文字の削除や挿入を行う挿入モードに分かれており,慣れれば速く編集できる,軽量という特徴を持ちます.
WindowsではこれらのWindows向け移植版の他,EmEditorや秀丸エディタなど多数が挙げられます.ただし最近では,プログラム開発に関わる諸作業(コーディング,コンパイル,デバッグ,ソースコード管理など)を一つのツールで行えるようにした"統合開発環境"の一機能として提供されるエディタを使うことも多いです.統合開発環境として,Microsoft社のVisual Studioや,IBM社のEclipseなどが挙げられます.
Q. GCC以外にCコンパイラはあるか?
A. Linuxではgccが主流です.ほとんどのディストリビューションに標準でついており,フリーであることが要因です.この他,CPUのメーカーが,自社製品のCPUを使用するコンピュータ向けに提供するものがあります.
Windowsでは,上記のコンパイラのWindows版も使われていますが,統合開発環境が提供するコンパイラを使用することも多いです.Microsoft社のVisual Studioが提供するコンパイラがその一例です.
以上の例は「コンパイルしたマシンでプログラムを実行する」ことを前提としたコンパイラですが,「コンパイルしたマシンとは別種のマシンで実行する」場合に用いる"クロスコンパイラ"なるものもあります.
Q. コンパイラは何に含まれているか?
A. 「プログラムを開発するためのプログラム」を「開発環境」と呼びますが,開発環境にはエディタ,デバッガ,コンパイラなどが含まれます。その意味では,コンパイラは「開発環境」に含まれていると言うことができます。
Q. コンパイラ言語をアセンブル言語にコンパイルする時は,どのようなプログラムを使っているのか知りたい。
A. コンパイラの動作原理について深く学ぶ「コンパイラ」という科目が提供されています。また,情報システム学科では,コンパイラを作る実験も行います。
Q. 高水準言語より人間の思考に近い言語はないのか?
A. 高水準言語は「機械語とアセンブリ言語以外のプログラミング言語」であるため,現在の高水準言語より人間の思考に近いものができたとしても,やはり高水準言語と分類されます.よって「ない」という答えになります.
では,高水準言語で人間の思考に最も近いものはどれ,という話になりますが,一概に決めるのは困難です.解きたい問題によって人間の思考のアプローチは異なっていますし,アプローチにより「分かりやすく抽象化できる記法」は異なるからです.例えば,
・ 数学の行列計算を扱う場合,行列やその演算を平易に定義・記述できる言語
・ 人工知能分野での推論を扱う場合,命題とその真偽や,推論規則を平易に定義・記述できる言語
・ デジタル回路の動作シミュレーションを扱う場合,回路の入出力端子や素子の接続関係を平易に定義・記述できる言語
というように,問題によって「何が平易に定義・記述できるとプログラムが分かりやすく書けるか」が違ってきます.
単に「人間の思考に近い」と言うより,「この問題分野では人間の思考を記述しやすい」という考え方になるでしょう.
Q. プログラミング言語の使い分けがよく分からない.
A. 前問の回答にも関連しますが,各プログラミング言語には記述が得意な問題分野があります.問題分野に即した言語の分類として,汎用,技術計算用,事務処理用,システム記述用,人工知能開発用,教育用などが挙げられます.解決したい問題がどの分野かにより使い分けるのが一つのやり方です.
この他にも,プログラムを実行するコンピュータのハードウェア・OS (プラットフォーム),プログラムを別のソフトウェア開発にも使いまわせるか (再利用性) ,必要なライブラリがそのプログラミング言語向けに用意されているか,といった要因で,使用言語が決まる場合もあります.
Q. C言語は低水準言語であると聞いたことがあるが?
A. 今回の説明では,CPUの命令一つ一つを組み合わせて作成するプログラミング言語を「低水準」としています。C言語は,高水準言語の中でも,他の言語に比べてCPUの命令により近い形で記述する,という意味では低水準ですが,一つの文が一つの命令に変換されるわけではないので,今回の分類では「高水準」となります。
Q. C言語から機械語への変換はコンパイルですが,その逆(機械語からC言語への変換)はできますか?
A. 機械語から高水準言語へ戻すツールは「逆コンパイラ」と呼ばれます。ただし,機械語の中には変数名やコメントなどの情報が残っていなかったり,コンパイルの際に実行速度を向上させるために「最適化」と呼ばれる処理を行って処理の順番を入れ替えたりすることがあるので,完全に元に戻すことは不可能とされています。
「逆コンパイラ」(Wikipedia)
Q. コンパイルするとファイルを実行できますか? アセンブリ言語はパソコンは読めるのですか? コンパイラ言語から直接機械語へ変換できないのか。
A. レジメのp.6が混乱を招いたかと思いますが,コンピュータが実行できるのは機械語が格納された「実行ファイル」です。コンパイラのgccはC言語のソースフィルを実行ファイルに変換してくれますが,実は,内部の処理は「C言語のソースファイルからアセンブリ言語への変換」(コンパイル)と「アセンブリ言語から機械語への変換」(アセンブル)に分かれています。「コンパイル」を「高水準言語から機械語へ変換するもの」として説明している場合もありますが,今回の説明では分けています。
また,なぜ一旦アセンブリ言語へ変換するかですが,コンパイラ言語はC言語だけでなく,その他多数存在するので,各言語毎に機械語へ直接変換するよりも,一旦アセンブリ言語に変換した方が,すべての言語でアセンブラを共有できるからです。
Q. P.1 プログラムの概念をもう一度
A. 以下の図のとおりです。

Q. 社会で必要とされる人材は,「問題が解ける人」ではないということですか?
A. 一口に「問題が解ける人」といっても,答えが分かっている問題に到達できるかどうか(試験問題の場合)と,答えが分からない問題に対して何らかの解決策が見いだせるかどうか,の違いがあります。社会では,試験問題のようにあらかじめ答えが決まっている問題を解くのではなく,答えが分からない問題に対してどのような解決策を提案できるかが求められる,という意味で説明しました。
Q. 期末テストは授業中に実施されるのか?
A. 定期試験期間(7/23-8/4)に実施する.
Q. 前半の島川教授の内容は期末テストに含まれるのか?
A. 含まない.
Q. コミュニケーションシートに貼付するQRコードを忘れたらどうしたらよいか.
A. 貼付しなくてよい.
Q. レジメの空欄部分はWebで公開されているか?
A. 上記のPDFファイルでは空欄部分を埋めたものが公開されています。
第二週目(6/10,6/15)
Q. gcc –E sum.c と gcc –S sum.c は,gcc sum.c と何が違うのか?
A. gcc –E sum.c は,ソースコードsum.cから,プリプロセッサの処理を行った結果のソースコードを生成します.
gcc –S sum.c は,ソースコードsum.cから,プリプロセッサの処理→コンパイルをした結果の,アセンブリ言語のソースコードを生成します.
gcc sum.c は,ソースコードsum.c から,プリプロセッサの処理→コンパイル→アセンブルをした結果の,機械語のプログラムを生成します.
Q. gccに-o,-S,-E以外のオプションはあるか?
A. たくさんあります。例えば,-O(大文字のオー)を付けると,生成される機械語プログラムの処理速度が上がるように「最適化」されます。ちなみに,man gcc というコマンドを実行すると,いろいろなオプションがどのような働きをするのかの説明を見ることができます。
Q. 高校ではBorlandのCコンパイラを使っていたが,gccとどのような機能の違いがあるのか?
A. 基本的な機能には差はないと思って良いと思います。コンパイラが変わると,上記の「最適化」の処理が異なるため,同じソースコードでも実行速度に差が出たりすることはあります。
Q. 例のプログラムで使っていた exit(0); は何ですか?
A. 「プログラムの終了コード」として 0 を出力するという意味です。プログラムの終了コードはOSに渡され,0 はプログラムが正常終了したことを表します。それ以外の値の場合は,何らかの問題が発生してプログラムが終了したことを表します。
Q. atoi()とは?
A. 以下のようなプログラムを考えます。
char* str = "123";
int num = atoi(str);
変数strには123(イチニサン)という「文字」が格納されます。また,変数numには123(ヒャクニジュウサン)という「数」が格納されます。atoi()は「文字」として格納されたものを「数」に変換する機能を果たします。
Q. プリプロセッサが行っていることが良く分からない。
A. プロプロセッサは #include文,#define文,コメント文の処理を行います。教科書p.97を参考にして下さい。また,自分でプリプロセッサの出力結果を確認するなどしてみて下さい。
Q. Syntax ErrorとParse Errorの違いが分かりません。
A. どちらもプログラムに文法的な誤りがある場合に出力されるという意味では同じです。Syntax Errorとは「文法エラー」と訳すことができますし,Parseというのは(文法に従って処理している過程での)「解析エラー」と訳すことができると思います。
Q. コマンドライン引数とは何か?
A. プログラムをシェル上で実行するときに与える引数を言います.プログラム実行時にはmain関数に渡されます.教科書p.89図4.5と,p.94 (5) を参照して下さい.
Q. アセンブリ言語のセグメントとは何か?
A. プログラムをコンピュータ上で実行するとき,プログラム中の命令や変数がメモリ上に展開されます.そして,メモリ上に展開された命令を読み込んだり,変数を読み書きすることで,プログラムが実行されます.このとき,プログラムの命令群や,変数データ,定数データはそれぞれ,メモリ上の異なる領域に展開されます.各領域をセグメントといいます.
アセンブリ言語のソースコードでは,ソースコード中のどの部分がどのセグメントに対応する箇所かを指定できます.
Q. gcc –g によってプログラムをコンパイルしたとき,実行ファイルはどのような状態になっているのか?
A. –g オプションをつけないときと違い,生成されるデバッグ用実行ファイルには,gdbが用いる情報が含まれています.例えば,普通機械語プログラムは変数名を関知しないため,いかなる変数名も含みませんが,gdb上でデバッグするためには,gdbはこの情報を把握する必要があるからです.
ためしに gcc –g –S sum.c で生成されるアセンブリ言語のソースコードと,gcc –S sum.c で生成されるそれを比べてみて下さい.全く違うことがわかります.
Q. アセンブリ言語ファイルについて,2進数なのか16進数なのかが分からない。
A. アセンブリ言語ファイルは文字情報が書かれたものですので,この質問は「実行ファイル」についてではないかと思います。それを前提として回答しますと,基本的にメモリ上のデータにしてもディスク上のデータにしても,コンピュータで扱うデータはすべて0,1で表現されます。ただし,0と1というのはあくまでも「スイッチのON/OFFや磁石のN極S極」という「物理現象」を「人間」にとって「意味付け」(符号化)したものであり,コンピュータのハードウェアが0,1で動いているというわけではありません。また,そのコンピュータ内部の物理現象を0,1で符号化した場合に,0,1だけで表現した二進数では桁が多くなりすぎて扱いにくいので,16進数などが用いられます。
Q. odコマンドで8進数,od -x では16進数が表示されるのなら,2進数での表示方法もあるのか?
A. odコマンドでは2進数表示はできないようです。調べれば他にコマンドがあるのかも知れませんが,二進数で表示してもあまり嬉しくないとは思います。
Q. エディタは機能なのか機器なのか?
A. コンピュータ上で動作するソフトウェアの一つで,主にはソースコードなどの文字情報を編集(Edit)する機能をもったもの,と考えるとよいと思います。ただし,文字情報だけに限らず,画像を編集する機能を持ったものは「画像エディタ」,動画を編集する機能を持ったものは「ムービーエディタ」などと呼ばれます。
Q. Emacsはエディタ・環境のどちらか?
A. エディタです.
ただし,Emacs Lisp のプログラムによって,Emacs上だけでコンパイルする機能や,gdbを呼び出して結果をEmacs上に表示する機能などを追加し続けた結果,現在は事実上 “環境” とする意見もあります.
Q. Texモードの{}自動挿入とはどういう機能か?
A. Texと呼ばれるマークアップ言語のソースコードでは,文章の一区間を指定するために { } の括弧で文章を囲む必要があります.この括弧をEmacsが,ソースコードに自動的に挿入してくれる機能です.
本来,手動で{}をソースコードに書く必要がありますが,この自動挿入機能によって,書く手間を省けます.
Q. ソースコードの色づけ方法の変更は具体的にどのようにするのか?
A. Emacsの機能を独自に拡張したい場合は,自分のホームディレクトリに.emacsというファイルを作成し,拡張内容を記述します。例えば,ハイライトされた文字の色を変えたいときには,
(set-face-foreground 'highlight "red")
などのように記述します(これがEmacs Lispのプログラムです)。Emacsのカスタマイズの方法については,たくさんの書籍やネット上の情報があるので,参考にして下さい。
Q. お勧めのエディタは?
A. ソースコードが効率よく作成できれば,個人の慣れや好みで決めてかまいません.ただやはりLinux環境では,プログラム作成を支援する機能が多いこと,情報が多いこと,使いやすいことから,Emacs系のエディタが良いと思います.個人的には,特殊な操作体系ゆえに敷居が高いが慣れると高速な入力が可能になる,vimもお勧めです.
Q. 統合開発環境以外の各ツールはないのか?
A.プログラミングをする場合,主に(1)ソースコードの編集(エディタ), (2)コンパイル(コンパイラ), (3)デバッグ(デバッガ) ができればよいので,各(1)-(3)に対して好みのツールを使うことができます.
ただし大規模で複雑なプログラムを作る場合は,全てを1ツール上でできるだけではなく,変数名やソースファイル群の管理などもしてくれる統合開発環境が,効率的な面で最良と思います.
Q. 短いプログラムを実行したとき,すぐ終了するのはなぜか?
A. コンピュータの動作速度が人間から見て非常に速いためです.
CPU内部では,命令実行時にレジスタやアキュムレータなどの回路が動作するタイミングを合わせるために,一定周期で振動する電気信号を利用しています.そして,数周期かけて1つの命令を実行します.一周期あたりの時間間隔が短いほど,すなわち1秒間あたりの周期の数が多いほど,短い時間で一命令を実行できます.
1秒あたりの周期数をクロック周波数といい,Hz単位で表しますが,現在のPCのCPUはこれが数GHzといった大きい値です.一命令あたり数ナノ秒で実行されるため,短いプログラムだと人間に認識不可能な速さで実行終了します.実際にはCPU外部のメモリへのアクセスなどがあってもう少し遅いですが,それでも認識不可能なことは同様です.
以上から,人間には「すぐ終了する」ように見えるのです.
WWW上の膨大なウェブサイト群の文章を解析するなど,大量のデータを使い複雑な計算を行うプログラムは,終了までに1晩以上かかることもあります.
Q. define文の使いどころがわからない.
A.プログラム中で頻出する,意味のある定数をわかりやすい文字列で置換するのに用います.この5回”hello”,”bye”と表示するプログラムでは,定まった回数5を定義するのに用いています.
これは,プログラムの仕様変更時のプログラムの簡便な修正を可能にします.例えば5回表示を30回に変える必要が生じたとき,単に#define文の定義部を変えるだけでプログラムを修正できます.本プログラムはNUMの出現頻度が2度しかないため有り難味がわかりにくいですが,大規模なプログラムで”5回”を頻繁に使う場合,全ての”5回”を”30回”に修正するのは手間がかかりますし,修正漏れによるバグ発生の危険があります.修正を簡単化し,バグ発生を回避するのが#define文の利点です.
このほか,定数を適切な名前で置き換えることにより,プログラム中の定数の役割を明確化できます.
コンパイル時にプリプロセッサは,ソースコード中の”NUM”という一区切りの文字列を”5”で置き換えたソースコードを生成します.単なる文字列の置き換えであるため,整数だけではなく,浮動小数点数や文字列,変数の型などを別のわかりやすい文字列で記述したい場合にも使用できます.
Q. 実際にデバッガを使う場面はあるのでしょうか? デバッガを使うことの利点は何ですか? 短いプログラムなら自分でエラーを探す方が早いですか?
A. もちろん,プログラムが単純で原因がすぐに確定できる場合は,デバッガを使う必要はありません。ただ,単にプログラムを目で追いながら間違いを探すより,デバッガでプログラムの動作を一つ一つ確認する方が,原因が早く分かる場合もありますし,プログラミングも上達すると思います。
Q. 意味上の誤りを見抜く方法を詳しく知りたい。意味的な誤りはどうやって検出するのか。
A. 簡単に説明できるコツというようなものはないと思います。自分でプログラムを書き,動作を確認し,うまく動かない場合にはデバッガで詳細にプログラムの動作を確かめる,ということを継続して実施するしかないと思います。(イチローに「ヒットを打つコツ」を聞いたところで,すぐにヒットを打てるようにはならないですね)
Q. 関数の呼び出し関係を調べる bt コマンドがよく分からなかった。
A. デバッガ内でプログラムの実行がブレイクポイントで停止されているとき,bt コマンドは現在停止しているプログラムの位置まで,どの関数が呼び出されて来たかを表示しています。また,その関数が呼び出された時の引数の値も表示されます。
Q. デバッグをするときに,ループ処理などをしている場合,例えば,4ループ目で止めるときなどはどうするのか?
A. 4ループ目に実行される部分をif文を用いてソースコード中に作っておき,その部分にブレイクポイントを設定しておく,という方法が考えられます。
Q. 他にどんなデバッガがありますか?
A. 例えば,"dbx"というものもあります。また,統合開発環境(EclipseやVisual Studioなど)には独自のデバッガが組み込まれています。

A. bでも1でもなく,「ゴミの値」になります.
実は,プログラムの実行を開始した時点では,各変数には勝手な値が入っています.この値はコンパイラやプログラム実行環境によって変わりますが,いずれにせよプログラム実行上は無意味な,ゴミの値です.
a = b; を実行したとき,変数bにはゴミの値が入っています.プログラム中ではここまでに,変数bに対する代入処理がないからです.そのため,a=b; により,変数aにも変数bと同じゴミの値が代入されます.ここでデバッガで変数aの値を調べると,当然このゴミの値が表示されます.
注意するべきは,a=b という代入処理は「aとbが恒等という関係を設定する」わけではない点です.あくまで,「aの値を,その時点でのbの値にする」ことを示します.その結果aとbが等しくなるという事実は全く関知されません.
Q. sumに値を入れる前にメモリ上の状態をどのように数値化しているのかが分からない。
A. 上の質問とも関連します。プログラムが実行されると,プログラムの中で使われている各変数には,それぞれメモリ上の記憶領域が割り当てられます。また,記憶領域の割り当ては,変数に値が代入される時点で行われるのではなく,関数のローカル変数については,その関数の実行が始まった時点で行われます。したがって,変数に最初の代入が行われる前にも値の参照自体は可能ですが,割り当てられた記憶領域にたまたま入っていた値(上の説明では「ゴミの値」)が表示されます。
Q. ワークショップ(論理表現)の目的は何か?
A. ある問題を解決するプログラムを作るためには,問題やその解法を論理的に表現する必要があります.
また,将来的に複数人でソフトウェアやシステムを開発するときにも,自分の考えを誤解なく他人に伝える必要があり,そのときに論理的な表現は必須です.
以上のように,論理的表現が必須であることを伝えるためのものです.
Q. lessコマンドの意味が分からなかった。
A. ファイルの内容を表示するためのコマンドです。
Q. ターミナル上の初めの文字"%"や"$"には特に意味はあるのですか?
A. 「意味」という点では,「コマンドを受け付けられる状態ですよ」ということを表しています。
Q.Vine Linux以外にも,C言語のプログラミング環境があるものは?
A. Linuxであれば,Vine以外にもubuntu, Fedora, CentOSなどのLinuxがあり,C言語のプログラミング環境が利用可能です。また,Windows上で動作するUNIX環境であるcygwinでも利用できます。MacOSでも,開発用ツールをインストールすれば利用可能です。
Q. C言語にC++やC#という親戚の言語があると聞いたが,どう違うのか?
A. C++は,C言語に「オブジェクト指向」という考え方を適用したものです。オブジェクト指向については,二回生の講義で習います。C#は,マイクロソフトのOS上で動作するアプリケーションを開発するための言語です。C#にもオブジェクト指向の考え方が導入されています。
Q. Linuxでの端末,コンソール,シェルの違いがよく分からない。
A. 厳密に言えばそれぞれ特別な意味を持っていますが,「ユーザに対してコマンドを実行する機能を提供するもの」というレベルでは同じです。コンピュータが発展する過程で生まれてきた言葉なので,興味があれば調べてみて下さい。(そして,分かったことを私にも教えて下さい)
Q. Linuxのシステムを学ぶ上で,コマンド以外に重要なものはあるか?
A. たくさんあります。プロセス,スレッド,ソケット,キュー,セマフォ,共有メモリ,割り込み,資源割り当て,優先度制御・・・。これから様々な科目で学びます。
Q.Linuxの端末を使っていると,時々認識しないコマンドがあるが,どのようにすれば実行できるのか?
A. 「認識しない」の意味が不明ですが。。。。正しいコマンドを入れれば,正しく動作するはずです。コマンドは,実行ファイルとして存在している必要がありますが,どのディレクトリに入っている実行ファイルをコマンドとして扱うかを規定する PATH という「環境変数」があります。実行したいコマンドは,PATHに指定されているディレクトリに存在しないと「認識」されません。PATHにどのディレクトリが設定されているかを確認する方法は,printenv PATH でできます。PATH に含まれないディレクトリの実行ファイルを実行するには,フルパス(/home/htakada/bin/mycommなどのように)でファイル名を指定します。
Q.プログラムの実行が見えにくい。
A. 現状の設備では文字の大きさとして限界です。見えやすい席(一番前など)に座って下さい。
Q. コミュニケーションシートに着席位置を記入させる理由は?
A. 特定の座席領域で声が聞こえないなどを把握する目的に役立つからです.
Q. プログラミング演習をとっていないが,本演習特有の項目 (printfなど) が試験に出ることはあるか?
A. 本講義のスライド資料,および教科書のみから出題します.
Q. コミュニケーションシートは返却されないのか?
A. 返却することによるメリットと返却にかかる手間などのコストを天秤にかけると,コストの方がかなり大きいと思われますので,返却はしません。必要な事項は,各自ノートに書き写すなどして下さい。
Q. 質問を書けば,必ず講義で回答するのか?
A. 主要な質問のみ回答します.その他の回答は表紙スライドのURLのwebページに載せています.
第三週目(6/17,6/22)
Q. xxx.oとxxx.cの違いが分からない。分割コンパイルについて。
A. 教科書p.108-110を読んでみて下さい。xxx.c(ソースファイル)をgccでコンパイルするとxxx.o(オブジェクトファイル)ができます。
Q. レジュメに出てくる「リンカ」,「ビルド」の意味は?「リンク」と「リンカ」は同じか?
A. 「リンカ」は,複数のオブジェクトファイルをリンクして一つの実行ファイルを作るソフトウェアです.分割コンパイルを行うとき,はじめに gcc –c list.c, gcc –c sort.c によってオブジェクトファイルを作り,次に gcc –o listsoft list.o sort.o によって実行ファイルを作ります.後者のコマンドは,gccをリンカとして働かせていると考えてください.
「ビルド」は,ビルダを使って,複数のソースファイルの分割コンパイルやリンク,その他の作業を行うことを言います.
Q. オブジェクトファイルをリンクさせるときに,関数の中の変数は合わせた方がいいのですか?
A. 変数を「合わせる」というのが何を意味しているのか不明ですが,授業で説明に用いたmain.cとadd.cを想定して回答します。
main.cにはmain関数があり,add.cに書かれている関数add()を呼び出しています。main関数からは,
sum = add(sum,i);
という形式で関数add()が呼び出され,関数add()は,
int add(int a, int b)
という形式で定義されています。したがって,関数を呼び出す方と呼び出される方で,同じ名前の変数を使う必要はありません。
ちなみに,呼び出される方で使われる変数 a,b を「仮引数」(parameter)を呼びます。また,呼び出す方で使われる変数(上の例の場合は sum, i)を「実引数」(argument)と呼びます。
Q. ritspenのプログラムをgcc line.c RitsPen.oでコンパイルするとき,line.c がオブジェクトファイルとしてコンパイルされて,その後,RitsPen.oとリンクされるのでしょうか?
A. その通りです! (素晴らしい!)
Q. 教科書p.106のポインタとは?
A. コンピュータ上であるプログラムを実行するとき,そのプログラムにアクセスしてよい (そのプログラムが読み書きできる) メモリ領域が割り当てられています.そしてさらに,プログラム内の各変数に,当該メモリ領域内の「決まった場所の決まったサイズの領域」が割り当てられます.この「場所」をアドレスといいます.領域のサイズは,変数がint型かfloat型かなどの型に応じて決まります.ある変数の代入処理を行うとき,当該変数に割り当てられた「決まった場所の決まったサイズの領域」に,変数値が書き込まれます.
C言語では,整数を表すint型や,実数を表すfloat型と同様に,「決まった場所の決まったサイズの領域」を表す型の変数を使用できます.このような変数をポインタといいます.
P.106 のプログラムでは, int *p; で宣言される変数pがポインタです.”int *” は「決まった場所の,int型用のサイズの領域」を表す型です.
このプログラムはsegmentation faultを発生させます.ポインタpに「そのプログラムがアクセスできない場所1111の,int型用のサイズの領域」を代入し (p = (int *)1111),その領域に,int型の値1を書き込もうとした (*p=1 ) からです.
今回は,segmentation fault発生の原因究明にデバッガが使えることを説明するために,ポインタを例として出しています.ポインタの概念自体は,プログラミング言語や後期セメスターのプログラミング演習2で本格的に学習します.
Q. ポインタがなぜ必要なのかが分からない。配列をうまく使えばポインタより簡単なソースを作れるのでは?
A. 「ポインタ」と「配列」がどのようなものか,まだ完全に理解出来ていないのではないかと思います。ポインタは,「記憶領域の場所(アドレス)を指し示すものであり,「配列」は「同じ種類の複数のデータを格納するもの」であると解釈すると,ポインタを配列で代用するということはできません。
ポインタを利用した「リスト構造」と「配列」の違い,ということであれば,配列はコンパイル時に長さが決定される「固定長」であるのに対して,リスト構造はプログラムの実行時に長さを変えられる「可変長」であるというメリットがあります。また,要素の挿入や取り出しに対して,配列とリスト構造には一長一短があります。この辺りの話は,後期の「データ構造とアルゴリズム」という科目で詳しく勉強します。
Q. 統合開発環境の意味がわからなかった.
A. 教科書p.112をもう一度読んでみてください.
Q. Eclipseの詳しい使い方が良く分からなかった。
A. Eclipse自体の使い方を細かく「理解」する必要は今の時点ではありません。また,ソフトウェアの開発に必要とされる膨大な機能が提供されているので,すべてを「覚える」ことは不可能です。ソフトウェア開発の過程の場面毎に,自分が何をしたいのかを明確にし,必要な機能を「探し出す」ことができるようになることが望まれます。
Eclipseに関する情報は,キーワードにEclipseを指定してネット上で検索すると,たくさん見つかります。ただ,漠然と情報を収集するだけでは意味がなく,自分がEclipseを使って何をしたいのかを明確にした上で,それを実現する方法をネット上で探す,という姿勢が必要だと思います。
Q. 統合開発環境としてEclipse以外にどのようなものがあるか?
A. MicrosoftのOS上で動作するプログラムを開発するためのVisual Studio,ORACLE社により無償で提供されているNetBeansなどが有名です。
Q. デバッガを使うと英語がたくさん出てきて,使ってもよくわからない.
A. WWW上でgdbなるキーワードで検索すると,情報がたくさん出て来るのでご参照ください.
参考URL: GDB http://www.fireproject.jp/feature/gdb/index.html
Q. リンクの際は,どういうプロセスで2つのオブジェクトファイルから1つの実行ファイルが生成されるのか?
A. 機械語プログラムである各オブジェクトファイルを単にそのまま結合して,一つの機械語プログラムにします.
ただし,あるオブジェクトファイル内に,他のオブジェクトファイルの変数や関数を参照している (外部参照) 処理があった場合,変数や関数が本当に宣言・定義されているオブジェクトファイルを見つける「外部参照の解決」も行います.
Q. ビルダで統合したときに,プログラムが順番通りに動くのか?
A. 複数のオブジェクトファイルを結合して一つの実行ファイルを作ったときでも,プログラムの入り口はmain()関数ですので,main()関数の最初から順番に実行されていきます。リンクの際に指定されたオブジェクトファイルの中に,二つ以上のmain()関数が含まれている場合は,リンクエラーとなって実行ファイルが生成されません。
Q. ライブラリの説明の際に示されていた時間を扱うようなプログラムはプログラミング演習で作成しますか?
A. プログラミング演習の課題には含まれていないと思います。参考までに,講義中に示したプログラム(一秒おきに現在時刻をprintfで表示するもの)をリンクしておきます。time.c
また,cursesライブラリを用いて「電光掲示板」のように時刻を表示するプログラムは,以下のページから引用しました。http://www.captain.at/howto-curses-example.php
Q. 自分の作ったプログラムをライブラリにすることはできるか?
A. できます。"ar"というコマンドが用意されており,例えば,xxx.o, yyy.o, zzz.o の3つのオブジェクトファイルにある関数をライブラリにしたい時は,
ar r libmylib.a xxx.o yyy.o zzz.o
とすることで,mylibという名前のライブラリがlibmylib.aというファイルに作成されます。
Q. Makefileはどうやって作るのか?
A. 単に,エディタで編集して作ります。また,Makefileを自動生成するようなautoconfと呼ばれるツールも存在します。
Q. ビルダの説明でMakefileに書いてあった,
gcc –c –o list.o list.c
と,スライド資料にあった
gcc –c list.c
は同じ意味なのか?
A. 同じ意味です.後者のコマンドでは,作成されるオブジェクトファイルの名前が自動的にlist.oに決まります.-oオプションで例えばtest.oなる名前を指定すると,test.oが生成されます.
今回のMakefileの説明では,ソースファイルlist.c からオブジェクトファイル list.o が作成されることをわかり易くするため,敢えて-oオプションを付しました.
Q. 「ビルダ」が分からなかった。
A. 「ビルダ」の何が分からなかったのでしょうか? 機能でしょうか? 使い方でしょうか? メリットでしょうか? 教科書4.9章を参照してみて下さい。
Q. 複数のソースファイルで書かれたプログラムでは,共通の変数や関数を使えるのか?
A. 使えます.
あるソースファイルにおけるグローバル変数は,他のファイルにおいて extern指定子を付して宣言することで使用できます.externは,変数が外部のファイルで宣言されたものであることを表します.
また,あるファイルで定義された関数は,他のファイルにおいて関数プロトタイプ宣言を書くことで使用できます.
下図は,ファイルdeclare.cで宣言された変数valと定義された関数funcを,別のファイルuse.cで使う例です.

Q. プログラミングを始める前に,トップダウン設計やコーディング規約について学んでおくべきなのか?癖のついたプログラム記述は簡単に直らないと思う.
A. 個人的な意見ですが,プログラミング未経験の時点でトップダウン設計やコーディング規約について学んだとしても,実感が沸かず身につきにくいと思います.始める前より,むしろプログラミング演習1程度の簡単なプログラムを書き始めた頃に同時並行で学習し,両者を強く意識しながらプログラム作成をしていくことが重要だと考えます.
Q. ソフトウェア設計の段階でどのようなところまで決めるのか。また,どのように決めるのか。
A. ソフトウェア設計でどの程度の詳細度まで決定するのかは,そのソフトウェアを開発している組織のポリシーとして決められるものであるので,一概にどこまでとは言えません。例えば,ソフトウェア設計書を見てコーディングをすれば,どんな人が作っても同じソースコードができ上がる,ということを想定した詳細度でかかれる場合もあれば,モジュール間のインタフェースだけ決めておいて,中身はプログラマーに委ねられる,という場合もあり得ます。ソフトウェアを設計する人とコーディングをする人との関係(同じ社内で実施するか,コーディングは外注するか),プログラマーのレベル(大まかな仕様だけ与えれば品質の高いプログラムが書けるのか,細かいことまで指示しなければプログラムが書けないのか)など,様々な側面を考慮してポリシーが決められています。
プログラミング演習1で作っているようなレベルのプログラムについては,ほぼ当たり前のものとして,ソフトウェアの設計書にいちいち記述されるようなことはあまり多くないのではないかと想像します。
Q. 抽象化のプロセスがよく分からない。「構造化設計」のところがよく分からなかった。
A. 「物事の本質を抽出」し,「それを細かく分割する」という過程は,ソフトウェア開発に限った話ではありません。例えば,「たこ焼きやを開店する」という状況を想定してみて下さい。この辺りの話は,第14回の「ソフトウェア工学」の回で詳しく説明します。
Q. 処理のすべてにコメントを書く必要はあるか? コメントを入れる頻度は?
A. ソースコードを読む人に想定されている知識にも依りますが,コメントをつけずともその処理の意味が明らかである場合,書く必要はありません.コメントをつけすぎるとかえって読みにくい場合もあります.
Q. コメントは必ず書くものなのか?
A. はい,必ず書く習慣をつけてください.プログラムを書くときは,「人にわかりやすく書く」ことが重要で,その手法の一つがコメントを入れることです.
Q. コメントのみを抽出したときに意味が分かるのがよいプログラムであると聞きました。たとえ関数名が分かりやすくても,コメントは付けておくべきだと思います。
A. 一つの考え方として,正しいと思います。しかし,世の中は一つの正解だけで決まるわけではありません。ある視点では正しいことでも,別の視点では正しくないということもあり得ます。例えば,プログラマーが残業時間が多くて苦しんでいる状況を想定した場合,「コメントだけを見て中身が分かるように書け」と強要することは,正しいことでしょうか? プログラマーの仕事の負荷を下げる,という視点もソフトウェア開発には重要な要素です。その場合,ソースコードを見て意味が分かる場合には,コメントを付加する必要はない,というポリシーを取るのも,正しいと言えると思います。
Q. 数学や物理で用いられる変数(x,y,z,n,k等)は変数名として適しているか?
A. 適するかどうかは,解こうとする問題に依ります.
例えば,三次元空間における物体の運動を求めるような,物理の問題を扱うプログラムの場合,物体の三次元空間上の位値を表す変数名を x,y,z とするのは適切です.三次元空間の各軸名を x,y,z と表記する習慣は,物理学では一般的だからです.
一方で,ある年がうるう年かどうか求めるなど,暦の計算を扱うプログラムの場合,変数名 x,y,z は不適切です.暦計算の分野では,x,y,z なる名前で何かを表記する習慣がないからです.monthやyearといった変数名が適しています.
変数名が1文字か否かではなく,解こうとする問題の分野で,その変数名が,誰にでも通用する共通のイメージを持つか否かが本質です.
Q. 「コーディング規約」が分かりにくかった。
A. 「コーディング規約」の何が分からなかったのでしょうか? 目的? 具体例? 教科書5.2章を参照して下さい。
Q. 教科書p.126 (1) の列挙型とは?
A. 例えばソースコードで,int型変数dayにより,「曜日」を表すことにします.このとき,dayは「日曜」から「土曜」を意味する値(例えば1から7)以外はとりません.そして,ソースコードを書く上では,day = 1 と書くより,day = SUNDAY と書ける方が,「曜日に『日曜日』を代入する」という意味がわかりやすいでしょう.このような場合,有限個の名前の集合 {SUNDAY, MONDAY, …, SATURDAY} で示される整数値のみをとる型を定義し利用できます.この型を列挙型といいます.
列挙型の使い方: http://www.itsenka.com/contents/development/c/enum.html
Q. 教科書p.126 (2)の読み込み専用とは?
A. 読み込み専用の変数とは,値が固定された変数を意味します.
例えば,int型変数monthsで「1年あたりの月数」を表すとします.月数は12で不変であり,普通プログラム上で12を10に変えることはないでしょう.このとき,monthsを12なる固定値にしておくために,変数monthsを読み込み専用の変数 (最初に12を代入し,以降その値を変更できない) として宣言できます.変数宣言時に, int months = 12; ではなく, const int months = 12; と書くと,それを実現できます.
詳細は,プログラミング言語・演習の教科書 p. 81-82をご参照ください.
ソースコードでconst変数を使っている箇所を読んだ場合,その変数が「変更できない既定の値」を表していることがわかります.
Q. 教科書p.126 (3) の符号有り無しとは?
A. int型やfloat型は,正負の値を代入できます.ですが,変数が表す意味によっては,正値のみとる場合があります.例えば「日数」を表すとき,負値はとらないでしょう.この場合,「正値のみをとる整数型」を,変数の型として設定できます.
具体的には,int days; の変わりに, unsigned int days; と宣言することで,正値のみを取る整数型になります.
「正負の値をとる整数型」を符号つき,「正値のみとる整数型」を符号なしといいます.値の前に+-の符号がつき得るか否かのイメージです.
詳細は,プログラミング言語・演習の教科書 p. 83-84をご参照ください.
Q. K2クラスの授業で使っていたエディタとターミナル,それらの導入方法を教えてほしい.(ただしWindows用)
A. エディタはGvimといい,UNIXでEmacsと並んで主流のエディタvimのグラフィカル版です.Vim系のエディタは一般のエディタとは異なった操作体系を持つため,慣れるまで多少の練習が必要です.操作体系と導入方法は以下のURLをご参照ください.
vim導入方法 http://nanasi.jp/articles/howto/install/vim6_install_to_windows.html
vimの使い方 http://www15.ocn.ne.jp/~tusr/vim/vim_text0.html
ターミナルはcygwinというソフトウェアで,UNIXのようなのコマンドをWindows上で使えるようにするものです.gccやgdbも使えます.プログラミング環境を含めた導入方法は以下のURLをご参照ください.
C言語演習の環境設定 http://www.aist-nara.ac.jp/~masa-n/misc/cygwin-setup.html
Q. コンパイルエラーは,シェルの機能によって出るのか?
A. コンパイルエラーを出すのはCコンパイラです.Cコンパイラはコンパイルを行うときに,ソースコードを解析して,文法的に間違った箇所を見つけます.そして,その間違いの種類に応じて,エラーメッセージを表示する処理をします.
Q. プログラミングでお勧めの本はあるか? (基礎ではなく応用がよい)
A. 質問にはゲームやソフトの作り方を書いたものが良いとありましたが,まず「どんなゲーム・ソフトを作りたいのか?」に依ります.RPGかパズルか,3Dグラフィックスを使うのか,コマンドラインものにするかで,プログラム設計のテクニックや必要なライブラリが全く異なり,それぞれに適応した膨大量の参考書が存在するからです.
まずはどのような種類のソフトウェアが作りたいのか決めてから,それをキーワードにWWW上で検索するなどして調べてみてください.評判が良い参考書やWebサイトについての情報が得られると思います.
Q. 大規模プログラムを作ったことがないので,イメージが湧かない。
A. そのような経験がなくても,複数人でプログラムを作る必要性や,プログラムを再利用することの必要性が理解できれば,現段階では構いません。
Q. なぜコンピュータは0と1で指示を与えて動かす仕組みにしたのですか?
A. 電気回路として実現することを考えた場合,例えば,「電気が流れていない」「電気が流れている」という現象を0と1に対応させると,作りやすいからです。例えば,0から9までの9種類の信号を扱わなければならないような電気回路を作ろうと思えば,0は0ボルト,1は1ボルト,2は2ボルトなどとなり,複雑になると同時に安定性にも欠けます。このような複雑なものを作るより,0と1の二つの状態だけで動くような電気回路にした方が,安価で安定したものを作ることができるからです。
第四週目(6/24,6/29)
Q. インターネットはどうやってつながっているの?
A. 「どうやって」というのが何を意味しているのか不明ですが,基本的には「ケーブル」で繋がっています。太平洋を横断するケーブルは,船で年月をかけて敷設されました。そのケーブルに,電気信号や光信号を流してデータを送信します。信号は下の質問にある「ルータ」によって行き先別に仕分けされ,目的地まで到着します。
Q. インターネットの目的地はURLで分かるが,どのルートを通れば目的地にたどりつけるかはどう判断しているのでしょうか。
A. ネットワーク中の「ルータ」という装置がその役割を担います。ルータには,複数のネットワークが接続されており,目的のネットワークに到達するには,どのネットワークを経由して行くべきかの情報が格納されています(これは人間が指定します)。その情報にしたがって,到着したデータ(パケット)が一つ一つ配送されます。
Q. 外国のサーバにアクセスするときに,tracerouteで表示されたルート以外でも同じサーバにアクセスできるのか。
A. 同じサーバに到達するのに複数の経路が存在するのがインターネットの特徴であり,経路は毎回変わる可能性もあります。ただし,一般ユーザがどの経路を経由してほしいかを指定することはできず,経路はネットワーク側で決定されます。
Q. 東京からアメリカまで一瞬で通信できるのはなぜですか?
A. 光も電気も,1秒間で地球を七回り半する速度で伝わりますので,東京ーアメリカ間であればコンマ何秒かで伝わります。ただし,ネットワーク装置内で行われる処理のために「遅延」が発生しますので,実際の距離に対しては大幅に遅くなります。
余談ですが,外国とのテレビの中継で時間差が生じるのは,衛星を経由しているためです。インターネットは主に海底ケーブルを利用するため,遅れが少ないという特徴があります。
Q. 日本は島国なので,海外のサーバにつなぐときには海底ケーブルを絶対通っているわけですね?
A. 衛星を経由する場合もあると思いますので,「絶対」とは言えないと思いますが,大部分が海底ケーブルを通っていると思われます。
Q. ネットワークがどのように繋がっているかを表示させるために,コマンドプロンプトを使っていたのですか?
A. 授業で説明しましたように,立命のネットワークはファイアウォールの中にあり(Webなどの特定の用途以外はネットワークが塞がれている),tracerouteでの探索ができませんので,一旦,自宅に設置しているサーバにログインし,そこからtracerouteをかけました。サーバはLinuxですので,Windowsのコマンドプロンプトではありません。
Q. 南アフリカ政府のホームページがありましたが,日本政府のホームページには僕たちでも入れますか?
A. 「入る」という意味が不明ですが,ブラウザで閲覧することはできます。もちろん,データを書き換えたりはできません。
首相官邸ホームページ: http://www.kantei.go.jp/
Q. クライアントとはどういう意味ですか?
A. 元来の英語の意味としては「客」とか「依頼人」という意味です。コンピュータシステムは,サービスを提供するサーバと,サービスを消費するクライアントで構成され,クライアントはサーバに対してサービスを依頼します。一般的には,サーバはデータセンターにあるような大型で強力なコンピュータ,クライアントは一般ユーザが使うパソコンなどが相当します。
Q. 最近,「クラウド」という言葉をよく耳にしますが,詳しく教えて下さい。
A. 正確には「クラウドコンピューティング」と称されます。
以前は,メイルを読み書きするためのソフトウェア,文書作成や表計算のソフトウェア,その他様々な業務システムのソフトウェアは,個人が使うコンピュータ(主にパソコン)にインストールされ,使用されてきました。それが,最近は,自分のパソコンにこのようなソフトをインストールしなくても,インターネットを介してサーバにアクセスすれば,ブラウザ上でメイルの読み書き,文書の作成などができるようになってきました。このように,ブラウザから様々なサーバ上のサービスを利用することを「クラウドコンピューティング」と言います。
さらに,広義には,データセンタ上の強力なコンピュータの「一部」をユーザが間借りし(「仮想化」と呼ばれます),あたかも自分のコンピュータのようにOSのインストールやアプリケーションソフトウェアの開発,運用ができるような環境もあります。
「詳しく」書こうとするとそれこそ何時間もかかってしまいますので,例えば,Wikipediaのエントリなどを参照して下さい。また,情報システム学科には,3回生でクラウドコンピューティングについて学ぶ科目があります。
「クラウドコンピューティング」-Wikipedia
Q.ホームページとはブラウザが一番最初に表示するページのことを意味するので,Webページと表現した方が良いのではないでしょうか?
A. はい。その通りです。(資料や教科書では,そのように表現していると思います)
Q. インターネットに自己紹介を載せた場合の個人情報の流出は大丈夫か?
A. 課題で作成したウェブページをWWW上で公開すれば,個人情報が流出し得ます.
自分のコンピュータで作成したウェブページ(HTMLファイル) を,自分のコンピュータのウェブブラウザ上で見るだけならば,WWW上に当該ページが公開されることはありません.
Q. WWW上で得られるサンプルソースについて,どこまでの流用ならばOKなのか?
A. サンプルソースサイトは断片的なHTML記述しか提供しないので,そのまま流用しても意味のあるウェブページになるとは考えにくいです.
ですので,サンプルソースはあくまでもページの一部分の記述の参考として,他の箇所に自分なりの工夫を加えたページを作成してください.
レポートには参考ウェブサイトを明記してください.
Q. 課題のやり方が良くわからない.
A. 自分のコンピュータ上のあるディレクトリを,課題作成用に定める.
例1: linux /home/taro/kadai
例2: Windows c:\\home\taro\kadai
上記ディレクトリ上にHTMLファイルと,必要ならばCSSファイルを作成する.HTMLファイルおよびCSSファイルの作成は,教科書p.129-p.148のほか,各種書籍やウェブページを参照できる.教科書図6.11がXHTMLに準じたHTMLファイルの例である.
自分のコンピュータのウェブブラウザのアドレスバーで,作成したHTMLファイルをURLとして指定して表示させる.
例1: Linux file://localhost/home/taro/kadai/kadai.html
例2: Windows file://localhost/c://home/taro/kadai/kadai.html
Q. インターネットとWWWの違いは何か?
A. インターネットは,コンピュータ同士を相互接続するための技術です.WWWは,インターネットで接続されたコンピュータ同士でハイパーテキストで表現された情報をやり取りするための技術です.インターネットに接続されたコンピュータ同士では,WWW以外に,電子メールやSSHなどが利用できます.
Q. インターネットを通して風邪はうつるか?
A. 質問の意図がわかりにくいですが,ユーザに風邪を発症させる機能を持つコンピュータの周辺機器あるいは組み込みコンピュータが実装され,かつ当該機能をインターネットを介して実行するプロトコルが開発された場合,コンピュータがインターネットにつながっており,他のインターネットに接続されたコンピュータが前述のプロトコルに従って風邪発症機能を動作させれば,質問の状況が発生しえます.現在は風邪を発症させるコンピュータやプロトコルが開発されていないため不可能です.
Q. IPv4とWWWに何か関係はあるのか?
A. IPv4はWWWより,むしろインターネットに関係します.
WWWは,HTML文書をやり取りするコンピュータがインターネットに接続していることを前提とします.
インターネットは,コンピュータに一意のアドレスを割り当ててコンピュータ間のパケット伝送経路を選択するプロトコルと,2コンピュータ間でパケット転送の信頼性を確保するプロトコルを必要とします.このための標準的なプロトコルとして,前者にIP,後者にTCPが用いられます.
IPv4はIPの実装の一つで,コンピュータに一意のアドレスを割り当てるために32ビットの数値列を用います.最近では32ビットで識別できるコンピュータ台数が,実際にインターネットに接続するコンピュータの台数に対して不足するという危惧が高まり,128ビットの数値列でアドレスを割り当てるIPv6も導入されています.
Q. HTTP以外にプロトコルはあるのですか?
A. たくさんあります。例えば,メイルを配送するためのプロトコルにはSMTPというものがあります。ファイル転送はFTP,時刻同期はNTP,IPアドレスの自動割り当てはDHCP,などなど。
Q. ハイパーテキストの意味がよくわからなかった.
A. ハイパーテキストとは,文書同士をハイパーリンクによって関連付ける仕組みを言います.ハイパーリンクによって,ある文書中のアンカーから,リンクを辿って別の文書を参照することができます.
WWWにおいては,WWWの全サーバ上のあらゆる情報を,一元的に特定のサーバが管理し,分類整理することは不可能です.各サーバが独立に情報を削除/更新しますし,情報の構造や情報間の関連性が日々変化する可能性があるからです.
そこで,全ての情報を統一的に分類整理するのではなく,単に二文書間の関連付けのみを規定することで,情報の構造や情報間の関連性を直ちに反映できるハイパーリンクが導入されました.ハイパーリンクの導入がWWWにおける情報アクセスの本質の一つです.
Q. < i>< b> ...< /b>< /i>は,< b>< i> ...< /i>< /b>でもよいか。
A. 問題ありません。開始タグと逆順に終了タグが来ればよいだけのことです。
Q. < br/>や< hr/>は'/'(スラッシュ)がなくても正常に表示されると思いますが? < br/>は< br>だけでも出来た気がしますが?
A. 初期のHTMLの仕様では,開始タグに対応しない終了タグがない場合も許容されていましたが,このような例外を許すと,HTMLをプログラムで処理するときに負担になるので(プログラマが苦労する),最近は正しく書くことが推奨されています。将来,終了タグが省略されているようなHTMLはブラウザで処理されなくなる可能性もあり得ます。
Q. divタグとはなんですか?
A. 以下のようなサイトが参考になります(「div HTML」で検索)。http://www.htmq.com/html/div.shtml
Q. HTML5って何ですか? HTML5は従来のHTMLと何が違うのか?
A. 以下のようなサイトが参考になります。http://ja.wikipedia.org/wiki/HTML5
Q. XHTMLとHTMLの違いは何か? XHTMLについてもっと詳しく.HTMLとXHTMLの使用方法は?
A. 教科書p.129 6.2節をご参照ください.
Q. htmlファイルとhtmファイルの差は何ですか?
A. ファイル名に付けられた拡張子の違いだけです。Windowsの元になったDOSというOSでは,拡張子が3文字までに限られており,htmが使われてきました。最近のWindowsでは3文字を超える拡張子を付けることができるので,どちらを使っても問題ありません。
Q. 文書のマーク付けとは何か?
A. 教科書p.127をご参照ください.
Q. LaTeXも一種のマークアップをしているわけですね?
A. その通りです。
Q. HTMLは少々の間違いであれば,ある程度ブラウザが表示してくれるのはなぜですか?
A. 少々の間違い(省略されていても意味に曖昧性がないような終了タグなど)を許容できるように,ブラウザのプログラムが作られているからです。HTMLはコンピュータの専門家ではない人が書くことも想定していますので,コンピュータの専門家が,少々の間違いがあっても許容されるように頑張ってブラウザのプログラムを作っているということです。
一方で,C言語のプログラムの場合は,コンピュータの専門家が書くものなので,間違いを許容する必要はないと思います。
Q. 「画像」は構造かスタイルか? 背景として画像を使うとスタイルに分類されそうですが。
A. 画像は「内容」だと思います。背景として使われた画像は,単に背景を単色で塗りつぶした場合の色の指定と同じと考えることができるのではないかと思います。
Q. 属性,属性値についてもっと詳しく.
A. 文書にタグ付けをするとき,タグの種類に加えて,タグの特性や性質も区別せねばならない場合があります.
例えば,文書中のある文字列”ritsumei”が,「ハイパーリンク」であるというタグ付けをするとします.このとき,単に文字列”ritsumei”がハイパーリンクであるというだけでは,文書間の関連付けをするというハイパーリンクの本質を利用するには不十分で,「”http://www.ritsumei.ac.jp への”ハイパーリンク」であるということを記述せねばなりません.”http://www.ritsumei.ac.jp への”を記述するのが,属性および属性値だと考えてください.ハイパーリンクは「リンク先」という属性を持っており,その属性値が「http://www.ritsumei.ac.jp/」です.
HTML文書では,< a>タグに対してhref属性への属性値を付すことで記述されます.
< a href=http://www.ritsumei.ac.jp/> ritsumei< /a>
Q. ワードの中身の構造を理解していれば,その言語を使ってメモ帳上で編集することも可能ですか。
A. 不可能ではありませんが,困難を極めると思います。ワードの中身には,普通にキーボードで入力できない情報も含まれるためです。
ちなみに,マイクロソフトオフィスのファイルフォーマットは,以下のサイトで公開されています。http://www.microsoft.com/interop/docs/officebinaryformats.mspx
Q. Mac OS環境でもHTML文書の作成は可能か?
A. エディタとウェブブラウザがあれば可能です.
Q. HTML文書の具体的な作成法を知りたい.
A. 教科書p.136-143をご参照ください.図6.11に,必要な要素を全て入れた完全なXHTML文書を載せています.また,HP作成に関連する書籍やWebページでもサンプルが得られます.
Q. HTMLでは,アンカーとリンクはどのように表現されるか.
A. アンカーは,参照元HTML文書の< a>タグが付される箇所です.リンクは,< a>タグの中の href 属性に対応します.
Q. XHTML文書中のXML宣言とは何か?
A. 教科書p.136にある通り,「このファイルがXMLであることを明示する部分」です.WWWでは,文章の構造+内容を記述するため,XMLと呼ばれる言語に基づいてXHTMLが規定されています.XHTML文書の先頭にXML宣言を書くことで,当該ファイルの内容がXML文書の一種たることを明示します.
この宣言はウェブブラウザによって解釈され,解釈結果はウェブブラウザ上に文書の内容を表示するときに利用されます.
Q. HTMLで用いられるタグは,レジュメに載せたものが全てか? レジメに記載されているタグ以外でも便利なタグはあるか?
A. 他にもあります.書籍のHTMLタグ辞典やタグリファレンスを参照したり,Web検索エンジンで「XHTML タグ一覧」などのキーワードで調べたりすることで,詳細な情報が得られます.
Q. ホームページビルダーで作成されているページをHTMLのみで作成することは可能でしょうか?
A. ホームページビルダーはHTML形式のファイルを書き出しますので,同じ内容を手で入力すれば,作成することは可能です。ただし,文書サイズが大きくなったり,レイアウトが複雑になったりすると,人間が直接HTMLで記述するのはかなり骨の折れる作業になる可能性はあります。
Q. CSSの利用に特別なソフトウェアは必要か? CSSの書き方は?
A. 必要ありません.CSSはHTML文書中に記述されるか,別のテキストファイルとして記述されるので,エディタのみで作成できます.
HTML文書の表示にCSSファイルを適用するときは,教科書p.145を参照してください.
Q. HTMLとCSSの違いは何か? スタイルシートをどう使うのかよく分からなかった。
A. レジュメにもある通り,WWW上の文書は,文書の”内容+構造”と”見た目”を分離して記述されます.前者を記述するのがHTML, 後者を記述するのがCSSです.
Q. 教科書P.143最後に, 「CSS (Cascading Style Sheet) と呼ばれる規格 (中略) W3Cによって規格されている.」 と書かれているが,W3Cとは何か?
A. WWWで使われる技術を標準化を推進している非営利団体です.標準化とは,任意の種類のコンピュータからWWWを使用できるように,HTMLの書き方などの各技術に関して共通の基準を設け,その基準さえ守ればWWWが使用できるようにすることです.
Q. CSSというのはC言語でのヘッダファイルのようなものと考えればよいか?
A. いくつかのHTMLファイルで共通に用いる情報を定義しているという意味では,ヘッダファイルと同等の役割を果たしていると思います。
Q. K2クラスの授業で使っているエディタは何か?
A. 第11週目分に同様の質問があります.ご参照ください.
Q. 分割コンパイルとビルダについて詳しく教えて欲しい.
A. 前者は教科書p.108-109, 後者は教科書p.110-112に詳述しています.第11週目のコミュニケーションシート回答もご参照ください (K2クラス).
Q. 高校生も課題提出は必要か?
A. 必要です.
Q. 課題の考察・感想はファイルに書くのか,印刷したものに書くのか,分からない。
A. 「印刷したものに書く」の意味が不明ですが,ワードやLaTeX等で作成して,印刷すれば良いと思います。
Q. 課題について,ページは何ページでも作成して良いのですか?
A. かまいません。
Q. Javascriptを使ってもいいですか?
A. かまいません。自ら進んで新しい技術を勉強することを妨げる理由は何もありません。
Q. レポートはLaTeXでなければ駄目ですか? MS-Wordを使いたいのですが。
A. 今回の課題に関しては,どんなツールで作成してもかまいません。ただし,他の科目については,この限りではありません。
Q. HTML4.0, HTML5, XHTMLなど,課題にはどれを使えばよいか?
A. どれを使ってもかまいません。
Q. 授業で使っているOpenOfficeはどんなソフトですか?
A. Microsoftのオフィスとほぼ同等の機能を実現し,さらに,オープンソースで無償配布されている優れたソフトウェアです。みんなで使いましょう。http://ja.openoffice.org/
Q. こんなに多くの言語があるのは何故ですか? 一つにまとめられないのですか?
A. すべての用途に万能な言語が開発できれば良いのですが,世の中,「こっちを立てればあっちが立たず」ということが多く,目的毎に様々な言語を必要とする状況は今後も変わらないと思います。
Q. HTML文書を作成していたときに使った写真にのっていた立派な冷却ファンは何のためにあるのですか?
A. Intel Core i7を搭載したパソコンですが,当初,付属していた冷却ファンではオーバーヒートすることが多発しましたので,思い切って,店で売っている一番大きなファンを付けてみただけです。
Q. ブラウザの仕組みはどんな先生から何回説明を受けても,漠然とした理解しかできません。
A. まずは「何が分からないのか」を明らかにして下さい。ブラウザの仕組み,といっても,ブラウザにはたくさんの機能がありますので,「どんな機能を実現するための仕組みについて知りたいのか」を考えると良いのかも知れません。
また,「ブラウザの仕組み」を本当に理解するには,恐らく10科目くらいの内容が絡んでくると思います。忍耐強くそれぞれの授業を理解しようと努めていると,あるとき突然ひらめきが訪れるかも知れません。
第五週目(7/1,7/6)
Q. フォントとは何か?
A. コンピュータ上に文字を表示するときの,文字の形,すなわち書体を言います.一般のPCには,異なる書体のフォントが多数用意されており,ゴシック体と明朝体など複数の書体を使い分けることができます.
HTMLの< font > タグやCSSでは,書体のほか文字のサイズや色を指定できます.
Q. フローチャートの見方を教えて欲しい.
A. 教科書 p.162-163をご参照ください.
Q. PADについてメリットなどを詳しく教えて欲しい.
A. 教科書 p. 164のほか,以下URLもご参照ください.
WIDE大学 プログラミング入門 講義資料
http://www.soi.wide.ad.jp/class/20030007/slides/08/07.html
Q. アルゴリズムとして,最も一般的 (他人にとって見やすい) なものは何か?
A. 解決したい問題に依ります.扱う問題によって適切なデータ構造やアルゴリズムは異なります.不適切なデータ構造やアルゴリズムの選択により,他人にわかりにくいプログラムになることは十分に考えられます.
Q. アルゴリズムを使ったプログラムを見てみたい.
A. WWW上にも色々情報がありますが,興味があれば,後期授業「データ構造とアルゴリズム」の教科書や参考書をご参照ください.教科書や参考書はオンラインシラバスでわかります.
http://online-kaikou.ritsumei.ac.jp/2010/syp/show.php?course_code=52598
特に参考書「定本 Cプログラマのためのアルゴリズムとデータ構造」(近藤嘉雪著,ソフトバンク) には,スタックを使った逆ポーランド電卓のプログラム(p.43, list4.1) など,身近な題材のプログラムがあります.プログラムだけなら,Webからダウンロード可能です.
定本 Cプログラマのためのアルゴリズムとデータ構造 サポートページ
http://www.context.co.jp/~cond/books/algo/
Q. ソーティングとは何か?
A.授業で説明したように,データ列,特に数値列をある規則にしたがって並び替えることを整列(ソート, sort)と言います.ソーティング (sorting) とは整列することです. 授業で示した挿入ソートやマージソートは,降順あるいは昇順という規則にしたがって並び替えるアルゴリズムです.
Q. 探索とは何か?
A. データ列の中から,指定された要素を探すことです.例えば,配列に格納された整数列から,特定の数字を探し,その配列中の位置を答えとして返す (ない場合は「ない」という答えを返す) のが探索アルゴリズムの一例です.
Q. BM法とは何か?
A.文字列の中から,特定の文字列を探す有名なアルゴリズムの一つです.例えば,”Here we are the BKC campus” なる文字列から,”th”という文字列を探す,といったものです.詳細は以下のURLで参照できます.
ボイヤー-ムーア文字列検索アルゴリズム – Wikipedia
Q. リストはどうやってコーディングするのか?
A. 実プログラム参照が一番理解しやすいです.後期授業「データ構造とアルゴリズム」の教科書・参考書の他,以下のURLの「第10章 線形リスト」も役立ちます.
アルゴリズムとデータ構造編 トップページ
後期授業「データ構造とアルゴリズム」オンラインシラバス
Q. データ構造=学生データや科目データ,アルゴリズム=プログラム,ということですか?
A. 「=」ではないです。データ構造は学生データや科目データそのものではなく,これらを表現する手段であり,プログラムはアルゴリズムがプログラミング言語によって表現されたもの,と解釈するのが妥当です。
Q. 「アルゴリズム」の語源は?
A. Wikipediaに解説を見つけました。これ
Q. 一つの問題に対して様々なアルゴリズムがあるということは,それぞれにメリット,デメリットがあるということですか。
A. その通りです。例えば,計算時間は小さいが記憶容量を多く必要とするもの,逆に記憶容量は少なくて済むが計算時間が多くかかるもの,などの違いが出ます。したがって,アルゴリズムを適用する問題の性質や,プログラムを動作させるハードウェアの仕様などによって適切なものを選択する必要があります。
Q. レジメの「代表的なアルゴリズム」の部分はあまりイメージがつかめなかった。
A. 今回は代表的なアルゴリズムを列挙したまでで,それぞれがどのようなものであるかは,後期の「データ構造とアルゴリズム」で詳しく扱います。
Q. ユークリッド互除法のアルゴリズムが良くわからない.
A. 教科書p.151 図7.1 をご参照ください.
Q. ユークリッドの互除法で最大公約数が求められることの証明は?
A. 本授業の趣旨を超えるので説明はしませんが,書籍を調べれば出てくるでしょうし,ネット上にもたくさん情報が掲載されているようです。Googleで「ユークリッドの互除法 証明」と検索してみて下さい。
Q. データ構造の具体的な実現方法(C言語でどのように書くか)を教えて下さい。
A. 実際のプログラムは後期のプログラミング演習2で書きます。ここにはとても書ききれませんので,「データ構造とアルゴリズム」の教科書などを参考にして下さい。
Q. リストの使いどころは?
A. 配列と比較すると,(1) 新しいデータの挿入や削除が頻繁に行われる,(2) データ数が頻繁に変わり幾つになるかわからない,といった問題に適しています.
Q. 配列とListの違いが分からない。
A. 「データの集まりを表現する」という目的は同じですが,その手段が異なります。配列は,メモリ上にデータの集まりを順に並べるのに対して,リストは順に並んでいる必要はなく,その代わり,紐(ポインタ)でデータ間を繋ぎます。
例えば,100個のデータのうち,35番目のデータを読み取りたいと思ったとき,配列ではdata[35]のようにして直接読み出せますが,Listでは先頭から順に35番目まで紐(ポインタ)を辿って行く必要があります。一方で,1000個データがあって,2番目に新しいデータを追加(挿入)したい場合,配列では2番目から1000番目までのデータを全部ずらす必要がありますが,Listでは2番目のデータについている紐を繋ぎ変えるだけで済みます。
データの読み出し性能が要求されるのか,新しいデータの追加や不要なデータの削除などが頻繁に発生するのか,など,適用対象によって配列かListかを適切に選択する必要があります。
Q. 階層構造で,リーフの下にノードを作った場合は,元のリーフおよびそのノードをどう呼ぶのか?
A. リーフは階層構造の末端を指す概念であり,下にノードを持ちません.したがってご質問の状況では,リーフの下にノードを作った時点で,すでにリーフではなくなります.リーフの下に作られたノードが,新たにリーフとなります.
Q. ハッシュ関数とは具体的にどういった形で定義し,使うのか。
A. C言語で書く場合,ハッシュテーブルのキーの値を引数にとり,「何らかの演算」をした結果を返り値として返す,というように定義することができます(一般の関数と何ら変わりはありません)。問題になるのは,「何らかの演算」としてどのような演算をするかですが,これにはいくつもの方法があり,適用対象に対して適切なものを選択する必要があります。ハッシュ関数としてどのようなものがあるかは,Wikipediaのエントリが参考になります。
Q. 絶対破られない暗号は作れるのか?
A. でたらめに暗証番号を入れたとしても,キャッシュカードの暗唱番号は10,000分の1の確率で見破られてしまうのと同じように,2^256分の1(2の256乗分の1)くらいの確率では当たります。しかし,これはまず確率0と言っていいと思います。また,暗号化のキーは,非常に大きな2つの素数を掛けて作られるものがあり,素数の計算や素数への素因数分解が非常に高速にできるようなコンピュータが開発されると,破られる可能性はないとは言えません。ただし,現状では「現実的な時間内に破られない」という前提で暗号が破られることはないと言ってよいと思います。
Q. 「暗号が破られない」とはどういう意味か?
A. 一般に暗号化は,Web店舗上で顧客から店舗に個人情報を送るときなどに,暗号化アルゴリズムにしたがって,元データを暗号化データに変換するために用いられます.暗号化データは,データ受信者のコンピュータ上で元データに戻される (復号と言う) 必要があります.そのため,暗号化データを元データに戻す復号アルゴリズムが存在します.
顧客-店舗間といった正当な通信者間では鍵と呼ばれるデータを共有しています.この場合店舗側で用いる,鍵を使用する復号アルゴリズムは実用的な計算時間で停止します.
しかし,通信盗聴者のような鍵を共有していない者は,鍵を用いない復号アルゴリズム,すなわち解読アルゴリズムによって,盗聴した暗号化データを復号しようとします.これが「暗号を破るアルゴリズム」です.しかしながら解読アルゴリズムの時間計算量が大きく,計算サイズn (例えば鍵のサイズなど) に対して 2^n のオーダだとします.このとき計算サイズが少し大きくなると,解読結果を出力して停止するまでの計算時間が非実用的になります.授業で示したように,n=64では解読に59万年かかりうるわけです.これは事実上,通信盗聴者が暗号を破れないことを意味します.
ある暗号の解読アルゴリズムが,理論的に時間計算量の大きいものしか現在存在しない場合に,「暗号が破られない」と言います.
Q. 倍々ゲームがなぜ暗号化の話につながるのか分からない。
A. 2のn乗のように指数関数的に増えていくと,どれくらいの勢いで数が大きくなるかというのを倍々ゲームを使って説明しました。アルゴリズムの中には,データの量や大きさに対して指数関数的に計算時間や必要な記憶容量が増えて行くものがありますが,暗号の解読処理も指数関数的に計算量が増えるものの一つです。したがって,十分な長さの暗号化キーを用いていれば,現在のコンピュータでは何十万年,何百万年かかっても解読できないということが保証されます。
暗号の安全性(Wikipedia)
Q. スライドp.7 2^64 は,59万年かけて計算した結果を示しているのか?
A.計算サイズnに対して2^nの時間計算量を持つアルゴリズムの,n=64に対する時間計算量を示しており,アルゴリズムの計算結果を示すものではありません.nが少し増えると 2^nが急激に増加するという時間計算量の変化を見せる意図です.
59万年は,n=1のときの時間計算量に対する,n=64のときの時間計算量の比率から,前者を1μ秒と仮定したときの後者の計算時間を算出したものです.
Q. スライド P.13 にある,車のスピンを表現する行列が理解できない.3次元座標なのに,なぜ4次元ベクトル/行列で表現しているのか?
A. 4*4行列の第4行第1-3列に(x,y,z)方向の移動量を当てはめると,3次元座標系での移動+回転が表現できているのがわかると思います.
これは「同次座標表現」と言い,一般に,回転+移動を伴う2つの3次元座標系の間の座標変換を,4次元ベクトルと行列の積で表現するのに用いられます.車やロボットアームなどの剛体の運動を記述する物理学の分野だけでなく,コンピュータグラフィックスの分野で描画対象を表現するのにも用いられます.
Q. 僕はgoto文をよく使うのですが,よくないのですか?
A. プログラミング言語に依存します。C言語では一般的にはよくないとされていますが,例外処理を書く場合にはgoto文を使った方が分かりやすく書けるという意見もあります。
Q. オセロなどのCPUの強さの調整というのは,どのようにして強さが変わっているのか?
A. 盤面の予測にツリー構造の探索を使うことは講義中に説明した通りですが,ツリー構造全体を探索すると非常に多くの時間がかかったり,ツリー構造自体を格納するためのメモリ領域が多く必要になったりするので,通常はツリー構造の浅い部分までしか探索しません。それで,どの程度深くまでツリー構造を探索するのか,によってコンピュータの強さが調整されます。
Q. ゲームに物理がいる?
A. 仮想的な3次元空間内での物体の動きを再現しようと思うと,力学等の物理的な知識に基づいてプログラムを作る必要があります。例えば,ネットで検索すると「ゲーム業界の採用試験 −プログラマー編−」のようなページが見つかります。
Q. セグメントとは?
A. 単なる「一区切り」という意味で使いました.コンピュータ分野の特定の専門用語ではありません.
Q. 期末試験では,プリント (スライド資料) から出題されるのか? 期末試験に○○は出題されるか?
A. 教科書p.84以降および,スライド資料に載っている項目が出題範囲になります.
Q. 期末試験に向けて,どのように勉強すればよいか.
A. 教科書とスライド資料を熟読してください.スライドに出てきた概念を自分の言葉で説明できるようになってください.
Q. コミュニケーションシートに書いた内容は成績に反映されるか?
A. 反映される可能性があります.ただしコメント・質問の有無は反映されません.
第六週目(7/8,7/13)
Q. ウォーターフォール型開発とトップダウン設計の違いは?
A. 前者は「ソフトウェア開発プロセス」の一であり,後者は「ソフトウェア設計法」の一です.
具体的な違いを,図書館の文献検索のソフトウェア開発を使って説明します.
前者の要求分析工程では主に,誰がそのソフトウェアを使い,ソフトウェアを使って何を行うかを厳密に決めます.図書館のお客さんは文献の検索照会を入力してその結果を受け取る,図書館のスタッフが文献の情報を登録する,といった「そのソフトウェアを使う者から見た機能」が決められます.このようなソフトウェアの機能のほか,コスト,納期などの制約や,どの程度の数の文献を登録しそうかといった条件が含められます.
設計の工程では,「文献の検索照会を入力してその結果を受け取る」「文献の情報を登録する」の各機能を実現するためのソフトウェア設計を行います.これはソフトウェアの立場から見た機能です.「文献の検索照会を入力して結果を受け取る」機能では,その一環としてトップダウン設計 (構造化設計) を行います.機能全体をモジュール群「検索照会を得る」「該当文献を検索する」「該当文献を表示する」に分けモジュール間のインタフェースを定義していきます.トップダウン設計により,最終的にプログラムが書ける程度にまでモジュールの分割を行っていきます.
Q. ウォーターフォール型開発は欠点ばかりなのでは?
A. 進捗管理を行いやすい,開発プロジェクトのメンバを集めやすいと言ったメリットがあります.
Q. アジャイル開発プロセスが良くわからなかった.
A.アジャイル開発の本質は「機敏に,適応的に」ソフトウェアを作成することです.そのために,「とりあえず動く,ソフトウェアの一部」を作る,それを顧客と一緒に確認して新たな要求や意見を聞く,要求や意見を元に作り直す,という非常に短い期間のサイクルを,最終的にお互いが合意するまで繰り返す,というプロセスを採ります.
ウォーターフォール型,スパイラル型の開発との違いは,ドキュメントの存在意義です.ウォーターフォール型,スパイラル型では厳密な仕様書などのドキュメントを最初に作り,その通りにソフトウェアを作ることを目指します.対してアジャイル開発では,ドキュメントをきちんと作成するより,とりあえず動くプログラムを作って顧客に実情を実感させます.また,前者ではソフトウェア開発者は,仕様書を参照し,顧客とのやり取りをすることなくソフトウェアを完成させますが,校舎では,ソフトウェア開発は仕様書を参照するより,顧客との直接のコミュニケーションに頼ってソフトウェアを完成させていきます.
アジャイル開発が必要とされる背景は,近年ビジネスにおける変化が激しくなったという事情です.納期が短くなり,かつ顧客の要望がソフトウェア開発途中に変化しうるため,ウォーターフォール型,スパイラル型で仕様書を最初に厳密に定め文書化するのは時間がかかりすぎ,要望の変化に対応できないという問題が起きてきました.そこで,とりあえず動くプログラムをもとに顧客と頻繁にやり取りすることで,要望の変化にすばやく対応できる手法として,アジャイル開発が生まれました.
Q. 開発成果物が良くわからなかった.
A. 教科書p.172 図7.13に示すような,開発プロセスの要求分析,設計,コーディング,テスト,保守各段階において生成されるドキュメントを意味します.要求分析では要求仕様書(やテスト仕様書),設計では設計仕様書,コーディングではソースコード,テストではバグレポート,保守では保守報告書です.
Q. コーディング規約はどこが決めているのか?
A. プログラムを作成する組織内で決めることもありますし,様々な組織で汎用的に使えるコーディング規約を策定している団体もあります。例えば,Webで検索すると次のようなサイトが見つかります。http://numata.designed.jp/javacodeconv/
Q. 立命館でもコーディング規約はあるのですか?
A. プロジェクト団体や研究室でソフトウェアを共同開発するときにコーディング規約を決めることはあると思います。
Q. コーディング規約は何が正しいのか?
A. コーディング規約だけでなく,まず一般的な話として,「何が正しいか」は「評価基準」によって変動します。したがって,コーディング規約を決定する際にも,何を評価基準にするかによって何が正しいかが変わります。例えば,ifの後ろに直接'{'を書くのか,改行するのかというのを例にとると,「ソースコードの行数を減らしたい」という「評価基準」では直接書くのが正しいとされますし,「条件が満たされ場合に実行される部分を分かりやすくしたい」という「評価基準」では改行するのが正しいとされると思います。世の中何でもそうですが,正しいことは一つではなく,様々な視点で評価基準を設定し,その評価基準の下で「正しい」と言えるものを見つけ出すことが必要だと思います。
Q. ソースコードを「行」という単位で数えるは適切ではないのでは?
A. 確かに,「行」という指標だけでソースコードの規模を「正確に」測定することはできません。例えば,以下のサイトにもそのようなことが書かれています。http://e-words.jp/w/LOC.html。ただし,ソフトウェアの規模をイメージしやすい指標として使われているのも事実です。
ソフトウェアを測定する様々な方法は,以下のWikipediaのエントリが参考になります。→ソフトウェア測定法
Q. 設計書や仕様書の具体的な書き方は? 仕様書とは?
A. ソースコードに対するコーディング規約と同じように,開発組織によって仕様書や設計書の書き方が決められている場合が多いです。
また,ドキュメントの作成方法に関する標準化活動も行われており,Webで検索すると,例えば以下のようなサイトが見つかります。http://thinkit.co.jp/free/project/4/1/1.html
Q. フローチャートはどうやって描くのか?
A. 基礎的な部分は教科書p.163にあります.より詳しい描き方は,以下をご参照ください.
アルゴリズム入門 フローチャートの書き方
http://www5c.biglobe.ne.jp/~ecb/algorithm/1_4.html
http://www5c.biglobe.ne.jp/~ecb/algorithm/1_5.html
Q. ソフトウェアのフレームワークとは何か?
A. ある分野のどのソフトウェアにも共通する「ソフトウェアの骨格 (必要な機能群)」を定め,再利用可能なソースコードとして提供するものです.いわば,特定分野のソフトウェアのテンプレートで,必要な部分のみに各ソフトウェア固有の処理を追加するだけで,ソフトウェアが完成することを目指しています.
例えばウェブ上で業務管理や顧客対象業務を行うようなウェブアプリケーションの分野では,ユーザアカウント管理やデータベース管理の機能が殆どの場合必要です.これら共通する機能群がウェブアプリケーションフレームワークとして提供されることで,プログラマは各ソフトウェア固有の業務管理の処理や顧客対応処理部分のみをコーディングすればよいことになり,開発効率を上げることができます.
Q. ライブラリの意味は?
A. 教科書p.109に記載がありますので,復習して下さい。
Q. アーキテクチャとは?
A. 「アーキテクチャ」は概念として理解が難しい言葉の一つだと思います。日本語に置き換えるとすれば,「構造」が一番近いのではないかと思います。今回は,どのようなOSを使うのか,どのようにコンピュータ同士を繋ぐのか,など,情報システムの「構造」を決定する段階を「アーキテクチャ設計」として説明しました。
Q. 開発プロセスでは,具体的に,どのようなテストを行うのか?
A.教科書p.177,180に様々なテストの種類が書いてありますが,ここでは.「図書館の文献検索を行うソフトウェア」を例に,具体例を述べていきます.本ソフトウェアは,図書館の客が文献照会を入力すると,検索結果を得られるものです.
ブラックボックステストは,ソフトウェアの機能が正しく実現されているかを確認します.予想される文献照会入力 (存在する文献の照会,存在しない文献の照会,不正な文献照会) に対して,正しく答えが得られるかを調べます.
ホワイトボックステストでは,内部設計書で決めたソフトウェアのアルゴリズムが正しく実現されているかを確認します.ソースコードの全てのif-else分岐をカバーできるようなデータ群を考え,各データに対して,ソースコードが設計したアルゴリズムと一致する答えを出すかを調べます.
ストレステスト,限界テスト,ベンチマークテストについては,教科書の記述からわかるかと思います.
Q. 授業で説明された以外に,どのようなテスト方法があるのか?
A. 例えば,次のWikipediaのエントリなどが参考になると思います。→ソフトウェアテスト
Q. 回帰テストの意味がよく分からなかった。
A. 不具合を修正することにより別の不具合が発生していないかを検証するテストのことです。教科書p.180に記載があります。
Q. ローカル変数とグローバル変数の違いは何か?
A. 詳しくはプログラミング言語等の講義で習うと思いますが,簡単には,ローカル変数は関数内でのみ有効な変数,グローバル変数は複数の関数にまたがって使える変数のことを指します。
Q. 英語の変数名を日本人が使うと,スペルミスなどを誘発しよくないのではないか?
A. 日本語の変数名はほとんどのプログラミング言語でローマ字表記になりますが,英語の変数名より優れていると一概には言えません.英語表記はローマ字より読みやすく,非日本語話者にも理解できる反面,適切な英訳の選定に時間がかかったり,人によって英単語の意味のイメージが違い誤解を招く恐れがあります.ローマ字表記は同音異義語の存在などにより読みにくい反面,誰が読んでもイメージがそれほど変わらないというメリットがあります.
コーディング規約でどちらかに統一するのが最適だと思います.(一部のプログラミング言語は漢字仮名の変数名が使えますが,このような言語は多くありません.)
ただし,スペルミスに関してはどちらでも同じだと思います.現在のローマ字表記では訓令式,ヘボン式といった異なる表記法が混用されており,よしんばコーディング規約でどれを使うか定めたとしても,スペルミスは発生するでしょう.また,最近のプログラム開発環境が提供するエディタには,宣言済みの変数名群からの選択によってソースコードに変数名を挿入できる機能などにより,ある程度のスペルミスは回避可能です.
Q. ゲームプログラミングについてもっと話を聞きたい。
A. 講義の時間は限られていますし,私も専門ではないので,詳しい説明を行うことはなかなかできませんが,Amazonなどで「ゲームプログラミング」をキーワードの検索すると多数の本が見つかりますし,大学の図書館にもたくさん蔵書があるようですので,夏休みに取り組んでみてはいかがでしょうか?
Q. ウォーターフォールとファイヤーウォールには何か関連はあるのですか?
A. 単に語呂が似ているだけで,関係はないと思いますが...
→ウォーターフォール(Wikipedia)
→ファイアウォール(Wikipedia)
Q. レポートは,メールが来なかったら再提出は不要か.本当に再提出しなくていいのか不安.
A. メールがなければ再提出は不要です.不安な場合は,担当教員に直接聞きに来て下さい.
Q. 自己紹介に自分の価値観まで含める人がどれだけ存在するのか。(K3クラス)
A. どのような場で誰を対象に自己紹介をするのかにもよりますが,例えば,Webに掲載する自己紹介を想定した場合,自身の価値観について述べることは大いにあると思います。(事実,私(高田)の自己紹介のページでは「どのような価値観に基づいて研究を行っているか」を述べています。)
Q. 今回の課題は,Web上に公開することが前提となるのに,「個人情報を公開しなさい」ということとほぼ同義のことを要求しており,課題の出し方に問題がある。
A. こちらが想定していなかった鋭い指摘だと思いますし,このような問題意識を持つことは重要です。ただし,以下のような点で誤解をお持ちなのではないかと思います。
まず,「HTMLで文書を書く」ことが,直接「Web上で(一般に)公開する」ということが前提になるというのは,当たらないと思います。Web上で公開するにはWebサーバ上にそのHTMLファイルを載せなければならないですし,様々なアクセス制限(パスワード等)をかけた上で限定的に公開するということも可能です。また,もし自分のパソコンにApache等のhttpサーバを載せたとしても,WindowsやLinuxの場合にはファイアウォールの通過許可をしない限りインターネット側からはアクセスできませんし,家庭でLAN環境を組んでいる場合には,NATルータを挟んでいれば(現在はほとんどの場合このような構成であると思われます)外部からアクセスすることは,ルータにポート転送の設定をしない限り不可能です。
次に,今回の課題が個人情報を公開することを要求しているということに関してですが,これについては,どのような個人情報を対象にしているか,が問題になると思います。例えば,立命館大学の入試サイトには,学生の名前,出身校,写真,興味を持った授業や実験(すなわち「価値観」)などが掲載されています。→http://ritsnet1.ritsumei.jp/file/gnavi/ise/cs/index.html このページは大学の入学センターがインタビューをして作成したものですが,同程度の内容を今回の課題の自己紹介として記述することも十分あり得る話だと思います。
また,私の研究室に配属された留学生(3回生)は,自己紹介のページをインターネット上で公開しています。→http://bit.ly/gilangandipradana
このように,Web上には名前や写真などの個人情報が掲載され,有効に活用されている例がいくらでもあります。(もちろん,このようなページに住所や電話番号などを掲載することは避けなければなりませんし,今回の課題でもそのような情報を載せることが要求されているわけではありません。)
中学や高校では,情報倫理教育として「インターネット上に氏名などの個人情報を載せてはいけない」と教えられるかも知れません。しかし,これは,中学生や高校生にインターネットの特性を理解して,公開しても問題が起こらない情報と公開すると問題が起こる情報の区別を意識させるのが困難であるので,一律にこのような説明をしているに過ぎません。大学生として,また,情報の専門家を志す情報理工学部の学生としては,アクセス制限なども含めたWebの仕組みや,どのような情報を公開するとどのような危険があるのかを十分に考え,判断する姿勢が重要だと思います。(文責 高田)
Q. 私語に対する注意の仕方がおかしい。注意をせず授業を進めてほしい。(K3)
A. そのような意見も正論です。しかし,授業アンケートなどでは,私語対策をもっとするべきという意見が毎年多数寄せられるのも事実です。多額の授業料を払い,意欲の高い学生の「教育を受ける権利」を守るためには,私語に対する注意は必要と思います。
また,私は,私語を止めさせるために単に注意をする,という方法では効果がなく,本人のためにもならないと思っています。なぜなら,注意されれば私語をやめる,注意されなければ私語をするというのは,「他人に反応し,合わせて生きているだけ」であり,そのようなことを続けていると,将来「他人にこき使われるだけの人間」になってしまうと考えているからです。したがって,単に注意するだけではなく,注意されなくても私語をしなくなるような「啓蒙的な注意」をして行きたいと思います。(文責 高田)
第七週目(7/15,7/20)
Q. 今週の質問の回答はどこで聞けるか?
A. 授業が終了したので,Web上でのみの回答となります.
Q. 論理展開と量化のスライドのポイントは?
A. 論理的な文章を書くために,(1) 三段論法に基づいて論理展開すること, (2) 「ある」という存在限定表現が表す意味に気をつけること,(3) 「すべての」を用いた否定表現が表す意味に気をつけること,を述べています.
教科書p.186により詳しく書いてあるのでご参照ください.
Q. 三段論法の存在意義や使いどころは?
A. 三段論法は,論理的な文章を書くための論理展開法の一つです.
使いどころの例として,ある迷路を解くプログラムを作成する実験を考えます.ここでは「3秒以内に解ければ十分速い」とされています.作ったプログラムが「1秒で迷路を解いた」とします.この場合実験レポートの考察欄では,三段論法に拠って,「3秒以内に解ければ十分速いとされている.自分の作ったプログラムは1秒で解いた.よってこのプログラムは十分速い」と結論付けることができます.ここには論理の飛躍がないため,作ったプログラムが十分速いことは誰が読んでも納得できます.
Q. 相関関係とは何か?
A. 2つの事実A,Bについて,Aが変化するとBも変化する傾向にある関係を言います.
例えば,電器屋で冷房が良く売れる時期は扇風機も良く売れ,冷房が売れない時期は扇風機も売れないことがわかった場合,これは相関関係といえます.
ただしこれは必ずしも,冷房を買うとついでに扇風機も欲しくなる (またはその逆) という因果関係を意味しません.気温が高いから冷房や扇風機が欲しくなる,結果として冷房が売れる時期は扇風機も売れている,という可能性もあるからです.
Q. 相関関係と因果関係の具体例についてもっと詳しく.
A. 授業で出した例は,教科書p.188の4-5段落目に基づいています.当該箇所をご参照ください.
Q. レポートを書く際,考察・感想にはどのようなことを書くべきか?
A. 考察では,実験結果からわかることや,自分が立てた仮説の正しさの検証について述べてください.感想では,実験に関して思ったことや感じたことを述べてください.
Q. レポートを書くとき,ですます調の方が良いのか?
A. レジュメにもあるように,「である」調で書きます.
Q. 「である」調を用いるのはなぜか?
A. 多くの論文や教科書などでそのような表記を用いているからです。なぜそのような慣習になったのか,というのを突き詰めて行くと,「なぜ日本に住んでいる人は日本語を喋っているか」という問題までさかのぼらなければならなくなるので,あくまで「慣習」であるということに留めておきます。(「慣習」を打ち破ることも時には必要ですが,この件に関しては,打ち破る必要のない慣習だと私は思います。)
Q. レジメにある「実際には〜多いが」をである調で表現するなら,「実際には〜多いのであるが」となるのではないですか
A. もちろんこれでも構いませんが,ややくどいような印象は受けます。
Q. 参考文献の情報を記述する順番に明確なルールはあるのか?
A. 引用された順,あるいは著者名順が一般的です.
前者では,文献A, 文献B, 文献A, 文献C の順に本文中で引用されたとき,文献A, B, C の順に参考文献欄に記載します.
後者では,日本語のレポートならば一番目の著者の五十音順,英語ならば一番目の著者のアルファベット順に記載します.
Q. 教科書p.195-196の参考文献欄で,ピリオドやカンマが混在しているのはなぜか?
A. 教科書の出版社がそう定めているか,あるいは認めているからです.参考文献を記載するスタイル (記載する項目,順番,ピリオドやカンマの入れ方やその全半角) の規定は,出版社や学会によって大きく異なります.原稿を書く時は,投稿先の規定に合わせるのが一般的です.
Q. Wikipediaの引用は可能なのか?
A. 現在確定した見解はありませんが,Webページの引用はやむを得ない場合のみと考えた方が良いでしょう.
教科書p.185にもありますが,引用したい項目の参考文献欄から出版された書籍などを見つけ,当該書籍に欲しい記載があるならば,そちらを引用します.
Q. 「インターフェース」が「インタフェス」と表記されないのはなぜか? 一番最後を伸ばしていないのになぜ「インターフェース」とならないのか?
A. 省かれる長音は,基本的に語尾の er, y, or です.よってインターフェース (interface) の場合,本来ならどの長音も省かれないのですが,慣習的に「インタフェース」が使われていることから,現在もこう表記します.
Q. 世界的にもアジャイル開発プロセスは主流になりつつあるのか?海外ではプログラマの負担を増やさないために,滅多に仕様変更はしないと聞いたことがあるが…
A. 最近の米フォレスターリサーチによる調査では,半数近くがアジャイル開発を採用しているようです.
Q. 「明文術・・・」の本はリンクショップで売っていますか?
A. 在庫があるかどうかは分かりませんが,なければ数日で取り寄せてくれると思います。
Q. 別に「コンピューター」でも間違いではないのでは?
A.「論文やレポートで記述する場合の表記法」という判断基準では,限りなく間違いに近いと思います。
Q. 「感想文をレポートにして提出」という課題の意味するところは?
A. 感想文を「表紙や見栄えなどの点でレポートのような体裁にして提出」という意味ではないかと思います。
Q. プログラムを作っていて分からなかった場合,人のを見て理解するための自然と形が似てくるのはどのように考えればよいか?
A. プログラムの「一部分」が似通っていたとしても,「全体」がほぼ同じ構成になることはないと思います。プログラミング演習1,2の毎週の課題のような規模であれば,似通ったプログラムができる可能性はあると思いますが,最終レポートとして記述する規模のプログラムでは,自分で作った場合にはそれぞれ異なった構成になるはずと思います。
プログラムの全体構造自体を参照した場合は,自分の力で白紙の状態から作ることができるかどうか,もう一度やり直してみることが必要なのではないかと思います。
Q. プログラミングの課題で参考書に似ているものを真似て書いたときはどのようにすればよいか
A. 参考書に書かれていることを真似ること自体は良くないことではありません。どの程度真似るかにも依存しますが,ほぼそのままの形で引用した場合には,プログラム中のコメントでその旨を記載するか,レポート本体に引用したことが分かるような記述をするのが適切だと思います。
Q. プログラミングの課題が自分一人の力でできない場合はどのようにすればよいか?
A. まずは担当教員やTAに解決できない部分を相談して下さい。そのためには,締切ギリギリではなく,前もって課題を進めておくことが必要です。現段階の自分の理解度で課題が手に負えそうかどうか,期限までに完成できそうかどうかなどを判断し,自分一人の力でできない場合は教員やTAの力を借りるのが一番です。
Q. 文書の具体的な書き方は?
A. 質問の意図が曖昧でどのような回答をすれば良いのか分かりません。状況に応じて,「何を書くことを求められているか」を把握し,「その要求をどのような内容で満たすか」を考え,後は,その内容を章構成,段落構成などを検討しながら書き進めるのだと思います。
Q. 義務教育および高校での文章表現が役に立たないというなら,その改善の動きはないのか?
A. 「全く」役に立たないと言っているのではなく,技術的な文章を書く場合には,高校までで常識とされていたことが通用しない局面もある,ということです。特に,文学系の文書との違いには注意するべきと思います。
Q. 無線センサネットワークとは何か?
A. 複数個のセンサノード (無線通信機能とセンサを持つコンピュータ) を散在させて無線ネットワークを構成し,各センサで計測された結果を集約できるようにしたシステムを言います.
例えば,山の斜面の地すべりは,斜面の複数の地点における土中の水分量を計測し,計測結果を統合すれば予測できることがわかっています.この場合,斜面の複数の地点に,土中の水分量を計測できるセンサノードを散在させ,無線ネットワークを構成します.各地点の計測結果は無線ネットワークを介したセンサノード同士の通信で伝達され,最終的に一つのサーバ上に集約されます.サーバは集約された計測結果群を統合して,地すべりを予測します.
Q. 「VPN」とは何か?
A. Virtual Private Networkの略で,インターネットなどの共有通信網を用いていながらも,あたかも専用の通信回線が設置されているかのように見えるネットワークのことです。共有通信網を流れるデータを暗号化したり,目的地までの経路を適切に制御したりするための技術によって実現されています。
→VPN(Wikipedia)
Q. MacOS Snow LeopardでLaTeXを使うには?
A. 私は以下のページの情報を参考にさせて頂いて,自分のMacにTeXをインストールしました。→http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/install_xtexgsgv.html
Q. 「努力しても無駄」という考えはどうなんでしょうか?
A. 「無駄な努力はしない」ではなく「努力は無駄にならない」と考えようということなので,「努力しても無駄」という結論には至らないのでは,という前提です。努力をした結果,ある視点では無駄であったとしても,長い目で見れば別の視点では無駄ではなかった,ということはたくさんあると思います。
また,この本には,努力する人はどんどん努力が報われる世界へ進出して行き,努力しない人はどんどん努力しても無駄な世界へ落ちて行く,ということが書かれています。
Q. 努力をするコツは?
A. 様々な人が様々な意見を述べていると思いますが,私は「自分の将来像を描くこと」だと思います。
Q. ケーススタディを用意してほしい
A. 質問の意図が分かりかねますので,個別に連絡を下さい。
Q. 情報理工学序論ではWORDを使うな,と言われたのですが...
A. 「○○の条件では」という点を見過ごしているのではないかと思います(例えば,「今回のレポートでは」など)。どんなことがあってもWORDを使ってはいけないという決まりはどこにもないと思います。
Q. なぜ最後にデスクトップの話になったのですか? (K1)
A. 自分で撮ったお気に入りの写真だからです。ぜひ海外旅行をして視野を広げて下さい。
Q. 先生は今楽しい人生を送れていますか?
A. はい。
Q. 今までの質問に対する回答はどこに掲載されるのですか?
A. ここです(笑)
昨年度の情報
Updated: 2010-07-20