放送大学全科目感想 010 コンピュータとソフトウェア(’18)

  • 情報コース
  • テレビ科目
  • 辰己丈夫先生(放送大学教授)
  • 中谷多哉子先生(放送大学教授)
  • 白銀純子先生(東京女子大学准教授)
  • 難易度 ★★☆☆☆
  • おすすめ度 ★★★★☆

ソフトウェアの動作する仕組みを、ハードとソフトの両方の視点から学ぶ。3人の講師で、話題はPCの分解から簡単なアルゴリズムやプログラミング、データベース、開発の考え方など多岐にわたる。広く浅くという感じで、トピックごとの難易度は高くない。個人的には第8-9回目のプログラミング入門が素晴らしいと感じた。

第1回

全般的ガイドとコンピュータの構造について。聞き手は河原さん(アナウンサー?)。

この授業では一般的にコンピュータについて知ってほしいことを扱うらしい。

ソフトウェアが起動する仕組みから。今日は中谷先生の担当。ソフトウェアはなぜハード「上」で動くというのか、それは階層構造があるから。OSIレイヤーみたいなのが出てきて、ハード→OS→アプリの順に上に上がっていく。先生、AndroidをiOSより先に言ってるから、Android派だな。OSはソフトウェアとハードウェアの間に入ってハード資源を使う役割を果たす。

ソフトウェアを使うにはインストールする必要がある。インストールとは導入する、記憶させること。スマホもそう。スマホってソフトウェアってパッケージ化されてるんかな。PCだとファイル群をコピーしてレジストリ登録して。。が一連の手続きだけどスマホだとどうなってるのかな?

中谷先生って間とノリツッコミが独特。説明はすげーわかりやすい

下部構造へ。ハードウェアの説明になった。OSはソフト→ハードの命令の翻訳を担当する。ソフトウェアからハードウェアに直接データを送ればいいではないかと思われるが、そうもいかない。ソフトウェアにハードウェアの全ドライバを実装しないといけない。しぬ。

白銀先生と一緒にコンピュータを分解・組み立てするパートになった。マウスコンピュータのやつだ。まず静電気を放電(やったことなかった。やばい)。PCを自作する利点とは何か。まず自分の希望に合わせてパーツをカスタマイズできること。次に部品ごとに交換ができること。HDDはよく壊れるのでHDDだけ取り換えればいいとか。中谷先生は自作派ではなかったらしい。

マザボに電源をつなげて、HDDを取り付け、SATAケーブルでつないでる。CPUにはファンも付ける。グリースを塗るのは実はCPUのファン側には穴がたくさん開いてるのでそれを埋めるためらしい。マザボには全部どこに電源をつければいいか書いてある(これもよく知らんかった)のでこれを見ていけば簡単に作れるらしい。そのあとメモリを取り付けてる。最後にビデオカード(実は使ったことない)。蓋にCPUファン用の穴がついてる(これも見たことない)。うちのPC古いので、そろそろドスパラで部品そろえて自作しなおしたくなったな。

次に稼働させる段階の話。スイッチって0-1を示してたのか!!0がOFF、1がONってわけだ。OSを入れたUSBメモリを指して電源を入れた。電源ボタンは0-1を組み合わせている記号がついてる(これもそうか!)。電源を入れると表示されるBIOSはBasic Input Output Systemの略(だったのか)。CMOSってのは何の略なんだろうな。CPUはi5らしい(4年前だしな)。メモリ8GB(4年前としては多め)。ESCキーを押すと画面戻るとか、いろいろ細かく教えてくれてる。最後にUSBからWindowsインストールしてる。USBからだとはやいな!

最後にコンピュータの部品の説明と仕組み。メモリの仕組みになって突然難しい図になった。主記憶装置とメモリ、周辺機器の関係図。さてこの図だとソフトウェアがどこにあるかわからない。先生の定義だと、ソフトウェアとは、プログラムとデータから構成されるものだという定義になった(これ卒論で使えそうだ)。データ伝送路というもので周辺装置、CPU、メモリがつながっている。伝送路の速さにも性能は依存する。具体的には16-32-64bitアーキテクチャのこと。ああそっか64ビットのアドレスを保持できることが前提じゃないと、広大なメモリ領域とか、計算の基本単位とかが保障されないもんな。

第2回

辰己先生とネットワークの基礎について学ぶ。

原則、コンピュータ同士は電線でつなぐ。それもそうか!?光ファイバーだって、電線だもんね。

糸電話を始めた!しかも辰己先生の自作!さて、コンピュータの通信では、両者がかなり離れている。なので、送信と受信のタイミングを相手に伝えないといけない。また、送信と受信のチャネルを分けないといけない。それに、1対1とは限らない。3人かもしれない。そしたら、だれがだれに話したかわかるようにしないといけない。すると宛名をつけて、他の人宛のメッセージは無視しないといけない。ということを3つのコップのある糸電話とか、1人2つコップのある糸電話を使って説明してくれた(これも自作)。

AさんとBさんの会話を第三者Cさんに聞かれないようにするには?それぞれA-B B-C C-Aの3本の線を繋げばいい。これが4人だと4*3/2=6本。5人だと5*4/2=10本。6人だと15本。ということでnの2乗のオーダーで増えていくので大変。

通信はホスト同士で考える。6台のホストは、1本の線を中心において、そこにみんなが接続していくようにするとすっきりする。これをバス型という。ホストの場所のことをMACアドレスという(そういう定義だったのか!?)。MACアドレスを宛先に入れて、自分宛て以外のメッセージは無視するようにすればいい。

自分宛てのメッセージを待つ方法をCSMA/CD方式という。バスを共有している場合、2人がずっと通信していると、バスを占領して全員が通信できなくなる。占領する度合いをトラフィックという。スイッチングHUBを使うと、他の人のところに通信がいかないようになるので、問題が解決する。ハブは、MACアドレスを見て通信を振り分ける。ただし、インターネット宛になると話が変わってくる。

インターネットの話に変わった。インターネットはネットワーク同士をつなぐ約束事(プロトコル)の集合のこと。以前はThe Internetと言われてたが、最近では一般名詞になって小文字になった。

サーバと中継機器。この人たちは常に動いていないと困る。動いていないということは、道路や信号が止まっているようなものだと思う。先生は、サーバーが落ちるというのは、ネットワークが圏外になってるようなものという表現を使った。クライアント、サーバーの性能を比較すると、動画やゲームを動かすクライアントに比べて、サーバーの性能はあまり必要ない(計算量が少ない)。だから、パソコンでサーバーを立ち上げるのは性能的には簡単。

通信プロトコルの話。通信のルールのことをプロトコルという。プロトコルは上位・下位の層があるという。どういうこと?例えば切符を買うときのプロトコルでは、文字は下位、切符の買い方は上位、みたいな感じ。

何か話をすることを考える。言語は?日本語。手段は?電話。何の話をする?服装の話。この3つについて、どれか1つだけ独立に変えることができる。例えば言語だけ英語にするとか、電話をLINEみたいなアプリに変えるとか。これがプロトコルの層という話になる。どれか1つを変えても、他の層に影響を与えない場合、多層構造であるといえる。あーそういう観点無かった。一つ層を変えたら全部変わるもんだと思ってたわ。

おなじみOSI参照モデルが出てきた。例えばスマホがwifi→モバイルネットワークになっても、上層部は何も変わらないじゃない?たしかに!!インターネットは3-4のネットワーク、トランスポート層だったはず。

インターネットについて。通信単位をパケットという。データをパケットに分割して順番をつけて送信する。メリットは、トラフィックを長く占有しないことと、データの一部が無くなっても再送することができること。結構データが切れることは多いけど、再送にはどんな仕組みがあるんだろうな。あんまり機能してない気もするけど、、

IPアドレス。電話番号のようなものという定義になった。IPアドレスはMACアドレスのように機械出荷時のとき固定するわけではなく、動的に変わることがある。だから電話番号ってこと。IPアドレスは42億しかなくて足りないんで、IPv6にするって話だけどあんまり普及してない気がする。実際どういうところでv6になってるのかよく知らんなあ。

第3回

インターネットについて。ソフトウェアの科目にしてはネットワークの話多いね。今日は辰己先生。

封筒を使ってパケットをシミュレート。OUJの文字を送る。裏面にASCIIで表した数字が書いてある。手が込んでるなー。封筒に宛先を書いて、さらにルーター宛の封筒に入れて渡していく。ルーターは一つ封筒を一つ開けて宛先を見て、また宛先に近いルーター宛の封筒に入れて次のルーターに渡す…を繰り返す。そのうち宛先にパケットが到着する。パケットが来なかったらまた再送のお手紙を出す。最後までパケットが届いたら届きましたーって通知も出す。封筒をパケットのヘッダーに見立てているんだろうなーよくできてる。準備がたいへんや。

IPアドレス→ホストにつけた番号。電話番号と同じ。可変。ただし有効範囲はインターネット全体。一方でMACアドレスは不変。でも有効範囲は部屋の中だけ。MACアドレスが衝突することってあるのかな。

IPV4ってまだまだ現役だよね。32ビット、2の32乗で42億通りしかできない。32ビットアーキテクチャと関連してるから42億って数値は覚えておこう。

ネットワークアドレスについて、例えば12.34をある組織ということにすると、組織内で65536通り割り振れる。市外局番みたいなもん。ネットマスクというのは、ネットワークアドレスに使う部分の長さのこと。2023新課程の情報Ⅰの試験の例にでてきたよこれ。将来の高校生はみんなこれ知ってるんだよなあ。

IPV6は128ビット。3.4*10の38乗通りのアドレスが割り当てられるのでなんでもいける。

IPは変わりうるが、ドメイン名とIPが結びついているので問題ない。これを対応付けるのがDNS。世界規模の電話帳といっていい。DNSは分散管理されている(後述)。DNSはドメイン→IP(正引き)、IP→ドメイン(逆引き)のどちらの変換もできる。

www→ホスト名。ouj.ac.jp→ドメイン名。www.ouj.ac.jp→FQDNというらしい。

.jpの中でもac.jpとかed.jp、go.jp、lg.jpのほかにtokyo.jpとかもあるらしい(しらんかった)。これをセカンドレベルドメインという。オリジナルドメインは高いと言ってる。そうでもないっすよ。rokujo.orgは年3000円です。

jpのドメインはルートサーバ(?)、ouj.ac.jpのドメインはJP DNSサーバ、www.ouj.ac.jp内のIPアドレスは放送大のサーバが管理している。このように分散管理がなされている。ここら辺の仕組みももっと詳しく知りたいっす。いろいろ参考文献ほしい。

経路問題について。どうやってホストからホストに通信をするか。近いホストは簡単だけど、遠いホストはどうするのか。デフォルトゲートウェイというものを利用する。ネットワークの外側に行きたかったら、とりあえずデフォルトゲートウェイにパケットを送ってあげる。空港とか駅みたいな感じ。あとはゲートウェイ同士が通信をする。ゲートウェイ同士は太い通信線で結ばないとだめですね。あとは「数学的にいろいろ工夫がされています」とぼかされてしまった。知りたいです。

検索エンジンを簡単に解説してる。クロール→データベース化→検索サイト接続→表示って流れ。データベースをいかに工夫するかが大事なんだろうな。

CDN。米国サーバと同じ内容を日本国内においておく。すると米国のサイトにつないているのに日本でも同じものがトラフィック軽めでみられるようになる。

仮想マシン。ネットワーク経由で、コンピュータの真似をする。仕事で結構使ってます。コンピュータのシミュレートなので丸ごとコピーできたり、時間を止めたり進めたり簡単なので便利。最後の方はずいぶん詰め込んだな。

第4回

UI(ユーザーインターフェース)について。白銀先生+中谷先生。

インターフェースとは接合点のこと。例えば電源と電源プラグ。USB機器とプラグ。何かと何かを連携・連結するところのことをいう。

コンピュータでは何があるか。キーボード。あっ白銀先生カンペみえてるよ!Bluetoothもそう。スマホの画面入力のソフトウェアキーボードもそう。QWERTY配列は、タイプライターに由来する。バー同士がぶつからないように調整したんだって。メカニカルな理由だったんだ。他の配列は?dvorakというのが有名らしい。頻度の高いアルファベットが押しやすくなっているらしい。親指シフトってのが日本語ではよく使われる。聞いたことはある。文字入力たくさんやることが多いし、ひらがな入力もトレーニングしてみようかな。

マウス。最近トンと見なくなった機械式と、光学式のマウスが出てきた。機械式はゴミが中に入るのが欠点。トラックボールも出てきた(これまだあるの?)

出力装置。ディスプレイから。昔はCRTだったね。今は液晶。テレビと同じ。液晶はバックライトをあてて光らせて表示させてる。12.1型みたいな名称は、ディスプレイの対角線の長さをインチで表したもの。ppiはドットの密度のこと。

1ドットは3つの点(!?)で構成されている。RGBで1点ずつ。それぞれ256段階で光らせればフルカラーになる。出力が256段階ならデータがフルカラーより細かくても意味ないね。拡大したドットを見せてもらった。確かに正方形を縦に3分割してRGBがそれぞれ光っている。しらんかった。スマホは細かすぎてルーペでは3分割した点が見れないかもしれないとのこと。

プリンタはCMYK方式。どうしても印刷物に違和感が出るのは色の表現方法が違うから。実物で比較してもらった。たとえば空の水色、雲の青っぽい黒がだいぶ異なってくる。これ例えばカメラのキタムラで印刷してもらった写真でもそうなのか?できるだけディスプレイに近づける工夫があると思うんだけどどういうことをやってるんだろ。

画面読み上げの話。マウスポインタの下の文字を読み上げてくれてる。windowsだとしょぼい。siriの方が読むの上手。

タッチ入力、ペン入力。誤認識問題のことをfat finger問題というらしい。対象物より指が大きいためにおきる。

CUIとGUI。CUIは命令を覚えなきゃいけない(けど、速い)。今でもネットワーク機器でよく使う(し、コマンドプロンプトでいつの時代でも使えるよ)。GUIは90年代~。命令を覚えなくていい。私は90年代からPCに触れてるから、ちょうどCUIとGUIのハイブリッド世代だな。cygwinでファイル見てる。エクスプローラとプロンプトで両方とも同じファイルが表示されていることを確認。lynx 命令でwebページを表示することもできる。テキストベースのインタフェースが用意されてないと無理だな。WYSIWYG(古い)も紹介された。texも紹介してもらった。あれ、wordってtexそのまんまサポートしてるんだ!?

第5回

今回は辰己先生と大阪電通大の兼宗先生。見えない情報技術について。取材がメインだそう。

いろんなものにコンピュータが入ってますねーという話からスタートした。コンピュータは汎用、高性能、安価なので使われている。

人間は五感を使って情報を収集した後、文字などを使ったりして何かを出力している。コンピュータも同じ。入力と出力がある。

組み込み型コンピュータについて。コンピュータを頭脳に見立てて、センサーやアクチュエータを五感、筋肉として活用し、入力と出力を行う。アクチュエータとしてはエンジンとか、モーターとかが例になる。

楽器の中のコンピュータの例。辰己先生の取材。辰己先生ギター弾けるんだ!KORGに取材してる。シンセでアコギの音を引いてる。サンプリングしてメモリーに収録しているらしい。オルガンの音もドラムもならせる。基盤を見せてくれた。CPU、DSP、メモリ、ユーザーインターフェースからなる。あれ最近のMIDIキーボードってBluetoothでいけるんだ!確かにシンセの音鳴ってるわ。switchでも音楽作るソフトがあるみたい(ほしい)。iPadにも音楽作るやつ入ってるみたい(BandLab?)。

認証について。静脈認証システムの取材。富士通だ。ATMに手のひらをかざして認証してる。暗証番号はどっちにしても必要なんか。まだ岐阜の大垣共立銀号しか採用してないらしい(2018)。クレジットカードを手のひら認証することもできる。近赤外線を照射して、血管が赤外線を吸収することを使っているそうだ。画面が洗練されていないのが富士通って感じ。

手のひら認証は、犯罪の指紋とはちがって、積極的に個人情報を提供していくことと同じだから、意思の確認としても使えるということ。あーそういう視点無かった。他人とご認識される確率は1/1000万。すげ。双子でも誤認識しないらしい。流出対策としても、静脈情報は取り直せばいいらしい(どういうこと?一意性がないの?)

人と一緒に働くコンピュータについて。店舗ロボットだって。慶應でもあったやつや。今回は大阪電気通信大学の鄭先生。コンビニの商品陳列ロボット。まずキャリブレーション(初期位置確認)を行う。準備運動みたいなもん。まずおにぎりを掴む。これ力の加減難しいよな。アッ落とした。倒した。まだプログラミングが不足らしい。腕を上げてなかった。シールをつけて何の商品なのか認識する仕組みらしい。弁当は吸盤で吸着。おっこれはうまくいった。使っている技術としては画像認識、モーターの制御など。安全性がこれからの課題だそう。なんと学生の手作りらしい!

辰己先生談、カメラの性能が高いので、コンピュータも高性能じゃないと解析が不可能という面があるらしい。

フィードバック制御について。屋内ではGPSが使えない。位置と動きを微調整しながら動作するためにフィードバックのような仕組みが必要になる。

車輪を使うこと。店では広いスペースがないから、車輪を3つ使って小さな半径で回れるようにしている。

辰己先生、10年前にも取材をしたことがあって、その時と比べてずいぶんと進歩したらしい!コンピュータの性能向上が最も大きな要素だそうだ。今後は人工知能がデフォになるからAI視点が重要になってくるらしい。

第6回

辰己先生。コンピュータにおける数値表記について。多分計算の科学と手引きとかぶってる。

位取り記数法から。数字を大きくしていってあふれたら左側に1桁増やすことをいう。n個数字を使えばn進法になる。点10個を表す場合、2進法なら1010、3進法なら101。混乱を防ぐため十進法、二進法などと漢字で書くことが多い。1010(2)という書き方と、(1010)2と書く流儀がある。前者が多い。

二進法と十六進法の対応表を見てる。プログラマーにはなじみがあるけど初めてだと大変そうね。

六十進法は身近に使ってるという例。時分秒で使ってた!

ビットとバイトの話。まず先生がパンチカードを出してきた。そもそもビットとは、穴のことらしい(そうなの!?)8ビットで1バイト。コンピュータの中身は実際は0と1ではない。電流とか磁気とかだから。それもそうだった。01が実際に数として記録されれるわけじゃーないや。

なぜ固定長なのか。大きな数を取り扱う前提で場所を数を記録する場所を取り過ぎると無駄なので、昔は8bitだった。固定長の場合は、小さい数字は00010000みたいに、左に0を補ってやればいい。区切ってやれば、処理しやすくなる。8bitでは255までしか表せないから、2つ、4つ並べていって大きな数を表していた。

2進法→10進法の変換してる。辰己先生、字があまり上手じゃないのが好感を持てる(私も下手なので)。ビットシフトすると2倍、半分になるって話もしてる。倍々にしていって1を足したり足さなかったりする変換方法もある(知らんかった)。

負の数と小数の表し方。4桁のカウンターで説明。9997は、3回押したら0000にある。だから、9997は-3と同じではないか?同じように、時計の9時57分は、10時-3分と同じではないか?という考え方をするらしい。これを補数という。1000をフルだとすると、999に対する1が補数。256をフルだとすると、10に対する補数は246。補数、基本情報とか応用情報でやったけど、意味わかんなかったなあそういえば。ようやく意味わかったです。

コンピュータでは、マイナスは補数で表す。-10は246表す。-100は156で表す。どこからどこまでがマイナスなのか、プラスなのか、はコンピュータ上の決まりとして決めておく(signedとunsignedの約束事のことだと思う)。この仕組みならプラスもマイナスも一緒くたに計算してやることができる。

小数はビットでどう表すのか。印刷教材を見ろとのこと。ここでは小数の記数法の話。10進法では1/10にすると小数点が一個ずれる。これをn進法にすると、小数点を一個ずらすことは、10(n)分の1にすることと同じ(あーそっか!)。

3進法で一桁ずらすと、循環小数になる。n進法でも循環小数になる。逆もそうで、10進法ではきれいだけどn進法では循環小数になる場合もある。

第7回

(しんどくなってきたので以降感想は適当です)

データの符号化について。

ISO-2022-JPって漢字のin-outに3バイトとも使ってるのか。大変な仕様だ。UNICODEは?と思ったら解説無し。

紙テープ折って0-1で長さを表す実験。辰己先生こういうの上手だなー。

色のデジタル化。加法混色と減法混色について。つまみでRGBを調節して色を作る装置が出てきた、楽しいのでほしい。

3ビットカラーの写真。8色でもそれなりに写真が見えることが驚き。

ラスタ形式とベクトル形式。ベクトル形式って実際どんな風にコンピュータ上で表されているのか気になる。二次元ベクトルをいっぱい書いてあるだけなのかな?

MIDIのはなしのとこでボカロがでてきた。メジャーになったもんだね。

パリティビットの実演。1や0が偶数になるようにすればエラー訂正が確かにできる!

第8回

プログラミングの基礎。兼宗先生。

プログラミング言語は自然言語と機械語の中間である。人も機械も両方理解可能なところをとったもの、と考えるのがよい。今回は宗近先生が作った(!)というドリトルという言語をフューチャーする。

『「かめた!90左回り 200歩く」!4回 繰り返す』みたいな感じの命令文がある。日本語じゃん!そして、登場人物がscratch風の動きをしている。

★書いてる。144度ずつ回すとちょうどうまくいく(720度/5)。

回数と角度を変えるだけで画像がいろいろ変わっていく。プログラムは書いていろいろ実行してくと面白いことがわかる。プログラミングってとにかく動かすしかないよねー。いやこれは素晴らしいイントロだなあ。

対話型プログラム。ちょっとこれは。。見づらい。ドリトルは、直感性を重視して、可読性をおとした感じの言語なんだな。あとシンタックスエラー頻出しそう。カメがひたすら動いて、物にあたるとそれを消す、というプログラムだった。

プログラミングの要素。流れ・制御と反復処理、条件、入出力、データ型あたりが大事。変数を使うと一気にプログラムが便利になる。ドリトルのfor文、「|n| かめた!(20*n) 歩く」みたいな感じで、初見だと見づらい。慣れたら簡単そうだけど。

ドリトルは関数定義もできる。かめた:星を描く=「(命令文)」みたいに書けば、かめた!星を描く、でコールできる。JavaScriptとおんなじや。これはまあ、見やすい。

配列は データ=配列!10 20 30 40 みたいに書く。配列処理は データ!「|要素| 合計=合計+要素」みたいな感じ。よみにくい。

最後にC言語。やはりCは大事らしい。コメンテーターの河原さん、見た目は暗号みたいだけど、意味を教えてもらえばわかりやすいということ。かえるぴょこぴょこ・・・を表示させるプログラムを作ってる。これはわかりやすい。

この回神回かもしれない。プログラミングに抵抗ある人、ぜひこの講義見てください。

第9回

辰己先生回でアルゴリズムの話。アルゴリズムは終了することが重要。最大の整数を見つけてください、というのはアルゴリズムではない。それもそうか。

アルゴリズムは書き方は問題ではなく、何をするかが問題となる。書き方はいくらでもある。

良いアルゴリズムとは。だれが動かしても大丈夫、読みやすい、メモリを使わない、処理が速い、などなど。

数学的なアルゴリズム。まずユークリッドの互除法(えー!?)。世界で最古のアルゴリズムらしい!授業のネタになるね先生126*35の紙作って持ってきてる。。すげえ。。折って切って折って切って、、長方形が正方形になるまで折って切ってを繰り返す。このプロセスをドリトルで書くとなんと7行に。

ソートとサーチ。天秤を使ってバブルソートを行っている。6個の重りで15回の比較をすればいい。整列を手を動かしながらやるとめっちゃわかりやすいな!そしてドリトルで書くと見づらいな。先生、変数はせっかくだから日本語にした方が。

二分探索を広辞苑でやってる。これはわかりやすい!100万ページでも20回、10億ページでも30回の探索でできる。logで探索できるってのはすごいねぇ。

ハノイの塔を使って再帰プログラムを解説する。文字で書くのは難しいが結構感動した。円盤の枚数を1枚増やすごとに、1つ前の手順と同じことを繰り返していけばいい。2枚だろうとn枚だろうとやることが同じ。これが再帰的か。なおハノイの塔は64枚にすると2の64乗回の処理が必要らしいので、フリーズするそう。

最後に、天秤と重りでクイックソートやってる。。すげえ。。神。確かにクイックソートは再帰的だわ。しかも2分で説明終わったで。

第10回

シミュレーションについて。辰己先生+兼宗先生。

モデルとは何か。実物ではないけど特徴を良く表しているところのもの。

メルカトル図法の図は最短距離を求めるにはうまくいかないが、地球儀だとうまくいく。モデルには、抽象化が不可欠だが、問題に合わせた抽象化が必要。抽象化したものを記号や図で表すと、モデルになる、つあmり地図とは、モデルである。

シミュレーションとは。現実をモデル化して、モデルによってさらに現実を模倣すること。具体的にはこういうこと。200mの道を1.2m/sと0.9m/sで向かい合って歩いている人がいる。何秒後に出会うか。中学数学の問題だ。これの式を立てると、式が数式「モデル」である。グラフで表してもモデルと言える。

数学で表されるのは、解析的な解。現実はそうとは限らない。

つるかめ算。河原さん手馴れてるので中受経験者か。これは連立一次方程式で解ける。エクセルでも余裕。プログラムでも、for文で回して総当たりにすれば解ける(まじめにやるなら、クラメルの公式使ったりするのかな)。

物理エンジン風のものをドリトルで再現している。ドリトル、こういうのが得意なんだな。

突然、京コンピュータの取材に行った。河原さん上がってる。わたしもあがってます。8万ノードもあるらしい。現実の計算をするためには、大規模かつ複雑な計算をする必要がある。これを可能にするのがスーパーコンピュータ。実際には、大気シミュレーションなどに利用されている。モデル化がうまくいかなかった例としては、車のドアミラーの風切り音についての計算。これは、計算の細かさ(メッシュ)が足りていなかったために、起こりえない現象がシミュレーションで起こってしまったということ。計算で工学的なシミュレーションができるようになったので、効率化・費用削減効果がすごい。

兼宗先生によれば、うまくいかない計算はまだ三通りあって、京コンピュータでも太刀打ちできない複雑な現象と、はっきりとした式で表せない現象(囲碁とか)。それから、人間の心理に関わる現象。

第11回

データベースについて。今回は兼宗先生。

DBは表計算では扱えないような量になってきたときに役に立つ。昔あった階層型とかネットワーク型ってどんなものなんだ?印刷教材に書いてあるかな。

リレーショナルデータベースって、好きな表を作れるのがいいよね。マクロ使ったりするともっと複雑なもの作れるし。

データベース用の言語として、教育用にサクセス言語ってのがあるらしい。なんじゃそりゃ。ってこれも先生が作ったやつかもしれない!!

「表示 売上データ」 とか、「選択 時間帯 夕方」みたいに入力して操作する言語らしい。SQLを簡便にして日本語化した感じかな。あと表が見やすい。どういう操作をしたかも、スタックに積んでいく方式で見ることができ、わかりやすい。

SQLになった。文字列に%を付けたらそこは任意の文字を表すっての、超基本なんだろうけど知らなかった。。やば。

DB設計について。いずれDBスペシャリスト受けるし、しっかり見とかないと。E-R図を使ったりするとけっこううまくいくみたい。二つの実体を関係を使って結んでやるのが基本かな。例えば、商品と顧客を、購入という関係で結ぶ。家計簿もE-R図でDBにならないか?

リレーショナルDBにする理由。全部一緒くたの表だと、矛盾する更新ができてしまう。A社と東京が必ず結びついている場合に、A社と京都みたいな記述があると困る。つーわけで、A社とその所在地については表を分けてしまうのがよい。

DBシステムの安全機能。ACID属性の、独立性だけちょっとよくわからない。原子性は、例えば簿記の記録で貸方と借方の片方だけが記録されるようなことがあったら、やばいということがわかる。で、これ実際ソフトウェア上でどうやって実現しているのかな?

第12回

オブジェクト指向の話。中谷先生担当。

まずは単位をそろえないといけないという話から。変数名だけだとプログラマーがずっと単位を覚えていないといけない。例えばキロとメートルを間違えると大変なことになるが、これをバグとしてで見つけるのは大変。これを解決するのがオブジェクト指向らしい。オブジェクト自体に単位変換をやらせればいいじゃんってこと。メートルなのかキロメートルなのかっていうのは、オブジェクトにメートルをくれとか、キロメートルをくれとか聞けばいい。

aNagasaみたいに変数名にaをつけるのって最近の流行りなのか。

オブジェクトの主人公としては、長さとか重さとか、人、図書館、状態などが考えられる。属性と操作があればいい。状態自体をオブジェクトにすれば、if文で大量に分岐することを避けられるね、というのも、原理としてはわかるが、実際コード的にはどう書けばいいのかな。

オブジェクトは関数の集合体(プラス、データの集合かな)。

自動販売機というオブジェクトを考えると、お金を識別したりランプを点灯させたり、いろんな役割があるよね。あと自動販売機の中に、お金を受け取るオブジェクトとか、ランプを点灯させるオブジェクトとか色々必要になる。役割分担が技術者に求められる技術の大事なものの1つになる。

Javaのプログラム例が出てきた。オブジェクト作ってデータ入力、演算、と出力をする典型的なオブジェクト指向プログラムのやつだ。異なる単位の演算を勝手にやってくれるのでありがたい。けど、けっこう行数が多くなるんだよね。多くてもいいんだけどさ―読みやすければ。

オブジェクト指向用語集が出てきた。情報隠蔽って、自動販売機の例だとわかりやすいね。内部でコインがどう動いてるとか、他のオブジェクトは知らなくていいし。あと、オブジェクト自身が自分の処理に責任を持つっていう考え方もいい。特にエラー処理、デバッグの時に大事になる考え方だ。

役割分担の上手くいっていないオブジェクト設計の例。主人公が少なくて、処理がごっちゃごちゃになってる。整理するためには、お金を処理する人とか、ランプを表示する人とかをオブジェクトにしないといけない。

情報隠蔽の意義は、隠蔽されている中身の処理を変えても、他に影響を与えないということ。効率的な役割分担の一貫だったんだな。私面倒で、隠蔽を一部解除して他のオブジェクトに編集可能にしてしまったりすることがあるのだけど、こういうことをすると保守性が著しく落ちるのな。反省した。中谷先生的には、オブジェクト指向では情報隠蔽が一番重要らしい。

良いメソッドの数は20くらい、中身は10行くらいがいいらしい。だからクラス一個は200行か。これならプログラマは5分で読めるらしい。たしかにそんくらいかも。

ドリトルもオブジェクト指向言語らしい。JavaScriptの仲間。小規模用。C++やC#, Javaなどはクラスベース。大規模用。オブジェクトベースでは委譲というやり方で、継承のようなことを実装する(詳しくはどんな感じなんだろ?JavaScriptならわかる気もする)。

第13回

ソフトウェア工学の考え方について。今回も中谷先生。

ソフトウェア工学とは何か。ソフトウェア開発において系統的で統制された、定量化可能な方法を適用すること。できるのかそれ?できればだいぶ見通しとか見積もり、開発保守の誰でもできる再現性のある方法が確立できるよね。情報技術者試験ってのはそういうことを学ぶ試験なのかな。例えば某手法を採用したのでプログラムのコードを1/100にできましたってことが分かれば、その手法を定量化して評価できる。特に大規模開発になったときに大事。私仕事はほとんど1人でやってるからあんま恩恵は受けられないんかな。。

納期の話。決められた通りにやるとうまくいかないので〆切のために適当にやると、仕様書通りにならなくなる。私らの場合だと、暫定でとりあえず動くようにして仕様書の方を(未実装)とか書いちゃうけどな。仕様書に合わせるために嘘のコードを書いた方が悲劇が起こるんじゃないんかな。

ウォーターフォール型プロセスについて。一発で要求→実装→運用までやっちゃうやつだ。これ見るたび危険だなって思う。テストにもいろいろレベルがあるけど、うちの会社だと基本的に単体テストの積み重ねが多いよなー。小規模なプログラムでもないのに、常に結合テスト、システムテストも兼ねてる感じ。

スパイラルプロセス。要求定義→プロトタイプを作る→リスク分析(これが大事)→またプロトタイプを作る、の繰り返し。webアプリなどはじめに何が必要なのかよくわかんない場合、よく用いられる。

リスクには何があるか。人員不足、間違ったスケジュール、間違った機能の開発、頻繁な仕様変更(!)、インターフェースの不整合が主なもの。

もう少し違うアプローチの開発方法について。まず簡単なプログラムを作って、徐々に完成に近づけていく方法をインクリメンタル型。これに対して、大枠は変えずに機能や品質を高めていく場合はイテラティブ型という。私はインクリメンタル型の方が好き。

Eclipseでてきた。JavaScript開発するときに昔使ったことある。今でも健在なんだな。

astahというモデリングツールの紹介。詳細な属性の入ったUMLが簡単に作れてる。放送大のモデリングをしている。わかりやすい。コードの自動生成機能もあるらしいよ。

要求分析の説明してる。学生で実務したことないと、これ意味わかんないんだよね。実際に人が動いているところを想像できないと、ただの抽象的な文字の羅列に見えてくる。

保守。基本的には予防保守=デバッグがメインだけど、例えば新しいwindowsに対応するため適応保守しないといけないことってけっこうある。そういえば今日ゲーセンに久しぶりに言ったらpop’nでXP embeddedがまだ使われていて驚いた。下手にwindowsを更新すると、ゲームみたいなハード依存が激しいソフトウェアは動作しない、不具合続出みたいになるからしょうがないよね。

第14回

UI理論について。白銀先生。

UIの品質はどうやって計るのか。今の時代は使いやすさよりもユーザエクスペリエンス(UX)が大事と言われる。ソフトウェアを使ったときのユーザの体験が大事ということ。使用前、使用中、使用後にどう感じるかが問題になるらしい。

国際規格がいくつかある。まずISO9241-11(1998)。有効性、効率、満足度を測定する。

次にSQuaRE。ソフトウェアの品質全般を定義している。利用時の品質、製品品質を評価する。ISO9241-11を拡張したもの。

最後にISO9241-210。人間中心主義を標榜する。前2つとは違い、言葉の定義だけが書かれている。

SQuaREの利用時品質モデルでは有効性、効率性、満足度のほかにリスク回避(経済とか安全性とか)、利用状況網羅性を評価する。評価しづらいソフトウェアの品質を定量的に評価するために、うまいこと考えたもんだな。製品品質モデルでは、使用性として適切度認識性(ユーザがニーズを満たしているか確認できる度合)、習得性、運用操作性、エラー防止性、ユーザインタフェース快美性(変な単語)、アクセシビリティ(障害者対応)が評価される。こういう観点を日々の開発に取りいれると、よいソフトウェアができそうな気がしてきた。

カーナビを例にしてUIをみてみる。パイオニアに来た。カーナビはユーザ操作の仕組みがなかったらしい。タッチパネルが登場したので操作が可能になった。スマホの普及によって、UIもスマホに寄せてきているらしい。フリック、ドラッグ、長押しでスクロール(知らんかった)、二点タップで拡大縮小などなど。

使いやすさと分かりやすさはトレードオフ。機能を置くすれば使いやすくなる。でもわかりにくくなる。そこで一貫性を持たせる。パイオニアさんは9*5のマスにすべての操作が収まるようにしてある。ミスを防ぐため、キャンセル操作は「はい/いいえ」を毎回表示している。

カーナビはターゲット層がいない。だれでも使う。そこで高齢者・障害者への工夫が必須になる。道路の色は一般的な地図を踏襲していて、これが色覚に障害のある人にそのまま認識しやすい色らしい。微調整としては、色温度を変えることができる。

通知の段階。車間距離が近づいてきたら黄色く警告、もっと近づいたら赤で大きく表示、など。最初に大きく表示するとびっくりするので。

ここまで見てきた内容は全部SQuaREの項目に関連付けることができる。運用操作性とか、アクセシビリティとか。

人間中心設計(HCD)のサイクルについて。まずHCDのための計画をして、ユーザの利用状況を特定する。ユーザ要求も特定して、具体的に設計する。最後に大事なのが評価。評価をフィードバックしてこれまでのサイクルに戻っていったりもできる。

具体的にGUIを開発することについて。GUIはオブジェクト指向と相性が良い。JavaのSwingクラス図を見ると納得できる。例えばボタンの子クラスに普通のボタンとメニューアイテムがあったりする。実例。Android Studioを使ってる(先生もAndroid派か)。実機、微妙にSONYのロゴが見えてるからXperiaかな?

第15回

社会で利用されているソフトウェアについて。中谷先生。総まとめと応用。

ポイントカードがいっぱいになってしまうことを例にして、高速化の説明。財布、カード入れ、手で持つ3パターンがある。手がキャッシュメモリ、財布がメモリ、カード入れがHDDに相当する。ただキャッシュメモリと手は、ポイントカードをどうやって認識するのか、という点で違う。キャッシュではポイントカードを認識するためにひと工夫必要となる。

ダイレクトマップ方式。主記憶装置のアドレスをキャッシュの大きさで割った余りとキャッシュのアドレスを対応付ける。これだとキャッシュ上の複数のアドレスが多対一で対応付けられてしまう。そこで上位ビットをタグにして、キャッシュにも入れておく。タグとアドレスが両方とも合致すれば、実際にそこに内容が入っているということが分かる。さらに、内容が実際に入っているかどうか保障するために有効ビット(最終ビット?)をオンにする。

キャッシュを大きくすれば速くなるんだけど、高い。そこで別の方法で速くする。マルチコアにしたり、コンパイラを工夫して最適化する。

主記憶装置を大きくしてもいい。次は仮想記憶について。主記憶装置が足りないときにHDDを使うやつ。いわゆるスワップってやつか。昔のwindowsで速度低下の原因になるやつ。ポイントカードの例えなら、財布からポイントカードがあふれた時にカード入れに放り込むことに相当する。カード入れというのは仮想記憶装置に相当する。あっスワップはめっちゃパワー食うって言ってる。だよねー。で、使わなくなったポイントカードを家に引き出し(HDD)に入れる。

情報システムの仕組み。wakabaを例に。わー機能多すぎ。たいへんや。DB自体は少ない(3つ)が、操作や管理機能が多すぎ。これをOSIモデルで表現すると、プレゼン層、アプリケーション層、データ層の3層だけで表現できる。

機械学習の話。主に教師ありと教師なしがある。教師あり学習では、正解を与えて学習させる。教師あり学習ではSVM(サポートベクターマシン)を使う。まずはデータを回帰曲線の上と下に分ける。そして上にある方について、どういう特徴量を持っているのかを学ぶ。

担当学生さんが手書き機能のパームリジェクション機能を機械学習で行うというので、その話の紹介をしてくれた。手のひらを置いたまま指の動きだけを検出したい。実際に手を置いて書きまくってもらいデータを取る。そしてどのような特徴量が手のひらで、指なのかを教えていけばよい。あーなるほど。原理だけでもすげーなって思う。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です