女「情報って力になるんだね」(121)
男「誰だ、君?」
?「私? 私は……誰だろ?」
男「なんだそれ、記憶喪失だとでも?」
?「そうみたい」
男「名前ないのは不便だし女でいいんじゃないか」
?「なんだかしっくりくるね。もしかして私のこと知ってるんじゃないの?」
男「しっくり感に俺自身驚いてるけど、知らないよ」
女「ところで君こそだあれ?」
男「俺? 男って言うんだ」
男「なにはともあれ宜しくな」
女「ヨロシクなの? それはつまりこの関係が続くってこと?」
男「せっかくこうして部室にいるのだから入部すれば良いと思うんだ」
女「ここ部室なんだ。……何部なの?」
男「コンピュータ部」
女「あまりの雰囲気にホラー特撮部かと思ってたよ」
男「知らん間に火事になったみたいでな……」
女「パソコン部ではなくコンピュータ部と名乗る理由は?」
男「文書作成、表計算、動画像の編集みたいなパーソナルな使い方ではなく、システム管理や情報処理的な話を中心に扱う部活だから」
女「なんか凄そうだね」
男「ハッキングの勉強であれば部内の人のパソコンのセキュリティを突破することも許される部活です」
女「ほかに部員がいるの?」
男「いない」
女「ハックする相手もいないじゃない」
男「君が入ればできる」
女「部活のことはよく分からないけど、君が楽しそうなのと部員が欲しいってことは分かったよ」
女「きっと入ったら楽しいんだろうな、って少し思うから、……うん。入部するよ」
男「よし決まりな、改めて宜しく」
女「部活のことはよく分からないけど、君が楽しそうなのと部員が欲しいってことは分かったよ」
女「きっと入ったら楽しいんだろうな、って少し思うから、……うん。入部するよ」
男「よし決まりな、改めて宜しく」
女「じゃあ今日は何を教えてくれるの?」
男「下校時刻なので明日からです」
女「えー」
男「やることについても特に俺から指定する気はないよ」
男「教えられることって意味なら」
プログラミング的な話
プロセッサ的な話
手続き(プロトコル)的な話
セキュリティ的な話
男「かなあ。分野によって深度がまちまちだけど」
女「全部教えてくれるの?」
男「……時間がどれだけかかってもいいなら頑張るよ」
以下安価改めアンケ
>>5はコピペミス
女「来るの遅いよ。やること決めたよ」
男「そか。それはよかったけど、何を学ぶにせよ机上で勉強するのはコンピ部の名が泣く」
女「たくさんパソコンが転がってるじゃない」
男「昨日から確認してるけどほとんど火事で死んでるんだよ」
女「えー」
男「とりあえず俺が普段使ってた奴は無事だったから良いけど。もう一台、女が使う用のを探してる最中」
女「仮に見つかったとして誰のかも分からないけど、使っていいの?」
男「初期化すれば問題ないよ」
女「ふーん」
男「お、これ起動するじゃん」
女「ホントに?」
男「しかしこのログインユーザ誰だろ? まったく見たことねーな」
女「どんな人? えーっと、mxw。……うん、知らないね」
男「記憶喪失少女が知ってるだなんて期待してないから大丈夫」
女「ですよねー」
女「知らない人のパソコン勝手に初期化して良いの?」
男「データのバックアップだけとっておけば良いよ」
女「でもログインできないんじゃデータの読み出しもできないんじゃ」
男「CDブートでもしてrootをとれば大丈夫」
女「よく分からないけど大丈夫なんだね」
男「テキストデータが多いなあ」
女「どんな? もしかして日記とかかな」
男「他人のデータを除き見る趣味はないのでバックアップとるだけな」
女「つまんなー」
男「ハイハイ」
男「パソコンの初期化はこれでいいとして、なにを教えればいいんだ?」
女「なにも分からないから全部で」
男「……。なるほど」
男「概要だけで説明するから後は自分で勉強するって方針かな」
女「それは投げ遣りすぎない?」
男「そんなことはない。勉強する気のある相手になら掴みと参考資料を提示するだけで十分だし、気のない相手なら真面目に説明するだけ無駄だからな」
女「ハッキングできるようになると言ってた気がしたけど詐欺だったのかな」
男「そこまでは言ってないが……分かった。区切りごとで詳細説明が必要かどうか確認するから必要なら掘り下げて説明するよ」
男「とりあえず今日はもう下校時刻が近づいてるので簡単な説明だけな」
女「ばっちこーい」
男「抽象度の高いものから説明するっていうのが説明の王道だけど、プロトコルやセキュリティの話は土台がない状態で聞くと現実に流されすぎて分からなくなるから、プロセッサの話からしようと思う」
女「ふむふむ。ところでプロセッサって何?」
男「CPUって言えば通じますか」
女「知らない」
男「パソコンの内部って、大きく分けてデータを入力する部分(キーボード、マウスなど)、データを出力する部分(ディスプレイ、スピーカなど)、データを記憶する部分(メモリ)、データを処理する部分ってのがあるんだ」
女「うん」
男「そのデータを処理する役割を負ってるのがプロセッサ。一般的にはCPU、中央演算装置って言われてる」
女「なるほどー」
男「その様子だとプロトコルとかもワケ分からん、って感じっぽいな」
女「うん」
男「しかしまあそれは追い追いってことで。今日はプロセッサの話な」
男「さて、じゃあ具体的にデータを処理するってどんなことをするんだ?」
女「えーっと、足したり引いたり?」
男「そう。四則演算もデータ処理の一種だね。あとは専門ぽくなるけど論理演算、ビットシフト、データ読み出し、分岐命令なんかもデータ処理に含まれる」
女「なにそれ?」
男「説明してなんだけど、そこまで細かく説明する余力はないかな……」
男「プロセッサの仕組みは俺の専門分野だから頑張って説明したい気もするけど、ド嵌りする未来が見えるからプロセッサの外側から見える仕組みだけ説明しよう」
女「外側ってどこ?」
男「プロセッサの外、つまりパソコンの入出力装置や主記憶装置から見える仕組み」
女「ふむふむ」
男「メモリ(主記憶装置)にはデータとプロセッサへの命令が記憶されていて、プロセッサはメモリに対して、基本的に0番目から順に命令を読み出して実行する」
女「0から順にってことは決まりきったパターンしか処理できないの?」
男「そんなことはない。例外として分岐命令っていう特殊な命令を実行した時だけはその命令で指定された場所まで移動して、そこからまた順次実行していく」
女「分岐命令があれば手前に戻ってループとか、条件に応じて処理をスキップとか出来るんだ」
男「そう」
男「すこぶる基本としては今言った事しかプロセッサはしてない」
男「実際には数十から数百程度の命令を一気に読み出して実行可能な順に並び替えて並列に実行とか、頭がこんがらがるほど複雑なことしてるけど、そこまで説明するとなると500ページ近い教科書を購入して独学してもらった上でさらに別の教科書を基に勉強しないといけない」
女「追い追い教えてくれるんだよね」
男「……これ以上知りたい? プロセッサの話を知ってる限り全部すると終わりがまるで見えないから、どの辺りとか具体的に言ってほしいかな」
そんな感じで再アンケ
基本こんな風に本筋と絡めつつダラダラと進める予定
プロセッサの話で現実的な時間で説明可能だと思うのは
・四則演算のためのハードウェア構成(ただし整数足し算のみ)
・命令を並び替える大雑把な仕組み
・電機店でよく見るL2Cについての説明
・CPUの性能について大雑把な善悪の見方
その他でも具体的な質問であれば答えられると思うけど、ぶん投げ系の質問は負担でかいから基本スルーで
プロセッサ→プログラミング→プロトコル→セキュリティ
多分こんな順序で質問がなくなったタイミングで進めてく
女「そういえば、そもそも命令を処理するってなんなの?」
男「なんなのとは?」
女「電気を流すだけでなんで計算ができるの?」
男「ああ、そんなことか」
男「電気でそれを実現するのに一番貢献してるのは半導体だけど、原理的にはスイッチが重要な役を果たしてるんだよ」
女「スイッチ? スイッチって、入れたり切ったりするあれが命令を処理する鍵になるの?」
男「原理的には、な。そこを理解するには論理演算子を知って、論理演算が計算上万能であること理解する必要がある」
女「んー……論理演算? って急に出てきたけど、それはスイッチとどんな関係があるの?」
男「スイッチは全ての論理演算を再現できる」
女「すべて? ホントに?」
男「ホントに」
男「で、半導体ってのはスイッチングを行える優秀な電子素子なので、パソコンは半導体技術に支えられてるわけ」
女「スイッチできるなら半導体でなくても良いってこと?」
男「そうな」
男「とりあえず論理演算ついて説明するよ」
女「よろしく」
男「論理演算ってのは簡単に言うと、入力が特定のパターンならば真、そうでなければ偽っていう演算処理のこと、かな」
女「真? 偽?」
男「言葉はなんでも良いよ。真偽が嫌ならオン/オフでもいいし、0/1でもいい」
女「Yes/Noみたいな?」
男「それもOK。パターンを満たすか満たさないかだけで判断される世界が論理演算の世界だ」
男「例えば車のヘッドライトに対して、完璧な明りセンサと速度センサを付けて、それらを入力にしてヘッドライトのオン/オフを切り替えるとしたらどうする?」
女「どうするって、明りセンサがオフで速度センサがオンだったらヘッドライトをオンにして、それ以外ならヘッドライトをオフにすればいい。ってこと?」
男「そういうこと」
男「具体的な数式は今は敢えて書かないけど、今の言葉をそのまま数式に直すと論理式になるんだよ」
女「でもそれって足し算とかできなくない?」
男「これができるんだよなあ」
男「人間って指が10本だから10進数を使ってるけど、数字の本質は何進数であるかには依存しないんだよ」
女「そりゃあ、表記法が変わったって、10個あるものが1個になったら100個になったりはしないよね」
男「だからオン/オフで表しやすい2進数で計算することを考えよう」
女「人間に分かりにくそー」
男「それは否めないけどスルーで」
男「2進数で、2つの数A,Bの足し算を下の桁からすると考えれば
Aのn桁目は1または0
Bのn桁目は1または0
n - 1桁目からの繰り上がりは0または1(ただしn = 1のときは必ず0)
こんな風に3入力2出力の論理演算に置き換えられるんだ」
女「えーっと、3入力の中1である入力が奇数個ならその桁は1、2つ以上の入力が1なら繰り上がりが1って感じかな」
男「そういうこと。その論理演算を下の桁から順次進めていけば何桁の計算でもできるわけだ」
女「なるほどねー。論理に書き下せば論理演算でなんでもできるんだ」
女「そういえば、スイッチが論理演算を表現できるって言われたけどそのやり方聞いてない」
男「ギクッ」
女「なにその反応」
男「少しばかり面倒臭いかな」
女「今さらだね」
男「ふむぅ…」
男「完全な論理演算をするのに必要な論理演算子の組み合わせってのがあるんだけど」
男「教育的な組み合わせとしてはAnd,Or,Not演算子の3つをよく使うんだ」
女「教育的でないってのは非道徳的とか?」
男「効率的だけど直感的でないとかそういう感じ」
女「分かりやすさを重視した結果がその3つの組み合わせなのね」
男「スイッチが論理演算を完全に再現できることを説明するに当たって、理解すべきことが二つある」
女「二つね」
男「一つは、さっき言った3つの演算子の計算の仕方、もう一つはその3つの演算子を利用することによって全ての論理演算が可能であること」
女「1つ目の中に理解することが3つあったんだけど」
男「スマンな」
男「Andって演算子は2入力1出力の演算子で入力が二つとも1のとき1、それ以外のとき0を出力する演算子なんだ」
女「0が関わると全部ダメにするのね。かけ算ぽい」
男「鋭いな。情報系の分野ではかけ算と同じ・とかあるいは完全な略記で表されることがあるよ」
男「Orも2入力1出力の演算子だけど入力のうち少くとも一つが1ならば1を出力して、入力が両方0のときだけ0を出力する」
女「んー、両方1でも出力は2じゃなくて1なの?」
男「そもそも論理演算の基本は0か1かしかないからね。1以上は全て1。それ以外は全て0なんだ」
男「最後のNotは1入力1出力の演算子で入力が1なら0を出力して、入力が0なら1を出力するよ」
女「名前の通り反対を出すんだね」
男「いま説明した3つの論理演算子を使うと全ての論理演算をできることを直感的に理解できるなら、次の説明は聞き流してくれて良いよ」
女「聞く」
男「そうか……」
女「頑張れー」
男「予め断っておくと今からの説明は証明ではなくて納得するかは君次第だよ」
女「うん」
男「表現の都合上、Andを・、Orを+、Notを小文字で表現することにするね」
男「例えば、
入力│出力
A B │O
0 0 │0
0 1 │1
1 0 │0
1 1 │1
こんな論理演算をさっきの3種類の演算子で実現するとしたらどんな風に書けるか分かる?」
女「え、え??」
男「実はこれ結構簡単で、
O = a・B + A・B
で良いんだ」
女「どういうこと?」
男「出力が1になるときの入力について、0なら反転させた状態で全てAndをとって、最終的にOrをとれば正しい論理演算式ができるわけ」
女「出力が1になる入力のAndをとったものをOrで……。……あーー! 賢い!!」
男「だろ、だからこの3種類の演算子があれば絶対に全部の論理演算ができる」
女「確かにできるねえ」
男「これらを踏まえれば、スイッチを使って、And、Or、Notを作ることができれば、全ての論理演算は機械的に実行可能だと分かるよな」
女「うん」
男「じゃあどうやってこれらを実装しようか、ってのが質問でOK?」
女「OK」
男「じゃあ簡単なAndから」
男「単純に二つのスイッチを直列に繋げればAndになるよね」
女「ん? あーあー、確かに。じゃあOrは並列にすれば良いんだ」
男「そうそう。賢い」
女「でもNotはどうやって実現するの?」
男「電気のスイッチだと考えるなら、入力と出力の間にアース線を入れて、アース線にスイッチを付ける」
女「スイッチがオンになると入力がアースに逃げるんだ……ははぁ」
男「すごいだろ」
女「賢いなあ」
男「プロセッサの話からすこぶる逸れた気がするけど、満足っすかね」
女「スイッチってすごいなって思いました」
男「スイッチングを超速でする半導体もスゲーんだよ」
女「ヤヴァいね」
男「うむ」
深夜でしかもこんなマイオナなテーマで集客とか無理なの忘れてた
ので、テキトーに書きつつ、質問はテキトーに受け付ける感じ
分からん質問や時折ある専門的過ぎる質問はスルーまたは地で返答するスタンス
男「今日も君の方が早いのか」
女「ふふん、まあね。部長と呼んでくれてもいいよ」
男「代わりに活動日誌とか事務手続きをしてくれるなら呼んでやるよ」
女「今日はプログラミングの話だっけ?」
男「スルーか。そうな。ところで君はプログラミングができたら何をしたい?」
女「んー、ゲーム作りとか」
男「ゲーム舐めんな」
女「え」
男「ゲーム作りをモチベーションにすると、一番単純なゲームらしいものが出来あがるのですら時間がかかりすぎる」
男「その上、多くの人がイメージするみたいなゲームまでやりたいとなると」
女「分かった、分かったから愚痴みたいに言わないで」
男「おっとゴメン」
男「今回の話題は、そうだなあ、プログラミングのミスに関するクラッキングのあれこれを思いつくままに話すってことで」
女「クラッキング?」
男「世間一般で言う、ハッキング。本来、ハッキングって言葉自体には悪意も善意もないから、意図的に悪意を込めたい時にクラック、クラッキングって言うんだよ」
女「へー」
男「プログラムのミスに関わる重大なセキュリティ・ホールで俺が知ってるものだとバッファ・オーバーフローとコマンド・インジェクションの二つかな」
女「話、ずれてたらゴメンだけど、プログラムのミス以外にもセキュリティに問題があることがあるの?」
男「ユーザー側の管理能力の問題もあるからなあ。例えばマメにログアウトしない人からログイン情報を盗むのは結構簡単だよ」
女「ええ……」
男「マックユーザーでAppStore以外からアプリをインストールする人はSafariを使うべきでないと思う」
女「なんで?」
男「Safariで管理してる認証情報(クッキー)は、ほかのアプリケーションから簡単に閲覧・送信可能だからなあ」
女「うわ、怖いことを聞いた」
補足:
他の環境について>>1が知らないだけで似たような状況は他のOSでもあるかもしれない
また、AppStoreにアプリを上げるにはお金がかかるし審査も必要で、それを嫌って野良配布している人も多いので、
必ずしも"野良アプリ = 悪意あるプログラム"ではないことに注意
男「話を本筋に戻して、バッファ・オーバーフローとコマンド・インジェクションの概要だけ説明しよっか」
女「どんなものなの?」
男「被害者にとっては両方とも任意のコードを実行されるバグかな」
女「任意のコードの実行って、どんなことでもできるってこと?」
男「実行してるプログラムの権限内であればなんでもできる、ってのが正しいかな」
女「じゃあその二つの違いはなんなの?」
男「そのバグをクラッキングに利用するときに必要な知識の質かなあ」
女「知識の質?」
男「コマンド・インジェクションはパソコンをコマンドで通常の操作できる人ならクラックできてしまうセキュリティ・ホール」
男「バッファ・オーバーフローは機械語をある程度読める人でないとクラックできないセキュリティ・ホール」
女「じゃあバッファ・オーバーフローはあまり気にしなくていいんだ」
男「それはない」
男「世の中にはクラッキング・ツールを自作して、クラックのハードルを下げるような物好きがいて、一番多いクラッカーはそういうツールを利用するんだよ」
女「それって自分の力でクラッキングしてなくない?」
男「自力でクラックすることは重要じゃないから。そんなプライドがないからクラックなんてことをするわけだし」
女「かっこわるいね」
男「言っておくけど、自力でもクラックしたらダメだからね?」
男「ちなみに他人の作ったツールを使ってクラックする人のことをスクリプトキディって言ったりする」
女「お子様(kiddie)かあ。ずいぶんと嫌われてるみたいだね」
男「ハッカーの品位に関わるからなんとかしたいんだろうね」
男「ちなみにかの有名な田代砲を使う人は典型的なスクリプトキディかな」
女「なにそれ」
男「田代を知ってて田代砲を知らないなら調べると面白いよ」
補足:
当時のノリとしての田代砲は悪意ではない、と思うけれど
TIME誌側から見ると業務の妨害(=クラック)ではあったと思うのでスクリプトキディとしてる
クラックかどうかの判断はする側よりもされる側にあることに注意
男「バッファ・オーバーフローはヒープとかスタックとかメモリ管理に関わる専門的な知識が必要になるから……」
男「コマンド・インジェクションが発生するプログラムについて見てみようか」
女「ダメなプログラムの例ってことだね」
男「そう」
男「細々した書き方の違いは言語ごとにあるけど、どんな言語であっても
code = UserInput;
execute(code);
こんなノリでコーディングするとアウト」
女「露骨すぎない?」
男「これだと確かに、任意のコードが実行できるって分かりやすいよね」
女「分かりづらい場合があるの?」
男「次を見てみようか」
mailAddress = UserInput;
code = "sendmail " + mailAddress;
execute(code);
女「? これならユーザーがアドレスを入力するだけだから問題なくない?」
男「普通はそう思うだろ? それ多ユーザー向けのシステムを作るプログラマならしちゃいけない思考だよ」
女「??」
男「mailAddressにアドレスしか入れちゃいけないなんてルールはないだろ」
男「だからmailAddressの部分に任意のコードを挿入して実行できるんだよ」
女「あぁ、なるほどなあ」
女「じゃあどうやって、ヘンな操作をされないようにするの?」
男「mailAddressに入ってる値が単純なメールアドレスであるかを確認すればいい」
男「具体的には空白やセミコロン(;)が含まれてなくて、@が含まれていれば良いよ」
女「分かるような分からないような」
男「きちんと分かりたければ、コマンド操作について勉強するしかないかな」
女「コマンド操作? ができるとどんなことができるの?」
男「ルーチンワークは基本的に全部自動化できる」
女「便利そうだから教えて」
男「覚えてたらそのうちな……今日はそういう話じゃないから」
男「話戻って、小さなコミュニティ向けのサービスだと、意外とこういうセキュリティ・ホールは無視されたままのことがあるみたい」
女「ええ……」
男「ある大学のウェブメールサービスで宛先に任意のコマンドを入れられる、なんて話を聞いたことがある」
女「小さくなくない?」
男「……主観によるかな。おっと丁度キリの良いところで下校時刻だ」
女「無理矢理キリにしてるでしょ」
男「はてな? 次はなんの話をしようかなー」
忙しいので2週間くらいあまり更新できないと思う
思ったよりもレスがあるので一応報告
男「君はプログラムってものをどんなものだと思ってる?」
女「どんなって……よく分からなくて、難しそう?」
男「その気持ちは分かるけど、もしプログラムを扱いたいと思ってるならその考えは一秒でも早く捨てるべきかな」
女「難しそうって思うのもダメなの?」
男「うん、ダメ」
男「プログラミングは尻込みするとなにもできなくなる」
女「そんなこと言っても何も分からないのに自信を持つのは無理だよ」
男「ふむ、じゃあプログラミングが何如に簡単か説明しよっか」
男「例えば、Perlって言語で文字を表示するのは
print "こんな感じでテキストを書くだけ";
で良いんだけど、難しいか?」
女「それは簡単だと思うかな」
男「四則演算は
my $result = 1 * 5 + 10 / 2 - 3;
でできるわけだけど、難しいか?」
女「ん……、簡単だね」
男「繰り返し処理は
for (my $i = 0; $i < 10; $i++) {
print $i + "回目の処理¥n";
}
で良いわけだけど、難しい?」
女「むむむ、できそうな気がする!」
男「だろ。例えば今説明した3つの事ができれば、数学とかでよくでる漸化式なんかイチコロなわけよ」
女「おおー」
男「プログラミングで挫けないために心掛けべきことは、問題をできるだけ分割することかなあ」
女「分割?」
男「例えばプログラミング初心者が表計算を全自動化したいってモチベーションを持ってたとしようか」
女「難しそうだね……」
男「話が抽象的だからそう見えるだけで実際にやることは
1.ファイル名の取得(入力の読み取り)
2.ファイル・オープン
3.値の取得
4.計算
5.結果の表示や書き込み
6.ファイル・クローズ
この6項目くらいだよ」
女「簡単に見えないよ」
男「細々したエラー処理やら必要に応じてループが入ることを除けば、それぞれの操作自体は1〜2行で出来るよ」
女「そんなに短かいの!?」
男「そんなもんだよ」
男「ここまで問題を小分けにすれば、例えば、"perl 入力"とか検索すれば 1 のやり方が出るし、同様にして分からない操作のたびに検索すれば問題は全部解決できる」
女「たしかに簡単そう」
男「最初にも言ったけど、プログラミングで一番ダメなのは難しそうだから尻込みしちゃうこと」
男「難しそうな問題の内、どこまでなら自力で解決できるのか考えて、自力で解決できそうにない複雑な問題だけを既製品で取り繕えばいい」
女「既製品って買うんだったら最初から良いの買うよ」
男「違う違う。プログラム言語ってネット上にたくさん無料の資源があるんだよ」
女「無料で? なんで?」
男「そりゃあ、奇特な……ゴホンゴホン、優しい人が大勢いるからだよ」
男「なにはともあれ、難しいと思ってプログラミングに挑むことだけは絶対にやめてな」
女「はーい。……確かに男が教えてくれると思ったら難しいことなんてないかなって思うね」
男「ど、どういう意味だよ」
女「君なら質問したらキチンと分かるまで教えてくれるでしょ?」
男「……まあ、自分が知ってることを知ってもらえるのは嬉しいしね」
女「うん、私も一緒のことを知れるのは嬉しいよ」
男「あれ? なんだか部室涼しくなった?」
女「え? あ、ん、そんなことないと思うよ」
男「そうか? パソコンの排熱の割に蒸し暑い感じがないように思うんだけど」
女「エ、エアコンでもつけたんじゃない?」
男「公立のこんな小さな部にエアコンがあるわけないだろう……」
女「……悲しいね。あ、下校時間だよ!」
男「おおう、もうそんな時間かあ」
暇じゃないのにここが気になって作業が進められない、ネット依存症だわ
以下は(主にCUI向け)プログラミングを始めたい人向けに個人的な考え
おまじない要素が少なくても広範囲で動かせるperlは初心者向けだと思うけど、本格的に勉強すると引数の取り方が独特だったり、cpanしないと使えないモジュールとか下手するとC/C++言語よりもおまじないが多くなるのが玉に瑕
RubyやPythonはほとんど扱ったことがないからなんとも言えないけど、Pythonから入ると一定以上に読みやすいコードを書けるようになるらしい
Rubyは日本人が作った言語だから日本人の感性に合うとか合わないとか…
これからプログラミング始めるって人で、個人的な利用を考えてる人は勉強で本とか入門サイトとかを見ると思うけど、
そのとき、"実際にはここにエラー処理のコードを加えるけど〜"みたいな厳密でないことに対する言い訳染みた文言はプログラマのエゴだから無視してOK
もちろん丁寧に書くことは正しいけど、知らない要素が増えるほど勉強はしんどくなるので、分からなくても動く内は分からなくても良い(あくまで個人レベル運用の人向け
前にも言ったけど、雑なプログラミングはセキュリティ・ホールの元
女「プロセッサの話とかプログラムの話とか聞いたわりに、パソコンに強くなった気がしないんだよね」
男「どんなことがしたいの?」
女「パソコン起動するだけで仕事を終わらせてくれたりとか」
女「人のパソコンのデータを勝手に覗き見たりとか」
男「前はともかく後ろはダメじゃん……」
男「でも確かに、パソコンを自在に扱うためには重要な要素を勉強してないからなあ」
女「どんなこと?」
男「OSの仕事」
女「OS? なにそれ」
男「そこからかあー」
男「プロセッサの仕組みから考えると、コンピュータって基本的には1つずつしか命令を実行できないんだよ」
女「そだね」
男「でもパソコンは同時に色々な仕事をしてるように見えるだろ」
女「見えるってことは実際には違うのかな」
男「そう。せいぜい数個のプログラムを並列処理できる程度で、音楽再生しながらネットで調べものしながらエクセルでデータをまとめながらレポートを作成しながらスライドを作成するなんてことは本当はできないんだよ」
女「それくらいできそうだけど」
男「うん、できるね」
女「嘘吐きは良くないよ」
男「うぐっ」
男「簡単に言うとプロセッサって超仕事が速いから、ササッと一つの仕事をキリの良いところまでやって、次の仕事のキリの良いところまで……って繰り返してるんだよ」
女「へー」
男「で、プロセッサやその他の資源についてそういうスケジュールの管理をしてくれるのがOS、オペレーティング・システムってやつなわけ」
女「なるほどねー。……ってそんなことを知ってもパソコンの扱いが上手になった気はしないよ?」
男「OSって何って言われたときに答えるテンプレ回答だからね」
男「実際には資源管理ってことでいろいろやってるのよ」
女「奥が深い」
男「闇も深いよ」
女「なにそれ怖い」
男「時間もないし、やりたいことも明確だから関係性の低い説明は端折るけどね」
男「資源管理をしてる、ってことは起動時にはこの資源を使う、みたいなスケジュールも基本的にOSがするわけだ」
女「じゃあそのスケジュールにしたいことを書けばいいんだ」
男「そそ。スタートアップ(Windows)とかタスクスケジューラ(Windows)とか、ログイン項目(Mac)とか。この辺を設定すればパソコン起動するだけで指定のプログラムをいつも実行してくれる」
男「だから、ユーザーが入力した情報を勝手にインターネットに流すプログラムをこの辺りに仕込むとショボイけどコンピュータ・ウイルスとして十二分に働くよ」
女「そこまでは訊いてないんだけどね」
男「そだった。ついつい」
女「悪そうな顔してる」
男「素だ。失礼な」
女「そういえば部活動日誌書いてるって言ってたよね」
男「うん、電子データだけど」
女「先生に見せてるわけじゃないんだ」
男「そだね。ケジメというか文化というか、名残というか、そんなんで付けてるだけだよ」
女「見てもいい?」
男「良いよ。ちょっと待っててな」
男「……あれ? 先月分のログがないな」
男「ある分だけで良い?」
女「うん」
女「……この日誌には面白味がない!」
男「なんだよ、いきなり」
女「淡々となんだかよく分からない単語と説明だけ並べて面白いと思ったの?」
男「読み返した人がその環境を再現できるように書いてるだけだからなあ」
女「雰囲気が伝わってこないのに活動日誌なんて納得できない」
男「そんなに言うなら君が書く? どんな風に書いたら面白い活動日誌になるのか分からないけど」
女「しょーがないなあ。そこまで言うなら今日からは私が書いてあげよう」
男「ホントに? 冗談だったんだけど助かる、ありがと。じゃあ今日からの分は女のパソコンに保存しといてな」
女「任せといて」
女「そういえば人のパソコンの中身を見る方法、教えてもらってない」
男「唐突に話が巻き戻るね……。キーロガー・プログラムを仕込んでパスワードを盗めばいいと思います」
女「そんなよく分からないプログラミングなんてまだできないよ」
男「……そもそもそんな方法を知って何をするつもり?」
女「興味本位」
男「そうか、まあその内にね。今日は下校時刻だから」
女「むー。じゃあまた明日ね」
男「うん、じゃあね」
女「さて、日誌書くかなー」
女「えーっと、『今日は、〜』……」
女(あれ、冷静に考えたらOSの話って全然必要なくないかな)
女「いっか。おかげで今日もたくさん話せたし」
女「『男の説明は行き当たりバッタリでヘタクソだったけど、楽しそうに話してて可愛かった』、まる、と」
女「今日の日誌は終わりー。早く明日にならないかなあ」
OS(Windows)は知らない要素が多すぎた
/etc/passwdとかに相当するモノがWindowsだとどこにどんな形であるのかも知らなくてなにもできない
こんなSSを書いてて言うことじゃないけど、どなたかWindowsのシステム構成について参考になる本やサイト教えてほしいです
Linuxは腐るほど資料が出てくるのに。。
女「うーん」
男「何してるの?」
女「インターネットに自分のホームページ作ろうかなと思って」
男「地味にハードルの高いことを……」
女「このパソコンじゃできないの?」
男「それは(ある程度まで)出来る」
女「じゃあやろう」
男「まず一つ、用語の訂正をしておこうか」
女「うん?」
男「ホームページって言葉は本来、ウェブブラウザを起動したときに最初に開くページの事ね」
女「最初に開くってことはGoogleとかYahooとか?」
男「そう。君が作ろうとしてるのは単なるウェブページ」
女「へー」
男「君がしたいことは"自分でウェブページを作る"ってことらしいけど、大きく二つのハードルがあるかな」
女「少ないね」
男「大きく、な。それぞれの中にまた細かな問題はたくさんあるよ」
男「例えば、ただ単に君の書いた日記を公開するとしても、
・日記をHTMLを使って書き直す
・ウェブサーバを用意する
って程度の準備が必要になる」
女「HTMLとは」
男「Hyper Text Markup Language」
女「そういうことじゃなくて」
男「ハイパーテキストっては複数の書類(テキスト)間を結び付けることのできる仕組みのことで、それをマークアップ(マーキング)で実現できる言語がHTML」
女「よくわからない」
男「普通のテキストだとリンクや画像を貼れないけど、HTMLならリンクを使ってほかのページへ移動したり、画像を貼りつけたりできる」
女「じゃあ、普通にインターネットで見てるページは全部HTMLで書かれてるってこと?」
男「多少の派生はあるけど、そうだね」
女「じゃあウェブサーバはなに?」
男「ウェブサーバの前に、インターネットってのは単にIPを利用したネットワーク全般を指す言葉であるのに対して(ワールド・ワイド・)ウェブは多くの人がインターネットとして認識してる、HTMLなどで記述されたハイパーテキストを横断するシステム、なわけだ」
男「じゃあウェブサーバとは何かと言えば、そのシステムを提供するソフト、あるいはハードウェアのこと」
女「分かりにくい」
男「つまりウェブサーバの機能のついてるパソコンじゃないとインターネット上に日記を公開とか(簡単には)できないんだよ」
女「じゃあウェブサーバのソフトはこのパソコンに付いてるの?」
男「専用のソフトをインストールすればいいよ」
女「……お金ない」
男「無料でできるよ」
女「無料って、安心して使えるの?」
男「たくさんの人が使ってるよ(安全の判断は人による)」
女「不穏な声が聞こえた気がしたけど」
男「気のせい」
男「ウェブサーバについては自宅のパソコンをサーバにすることもできるけど、諸々のリスクを考えるとレンタルで済ませた方が良いことが多いね」
女「レンタルも無料でできる?」
男「広告がつくけど無料とか、いくつか条件があるけど無料とかはあるよ」
男「ただ、画像とか動画をたくさん貯めるのが目的のウェブサイトは無料だと難しいけどね」
女「なんで?」
男「保存できる量に上限が設定されてるから」
男「レンタルの場合は借りたサーバーに自分で作ったコンテンツを設置するためにFTPとかを利用してファイル転送する必要があるよ」
女「FTP?」
男「File Transfer Protocol」
女「だからあ」
男「FTPはファイルをただ転送するための方法論、約束事で実際にはFFFTPあたりのソフトを使ってサーバに転送する」
女「転送する必要があるの?」
男「ウェブサービスとはウェブサーバの所定の位置にあるファイルをクライアントに提供するサービスのことなので」
男「ウェブサーバをレンタルしたならば、レンタルしたサーバ上にコンテンツを設置しなければならない。よね」
女「ふむ……それもそっか」
男「さて、じゃあサーバはレンタルにするか自分で用意するか?」
女「せっかくなので自分で用意したいかな」
男「……」
女「なんで固まるの」
男「ここ、学校じゃないですか」
女「そうだね」
男「ウェブサイトを(普通外向けに)運営するには、所属するネットワークの80番ポートを自分の管理してるサーバに向けてフォワーディングしないといけないんですよ」
女「何を言ってるか分からないよ」
男「……一度話が逸れて、NAPTの仕組みになるけど……」
男「NAPTの話をしようと思うと簡単にIPの話が必要かあ」
女「IP、NAPT?」
男「インターネットをするときに、何かページを見たいと相手に要求を送ると当たり前のように返事が返ってくるだろ」
女「うん」
男「あれはIPアドレスっていう、世界に一つしかない自分だけの住所を要求と一緒に送ってるから、相手がここに返事を出せるわけ。これがIP、インターネット・プロトコル」
女「手紙と一緒だね」
男「うん。ただIPアドレスってのは大抵、一家に一つしかない。だけど、家のなかにはパソコンが何台もある、なんて普通だろ」
女「そういうものなの? まあ部室は君と私のパソコンで2台動いてるけど」
男「最近は一人に一台が普通だよ」
男「そうすると、要求を受け取った相手は送る家は分かっても人が分からないって状況になる」
女「人の名前も送ればいいじゃない」
男「そう、それ。それをするのがNAPTって技術。インターネットと家庭内ネットワークの境界に設置されたルーターがその仕事を負うんだ」
男「女がある要求をインターネット(外)に向けて発信すると、それをルーターが検閲して、この返事は一旦、xxという名前でルーターに渡すように要求に付け加える」
男「そうすると要求を受け取ったサーバーは何も知らずに所定のIPアドレスのxxって場所(ルーター)に向けてデータを送信する」
男「ルーターは戻ってきたデータを見てxx宛てだから女が使ってるパソコン宛てだったと覚えてて女の使ってるパソコンにデータを転送するんだ」
女「配達係の人、配達だけじゃなくて名前付けまでするんだね」
男「そういうこと」
男「で、話をウェブサーバを立てるところまで戻すと」
女「そういえばその話だったね」
男「外(インターネット)から君のパソコンを見えるようにするためには何が必要か分かる?」
女「配達係の人にインターネットからきた手紙は全部こっちにくれるように頼む?」
男「うん。配達係っていうかルーターだし手紙っていうか要求だけど、そんな感じ」
男「より技術的な話をすると、ウェブ系の要求は基本的に80番ポートって場所に来るんだけど、そのポートへの要求を全て女のパコンに向ける必要があるわけ」
女「分かった。じゃあそうしよ」
男「出来ません。何故なら、俺も君もこの学校のルーターの設定を弄れないから」
女「」
男「素直にレンタルサーバを使おう」
女「ちえ」
男「HTMLについては……まああれだ、最初にこの文書はHTMLで書かれてるよって宣言して」
男「ついでに言語とか文字コードも宣言して、できればどの程度格式ばってるのかも通知して、」
男「使用するレイアウトとかスクリプトを宣言して、タイトルを宣言して、」
男「そしたらあとは本文を思い思い書けばいいんじゃないですかね」
女「投げ遣りすぎない」
男「HTMLなんて小学生でも書けるくらい簡単だから」
女「ふーん、そっかあ」
男「まあ、非推奨な書き方とか、環境による表示の違いとか、歴史的経緯とかそういうのを意識しはじめると勉強が必要だけど」
男「そこまでやると、派生が多すぎて説明しきれない」
女「簡単でも良いから教えてよ」
男「んー。frame要素は使うなとか、……ダメだ使ってない要素のコトなんて思い出せない」
男「基本的にdivとspan使ってidやclassでレイアウトする生活してれば問題ないと思う」
女「なにを言ってるのやら」
男「ところでどんなサービスを作る気だったの?」
女「……とくに考えてなかった」
男「その心意気は嫌いじゃないけど、目的なしでウェブサイトを立ち上げても絶対に長続きしないよ……」
女「むう。じゃあなにか良いアイデアはある?」
男「最近のカメラとかスマホは写真に位置情報を組込めるから、あれでポケモン図鑑みたいに生息地を収集するとかはできそうだなって思ってる」
女「そういうのってもうあるんじゃない?」
男「どーだろ、前に猫で同じようなサービスが出たのは知ってるけど、結局猫以外の画像が集まりまくってるとか」
女「ネットって怖いね」
女「そういえば男って彼女とかいないの?」
男「唐突だな。いないよ」
女「つまんなー」
男「はいはい」
女「じゃあ気になる子は?」
男「いないなー」
女「可愛いと思う子は?」
男「いないなー」
女「ほーう」
男「いたいなあ……」
女「そんなに強く叩いてないでしょ、人聞き悪いなあ」
男「そもそも軽くでも人をブツもんじゃないよ」
女「まるで私が可愛くないみたいな言い方だったので」
男「ノーコメントで」
男「なんだか理不尽を受けた気がしないでもないけど、ぼちぼちいい時間だから帰るよ」
女「うん、じゃあね」
男(……そういえば、女っていつも帰ってなくないか?)
女「どうかした?」
男「ん、いや、なんでもないよ。じゃあね」
今日はここまで
説明と物語を絡めるって難しい
物語の方だけ考えて見切り発射したのを少し後悔
女「おーとこっ」
男「……」
女「おっとこー」
男「うーん」
女「おとこーぅ」
男「っ、なんだよ。いきなり肩叩くなよ」
女「何度呼んでも返事がないんだもん。何か考えごと?」
男「考え事……、まあそうかな」
女「どんな?」
男「どんなって、女のことかな」
女「わたし?」
女「もしかしてわたしに惚れちゃったかな」
男「なにを嬉しそうにしてるかは知らないけど、そういうことではなくて」
男「君はちゃんと家に帰ってるのかとか、ご飯はちゃんと食べてるのかとか」
男「……要するに記憶喪失なのに大丈夫なのかってことだけど」
女「逆に今まで気にしてなかったのが凄いくらい根本的な疑問だね」
男「他人の私生活に興味ないからね」
女「わたしの私生活には興味あるんだ」
男「……同じ部」
女「部活が同じだからとか言わないでよ」
男「……」
女「わたしに興味がある理由をわたしが納得できる風に説明してくれるなら男の疑問に答えてあげる」
男「納得できる形って……」
女「わたしの勘違いじゃないって思いたいので」
男「そこまで思ってるなら敢えて言う必要はなくないか?」
女「99%はいくら積み重ねても100%にはならないから、確実が欲しくなるでしょ?」
男「……多分、俺は女のことが好きなんだと思う。だから知りたいと思った。これで満足か?」
女「なんだか自信なさげだね」
男「そりゃ、人を好きになったことなんてないしなあ」
男「ただ、昔に好きだった何かを思い出そうとすると、女のことしか思い出せなくって、刷り込み的に好きな気がするってだけだから」
女「あははは、君らしい」
女「うん、だいたい満足したしネタばらしをしようと思う」
男「ネタばらし? ドッキリかなにかなのか」
女「多少はビックリするかもだけど、嫌な方向じゃないから大丈夫だよ」
女「ところで、男の好きだったものって未だに何か思い出せない?」
男「何かを考えるのが好きだったと思うんだけど、何だったかは全く思い出せないね」
女「マクスウェルは何か分かる?」
男「マクスウェルの方程式で電磁気学の基礎を作った人とかだっけ?」
女「その人だけど、そのことしか思い出せない?」
男「? マクスウェルがほかに何かしたっけ……」
女「マクスウェルの悪魔って話があってね」
男「マクスウェルの悪魔?」
女「わたしは物理なんて好きじゃないから細かな話は分からないけど、その悪魔は認識をエネルギーに変換することができるんだよ」
男「認識をエネルギーに? てことは分子レベルで運動量に応じた分離ができたりするのか?」
女「部屋を暑いところと涼しいところに切り分けるなんて朝飯前だよ」
男「なんで女が得意気なんだよ」
女「ニブいなあ。つまり、わたしがその悪魔なんだよ」
男「……はあ?」
女「正確には悪魔じゃないけどね。男のおかげで」
男「なにを言ってるのか分からない」
女「どのあたりが分からないの?」
男「ただの理屈でしかないマクスウェルの悪魔? が人の形をしてるなんて信じられないし」
男「どう考えても熱力学第二法則を無視してるにも関わらず悪魔じゃないと言う意味も分からないし」
男「俺のおかげってもワケが分からない」
女「質問が多い!」
男「えぇ……」
女「人の形をしてる理由は知らないけど、悪魔じゃなくなった理由は情報に力があることを君が証明したからだよ」
男「俺が?」
女「覚えてないと思うけどね」
男「……つまり、女は俺が考えた理屈をエネルギーにしてここに現れて、そのおかげで、俺はすっかりマクスウェルの悪魔を忘れたってことか?」
女「うん。だからきっと、君がわたしを好きなのはそれだけ君がマクスウェルの悪魔に入れ込んでたってことなんだろうね」
女「実を言うとこの話をするのは二度目だったりします」
男「え」
女「先日、この部屋が火事になったじゃない?」
男「みたいだね」
女「なんとかしようと思って盛大に私たちの記憶を使ったんじゃないかなと思う」
男「……、それでここ一ヶ月くらいの記憶が曖昧だったわけか」
女「あはは、ゴメン」
女「でもきっとまた同じような関係になれると思ったからそうしたんだと思うんだ」
男「ん?」
女「どうかした?」
男「女の話から察するに、昔の状態を復元できないから悪魔じゃなくなったわけで、それなら同じ関係になれるわけがなくないか」
女「ちょっと違うよ。昔の状態を記憶から削除するだけで、偶然同じになることは普通に有り得るよ」
男「そうにしても確認のしようがない」
女「男は活動日誌を実務的にしか書かないから、色んな情報を丸め込みすぎてたけど」
女「わたしは男の一挙手一投足をきちんと日誌に書いてたので確かめようもあるのです」
男「……先月の分の活動日誌。どこかにあったの?」
女「男がわたしのパソコンを初期化するときにとったバックアップの中」
男「なるほどなあ、っていうか誰のか分からないデータを勝手に見るのはどうなんだ」
女「今の時代、他人の善意に期待したセキュリティなんて無意味なんだよ」
男「いや、たしかにそういう牧歌的な時代は終わったけどさあ」
男「で、いつから知ってたんだ」
女「入部して君が帰ったあとくらい」
男「最初っからじゃねーか。なんで言わないんだよ」
女「訊かれなかったし、興味なさそうだったし」
男「う、いやまあそうだけど」
女「でも、またこうして好きになってくれなかったらどうしようとは思ってたよ」
男「女自身も記憶喪失なのになんでそんなことを心配するのさ」
女「……言われてみればなんでだろね。やっぱり刷り込みがあったのかな」
女「前のわたしの日誌を見てると男といるのが楽しそうだったし、幸せそうなのが分かったからじゃない?」
男「それはたいそうな文章作成能力だなあ」
女「男には見せてあげないけどね」
男「部活動日誌だから見たっていいじゃないか」
女「男に渡したら情報が丸め込まれるからダメ」
男「……それはしかたないな」
女「うん、しかたがない」
女「そんなわけで、不束者ですがこれからもよろしくお願いします」
男「ん、うん、よろしくお願いします」
女「ところで、そろそろ下校時刻だよ」
男「じゃあたまには一緒に帰るか」
女「わたしはいつもここで寝泊まりしてるけど?」
男「たまになら俺の家で泊まっても問題ないよ、多分」
女「……じゃあせっかくだし行ってみようかな」
物語的には終わり
もしかすると時間があればまたウンチクを書きにくるかもしれないけど、専門から少し離れると分からないことが多すぎて書けないことがよく分かった
そのうちウンチクのほうはリゾンベしたい
豆なまとめサイトは完結さえしてれば拾いにくることがあるので、一応
ウンチクが雑すぎるから転載はなしの方向で
このSSまとめへのコメント
このSSまとめにはまだコメントがありません