ラベル オペレーティングシステム(OS) の投稿を表示しています。 すべての投稿を表示
ラベル オペレーティングシステム(OS) の投稿を表示しています。 すべての投稿を表示

2012/12/18

文系のための「ディレクトリ構造」(2)

ディレクトリの基本的な用語を整理したところで、
今度は、実際にPythonを使ってディレクトリに関する知識を深めてみる。
今回の話は、今後、自分でプログラムを書く上で役立つハズ。

さて、本題に入る前に、二つほど質問。
あなたが使っているパソコンの「OS」は何か?
また、そのOSの「バージョン」は何であるか?

この質問の意味が解らない人は、
文系のための「情報管理」の話を最初から読んだほう良い
おそらく、この先の話、何を書いているか、理解するのが難しい。

さて、すでに述べたように、Windows系OSUnix系Mac OS Xも含む)のOSでは、
ディレクトリの表示方法が異なるのであった。忘れている人は前の話を参照。
また、バージョンによっては既定のディレクトリの配置場所も異なる

ところで、OSには、シングルユーザ環境と、マルチユーザ環境というのがある。
一人で使うことを前提としているのか?複数で使うことを前提としているのか?
自分が使っているパソコンのOSの環境はどちらであろうか?

複数の人が一つのパソコンを使う際には、データの保存場所や、
デスクトップの壁紙メールの設定など、個人設定の領域を分けれた方が良い。
マルチユーザ環境とは、要するに、こうした状況を可能にすることである。

このブログの読者で、Unix系のOSの人は、かなり高い確率でマルチユーザ環境
Windows系OSの人は、Windows 2000 以降の人はマルチユーザ環境であり、
Windows 95、Windows 98、Windows MEの人は、おそらく、シングルユーザ環境

実を言うと、Windows XPでさえも、すでにサポートが打ち切りになっているので、
上に挙げたWindows系のOSを使っている人は、新しいOSに変えた方が良い
なりすまし事件」が話題になったが、サポートが切れたOSを使うのは極めて危険

さて、話を戻そう。なぜ、この話を最初にしたかというと、
今回は「ホームディレクトリ」という特殊なディレクトリを扱うため。
これを意識している一般ユーザは少ないかもしれないが、非常に重要

ホームディレクトリというのは、ユーザが自由に読み書きできるディレクトリのこと。
OSの根本に関わる部分や、様々なアプリに関わる部分というのは、非常にデリケートで、
知らない人が触ると、最悪の事態として、コンピュータが動かなくなる

可能な限り、通常のユーザがシステムに関わる部分を傷つけないようにするために、
基本的にはホームディレクトリに個人に関わるファイルを纏めるようになっている。
また、このようにすることでマルチユーザ環境でユーザごとの設定も分けやすくなる。

もっとも、どれをいじってもシステムに影響しないとは言えないが…

さて、今回は、そのホームディレクトリディレクトリで色々と実験する。
では、肝心のホームディレクトリはどこにあるのか?
実は、OSとOSのバージョンによって異なる

以下、比較的に有名なOSとそのバージョンごとのホームディレクトリの場所
自分が使っているOSが下に無い場合は、自分で検索を。流石に網羅できない…。
  • Windows系
    • Windows 95     :C:\My Documents
    • Windows 98     :C:\My Documents
    • Windows Me     :C:\My Documents
    • Windows NT     :C:\WINNT\Profiles\ユーザ名
    • Windows 2000   :C:\Documents and Settings\ユーザ名
    • Windows XP     :C:\Documents and Settings\ユーザ名
    • Windows Vista  :C:\Users\ユーザ名
    • Windows 7      :C:\Users\ユーザ名
    • Windows 8      :C:\Users\ユーザ名
  • Unix系
    • Ubuntu(Debian) :/home/ユーザ名
    • Fedora(Red Hat):/home/ユーザ名
    • Max OS X       :/Users/ユーザ名
Windows系ホームディレクトリの表示について、
」と表示されている人と、「」と表示されている人がいるハズ。
これは利用環境に依存する。以下では「」と表示されていることを前提に進める。

さて、上記で「ユーザ名」と書かれている部分はログイン名に対応する。
パソコン購入して最初に起動した時、あるいは、OSを入れなおした際に設定したハズ
ちなみに、英語名で設定しておいた方がプログラムを書く時には楽。変換の手間が無い。

さて、では、いよいよPython でプログラムを書いていくことにする。
まずは、Pythonコンソールを立ち上げる。「>>>」というのが表示されるのを確認。
基本的な解説は、データ型の話でしているので、以下を理解できない人はそこから。

以下のプログラムを見て、自分で書きなおす場所は解るだろうか?
"ここに自分のホームディレクトリのパスを書く"の部分を自分で書き直す。
この部分、文字列型なので、「'」あるいは「"」で囲むことを忘れずに。

import os

home = "ここに自分のホームディレクトリのパスを書く"

for subdirectory in os.listdir(home):
    print(subdirectory)

OSが提供する機能を用いるので、最初に「import os」で必要なライブラリを読み込み
次に、home という変数に、自分のホームディレクトリの「パス」を代入する。
その後のループ文(For文)を使って、ホームディレクトリの中身を出力する。

ループ文の「for subdirectory in os.listdir(home):」の部分では、
ホームディレクトリ内のディレクトリ名ファイル名をリスト化し、
ループ処理を繰り返す度にリストの内の一つを subdirectory という変数に代入している。

ループ内で行われている処理は一つだけ。「print(subdirectory)」の部分。
subdirectory という変数に入っているディレクトリあるいはファイル名を表示する。
そして、「os.listdir(home)」に格納されているリストを全て表示したら終了

ひょっとしたら、非常に長い時間がかかるかもしれない。
途中で止めたいときにはキーボード上で「Ctrl」を押しながら「c」のキーを押す
すると、処理が強制中断される。ということで、各自、実行!

コンソールファイル名ディレクトリ名の一覧が出れば成功!
上手くいっただろうか?ここでは、ホームディレクトリを指定し、
そこを「ルートパス」とした「相対パス」で一覧を表示したことになる。

では、今度は、絶対パスでファイルの一覧を取得してみる。

import os

home = "ここに自分のホームディレクトリのパスを書く"

for subdirectory in os.listdir(home):
    fullpath = os.path.join(home, subdirectory)
    print(fullpath)

さて、先程のコードとどの部分が変更されているだろうか?
よく見ると、ループ文の中の処理が一つ追加されている。
fullpath = os.path.join(home, subdirectory)」の部分である。

os.path.join(home, subdirectory)」というのは、二つのパスを繋げる機能
この場合は、変数home(ホームディレクトリ) に格納されているパス名と、
変数subdirectory(ファイル名とディレクトリ名) に格納されているパス名を結合する。

このようにして結合したパス名を新しく定義した「fullpath」に代入し、
print(fullpath)」の部分で、結果を表示している。
これを実行すると、「絶対パス」でファイル名ディレクトリ名が表示できる。

この方式、面倒かもしれないが、階層が深くなっていくと書く量が少なくて済む
また、ソフトウェアは実際に何かのファイルディレクトリを操作する際には、
このように、ルートパスの部分と相対パスの部分を結合し「絶対パス」で指定する。

このことが直感的に解ってしまえば今回の話はこれで終わっても良いのだが…。
折角なので、もう少し、このプログラムの改良を続けてみる。
今度は、ディレクトリ名のみを抽出する。


import os

home = "ここに自分のホームディレクトリのパスを書く"

for subdirectory in os.listdir(home):
    fullpath = os.path.join(home, subdirectory)
    if os.path.isdir(fullpath):
        print(fullpath)

今度は、「if os.path.isdir(fullpath):」という部分が追加され、
print(fullpath)の前のインデント(空白)が一つ右に移動している。
ループ文の中に、さらに、別の処理が「入れ子」になって入っている

さすがに、英語の「if」の意味は解るであろう…まさか…。「もしも」の意。
ここでは、「os.path.isdir(fullpath):」という条件を満たした場合にのみ
print(fullpath)を実行するようになっている。

os.path.isdir(fullpath):」というのもよく見れば、何をしているか予想できるだろう。
isdir()」の部分は、「() is directory」にも見える。つまり、「()はディレクトリ」。
要するに、「()」内の文字列がディレクトリの場合に「正しい」と言ってくれる機能

慣れてくると、この手の機能は、ほぼ勘で呼び出すことができるようになる。
プログラミングは、基本的に言語なので、慣れてしまえば簡単。
言語体系を扱うのは文系分野の領域プログラミング・スキルは文系に向いている

さて、この処理を実行すると、ディレクトリのみをリストとして表示できる。
使用しているOSとその環境に依存するので一概には言えないが、
最近のOSを使っている人は、「Desktop」というのも含まれているハズ。

マルチユーザ環境において、ホームディレクトリには、あらゆる個人設定が保存される
職場の共有パソコンなどで、別のユーザがログインすると、
そのユーザのデスクトップが表示されるハズ。他の人のは見えない…普通は。

これは、ユーザごとにホームディレクトリが設定されていて、
ログインするとログイン名に対応したホームディレクトリが読み込まれるのである。
もちろん、通常の設定では、別のユーザのホームディレクトリはロックされて見れない

さて、今回は、ディレクトリの構造を知るために本格的な(?)プログラムを書いた。
また、「マルチユーザ環境」と「ホームディレクトリ」の話もした。
これらは、普段は意識することが少ないかもしれないが、実は重要

これらの知識を持っていることは、特に、複数のメンバーで行う調査などで重要
調査終了後に皆のデータを統合する際にディレクトリを揃えておくと楽なのである。
ただし、これは、メンバー全員がディレクトリの概念を知っていることが前提…

どこかの偉い大先生が堂々と、「文系はそういった知識は不要!」と言っていた。
そのような時代がかつては「あったのかもしれない」が、今はそんな時代では無い
少し退屈な話かもしれないが、こういった知識はしっかりと身につける必要がある

2012/09/25

文系のための「OSの選択」

今度は、どのOSを選択するべきか?について考えてみる。
実を言うと、ベストな選択というものは無く、どれでも良いが、
どれを使っても困らない環境を作るには、ある程度の理解は必要。

現在、主流となっているはWindows系Linux系Mac 3系統のOS
ひょっとしたら、Linux については、聞いたことが無い人もいるかもしれないが、
WindowsMac の名前くらいは聞いたことがあるだろう。

既に話をしたように、OSコンピュータに関わる様々な装置
アプリケーション・ソフトウェア(以下では、略してソフト)の仲介をするような存在
したがって、OSはCPUと関連する装置に依存し、ソフトはOSに依存する

細かい話は複雑でマニアックなので、厳密な話は避けて「ザックリ」と言うと、

歴史的には、Windows系のOSは、「x86(ペケ・ハチロク)系」と呼ばれるCPUに対応し、
(以前の)Mac OS は、「Power PC」と呼ばれるCPUに対応していた。
なお、Linuxの場合は、各種CPUに合わせて様々なバージョンが存在する。

実を言うと、現在では、Windows系のOSMac OSLinux系OS
いずれも、x86系CPUで動作し、したがって、この環境が最も多いのではないかと思う。

ちなみに、x86系CPUは、インテルという企業が開発したため、
x86系のCPUに対応して以降のMac OS(10.4〜)を、Intel Macと呼ぶ。

ふむふむ。トヨタの「ハチロク」と、インテルの「ハチロク」...。

そのような事情から、今では、Linux系のOSWindows用パソコンインストールでき、
Mac OSの、ある特殊な機能(Boot Camp)を使えば、
Linux系のOSWindows系のOSインストールすることも不可能ではない。

なお、Mac OS を他の機械で動かすことはできない。

とにかく、今回は、これら3系統のOSの特徴について簡単に整理してみる。
今回は、難しい話はなし。表面上の話が中心。

私の場合、以前は熱狂的なMicrosoft ファンであったが、諸事情あってMacユーザになり、
現在では、研究活動の中心はLinux系のOS。今ではWindows系のOSを使う機会は減った。
そんな私の個人的な印象から以下のような表を作ってみた。根拠は無い単なる「印象」


Windows Mac Linux 備  考
操作性 どれも一長一短。今では殆ど変わらない。慣れの問題。
保守性 企業や自治体向けという点では、Windows が強い。
斬新性 Macは、あくまで個人向け。イノベーションを追求型?
安定性 ケース・バイ・ケース。使い方によるので、一概には言えない。
連携性 ソフトウェア間の連携という点ではLinuxが強い。
国際性 Windowsの国際対応は大きく遅れている。
汎用性 誰でも使えるという点では、Windows が強い。解説も多い。
コスト Linuxなら無償で環境を整えることができる。
見た目 周辺機器も含め、洗練されたインタフェースが魅力。

結論から言うと、実績と保守性に重きを置くのであれば、Windows系OSが適している。
個人プレー中心の貧乏研究者や学生には、Linux が向いているだろう。
趣味中心の個人利用であれば Mac という選択も捨てがたい。

結局は、日常的に利用するソフトウェアがOSの選択に大きく左右する

ただし、既に述べたように、ソフトのOS依存は以前に比べて低減している。
重要なことは、それぞれの得手不得手を理解した上で、
環境に依存しないような情報管理の方法が必要なのである。

さて、話が逸れてしまったが、そもそも、各OSの普及率はどの程度のものなのであろうか?
以下のグラフは、Wikipedia のOS別の参照アクセス状況を表したものである。
なお、このデータは、2012年8月1日〜2012年8月31までの集計結果。
(参考:http://stats.wikimedia.org/wikimedia/squids/SquidReportOperatingSystems.htm

このグラフを見てみると、Windows系OSからのアクセスが圧倒的に多くて、全体の85.4%
Mac OSは9.6%Linux系OSは少数派で1.7%となっている。

この結果が示すように、やはり、Windows系のOSは「圧倒的」に優勢である。
この背景には、「Windows」というブランドが、企業や公官庁、教育機関などに
広く普及しているという状況がある。要するに、「公式の場」に強いのが特徴。

当然、職場と自宅の環境が同じであった方が良い。
だから、職場でWindows系OSを使っている人は、自宅でもWindows系OSを選択するだろう。
結果として、利用者が多いので、対応する周辺機器も多くなる。

こうした状況は、開発に携わる人達にとっても享受できるメリットが多い。
Windows系OSを前提とする開発者は、圧倒的大多数であるので、
多くの洗練された開発環境を容易に準備できる。

私自身、以前は、Microsoft の提供する開発環境で開発していたのであるが、
使い勝手の「心地良さ」は、他の開発環境とは比べ物にならない。
MacLinux に移行して、最も苦労した点は不便な開発環境に慣れることであった。

さて、Windows系OSに依存するソフト類も「公式の場」に相応しいものが多い。
特に、大規模システムの根幹に関わるソフトや、セキュリティ関連のソフトは、
ある程度の技術」で使える便利ツールが多く、参考情報も豊富である。

システムの維持管理というのは、想像以上に苦労が尽きないもので、
少しでも、その負担が軽くなるのであれば、やはり、使いやすいツールが良い

公式の場」を相手にしてきたWindows系OSと、この種のOSに依存するソフトの多くは、
システム障害への耐性が高く、これまで「上手くやってきた」という実績もある。
つまり、保守性という点ではWindows系のOSが圧倒的に優勢となる。

これらの利点が、Windows系OSの「強み」であり、
他の利点を譲ったとしても、十分に「おつり」が返ってくる。

ここまで言うと、やはり、Windows系OSが最良では?と思うかもしれない。

しかしながら、「公式な場」を中心に普及しているが故に、
時代の流れには鈍感であるし、痒い所に手が届かないことも多い。
地域性が反映され過ぎていて、時々、国際対応で不便を感じることがある。

多国語化に関しては、追加の言語パッケージを入れるか、
最初から多国語環境が入っているものを選択するという方法はあるが、
いずれにせよ、追加料金が発生してしまう。細々とお金がかかるのである。

また、いくら保守性が高いと言っても、永久に古い機能を持ち続けれるわけではないし、
新しいOSバージョンリリースされても、様々な事情があって、
古いバージョンを使い続けないといけないこともある。

そもそも、上に挙げた利点というのも、あくまで「公式の場」での話であって、
個人ユーザにとっては、必ずしも当てはまるとは限らないし、
少ない給料で割けるお金で買うには、少々、コストが掛かりすぎる

以下のグラフを見てみると、現在でも、3割程度の人がWindows XPを利用している。
サポートが切れているOSを使うのは良くないのであるが…。

では、この問題は他のOSの場合にはどうなのか?
今度は、Linuxについて整理してみる。

Linuxと言っても、実際には様々な種類がある。私も、何種類あるか知らない。
というのは、OSの「基本的な部分」に様々な機能を追加した「亜種が多く存在し、
その亜種によって、見た目、提供される機能、使い勝手が全く異なる

現在では、RedHatDebianSlackware3系統の配布形式が主流で、無償のものでは、
RedHat系Fedora(フェドーラ)」、Debian系Ubuntu(ウブンツ)」。
Slackware系openSUSE(オープン・スーゼ)」などがよく知られている。

実を言うと、大規模システム向けの、有償のLinux系OSも存在しているが、
細かい話をし始めると、延々と長い話になって終わらない。以下の話も、「ザックリ」。
ということで、ここでは、私が愛用しているUbuntuについて紹介する。
Wikipedia のアクセス数の割合で見ると、42.4%Ubuntuとなっている。
Linux系OSは様々な用途で使われているので、全体としてシェアでは不明なのであるが、
Wikipediaは一般ユーザが使うのが通常なので、実質的に、個人ユーザが最も多いOSであろう。

この Ubuntu を導入すると、どのようなメリットを享受できるのだろうか?
とりあえず、「見た目」は以下の通り。使いにくいという印象は感じられない。
実際に、直感的に扱うことができるので、一般ユーザが不便することは無い

まず、このOS自体は無償で入手することができ、必要なソフトの多くも、
無償で入手できるものが多いので、金銭的は負担は非常に小さい

もちろん、普通の人がWindows上で行うことの多くは、Ubuntu上でもできる。
画像や動画の処理文書作成表計算統計GISシミュレーション...etc。
これらは、Windows系OSMacと同様に、マウス操作が中心で複雑な技能も不要

ただし、Windows上で動作するソフトが直接的に動くわけではないので、
代替となるソフトを探す必要はあるが、必要なソフトも揃っているし
逆に、Windows系OS Mac系OSで苦労する処理が、あっさりと出来ることもある。

動作も、Windows系のOSと比較するとかなり早く、旧式のパソコンでも快適に動く
私は、最初の3年Windowsで動かして、残りの2年Ubuntuで動かしている。
実を言うと、バッテリがもう持たないので、用途は限られてしまっているが...。

意欲のある人は、パソコンの買い替えの時に、試してみても良いかもしれない。

さらに、コマンドライン操作を少しでもできれば、作業効率は格段に上がる
元々、コマンドライン操作が中心であったのでコマンド操作は非常に快適で、
細々とした機能が満載なので、使い慣れると「心地良い」のである。

多言語対応に関しては、Windows系OSと比較して、かなり自由が効く。
簡単な操作でいつでも言語やキーボードの言語設定ができるので、
海外の研究者とパソコンを共有する時に役に立つ。

さて、個人的にはUbuntuを何とか普及させたい気持ちもあるが、
全く問題が無いという訳では無い。「公式な場」で使うには、些か問題がある。

まず、大規模システムの基幹システムに据えるには不安材料が多いし、
ネットワークの細かい設定を行うには、そなりに技術力と専門知識を要する
また、解説の多くが英語なので複雑な事をするにはある程度の英語能力を要する。

Windows系OSで作成されたファイルとの互換の問題もある。以前よりも良くなったが、
例えば、Microsoft Office で作った書類プレゼンは、レイアウトが大きく崩れたり、
一部の図形が、別の図形になってしまったり...完全な互換は実現していない。

では、Macを選択するというのはどうか?なんか、最近、人気のようであるが。
学会のプレゼンでもよく見かける。

そもそも、Mac は、昔から個人ユーザをターゲットとしていて、
一般企業ウケ」という点では、必ずしも良いとは言えない

その一方で、「斬新さの追求」という点では、他のOSを圧倒している。
Mac は、パソコン本体とOSがセットになっているため、全体的な完成度も高い
そうそう、Mac 独特のクールなデザインも定評がある

マウスキーボードなどの付属品までもが洗練されていて、慣れると病みつきになる。
ディスプレイなどにもこだわりがあって、色の再現力は非常に高い
ちなみに、私のUbuntu機のキーボードはMac の英語版ワイヤレスキーボード

あくまで、一般ユーザをターゲットとすることで、
様々な企業とのシガラミに捕らわれず、新しいことに挑戦しやすいのである。
そのような「思想」に魅了された人は、Mac から離れることができない...

見た目だけ?と言う人もいるかもしれないが、そうでは無い

また、現在のMac OSIntel Mac)は、Linux の遠〜い親戚のようなものであるから、
コマンドは多くが共通していて、Linuxユーザにとっても、比較的、使い易い
文字コードに関しては、両方とも、UTF-8が標準のため、文字化けも生じにくい

処理速度の点では、体感的には軽快で、通常利用で不便を感じることは無い。
欧米では、Mac を愛用する研究者も多い。私も海外の研究者に勧められてMacにした。
そう言えば、以前参加したドイツの国際学会では備え付けのパソコンMac だった。

国際対応という点でも、Ubuntuと同様に優れている。
簡単な設定で様々な言語に切り替えることができ
Ubuntuと同様に、海外の研究者と共同研究する際に重宝する。

Mac版のMicrosoft Office が存在することも重要なポイントである。
実際には、マクロなどWindows版のOfficeの機能が全て使える訳では無いので、
完全に再現できる訳では無いが、Macではレイアウトが崩れる問題が軽減される。

他にも、Mac専用のオフィス・ソフトであるiWorksに含まれるワープロソフト(Pagesや、
プレゼンテーション・ソフト(Keynote表計算ソフト(Numbersには、
iPad版iPhone版が存在しており、これらの機器でデータを編集できる

Mac を中心とした世界に、一度浸かってしまうと、
その「心地良さ」から、抜け出ることができないのである。

iPhone5Dockコネクタ地図に関して、困惑している人が多いが、
それで何らかの状況が「将来的に」良くなるのであれば、静観したい、
そのように、Mac信奉者は感じてしまうのである。褒めて伸ばしたい親心である。

では、Mac の選択する上での問題とは何か?

まず、Unutu などのLinux系OSとの関係では、
よく似ていても、決して同じOSでは無いし、Linux上で不自由なくできることが、
Macでは色々と厄介な手続きを踏まざるを得ないこともある

Windows系OSとの関係では、「Windows版/Mac版」と書かれたソフトの多くが、
Windows版のソフトよりも機能的劣っていたりして、ガッカリすることがある。
そもそも、仕組みが違うので仕方無いのであるが、期待を裏切られることは多い

周辺機器に関しても、Windows系OSの搭載を前提としたパソコンとは、
異なる形状の端子を使うことも多く、特定の周辺機器を使用するために、
特殊な形状の変換プラグを用意する必要もある

一言で表現するならば「その斬新さ故に不自由を被ることがある」ということ。

さて、文系のためのOSの選択の話、少しは参考になっただろうか?

重要な点は、上記の3系統のOSの優劣を付けることは無意味であるということ。
こっちのOSでは簡単でできることが、他のOSでは困難であったり、
あるいは、色々とお金をかけないと行けないことがある。

見ての通り、何が良いかという結論は無い人によって好みは異なるし、
用途によって便利と感じる部分も大きく異なる

ただ、情報を扱うという観点からは、あるいは情報共有と利活用の観点からは、
いずれのOSを使用しても、大きな混乱の原因にならないような工夫が必要なのである。
そして、その工夫というのは、決して難しいことではない

ということで、次回は、OSに依存しないソフトウェアについて整理しようと思う。

2012/09/24

文系のための「オペレーティングシステム」

よく、「やっぱり、Windows が良い!」とか、「いやいや、Macの方が良い!」、
っと言った会話を聞くことがある。結論から言うとどちらでも良いのであるが...。
まぁ、個人的には、「結局、Linuxが使いやすい。」という意見を支持したい。

さて、ここで出てきた、Windows とか、Mac とか、Linux というのは何なのだろうか?
本日の話題は、そのような話。役立つかもしれないし、役立たないかもしれない。
しかしながら、知っておいて損はしないような内容...にしたい。

この話題について議論するには、
コンピュータの仕組みについて、簡単に知っておく必要がある。

現在、私の前には、キーボードマウスディスプレイモニタ
そして、パソコンの本体が置いてある。当たり前の話であるが、
同等の装置類は、もちろん、ノートパソコンにも備わっている。

我々は普段意識することは無いのであるが、実は、パソコンの「」には、
様々な「装置」が詰まっていて、それらが同期することでパソコンは動いている。

」の役割を担うCPU
記憶」を担うハードディスク
脊髄」の役割を担うメモリ
仕草?」の役割を担うグラフィックボード
」と「」の役割を担うサウンドボード
...他にも色々な装置が詰まっている。

では、これら装置は、実際には、どのように動いているのか?

既に、述べたとおり、そもそも、コンピュータというのは「1」と「0」の信号を使って、
様々な情報をやり取りするのであった。もちろん、上で挙げた装置類も同様。
全て「1」と「0」の命令で動かしているのである。

言い方を変えると、コンピュータは「1」と「0」しか解らない、とも言える。
そして、コンピュータが理解できる言葉を「機械語」と呼ぶ。

一応、コンピュータとのやり取りは「会話」ということになっているので、
コンピュータへの命令文のことをプログラミング言語と呼ぶ。
もちろん、機械語プログラミング言語の一つ。もっとも、原始的ではあるけれど。

さて、残念なことに、私の周囲には、機械語プログラムを組んでいる人はいない。
私も機械語を使ったことは無い。何せ、全て「1」と「0」で記述するのだから。
機械が理解できる唯一のプログラム言語、それが、機械語

はっきり言って、「1」と「0」の羅列を入力するなど、正気の沙汰とは思えない
何らかのバグが発生し、プログラムを見直すとなれば...「1」と「0」羅列を見てできるか?
いやいや、無理無理。常人には、できません。そのような時代もあったらしいが...。

ということで、もう少し簡単に、と言う事で、4bitごとに区切って16進数で表現する。
この方法であれば、もう少し、見易くなるだろうし、なるほど、「1」と「0」よりはマシ
しかし、残念なことに、私の周囲では、16進数プログラムを書いている人もいない。

やはり、もう少し、人間にも易しい言葉コンピュータに命令を送りたい。
そういった状況があって、登場したのがアセンブリ言語
要するに、2進数あるいは16進数の命令をアルファベットのコマンドに置き換えたもの。

これは、もう少し楽。アセンブリ言語を使っている人は、意外に多い
実を言うと、私も素人ではあるけれど、必要に迫られて書くことがある。
仕組みが分かれば、なんとか、書けないことは無いし、色々と出来るのも事実。

以下は、ちょっとしたアセンブリ言語の例。
ちなみに、図中の「ldi」というのは、「Load Immediate」の略。
つまり、「値を入れてすぐに実行」ということ。人が見ても解りやすい


この例では、アセンブリ言語を使って、CPUに「1」と「0」の信号を送り、
一つの端子(ピン)に接続されたLEDライトを点灯させている。
ここには、8本のピンが並んでいるから、8bitの情報を送れるわけである。

これまでの話から、8bitの信号を送ることができれば、
グレースケール(灰色階調)の画像ASCIIコードも送れるし、
他にも色々な装置に命令を送ることができるのである。

なるほど。コンピュータはこのような仕組みで動いているのである。
この仕組みが分かれば、どのような装置でも動かすことができそうである。
また、実際に送信する信号以外はアルファベットなので、理解もしやすい。

ところが、アセンブリ言語にも限界がある。実は、文法がCPUに依存するのである。
CPUの種類によって異なる「動作の仕組み」を理解しないといけないし、
他の装置を繋げるのであれば、それらの装置の仕組みも把握しないといけない...

うん?CPUや機器によって処理が異なる?そうなの?

我々が日常で使っているパソコンは、CPU周辺機器が変わっても問題が無い
そうそう。確かに、前に使っていたパソコンのソフト、新しいパソコンに入れても動くし、
プリンタやモニタを変えても正常に動いている。困ったことは無い。

上の話と噛み合わない。どういうことか?

根本的な問題として、CPUコンピュータに接続される装置が変わる度に、
プログラムを書き直すというのは非常に大変であるから、
CPUやその他の装置類とのやり取りを「中継」させれば良い。

確かに、アセンブリ言語機械語CPUに依存していても、
やりたい処理は共通している。だから、CPUへのの命令以外を抽象化し、
各々の実行環境で、CPUに合わせた命令文に翻訳すれば良い。

そのようなアイデアの下で生まれたプログラミング言語の一つに、
C言語と呼ばれるプログラミング言語というのがある。
聞いたことがある人もいるかもしれない。

以下、厳密には、色々と問題がある説明ではあるが、「ざっくり」と説明。
そうそう。情報学関係、機械工学の向けの説明ではないので悪しからず...。

C言語で書かれたプログラムは、実行環境に合わせてアセンブリ言語に変換され、
さらに、そのアセンブリ言語機械語に翻訳されて「1」と「0」の命令が実行される。

C言語機械語直接変換したり、アセンブリ埋め込んだり…色々とあるのだが、
このブログの読者の中には、アセンブリ言語やC言語で開発する人は居ないだろうし
とりあえず、なんとなく、そのような認識があれば、良いことしておこう。

とにかく、C言語の登場によって、装置類に関する知識が最低限で済むようになった
これが、重要なポイント。要するに、装置類への命令の部分が抽象化されるので、
アプリケーション・ソフトウェアは、命令を中継してくれるプログラムに命令を出せば良い

実は、この仕組みこそが、オペレーティング・システム(OS)
最も重要な仕事の一つなのである。つまり、C言語が志向したような仕組みによって、
アプリケーション・ソフトウェアの開発者は、煩わしい装置類の制御から開放されたのである

今の人は笑うかもしれない。かつては、コンピュータが変わればプログラムを書き直し、
周辺機器は買い直さないといけない、そんな時代があった。OSの存在は偉大なのである。
幸運なことに、私は、恵まれた時代の人なのでそのような経験は無い。

実際には、どのOSC言語で作られているわけでは無いし、
サポートするCPUの規格の種類も、全てのCPUというわけには行かない。
CPUの規格の種類に合わせて、様々な種類のOSが存在し得るのである。

では、OSにはどのような種類が存在するのだろうか?
実を言うと、数えきれないほど存在している。パソコンで言えば、
Windows系OS、Mac OS、Linux系OSが、現在の主流であろう。

携帯電話にだって、OSは存在している。最近では、iOSAndroidが有名であるし、
ちょっと前には、Symbian OS というOSもあった。ちょっと、マニアックかな?
そうそう、Blackberry OS や、携帯電話でないけれど、Palm OS というのもあった。

他にも色々。家電製品や車などには、国産のTRONというOSも存在している。
要するに、装置類とのやり取りが必要で、そのやり取りの部分を共通化する必要があれば、
目的に応じて様々なOSが必要となってくるのである。

かつて、OSというのは、愛想の無いものであったが、特にパソコン携帯電話OSは、
色々と「見た目」も凝ってきていて、OSの定義も大分変わってきたようである。
単に、様々な装置類との中継だけでなく、OS自身が提供する機能もかなり多い。

ここまでに解説した「OS」というのは、非常に限定された「狭義のOS」の話であって、
一般的に「OS」と呼ばれているのは、そうした、様々な機能を包括している。

さてさて、なぜ、わざわざこのような話をこのような話をこのブログで取り上げたのか?
実は、「OSの選択」という問題を議論しなければならないからである。
大半の人が、Windows を使用していると思うが、その前提を改める時期が来ている

OSは、アプリケーション・ソフトCPUを含めた様々な装置との連携の手段を提供し、
その一方で、アプリケーション・ソフトの多くはOSの機能に大きく依存する
一般的に言われている事で、実感することで、基本はそのようになっている。

ところが、最近では、OSへの依存度が急激に低減し始めているのである。
つまり、これまでは、Windowsしか選択できない状況が多大にあったのであるが、
現在では、場合によってはWindows である必要が無い。

これは、Windows の「是非」を問いているのではなく、
全世界的に「選択の幅」が広くなり始めていている、
そういう状況を、しっかりと認識しておくことが重要なのである。

逆に、MacLinux に乗り換えようと考える人には、
これらのOSが潜在的に持っている問題を認識する必要があるし、
一方的なWindows 批判をするべきでは無いだろう。

いずれにせよ、もはや、Windows の事だけ考えていれば良い時代は終わっていて、
情報管理の観点からは、OSに依存しない情報管理の方法を考える必要がある。
それは、情報管理の習慣、技術、手法の全てに及ぶ。

したがって、当然、文系の情報教育においても、
特定の環境アプリケーション・ソフトウェアへの依存も避けなくてはならないし
自律した環境の構築方法についても整理するべきなのである。