コンピュータ
----
目次
----
コンピュータ ・・・・・・
Linux ・・・・・・・・・
昔のメモ ・・・・・・・・
昔のノート4 ・・・・・・
Windows ・・・・・・・・
プログラミング ・・・・・
コマンドとX ・・・・・・
MFC ・・・・・・・・・・
Linuxディストリビューション ・・・
アプリケーション・・・・・
----
コンピュータ
----
コンピュータは、計算と信号の処理が出来る機械です。
計算と信号の処理を記述したソースコードをコンパイルして、機械語のプログラムにします。
論理和や論理積の計算と信号の実行が出来るCPUが機械語のプログラムを実行します。
プログラムは関数に分けられ、その場その場に応じて抽象的な関数群を具体的に実行します。
ハードウェアは、抽象的な信号処理が出来る部品で、それぞれがCPUの信号を処理し、相互干渉します。
◇◇
OSは、まず、プログラムの実行と終了をするものです。
近代的なOSは、タスク管理とファイル管理をします。
マルチユーザ、マルチタスクで、プログラムを同時に実行し、
ファイルシステムによって、リソースを抽象的に管理します。
◇◇
それぞれのプログラムは、OSの上階層にあり、
OSと開発環境のライブラリ関数を使って、高度な機能を簡単に実現します。
◇◇
マウスやディスプレイなどのハードウェアとOSは、
デバイスドライバやその処理の登録によって、密接に結びついています。
◇◇
Linuxが好きでした。
何か、自分が出来るような気がしました。
プログラミング言語のいくらかを知っています。
僕がおすすめする言語は、Windowsならば、もう古いですがDelphiを
Linuxならば、C/C++とLispをおすすめします。
◇◇
プログラミングの世界において。
◇◇
*関数は、引数を変数とする自動の実行処理で、変数が変わると処理する内容が変わります。
*OSを作りたいなら、カーネルはLinuxカーネルを使って、ウィンドウシステムを独自に作ると良いでしょう。
*1つ1つ必要なメソッドを考え、処理を考え、フローチャートを書き、実行内容を作っていきます。
*僕と同じことをやりたければ、Delphi、PHP、C#、そしてWikipediaなどによくあるマクロを参考にし、オブジェクト指向やLispを考え学ぶのが効率的です。
*ワープロアプリケーションなら、ページクラスを作って、ページ数分だけページオブジェクトを表示します。その中に、文字列オブジェクトを作って、ページクラスの方でワープロ的に表示します。
*パソコンは機械語で動作しています。機械語にコンパイル可能な文法でソースコードを作ります。
*ソースコードは階層的で、分割可能で、利用可能です。それぞれの言語にオブジェクト指向、手続き型、関数型、バイトコード、メモリ管理などのパラダイムがあります。
----
Linux
----
Linuxの仕組みについて。
◇◇
ブートローダーが、カーネルを実行する。
実行するランレベルによって、起動スクリプトが実行される。
Apacheのデーモンなどもここで実行される。
◇◇
ファイルシステムがある。
設定ファイル、ログやデータファイル、システムデバイスファイル、
プログラムのバイナリファイル、ホームディレクトリなどが
階層的に分かれている。
◇◇
起動すると、コマンドシェルが実行される。
コマンドの入力と実行を司る。
コマンドは小さく分かれており、パイプなどの機能を使って、連結して実行することが出来る。
◇◇
ウィンドウシステムであるXが起動されることもある。
Xはカスタマイズ性が高く、ウィンドウマネージャが多い。
デスクトップ環境としては、GNOMEやKDEがある。
アプリケーションは、ブラウザのFirefoxや、GNOMEやKDEの付属アプリケーションなどがある。
◇◇
プログラムの開発や設定ファイルの編集には、
Lispが実行できるエディタであるEmacsや、コマンドを実行できるVimなどを使う。
コンパイラにGCC、コンパイルとインストールの処理にはMakeを使う。
Makeの他に、パッケージシステムを使うことも出来る。
パッケージシステムを使ってプログラムをインストールすると、
インストール後のアンインストールなどの管理や
依存関係の解決などが容易である。
◇◇
GCC以外にも、PerlやPythonなどのスクリプト言語が多い。
マルチユーザのOSであるため、ファイルにパーミッションと呼ばれる許可の概念がある。
そのため、システム管理者しかアプリケーションをインストールできない、などの特徴がある。
◇◇
ディストリビューションによって、アプリケーションやパッケージの構成が違う。
特に、GNOMEを採用するか、KDEを採用するか、などの点、スクリプトや設定ファイルの構成、などが違う。
◇◇
アプリケーションは少ない。Officeアプリケーションは、Microsoft Officeの模倣品のようなものしかない。
サーバー管理やプログラム開発に使うと、コマンドラインやデーモンのアプリケーションが多い。
◇◇
Debianでは、アプリケーションを入れるときは、aptitude installを、消す時には、aptitude removeを使う。ソフトウェアセンターを使っても良い。
Fedoraでは、yum historyを使うと、アプリケーションの管理が簡単だ。
SUSEなら、zypperでは、--clean-depsオプションで、パッケージ削除時の依存関係をきちんと削除してくれます。
◇◇
普通、オープンソースソフトウェアのライセンスには、GPLやLGPLを適用する。
これは、そのソフトウェアが永久にフリーであることを保証する反面、
コードを使用して派生ソフトウェアを作った場合に、
そのソフトウェアのライセンスを同じGPLにしなければならないという、
「GPL汚染」という問題が発生することがある。
GPL汚染では、ライセンスの選択の自由性が無いため
このGPL汚染のない、BSDライセンスなどを選択するソフトウェアの開発者も多い。
◇◇
Linuxは、DocomoやAUのスマートフォンで採用されているOS、Androidで使われている。
僕はAndroidはあまり好きではないが、普及に向けて、大きく前進した。
----
昔のメモ
----
世界のルールにおいて、価値観と国家が重要ですが、宗教で決まる事も多いと思います。ある特定の権力者によって、権力団体によって決定される事が多いです。基本的なものとして、生命と財産が生活において重要ですが、それならば、基本的に禁止すべきは、殺害、虐待、盗難となります。-2009.11.17-3
◇◇
光は、ただの粒子で、全体の光からの反射で波として動いているのではないでしょうか。いや、波とは、粒子の反射による動作に過ぎないのではないでしょうか。-2009.11.21-4
◇◇
嘘、盗難、虐待、殺害を禁止します。-2009.11.21-6
◇◇
単純なものが、応用でき、計算できます。磁力や熱がそうです。それらが機械となります。しかし、日本語は複雑です。単純な方が、応用が利いて賢いでしょう。-2009.11.21-8
◇◇
コンピュータは、全て一つの式で成り立っています。しかし、CPUとメモリの設計図です。半導体がどう流れるかに過ぎません。Intelは難しいですが、カーネルは単純です。よく使う命令をカーネルに書いておき、たまにアプリケーションが参照し、カーネルに切り替わり、カーネルでは、アプリケーションを殺したり作ったりします。-2009.11.21-9
◇◇
階層数学というのはどうでしょう。単純な操作を、単純な演算として、記号を作ります。記号を使った定義で、少し複雑な演算を作ります。さらに階層的に作り、全ての手順を記号にして、人間が分かります。-2009.11.21-10
◇◇
経験心理学というのを考えました。患者は、経験的に世界を見なくなります。失望や、恐れからです。そういう時は放って置くべきです。-2009.11.21-12
◇◇
経験心理学では、経験を考えます。脳、感情、行動は、経験的に増え、融和し、関係するからです。精神だけでは、患者は治りません。脳が経験的に行動して治していますが、そのため、経験や行動を時間軸的に把握し、何が根本の原因になっているかを、一つ一つ把握し、一つ一つ違う理解と体験をしていく必要があります。-2009.11.21-13
◇◇
人間とは世界観と定義だと思います。-2009.11.21-17
◇◇
行動から発見し、考え方と理解から発見するものです。しかし、信じて確かめる事から実証するものです。そこまでで発見ですが、自由と行動が重要です。-2009.11.21-18
◇◇
とある何かが成り立つならば、何か別のことも成り立つかもしれません。それが分かるためには、とある何かが成り立つためには、何が成り立たなければならないかを知っている必要があります。-2009.11.21-19
◇◇
実現するためには何を分かっている必要があるか、を考えると良いでしょう。そして実現します。そこには、選択肢を考え、想像力で掌握することが必要です。-2009.11.21-20
◇◇
環境活動というものがあります。とある環境で、とある状態になり、とある意識になり、とある行動をしてしまうことです。それは、そこにある環境と人々の関係性に支配される、という理屈です。-2009.11.21-21
◇◇
ものごとは、作られたものです。ただし、生きているものは違いますが、現象的に出来たものかもしれません。食べて、死にます。殺して、死んだものを使います。現象的に出来たのであれば、それら全てが出来たものですが、ひとつのアメーバから、すべての生命に、階層的に進歩したのかもしれないでしょう。-2009.11.21-23
◇◇
人間は能力を付ける事が出来ます。出来る事が増え、自由と呼びます。しかし、それは自由とは違います。-2009.11.21-25
◇◇
自由であっても、行動しなければ意味がありません。やる時が無い時、自由には意味がありません。-2009.11.21-26
◇◇
状態を研究し、とある状態を、他の人間にもあると仮定して、そうした状態を深く理解します。世界が分かります。-2009.11.21-27
◇◇
感情を理解し、とある人間、とある集団を、心理学、感情的に理解し、愉しみを共有します。そうすると、自分が分かります。-2009.11.21-28
◇◇
自動車は知りませんが、僕はミニ四駆をよくしていました。そういう時代があったはずですが、ミニ四駆を薦めたいです。特に、肉抜きとモーターやローラー、タイヤの取り替えが面白いです。僕は2つのモーターを改造し、1つのモーターにするくらいは出来ました。今は出来ませんが。-2009.11.21-29
◇◇
数学には、定数と変数があります。変数はとりかえが利き、式さえも入るものです。しかし、定数は宇宙の論理です。-2009.11.21-30
◇◇
公式は、定義から求められます。定義が重要です。ただし、何に役に立つ数学かを分かっていると面白いと思います。三角関数は一つの角度から直角三角形としての辺の長さを分かることの出来る関数ですし、極限は微積分に必要ですし、微積分は増え方が分かります。数学は絶対に正しいです。-2009.11.21-31
◇◇
単位は比率です。そういう理由で、あまり実際の数字は関係ありません。-2009.11.21-32
◇◇
宗教と科学が良いと思います。宗教で嘘を信じ、科学で考えて正します。-2009.11.21-45
◇◇
覚えて積み重ねると賢くなります。-2009.11.21-47
◇◇
人を想定して、人に対する言葉を書いていけば、誰でも詩は書けます。-2009.11.21-48
◇◇
練習曲を弾いて、弾き方を覚えれば、誰でもピアノは弾けます。-2009.11.21-49
----
昔のノート4
----
プログラミングにおいて、関数は1まとまりの手順をまとめた1つの式です。その通りコンピュータの処理が実行されます。手順は自動化されており、引数と呼ばれるものを用いて、自動的に新しい処理を実行します。-2009.12.13
◇◇
知性をつけましょう。最後まで知性がついたならば、意識を高めましょう。理解で治る、とは信じない方が良いです。変な事を信じていても治りません。病気がすぐに治ると信じるのは愚かで、病気が続くと信じる方向を変えるだけで楽になります。-2009.12.24
◇◇
把握せず、忘れましょう。把握している間、何か言っている間は、分かるの構造体を頭の中に作っています。分からず、忘れるとさらに分かりますし、むしろ忘れるべきです。-2009.12.24-2
◇◇
骨が折れて治るとさらに強くなるように、頭が多少おかしくなって良くなるとさらに良くなります。まともをいつまでも保っていると、おかしくはなりませんが、おかしくなっても良いのです。-2009.12.25
◇◇
工学において。物質や波の特徴と、現象、そこで見つけられる量と単位、計算があります。そこから上は部品と設計となり、この地上で動きます。-2009.12.26
◇◇
宇宙において、法則と理論が存在し、空間に物質や天体があり、法則と理論に従います。-2009.12.26-2
◇◇
数理で宇宙を捉えると、次元上に数値が存在していますが、その数値、特に重力の関係を考えるに、ありえない物体が存在しています。-2009.12.26-3
----
Windows
----
MicrosoftがLinuxに勝つためには、Emacsを超えるWinEditを作るのが良い。
すでにxyzzyなどがあるが、Microsoftならば簡単に作れるだろう。
載せるLispも作れば良いが、C/C++やC#、VBを載せても良いと思う。
いや、VBでは勝てないだろう。LispをMicrosoftが作ったほうが良いと思う。
----
プログラミング
----
C++ではクラスとメソッドを使ってオブジェクトを作る。
継承があるため新しいコンポーネントを作りやすくデスクトップに向いている。
Cでは構造体とポインタを使って同じことが出来る。
KDEはC++を、GNOMEはCと独自のコンポーネント技術を使っている。
◇◇
プログラミングはHTMLやCSSと同じで、処理するのが違うから、
コピーと思考力で出来るかな。
僕はLispとDelphiで良く分かったけど、VBでも良く分かると思う。
◇◇
後は、関数を覚える。
標準ライブラリ、システムコール、
C, C++, Java,
ツールキット、デスクトップ、
カーネル、アプリケーションなど。
◇◇
KDEは、綺麗でかっこいい。
GNOMEは、シンプルで分かりやすい。
◇◇
Cでは、関数、ポインタ、構造体、
VBでは、リソース、メソッド、オブジェクトが基本である。
基本的に、使うものを作る。
ボタンを作れば、アプリケーションの開発者がそのボタンを使ったアプリケーションを作る。
ボタンは、点を表示するウィンドウシステムの表示関数を使って作る。
あとは、コンパイラとカーネルだが、コンパイラでは、マクロ処理、繰り返しや共通化部分の変換を行ったり、カーネルでは、同時にアプリケーションを実行したりする。
----
コマンドとX
----
コマンドラインでは、バイナリファイルと設定ファイルなどがある。
ApacheやPHPなども設定ファイルを参照する。
◇◇
Xでは、XサーバーとXクライアントがある。
メッセージループをして、信号を送受信して動いている。
おそらくは。詳細は知らないが。
◇◇
GNOMEやKDEは、デスクトップを操作するためのアプリケーション群である。
オブジェクト指向である。
◇◇
追記
◇◇
調べてみたところ、メッセージループはXクライアントがしているようです。
サーバーは、マウスやキーボードなどの、イベント処理をしています。
----
MFC
----
マイクロソフトの開発環境では、MFCとクラスを使う。
ビューとメッセージに機能をつけたして、クライアント領域に表示する。
◇◇
グラフィカルな表示をするためには、おそらくは、CDCクラスを使えばよい。
ブラウザを作るなら、表示を抽象化するのがいい。
どの四角も四角だ。どのフォントもフォントだ。
同じ四角の領域を表示する関数で、全部表示してしまえばいい。
----
Linuxディストリビューション
----
Linuxにはディストリビューションというものがある。
それぞれ、構成ソフトウェアのバージョンや適用されているパッチ、
設定システム、管理システム、パッケージシステムの方式などが違う。
◇◇
Debianは、コミュニティベース。伝統的で、安定して動く。全てが自動。賢いパッケージシステム、DpkgとAPTを作った。
Ubuntuは、最近の一番手。何から何までよく出来ている。Debianをベースとしている。
Fedoraは、Red Hatの後継で、昔から標準的。先進的で、いち早くGNOME 3を採用した。パッケージシステムは標準的なRPM。
openSUSEは、ドイツのLinux企業、SuSEの後継。買収されて、新しい会社がやっている。KDE 4が美しい。GNOMEのほうは、パクリだったが、最近はどうなったのやら。RPMを採用。
Gentooは、全て手動で、独自のパッケージシステムPortageを採用している。
◇◇
おすすめは、Ubuntu、Fedora、openSUSE、Debianの順。GentooはLinuxの仕組みがよく分かる。
◇◇
ディストリビューションは、他にいくらでもある。日本のものではVine Linuxが有名。
----
アプリケーション
----
ワープロやブラウザアプリケーションを作る。
クラスに、ページの全要素を作る。
領域を表示する関数で、全部の要素を表示する。
編集・更新可能にする。
ファイルシステムと統合する。
◇◇
MSDNで、あるいはJavaで作る。
関数を覚えるべき。
◇◇
領域の関数を使わなくても、それぞれの要素を表示する関数を作ればいい。
メッセージループやウィンドウ処理の部分で、一気に全部を表示すればいい。