Reel People - The Rain
2010/10/04:鹿島、VOCにより汚染された土壌や地下水を浄化する「バイオブレンディー工法」開発
VOC
Volatile Organic Compoundsの略。
Volatile : 揮発
Organic : オーガニック(有機)
Compounds : 混合
Organic Compoundsで、"有機化合物"
酸素や、窒素、金なんてのは、それぞれ1種類の元素、O元素2つのO2, N元素2つのN2, Au元素1つのAuって形で存在していて、そういう物質を単体っていう
たとえば、酸素元素が、3つセットで存在している場合はO3となり、オゾンって呼ばれるんだけど、これも1種類の元素から構成されているので、単体
水はH2Oなので、HとOの2種類の元素で存在している
そういう何種類かの元素で構成されて、存在している物質を化合物って言う
オーガニック食品とか有機食品ってのは有機農法で作られた野菜ってこと
で、有機農法ってのは、化学肥料の力を使わない農法
『化学』って言うとなんか毒々しいけど、そういうこっちゃなくて、オロナミンCとか、グロンサンとかユンケルとかそういうイメージで、短期的に土壌をパワーアップさせてくれる筋肉増強剤てきな物
野菜はそもそも、野原に生えてるはずの物であって、そういう自然に生えてる野菜は、動物や植物の死骸とか、動物の排泄物とかが、土の中のバクテリアによって分解されて、植物の栄養になり、その植物が動物の栄養になる、、、ってな循環で成立している
筋肉増強剤を飲み過ぎると早死にするって言われるように、化学肥料も使いすぎると、土壌と植物とバクテリアのバランスが崩れて土壌はやせ細ってしまう
ってな事があるんで、自然の『生き物による栄養の循環』の力を使うのが有機農法
て事で、有機ってのはイメージ的に『生き物』ってイメージに近い
なんだか、モヤっとしたイメージなんで、じゃ化学的な面での有機ってどうなのよって事になると、有機化合物は、『炭素Cを含む』って縛りがある
じゃぁ、炭素さえ含んでれば有機化合物ってかい?って感じなんだけど、CO2が有機化合物に含まれなかったりもするんで、
・有機化合物は炭素を含む は、成立するけど
・炭素を含んでいたら有機物 は、成立しない
ってな関係にある
で、揮発ってのは、蒸発しやすいって事
って事で、VOCは、蒸発しやすい炭素を含む化合物だよ、、、って事
へぇ、蒸発しやすいんだ、よかったじゃんって感じなんだけど、たとえば、
・接着剤として使われる、CH2Oのホルムアルデヒド、
・接着剤や塗料をはがすのに使われるC6H5CH3のトルエン、
・金属機器の洗浄剤として使用される、CH2Cl2のジクロロメタン、
等の揮発性有機化合物は便利な反面、毒性があったり発ガン性があったりする
おまけにそういう有害なVOCは、土にしみこんでじっくり残っちゃったり、大気汚染の原因になっちゃったりするんで、こまったもんだという感じになっている
VOC
Volatile Organic Compoundsの略。
Volatile : 揮発
Organic : オーガニック(有機)
Compounds : 混合
Organic Compoundsで、"有機化合物"

酸素や、窒素、金なんてのは、それぞれ1種類の元素、O元素2つのO2, N元素2つのN2, Au元素1つのAuって形で存在していて、そういう物質を単体っていう

たとえば、酸素元素が、3つセットで存在している場合はO3となり、オゾンって呼ばれるんだけど、これも1種類の元素から構成されているので、単体

水はH2Oなので、HとOの2種類の元素で存在している

そういう何種類かの元素で構成されて、存在している物質を化合物って言う

オーガニック食品とか有機食品ってのは有機農法で作られた野菜ってこと

で、有機農法ってのは、化学肥料の力を使わない農法

『化学』って言うとなんか毒々しいけど、そういうこっちゃなくて、オロナミンCとか、グロンサンとかユンケルとかそういうイメージで、短期的に土壌をパワーアップさせてくれる筋肉増強剤てきな物

野菜はそもそも、野原に生えてるはずの物であって、そういう自然に生えてる野菜は、動物や植物の死骸とか、動物の排泄物とかが、土の中のバクテリアによって分解されて、植物の栄養になり、その植物が動物の栄養になる、、、ってな循環で成立している

筋肉増強剤を飲み過ぎると早死にするって言われるように、化学肥料も使いすぎると、土壌と植物とバクテリアのバランスが崩れて土壌はやせ細ってしまう

ってな事があるんで、自然の『生き物による栄養の循環』の力を使うのが有機農法

て事で、有機ってのはイメージ的に『生き物』ってイメージに近い

なんだか、モヤっとしたイメージなんで、じゃ化学的な面での有機ってどうなのよって事になると、有機化合物は、『炭素Cを含む』って縛りがある

じゃぁ、炭素さえ含んでれば有機化合物ってかい?って感じなんだけど、CO2が有機化合物に含まれなかったりもするんで、
・有機化合物は炭素を含む は、成立するけど
・炭素を含んでいたら有機物 は、成立しない
ってな関係にある

で、揮発ってのは、蒸発しやすいって事

って事で、VOCは、蒸発しやすい炭素を含む化合物だよ、、、って事

へぇ、蒸発しやすいんだ、よかったじゃんって感じなんだけど、たとえば、
・接着剤として使われる、CH2Oのホルムアルデヒド、
・接着剤や塗料をはがすのに使われるC6H5CH3のトルエン、
・金属機器の洗浄剤として使用される、CH2Cl2のジクロロメタン、
等の揮発性有機化合物は便利な反面、毒性があったり発ガン性があったりする

おまけにそういう有害なVOCは、土にしみこんでじっくり残っちゃったり、大気汚染の原因になっちゃったりするんで、こまったもんだという感じになっている

AddTypeをしてあげる事で、拡張子とMIMEタイプの紐付きをapacheが認識し、HTTPヘッダ内のContent-Typeを適切に返してくれるとこまでわかった
たとえば、
『"*.taha"ってファイルは、(勝手に作った)text/tahaってMIMEタイプだよ』
って
AddType text/taha .taha
と設定すると、

と、"Content-type:text/taha"が返っている事がわかる
CGIも、
AddType application/x-httpd-cgi .cgi
としてあげる事で、apacheが
『".cgi"というファイルは、CGIなんだ!実行しなきゃ!!』
って認識
し、組み込まれていたり、
LoadModule cgi_module modules/mod_cgi.so
等で指定してある、動的に呼び出すモジュールを実行する
でも、AddTypeで、"拡張子と、MIMEの関係の紐付け"を指定しているだけなのに、なんでそれがCGIモジュールと紐付くんだって事で検索

モジュール内部にがっつり識別子として定義されている感じみたい
AddTypeでも、
AddHandler cgi-script .cgi
でも、CGIが動作するのは、こういう事らしい

たとえば、
『"*.taha"ってファイルは、(勝手に作った)text/tahaってMIMEタイプだよ』
って
AddType text/taha .taha
と設定すると、

と、"Content-type:text/taha"が返っている事がわかる

CGIも、
AddType application/x-httpd-cgi .cgi
としてあげる事で、apacheが
『".cgi"というファイルは、CGIなんだ!実行しなきゃ!!』
って認識
し、組み込まれていたり、LoadModule cgi_module modules/mod_cgi.so
等で指定してある、動的に呼び出すモジュールを実行する

でも、AddTypeで、"拡張子と、MIMEの関係の紐付け"を指定しているだけなのに、なんでそれがCGIモジュールと紐付くんだって事で検索

モジュール内部にがっつり識別子として定義されている感じみたい

AddTypeでも、
AddHandler cgi-script .cgi
でも、CGIが動作するのは、こういう事らしい

Art Blakey Quintet - Split Kick
libxxx.so.1.0 : realname : 共有ライブラリの実ファイル
libxxx.so.1 : soname : ライブラリや、ビルドしたファイルに埋め込まれ、システム内での識別に使われる名前(realnameファイルへのシンボリックリンク)
libxxx.so : linkername : ビルドする時にリンカが使う名前(realnameファイルへのシンボリックリンク)
sonameは、ライブラリ本体に埋め込まれる約束になってる。
ldconfigコマンドによって、ライブラリ本体に埋め込まれているsonameで、本体へのシンボリックリンクが生成される。
ただし、ldconfigは、
/etc/ld.so.conf
を参照するので、ライブラリのパスを通しておく必要がある。
linkernameは、共有ライブラリを使った実行ファイルを作ってビルドする時の、リンク時に使う名前で、具体的には、
gcc -l[linkernameの、先頭"lib"と".so"を取った名前] -L [共有ライブラリへのパス]
って時に使う。
ln -s libxxx.so.1.0 libaho.so
でもいい。
となれば、
gcc -laho -L /[ライブラリのパス]
って感じ。
■共有ライブラリ作成
# gcc -fPIC -c ahahalib1.c
# gcc -fPIC -c ahahalib2.c
# gcc -shared -Wl,-soname,libahaha.so.1 -o libahaha.so.1.0 ahahalib1.o ahahalib2.o
-cは、オブジェクトをリンクして実行ファイルまでつくっちゃうんじゃなくて、コンパイルしてオブジェクトを吐き出すとこまでで止めてちょって事。
-fPICは、Position Independent Codeの事で、順に、"位置" "独立" "コード"って意味で、共有ライブラリなんで、いろいろなプログラムから動的に読み込まれるわけだから、それに備えるぜって事。
-sharedは、共有ライブラリ作っかんねって事。
-oは、outputする名前で、つまりは、realname
-sonameで、埋め込むsonameを指定する。"-soname [名前]"と行きたいとこだけど、それが出来ないんで"Wl"というオプション情報を伝えるオプションを使う。Wlオプションはスペースじゃなく、","で区切るんで、"-Wl,-sonam,[名前]"と変な使い方になる。
■ライブラリをシステムに認識させる
# cp libahaha.so.0.1 /home/studyc/studylib
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
/home/studyc/studylib
# ldconfig
-これで、共有ライブラリ使用可-
■共有ライブラリを使った実行ファイルを作成
# cd /home/studyc/studylib
# ln -s libahaha.so.1.0 libahaha.so
# gcc userahalib.c -lahaha -L /home/studyc/studylib
■動作確認
# ./a.out
userahalib main()
do Aha!!
yo Ahaha!!
■共有ライブラリのリンク状況をチェック
# ldd a.out
libahaha.so.1 => /home/studyc/studylib/libahaha.so.1 (0x00002b635e4c2000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c72000000)
…
■試験用ソースコード
# cat ahahalib1.c
#include<stdio.h>
int ahahaFunc1(char* argStr){
printf("%s Aha!!\n", argStr);
return 0;
}
# cat ahahalib2.c
#include<stdio.h>
int ahahaFunc2(char* argStr){
printf("%s Ahaha!!\n", argStr);
return 0;
}
# cat userahalib.c
#include<stdio.h>
int ahahaFunc1(char*);
int ahahaFunc2(char*);
int main(){
printf("userahalib main()\n");
ahahaFunc1("do");
ahahaFunc2("yo");
}
libxxx.so.1 : soname : ライブラリや、ビルドしたファイルに埋め込まれ、システム内での識別に使われる名前(realnameファイルへのシンボリックリンク)
libxxx.so : linkername : ビルドする時にリンカが使う名前(realnameファイルへのシンボリックリンク)
sonameは、ライブラリ本体に埋め込まれる約束になってる。
ldconfigコマンドによって、ライブラリ本体に埋め込まれているsonameで、本体へのシンボリックリンクが生成される。
ただし、ldconfigは、
/etc/ld.so.conf
を参照するので、ライブラリのパスを通しておく必要がある。
linkernameは、共有ライブラリを使った実行ファイルを作ってビルドする時の、リンク時に使う名前で、具体的には、
gcc -l[linkernameの、先頭"lib"と".so"を取った名前] -L [共有ライブラリへのパス]
って時に使う。
ln -s libxxx.so.1.0 libaho.so
でもいい。
となれば、
gcc -laho -L /[ライブラリのパス]
って感じ。
■共有ライブラリ作成
# gcc -fPIC -c ahahalib1.c
# gcc -fPIC -c ahahalib2.c
# gcc -shared -Wl,-soname,libahaha.so.1 -o libahaha.so.1.0 ahahalib1.o ahahalib2.o
-cは、オブジェクトをリンクして実行ファイルまでつくっちゃうんじゃなくて、コンパイルしてオブジェクトを吐き出すとこまでで止めてちょって事。
-fPICは、Position Independent Codeの事で、順に、"位置" "独立" "コード"って意味で、共有ライブラリなんで、いろいろなプログラムから動的に読み込まれるわけだから、それに備えるぜって事。
-sharedは、共有ライブラリ作っかんねって事。
-oは、outputする名前で、つまりは、realname
-sonameで、埋め込むsonameを指定する。"-soname [名前]"と行きたいとこだけど、それが出来ないんで"Wl"というオプション情報を伝えるオプションを使う。Wlオプションはスペースじゃなく、","で区切るんで、"-Wl,-sonam,[名前]"と変な使い方になる。
■ライブラリをシステムに認識させる
# cp libahaha.so.0.1 /home/studyc/studylib
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
/home/studyc/studylib
# ldconfig
-これで、共有ライブラリ使用可-
■共有ライブラリを使った実行ファイルを作成
# cd /home/studyc/studylib
# ln -s libahaha.so.1.0 libahaha.so
# gcc userahalib.c -lahaha -L /home/studyc/studylib
■動作確認
# ./a.out
userahalib main()
do Aha!!
yo Ahaha!!
■共有ライブラリのリンク状況をチェック
# ldd a.out
libahaha.so.1 => /home/studyc/studylib/libahaha.so.1 (0x00002b635e4c2000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c72000000)
…
■試験用ソースコード
# cat ahahalib1.c
#include<stdio.h>
int ahahaFunc1(char* argStr){
printf("%s Aha!!\n", argStr);
return 0;
}
# cat ahahalib2.c
#include<stdio.h>
int ahahaFunc2(char* argStr){
printf("%s Ahaha!!\n", argStr);
return 0;
}
# cat userahalib.c
#include<stdio.h>
int ahahaFunc1(char*);
int ahahaFunc2(char*);
int main(){
printf("userahalib main()\n");
ahahaFunc1("do");
ahahaFunc2("yo");
}
