非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

LDAPとは

わからない用語がふと出てきたので、調べた。

LDAPとは

Lightweight Directory Access Protocol
TCP/IP上で動作するインターネット標準の、ディレクトリサービスへアクセスするためのプロトコル
WebブラウザなどのLDAPクライアントから、直接、ディレクトリサービスを検索・参照することができる

ディレクトリサービスとは

LANなどのコンピュータネットワーク上にあるユーザ情報、接続されているプリンターなどの資源を記憶し、検索しやすいようにまとめたもの。

ディレクトリ構造について

ディレクトリは基本単位であるエントリをツリー上に配置して構成する
ディレクトリは複数のオブジェクトについての情報を格納する
LDAPのエントリはオブジェクトを表現する属性情報の集合で、複数のオブジェクトを粒度に合わせてツリー上に整理する
オブジェクトに該当するものは人物やアカウント・プリンタ等の資源

ディレクトリデータベースについて

DIT Directory Information Tree
エントリの階層構造を表したもの。ディレクトリ情報ツリー。
DIB Directory Information Base
それを格納したデータベース。ディレクトリ情報ベース。

エントリとは

オブジェクトを格納するデータ構造
エントリは属性の集合であり、属性は属性名と内容の組で、一つの属性は複数の値を持つことがある
エントリはRDBではレコードに相当する

エントリの構造

各エントリが何を表現しようとしているかを決めるのが オブジェクトクラス (objectClass) という属性
エントリが何のオブジェクトクラスを持っているかによって、そのエントリが持てる属性が決まる
複数のエントリが同一の親エントリ配下にいたとしても、兄弟関係にあるエントリ間で保持可能な属性が異なる場合があるというのが、RDBのレコードと決定的に違う特徴の一つ

ディレクトリサービスを利用する

プログラムでは処理対象とするエントリを特定する必要がある

データ形式

LDIF LDAP Data Interchange Format
このファイル(テキストファイル)でやりとりをする

dn: <識別名>
<属性記述子>: <属性値>
<属性記述子>: <属性値>
<空行>  ← エントリの区切り
dn: <識別名>

エントリの識別

RDN Relative Distinguished Name
親を基準とした位置を示す名前をRDN
DIT上の各エントリは親エントリから見た際に一意に識別可能な名前を付けることで、親エントリを基準とした位置が確定できる
通常はエントリ自身のいずれかの属性名をRDNとする

DN Distinguished Name
該当するエントリを一意に特定するための手段
そのオブジェクトを表すエントリおよびその上位エントリのRDNの列として定義されたもの

DNの書き方

複数のRDNをカンマ記号でつなぎ合わせて記述したもので、上位のRDNほど右側に位置する

検索について

LDAPではDITのエントリを検索するためにフィルタという構文(syntax)を利用する
RDBでフィルタは、SELECT文のWHERE句に相当する

動作について

LDAPサーバはDITを公開し、TCP/IP 経由でクライアントからのリクエストを受け付け、クライアントにその結果を返すLDAPサーバがクライアントからの接続を待ち受けるポート番号として、389(非 over SSL/TLS あるいは STARTTLS)と636(over SSL/TLS)が使用される

RDBとの違い

用途

LDAPは、検索性能重視頻繁な更新には向かない。
RDBは、検索だけでなく頻繁な更新も重視する

構造

LDAPはツリー構造で、RDBはテーブル構造
LDAPは、ディレクトリによるグルーピングを基礎とした構成となるため、管理の委任がしやすい
目的の情報がグルーピングされたディレクトリだけを指定して検索をするため、検索自体のパフォーマンスが有利

その他

リレーショナルデータベースでは、テキストベースのデータのほかバイナリベースのデータも同様に扱うが、LDAPでは主にテキストベースのデータを扱うため、処理の負荷が少なくパフォーマンスが向上する傾向にある

LDAPはディレクトリ検索のためのプロトコルとして、氏名や電話番号、メールアドレスといった基本的な属性が最初から定義されているため、リレーショナルデータベースのように自分で定義する必要がない。

apacheの設定ファイルについて

あとで…を連発したうちの一つ、apacheの設定ファイルについて調べた。
うーん長いなw

というわけで、そもそもから。

apacheとは

フリーのWebサーバソフトウェア

apacheの設定

httpd.confを編集する。

# vi /etc/httpd/conf/httpd.conf

以下中身

Webサーバ全体の環境設定(Section 1: Global Environment)

ServerRoot "/etc/httpd"

Web サーバのルートになるディレクトリで、インストールした場所のパス。基本変更しない


ServerTokens Prod

エラーメッセージ出力時等のサーバ情報を制限。
下にいくにつれ情報が増える。

表示内容
Prod サーバ Server: Apache
Major +メジャーバージョン Server: Apache/2
Minor +マイナーバージョン Server: Apache/2.0
Min +マイナーバージョン Server: Apache/2.0.41
OS +OS Server: Apache/2.0.41 (Unix)
Full すべて Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
PidFile run/httpd.pid

httpd の PID を書き込むファイルを指定する。
つまり、/etc/httpd/run/httpd.pid がPidファイルとして指定。
基本変更しない


Timeout 60

タイムアウトするまでの秒数。基本変更しない


KeepAlive Off

HTTPセッションを一定時間保持する設定
ONにするとパフォーマンスが向上するため、変更する。


MaxKeepAliveRequests 100

受け付ける接続要求数の最大許容値。
可能な限り大きな値を指定(KeepAlive Onが必須)
この値を0にすると無制限になるが、基本しない。


KeepAliveTimeout 15

HTTPセッションを保っておく秒数
値を大きくすれば、クライアント側の快適さは向上するが、サーバへの負荷は大きくなる


<IfModule prefork.c>
     StartServers       8
     MinSpareServers    5
     MaxSpareServers   20
     ServerLimit      256
     MaxClients       256
     MaxRequestsPerChild  4000
</IfModule>

preforkプロセス制御の設定

設定名 内容
StartServers 起動時に生成される子サーバプロセスの数
MinSpareServers アイドルな子サーバプロセスの最小個数
MaxSpareServers アイドルな子サーバプロセスの最大個数
ServerLimit 設定可能なサーバプロセス数の上限
MaxClients リクエストに応答するために作成される子プロセスの最大個数
MaxRequestsPerChild 個々の子サーバが稼働中に扱うリクエスト数の上限
<IfModule worker.c>
     StartServers         4
     MaxClients         300
     MinSpareThreads     25
     MaxSpareThreads     75
     ThreadsPerChild     25
     MaxRequestsPerChild  0
</IfModule>

workerスレッド制御の設定

設定名 内容
StartServers 起動時に生成される子サーバプロセスの数
MaxClients リクエストに応答するために作成されるスレッドの最大個数
MinSpareThreads アイドルなスレッド数の最小個数
MaxSpareThreads アイドルなスレッド数の最大個数
ThreadsPerChild それぞれの子プロセスに生成されるスレッド数の上限
MaxRequestsPerChild 個々の子サーバが稼働中に扱うリクエスト数の上限0で無制限
Listen 80

Apacheが使用するポートを指定。基本はそのまま。


LoadModule hoge_module modules/mod_hoge.so

モジュールの読み込み
個々のモジュールはあとで調べてみよう


Include conf.d/*.conf

読み込む外部設定ファイルの設定
/etc/httpd/conf.d/ディレクトリにあるconf拡張子のファイルをすべて読み込む。


ExtendedStatus On

各リクエストに対して拡張ステータス情報を保存する。
有効にしておく


User apache
Group apache

サーバーを実行するユーザとグループ。特に変更しない。
Apacheがインストールされるときに自動的に作成されるHTTP接続専用のシステムアカウント

メインのサーバの環境設定(Section 2: 'Main' server configuration)

ServerAdmin root@localhost

エラーページに表示する管理者メールアドレス。


ServerName localhost:80

サーバ名。


UseCanonicalName Off

サーバが自分自身を表す名前を作成する方法
On ServerNameで指定したポート番号とホスト名をクライアントに返す
Off クライアントから提供されたホスト名やポート番号をそのまま使用して返す
DNS Hostヘッダーをつけないクライアントをサポート(IPベースのバーチャルホストで使用されるのを想定)


DocumentRoot "/var/www/html"

ドキュメントルート
これより上位の階層へはアクセスできないが、SymbolicLink やalias を使用すれば、アクセスさせる事も可能


<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

サーバールート(/)に対しての設定
中身は後述


DirectoryIndex index.html index.php

/で終わるURLを指定した際にデフォルトで表示するファイルを指定


AccessFileName .htaccess

アクセス制御を行うためのファイルを指定。特に変更しない。
制限をかけたいディレクトリ内に置くことで、そのディレクトリに対して認証が行われる
Direcotryの設定で、AllowOverrideの値をAllかAuthConfigにする必要がある


<IfModule mod_userdir.c>
    UserDir disable
    #UserDir public_html
</IFModule>

ユーザーディレクトリ機能を有効か無効に設定する
有効にした場合、を設定する


<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

ブラウザからアクセスできないファイルを指定。


TypesConfig /etc/mime.types

MIME タイプ設定ファイルのパスを指定。基本変更しない


DefaultType text/plain

MIMEタイプファイルに記述が無かった場合の指定


HostnameLookups Off

IPアドレスをホスト名に変換し(逆引き)、ログに記録する機能


#EnableMMAP off

配送中にファイルを読み込むためにメモリマッピングを使うかどうかの設定。
SSI(Server Side Include)実行時などに利用される。


#EnableSendfile off

ファイルのクライアントへの配送時にカーネルのsendfileサポートを使うかどうかの設定
Onにするとファイルアクセスが低減される。
Apacheが参照するファイルがNFS(Network File System)上にある場合はOffにしておく必要がある。


ErrorLog logs/error_log

エラーログを記録するファイルを指定
実際のファイルの場所は/var/log/httpd/error_log
特に変更する必要なし


LogLevel warn

エラーログに出力するメッセージのレベルを指定する。
レベルを下げすぎるとログ膨大になってしまう。

指定 内容
emerg 緊急事態。システムが利用不可
alert 直ちに対応すべき必要がある
crit 致命的状態
error エラー
warn 警告
notice 重要な情報
info 情報
debug デバッグ情報
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

ログファイルで使用する書式を設定する。基本変更しない


#CustomLog logs/access_log common
#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
CustomLog logs/access_log combined

クライアントからのアクセスログを記録するファイルを指定する
実際のファイルの場所は/var/log/httpd/access_log
特に変更する必要なし


ServerSignature off

エラーメッセージ等をクライアントに返す際のフッターラインの表示を指定
ONにすると、ServerTokensで設定された内容だけがサーバー情報として追加表示される。
EMailにすると、上記に加えてServerAdminで設定した連絡先も掲載される
OFFにすると、エラーメッセージ以外の情報はクライアント側に表示されない


Alias /icons/ "/var/www/icons/"

仮想ディレクトリの設定。ディレクトリのシンボリックリンクに相当する機能。
HTTPではアクセスを受け付けないディレクトリを、コンテンツの配置場所として利用できる


IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

インデックス表示に関する基本的な設定
クライアントからディレクトリのみを指定され、かつDirectoryIndexで指定されるインデックスファイルが無い場合、ディレクトリ内のファイル一覧を作成しクライアントに返す機能。


AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

ファイルに表示するアイコンをMIME符号化方法で選択


AddIconByType (TXT,/icons/text.gif) text/*

ファイルの隣に表示するアイコンをMIMEタイプによって選択


AddIcon /icons/binary.gif .bin .exe

ファイルに表示するアイコンを名前で選択


DefaultIcon /icons/unknown.gif

特定のアイコンが何も設定されていない時にファイルに表示するアイコン


AddDescription "GZIP compressed document" .gz
AddDescription "tar archive" .tar
AddDescription "GZIP compressed tar archive" .tgz

アイコン情報の指定。特に変更する必要なし


ReadmeName README.html
HeaderName HEADER.html

インデックス表示の最後および先頭に挿入するファイルを指定する。


IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

インデックス表示において無視するファイルを指定する。


AddLanguage zh-TW .zh-tw

指定される拡張子を持つファイルを特定のMIME言語タイプに結びつける
基本変更しない。


LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN      zh-TW

MIME言語タイプの適用優先順位を指定する。AddLanguageに定義されているもののみ指定可。
基本変更しない。


ForceLanguagePriority Prefer Fallback

要求に合う単独のドキュメントが見つからなかったときに行なうことを指定。
Prefer wwwサーバの応答が複数の場合に、LanguagePriorityに指定された優先順位に従い応答を返す。
Fallback wwwサーバが応答するページが無い場合にLanguagePriorityに指定されたページを応答する。
Noneも指定可。
基本変更しない。


AddDefaultCharset UTF-8

httpdが、クライアントにコンテンツデータを送るとき、Webブラウザで利用させる文字セットを設定する
指定していると、ヘッダが無視され強制的にこの文字セットになる。
Offにするとコンテンツデータに任意の文字セットが利用できるが、必ず文字セットの指定をしなければならない。


AddType application/x-tar .tgz

MIMEタイプファイルに記載されてないマッピングを追加


#AddEncoding x-compress .Z

ファイル名の拡張子を指定されたエンコーディングにマップする


AddHandler cgi-script .cgi

ファイル名の拡張子を指定されたハンドラにマップする


AddOutputFilter INCLUDES .shtml

サーバの応答をクライアントに送る前に処理するフィルタを設定する


#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html

エラーコードごとに出力するHTMLを指定する。
ユーザーからのリクエストに何らかの問題があった場合、クライアントのブラウザにエラーページを出力する。


BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

ブラウザによる環境変数の設定。
環境変数を設定すると、Apacheそのものの動作に制限をする事ができる。


#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .example.com
#</Location>

URLによるアクセス制御。
がローカルディレクトリの設定に対し、はURLに対しての設定となる


#<IfModule mod_proxy.c>
#ProxyRequests On
#
#<Proxy *>
#    Order deny,allow
#    Deny from all
#    Allow from .example.com
#</Proxy>

標準プロキシーリクエストを許可する


#ProxyVia On

ViaヘッダでのHTTP/1.1の扱いを有効/無効にする


#AddOutputFilter Includes html

利用許可する拡張子を設定


#AddHandler type-map var
AddHandler cgi-script .cgi

ファイル拡張子とハンドラをマッピングする

#LanguagePriority en es de fr

2つ言語間で同じ優先度があった場合にどちらをより優先するかを設定


#ForceLanguagePriority Prefer Fallback

該当する言語がない場合に、選択肢を返すのか、アクセス拒否を返すのかの優先度を設定
選択肢を返す場合はPrefer
アクセス拒否を返す場合はFallback

バーチャルホストの設定(Section 3: Virtual Hosts)

NameVirtualHost *:80

名前ベースのバーチャルホストのための IP アドレスを指定


<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

特定のホスト名やIPアドレスのみに適用される。
内容は上記同様

コンテナ

<Files hoge>~</Files>

hogeに指定されたファイルにのみ適用

<FilesMatch hoge>~</FilesMatch>

正規表現hogeに指定されたファイルにのみ適用

<IfModule module>~</IfModule>

moduleが読み込まれたときにだけ有効。!をmodule名の前につけると、読み込まれていないときになる

マルチプロセッシングモジュール (MPM)

apacheが、並列処理するためのモジュール

prefork

デフォルトの設定
あらかじめ複数のプロセスを用意しておき、クライアントからのリクエストを待ち受ける。
用意したプロセス数を越えるリクエストが要求された場合、新たなプロセスを生成することにより、クライアントからのアクセスに対応する

worker

リクエストの応答にスレッドを使い、プロセスベースのサーバよりも少ないシステム資源で、 多くのリクエストに応答することができる。
さらに、多くのスレッドを持った複数のプロセスを維持することで、 プロセスベースのサーバの持つ安定性を保持する。

指定したドメイン/ホストの環境設定

AllowOverride

.htaccessが使用できるかの設定

設定値 内容
None .htaccessでは何も設定できない
All .htaccessで設定可能なものは全て有効
AuthConfig 認証関連の使用を許可
FileInfo メタデータを制御を許可
Indexes ディレクトリインデックス関連の使用を許可
Limit アクセス制御関連の使用を許可
Options カンマ区切りで許可するものを指定

Options

設定対象の基本的な動作許可、制限

設定値 内容
None 特殊な機能を使わない時
All MultiViewsを除いた全ての機能が有効。設定しない場合はこれ
FollowSymLinks シンボリックリンクでのアクセスを許可
Includes SSIの使用を許可
IncludesNOEXEC SSIは許可するが、SSIが外部cgiを呼び出すのを禁止
Indexes リクエストに対するファイルが存在しない場合に、ディレクトリ内ファイルの一覧を表示する
MultiViews コンテントネゴシエーションを有効
SymLinksIfOwnerMatch 所有アカウントが一致している場合アクセス許可
ExecCGI CGIの実行を許可

Order

AllowとDenyを組み合わせて、HTTPアクセスを制限する
Orderで評価される順番を制御する。

設定値 内容
Order Deny,Allow アクセスはデフォルトで許可(ブラックリスト方式)
Order Allow,Deny アクセスはデフォルトで拒否(ホワイトリスト方式)
Satisfy all Orderの制限と認証の両方クリアで許可
Satisfy any Orderの制限か認証のどちらかクリアで許可
Allow from 対象 許可する対象を指定
Deny from 対象 拒否する対象を指定

すべてのアクセスを拒否する場合

Order Deny,Allow
Deny from all 


すべてのアクセスを許可する場合

Order allow,deny
Allow from all


ローカルのみ許可

Order Deny,Allow
Deny from All
Allow from 127.0.0.1

ポートとは

外部とデータを入出力するための、ソフトウェアやハードウェアのインターフェース

よく利用されるポート

番号 プロトコル 詳細
25 smtp メール送信(SMTP)
53 domain DNS
80 http www
110 pop3 メール受信(POP)
443 https www(セキュア)

ディレクティブとは

プログラム中に埋め込むコンパイラへの命令

MIMEタイプとは

拡張子という概念と、MIMEタイプという概念がある。
タイプ名/サブタイプ名の形式の文字列で、WEBサーバーとWEBブラウザの間は、このMIMEタイプを用いてデータの形式を指定する

ファイル形式 一般的な拡張子 MIMEタイプ
テキスト .txt text/plain
HTML文書 .htm .html text/html
XML文書 .xml text/xml
JavaScript .js text/javascript
CSS .css text/css
GIF画像 .gif image/gif
JPEG画像 .jpg .jpeg image/jpeg
PNG画像 .png image/png
ZIPアーカイブ .zip application/zip
PDFファイル .pdf application/pdf
MPEG映像 .mpg video/mpeg
flash .swf application/x-shockwave-flash


OrderのDenyとAllowの感じがややこしい…。
次は、フレームワークに戻る予定。

Zend Frameworkインストール

入れてみる。
さっそく設定しようと思ったら、コマンドがいくつか入ってない!

wgetunzipをインストール

他にも入ってなさそうだけど、とりあえず使うものだけ

wget

# yum install wget

unzip

# yum install unzip

ダウンロード/解凍

最新の安定バージョンをダウンロード。
パスは適当なところに設置

# cd /usr/share/php
# wget http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11-minimal.zip
# unzip ZendFramework-1.11.11-minimal.zip
# mv ZendFramework-1.11.11-minimal.zip ZendFramework

利用の設定

Zend Frameworkのファイルを読み込めるように設定。
インクルードパスを追記する。

# vi /etc/php.ini

;include_path = ".:/php/includes"
include_path=".:/usr/share/php/ZendFramework/library"


URL変換にmod_rewriteを使用するため、コメントアウトをはずす
と思ったら外れてた。

# vi /etc/httpd/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so


さらに、.htaccessを有効にするために、追記。
ディレクトリは適当なところに。

# vi /etc/httpd/conf/httpd.conf

<Directory "/var/www/public_html>
  # AllowOverride None
    AllowOverride All
</Directory>

コントローラーまわりの設定

index.phpにアクセスを集中させる
上記で設定したディレクトリに作成

#vi .htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php 


最後に再起動

# /etc/init.d/httpd restart  apache再起動

使えているかチェック

index.phpをさきほどのディレクトリに作成

<?php
require_once 'Zend/Version.php';
echo Zend_Version::VERSION;

バージョン名でました!読み込めてます。
これで何か作ってみようかな。

その前にhttpd.confについてまとめるつもり。

標準ストリームとは

またしても用語について書いている…。
用語以外のことを書こうと思いつつ…。

標準ストリームとは

UNIXおよびUnixオペレーティングシステムや一部のプログラミング言語インタフェースにおいて、
プログラムとその環境を実行前から接続している、入出力チャネルである。


3つの入出力があり、これらは自在に切り替える事ができる。

標準入力(stdin)

デフォルトはキーボード
0番

標準出力(stdout)

デフォルトはディスプレイ
1番

標準エラー出力(stderr)

デフォルトはディスプレイ
2番

リダイレクト

標準出力の先を変更するもの。
>や>>を使って書く

標準出力をファイルにする場合

ls > file.txt
ls 1> file.txt

ファイルが存在していたら上書きし、ファイルが存在していない場合作成する


ls >> file.txt

ファイルが存在していたら追記し、ファイルが存在していない場合作成する


ls hoge 2> file.txt

エラーがファイルに出力される。数字を省略した場合、 1 標準出力 が指定される。


ls hoge .* &> file.txt
ls -al .* hoge > file.txt 2>&1
(ls -al .* hoge 2>&1) > file.txt

標準出力と標準エラー出力を 1 つのファイルにリダイレクト。
標準エラー出力を標準出力にまとめる。(1と2を逆にして、標準エラー出力にまとめることもできる)


ls hoge .* 2>&1 > file.txt

標準出力のみファイルにリダイレクトされる。


ls -al .* hoge >/dev/null

出力を破棄する

標準入力をファイルにする場合

cat < file.txt
cat 0< file.txt

0が省略されている

パイプ

標準出力を次のコマンドの標準入力に渡す。
標準エラー出力は引き渡されない

ls | grep hoge

lsコマンドの結果をgrepする

ヒアドキュメント

コマンドの標準入力に対して、複数行にわたる任意の文字列を与えることができる

cat << EOF > file.txt
>hoge
>fuga
>EOF

ファイルに入力した文字列を出力

web/インターネット標準について

なんぞやと。こやつは。

web標準とは

webで標準的に利用される技術の総称
XHTML,XML,CSS,DOM,ECMA Script,MathML,SVGなど

W3C(World Wide Web Consortium)

web技術の標準化を行う団体のひとつ
もっとも代表的な団体がW3Cで、W3Cが策定する仕様書(Specifications)はWeb標準として広く認められている

標準度合いを調べる方法

バリデータ(バリデーションを行う機能/ソフトウェア)
Validator http://validator.w3.org/
CSS Validator http://jigsaw.w3.org/css-validator/

バリデーション

入力されたデータや、プログラミング言語/マークアップ言語の記述が、規定された文法に即しているか、また要求された仕様にそって適切に記述されているかどうかを、検証すること。

インターネット標準

インターネット上で標準的に用いるべきと判断された技術仕様のこと。
原案はIETFが作成し,IESGの審査を経て承認され,RFC文書として公開される。

IETF

Internet Engineering Task Force
TCP/IPなどのインターネットで利用される技術を標準化する組織。
ここで策定された技術仕様はRFCとして公表される。

IESG

Internet Engineering Steering Group
インターネット標準の作成を目的とする組織。

RFC

Request For Comment
IETFによって発行される提案書のシリーズ。
インターネットで利用されるプロトコルや、その他インターネットに関わるさまざまな技術の仕様・要件を、通し番号をつけて公開されている。
読むにはBNF記法の知識が必要(なので、前回書いたとさ)

RFCの読み方

すべてのRFCのリストは、RFC Indexファイルに入っているので、まずここを見る。

リストの表示項目

RFCの番号 タイトル 著者 発行日 ファイルの形式とサイズ 他のRFCとの関係 他のリストでの登録 文書の種類

6437 IPv6 Flow Label Specification. S. Amante, B. Carpenter, S. Jiang,
J. Rajahalme. November 2011. (Format: TXT=35269 bytes) (Obsoletes
RFC3697) (Updates RFC2205, RFC2460) (Status: PROPOSED STANDARD)

今回の例

RFCの番号 6437
タイトル IPv6 Flow Label Specification
著者 S. Amante, B. Carpenter, S. Jiang, J. Rajahalme
発行日 November 2011
ファイル形式とサイズ Format: TXT=35269 bytes
他のRFCとの関係 Obsoletes RFC3697 Updates RFC2205, RFC2460
文書の種類 Status: PROPOSED STANDARD

他のRFCとの関係の見方

表示 内容 RFCxxxの有効性
Obsoletes RFCxxx このRFCで置き換える 無効
Obsoleted by RFCxxx このRFCはRFCxxxに置き換えられている 無効
Updates RFCxxx このRFCでRFCxxxを更新する 有効
Updated by RFCxxx このRFCはRFCxxxにて更新されている 有効

他のリストでの登録の見方

表示 内容 備考
Also STDxxx このRFCがSTDxxxxとして標準化 STD文書
Also FYIxxx このRFCがFYIxxxxとして系統化 FYI文書

文書の種類の見方

表示 内容 備考
STANDARD 標準化されている
DRAFT STANDARD 運用評価を受けている 標準への草稿
ROPOSED STANDARD 標準トラックに入る 標準への提唱
EXPERIMENTAL 研究開発中 実験的なプロトコル
INFORMATIONAL 情報提供目的 有益な情報
HISTORIC 何らかの理由で情報が古くなったもの 歴史的文書
BEST CURRENT PRACTICE BCPサブシリーズ 特に認めた手順書
For Your Information FYIサブシリーズ TCP/IPやインターネットに関する一般的な情報


用語まとめはそろそろおいておいて、構築の続きをやろうかな…。

BNFとは

読めるように勉強。
やってくうちにパズルみたいで、ちょっとおもしろくなってきた!

BNFとは

Backus Naur Form バッカス・ナウア記法
ジョン・バッカスさんとピーター・ナウアさんが考案。
…名前のままでした。

コンピュータが扱う言語の文法を定義する際に用いられるメタ言語の一つ。
BNFを拡張(Extended)したEBNFが現在一般的。

基本

生成規則
「左辺 ::= 右辺」
非終端記号
「<」と「>」で囲まれたも
終端記号
「0」や「1」のように、新しい記号を生成しないもの。終端記号は実際のソースコードで使用できる記号。
<hoge> ::= <hogehoge>
hoge は hogehoge である

<数字>  ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" 
<非ゼロ数字> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" 
<符号なし整数> ::= <非ゼロ数字> | <符号なし整数><数字>

拡張
<符号なし整数> ::= <非ゼロ数字>{<数字>}

よく見る文字の意味

表記 意味
選択(どれか)
[] オプション(あってもなくても)
{} 0回以上の繰り返し)
() グループ化(単一の要素とする)

RDBMSとは

データベースまわり調べてみた。

RDBMS

Relational DataBase Management System
リレーショナルデータベースを管理するソフトウェア

概要

  • データを列と行の中にまとめ、テーブルの中に並べるもの
  • データの比較には同じ位置のフィールドを見ればよいので、データの結合や抽出が容易。
  • テーブルが複数の場合、主キー等関連付け内部結合を行うことで、一つテーブルのように扱える
  • データベースとのやりとりはSQL言語が用いられる。

クライアント・サーバーモデル

クライアントとサーバーが連携し、プログラムやアプリケーションを効率的に実行するモデル

クライアント

  • データ処理を要求する動作単位。
    • サーバーに要求を出して情報や資源を利用するハードやソフトのこと
    • データベースに対してアクセスを要求するプログラムのこと

サーバ

  • データ処理を実行する動作単位。
    • 情報や資源を一元的に管理し、提供する役割のハードやソフトのこと
    • データベース本体が存在する側のこと

3層クライアントサーバーシステム

クライアント/サーバー型のアプリケーションを3つの機能モジュールに分けて開発する手法

  • ユーザーインタフェース部分を実現するプレゼンテーション層
  • データの加工処理を実行するファンクション層
  • データベースにアクセスするデータ層

概要

  • 機能的に明確に区別することでシステム性能や開発・保守効率の向上を狙う。
  • 3つの層は通常、別々のコンピュータで動かすが、同一のコンピュータ上にあっても構わない。
  • 特徴として、データ加工処理をサーバー側で実行させること。
    • クライアントとサーバーの間のデータ通信量が減るため、低速な回線を使っていたり、クライアントの台数が多い場合でも、応答速度が落ちにくい。
    • 仕様の変更が容易、並行開発により生産性も向上
    • システム保守の負荷が軽減される
      • サーバー上のデータベースの構造やデータの処理ロジックを変更しても、クライアント上のモジュールを変更しなくて済むため

2層クライアントサーバーシステム

サーバーにデータベース・アクセス・モジュールだけを載せ、その他の処理をクライアント側で実行する従来の一般的なクライアント/サーバー型アプリケーション開発手法

主流のRDBMS

MySQL

  • オープンソースで商用ライセンスとGNU GPLの元で無償
  • ストレージエンジンを選択でき、特に高速参照の性能は高い。
    • マルチストレージエンジン方式を採用
  • UNIX系、Linux、Microsoft Windows、OS/2MacOSで動作

Oracle Database

  • 商用
  • 大規模向け有償製品。
  • UNIXLinux、Windows OSをサポート。

PostgreSQL

SQLite

  • オープンソース
  • サーバとして動作するのではなく、アプリケーションに組み込んで利用する軽量のデータベース
  • 大規模システムには不向きだが、中小規模のシステムであれば、機能、性能面において問題なく利用できる。

Microsoft SQL Server

  • 商用
  • Windowsとの親和性が高い

ストレージエンジン

更新系はInnoDB、参照系はMyISAM

  • MyISAM(デフォルト)
    • 全文検索機能やテーブル圧縮に対応
    • パフォーマンス系にメリット
      • WHERE条件なしのSELECT COUNT(*)が速い
      • 巨大なテーブルをフルスキャンする処理の効率が良い
    • テーブル単位のロック
  • InnoDB
    • トランザクションに対応
    • 外部キーが可能
    • 障害対応系にメリット
      • リカバリが簡単でMyISAMに比べて時間がかからない。
      • オンラインバックアップができる
    • 行単位でロックを行うため,並列性が高い

同期方式

  • マスタの更新と同時にすべてのスレーブを更新。
  • 全てのスレーブの処理終了を待つ必要があるため、スレーブが増えるほど全体の処理に時間がかかるが、常にすべてのデータベースで同じデータが保持されることが保証される。
  • いずれかのデータベースで障害が起きると、自動的にそのデータベースを同期対象から除外し、正常なデータベースに対してのみ同期処理を行う。
  • マスタで障害が発生した場合、スレーブのうちいずれかを代理マスタに昇格させ、マスタを同期対象から除外する。
  • 自動的な縮退運用への移行と、縮退運用に入ったことを外部へ通知する機構を備えている。

非同期方式

  • データの更新時にまずはマスタの更新。
  • マスタは更新の際、更新ログを出力し、この更新ログを順次スレーブに適用することで、同じデータが保持される。
  • マスタを更新してから、スレーブで更新ログを適用するまでの間は、一時的にデータが一致していない状態となるが、スレーブ数増加による処理時間の増加は発生しない。
  • マスタで障害が発生した場合、クライアントからの接続先をいずれかのスレーブに切り替えることで運用を継続できる。
    • バックアップしか行っていない場合のように、完全復旧までシステムの運用ができなくなってしまうということはない。
  • レプリケーションの最初のアクションはスレーブで、スレーブごとに任意のタイミングでレプリケーションを実行できる。