perlのCGIでよく利用する環境変数一覧

2007年8月17日 23:59 perlのCGIでよく利用する環境変数一覧

タイトル通り、perlの、特にCGIでよく使う環境変数の一覧です。

ちなみに、perlの環境変数は連想配列 %ENV に格納されていて、 $ENV{'REMOTE_ADDR'} 等として参照できます。

REMOTE_ADDR
スクリプトを実行したクライアントのリモートアドレス(IPアドレス)。
REMOTE_HOST
スクリプトを実行したクライアントのリモートホスト。
HTTP_USER_AGENT
スクリプトを実行したクライアントのユーザーエージェント
HTTP_COOKIE
スクリプトを実行したクライアントのCOOKIEの値
HTTP_HOST
リクエストされたURIのホスト名。
REQUEST_METHOD
スクリプトを実行したメソッド。GET、POST、HEAD等。
CONTENT_LENGTH
POSTメソッドで渡されたデータの長さ。
QUERY_STRING
GETメソッドで渡されたクエリの内容。所謂「●●.cgi?■■■」の■■■の部分。
PATH_INFO
リクエストされたURIのパス。最近流行の、SEOを意識してGETメソッドではなく「/」区切りでデータをCGIに渡す手法を使う際には、これを参照することが多い。
SCRIPT_NAME
実行されたスクリプトのURI上の「/」からのパス。
SCRIPT_FILENAME
実行されたスクリプトのルートからのパス。
SERVER_PORT
通信に利用したサーバーのポート。SSLと非SSLでのアクセスの判断等に使ったりする。
ブックマークに追加する
関連するブログ記事
スポンサード リンク
カテゴリー
perl/CGI
タグ
CGI | perl | 環境変数

コメント(0) | トラックバック(0)

 

特定のファイルに対するアクセス制限

今回も.htaccessネタを旧サイトから引っ張ってきて転載です。


ネタがないので久々に.htaccessシリーズ。

.htaccessに下記のように記述することで、特定のファイルに対してアクセス制限をかけることができます。

<Files filename>
        order deny,allow
        deny from all
</Files>

filenameの部分にアクセス制限をかけたいファイル名を入れればOK。
これによって、ブラウザで閲覧できる場所にある設定ファイルなどに対してアクセス制限をかけることができます。
Webサーバーの設定によっては、ブラウザで.htaccessが閲覧できる状態になっている場合などもありますので、.htaccessは上記の方法でアクセス制限をかけておいた方が良いでしょう。

また、リモートホスト/IPアドレスでのアクセス制限で書いたように、「特定のファイル」を「特定ホストからのみ」アクセス制限、ということも可能です。

ファイル名には正規表現を使うことも可能です。

<Files ~ "regex">
...
</Files>

regexの部分に正規表現を入れることで「.から始まるファイル全てに制限をかける」「拡張子が.htmlのファイルに制限をかける」「拡張子が.gifか.jpgか.pngのファイルに制限をかける」といったことが可能です。

ブックマークに追加する
関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | アクセス制限

コメント(0) | トラックバック(0)

 

ケータイメールで鬼ごっこ

2007年8月15日 23:59 ケータイメールで鬼ごっこ

今日は僕のクライアントであるM社のI社長と打ち合わせのために大阪へ。
世間はお盆休み真っ盛りですが、うちは無休。クライアントさんもサービス業をされてるところなんかは、当然稼ぎ時ですから休みはないですね。

でも、大抵の人はやっぱりお休みのようで、いつも忙しそうにしてる僕の十年来の悪友SとUが盆休みということで、夕方から久々に飲みに行く約束をしていました。

京都・神戸・大阪と、三人バラバラなところに住んでいるので、今日は僕が仕事で大阪に出ていることもあって、大阪で飲もう、ということだけ決まっていた状態でした。
その後、Sからの連絡で「18時に梅田で」ということに。

「で、梅田のどこで待ち合わせだよ(笑)」と思ったけど、まあみんないい加減なので、そのうち会えるだろうとか適当な感じで仕事を終えて、17時頃には梅田に着いていました。

待ち合わせ時間まで、ヘップファイブのスターバックスで時間を潰していたら、Uからメールが。
曰く「待ち合わせ場所が曖昧なので、鬼ごっこ形式で集合しよう」とのこと。

こういう馬鹿っぽいことばっかりやってた10年前を思い出して、思わずニヤニヤしつつ同意。
ルールは以下の通り。

  • 鬼は、待ち合わせ場所を「梅田」なんていう広い範囲に指定してしまった責任を負ってSがやる
  • Sに見つかる前に、僕とUが合流できたら鬼の負け
  • 僕とUが合流する前に、どちらかがSに見つかってしまったら鬼の勝ち
  • 僕とUとの連絡は全てケータイのメールで行ない、そのメールは常に鬼のSにも同時に送ること
  • 1メールにつき、自分の居場所に関するヒントは1つのみ

こんな感じで、飲み代をかけて30歳前後のおっさんが三人、梅田で鬼ごっこを開始。

僕とUの双方が常に移動していると、メールでのヒントも曖昧になって合流が難しそうだったので、Uをうまく僕のいるヘップファイブのスターバックスに誘導する作戦でいくことにしました。

Uはうまく僕の居場所を察してくれましたが、お互いにヒントを出しすぎて、Uが鬼のSにヘップファイブに入ってすぐに見つかってしまい、ゲームオーバー。
残念ながら負けてしまいました。

けど、これはなかなか面白い遊びでしたね。30代前後のおっさんがやることか、というのはありますが(笑)。
ケータイメールというツールが、完全に定着したからこそできる遊びですね。
10年前、彼らとよくツルんでいた頃は、携帯電話は持っていたけど、まだメール機能は一般的じゃなかった気がします。
その代わり、ポケベルがあったかな?

そう考えると、この10年の技術の進歩はやっぱり凄まじいなぁと思いますね。
今だったら、ケータイのGPS機能とかを使って、さらにもっと面白い遊びもできそうな気もします。

何か考えてみようかな?

ブックマークに追加する
関連するブログ記事
カテゴリー
ゲーム
タグ
ケータイメール | モバイル | 鬼ごっこ

コメント(0) | トラックバック(0)

 

リモートホスト/IPアドレスでのアクセス制限

忙しいので今回も旧サイトからの転載です。すんません。


ちょうど良い機会なので(謎)。.htaccessシリーズ第二弾。

.htaccessに下記のように記述することで、特定のホスト及びIPアドレスに対してアクセス制限をかけることができます。

order allow,deny
allow from all
deny from aaa.bbb.ne.jp
deny from ccc.ddd.co.jp

これでaaa.bbb.ne.jpccc.ddd.co.jpというホストからのアクセスを制限することができます。
allow: アクセスを許可するホスト/IP
deny: アクセスを拒否するホスト/IP
です。
上記の場合は、「基本的に全部のアクセスを許可するけどaaa.bbb.ne.jpccc.ddd.co.jpからはアクセスしちゃ駄目」という意味になります。

逆に、特定のホスト/IPからのみアクセスを許可したい場合は、

order deny,allow
deny from all
allow from aaa.bbb.ne.jp

となります。
これは、「基本的に全部のアクセスを拒否するけどaaa.bbb.ne.jpからはアクセスしてOK」という意味になります。
自分専用のWebアプリケーションの管理ツール等を設置するディレクトリに設定しておくと良いですね。
もちろん、外出先等からその管理ツールにアクセスできなくなるという難点もあります。
他には、携帯専用サイトでDoCoMoやau、vodafoneのホストからのみ受け付けるよう設定する、とか。

allow及びdenyに指定できるホスト名は、後方一致でワイルドカード的に指定することができます。
aaa1.bbb.ne.jpやaaa2.bbb.ne.jp、aaa3.bbb.ne.jp等を一括でアクセス制限したい場合は

order allow,deny
allow from all
deny from .bbb.ne.jp

とすれば、ホストの末尾が.bbb.ne.jpからのアクセスを全て拒否できます。
ただし、この使い方は無関係な人までアクセス拒否してしまう可能性が非常に高いので、設定する場合はその辺を考慮に入れる必要があります。

allow及びdenyには、ホスト名だけでなくIPアドレスも指定できます。
IPアドレスをワイルドカード的に指定する場合は前方一致です。また、サブネットマスクによる範囲指定も可能です。

order allow,deny
allow from all
deny from 192.168.0.1
deny from 192.168.1.
deny from 192.168.2.0/255.255.255.0
deny from 192.168.3.0/16

こんな感じで。

「アクセス制限をかける」という行為自体が私はあまり好きではないのですが、誰でもデータベース内の情報を編集できる、所謂wikiのような「性善説系」サイトを長年やってると、やはり必要悪だなと特に改めて思わされますね。

ブックマークに追加する
関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | アクセス制限

コメント(0) | トラックバック(0)

 

同人ゲーム『ひぐらしのなく頃に』が実写映画化だってさ

ひぐらしのなく頃に』がとうとう実写映画化までされちゃうらしい。
どこまでメディアミックスする気だー。凄いなぁ。

僕自身は、もともとたった2時間程度の尺で無理矢理に起承転結をつける、映画という媒体自体にあまり魅力を感じない上に、原作つきの実写の邦画という時点で魅力は地に落ちた感じなので、よっぽどのことがない限り見たいとは思わないですが、素人が作り上げた作品が世に受け入れられて、ここまで様々な媒体で発表される、という事実には、本当に心の底から凄いと思える。

次はTVドラマかな?

ブックマークに追加する
関連するブログ記事
カテゴリー
ゲーム
タグ
07th Expansion | ひぐらしのなく頃に | 映画 | 竜騎士07

コメント(0) | トラックバック(0)

 

「アインシュタインLOVE」展を見に、大丸ミュージアム・梅田に行ってきました

昨日、実家の両親が頂いたお中元のお裾分けに送ってもらったビール券のお礼で、母にメールを送ったら、会話の流れで「梅田の大丸でやってるアインシュタイン展が良かったよー」なんて話になった。

僕はどっちかと言うと文系人間なので、相対性理論とかその辺正直よくわからないんですが、最近天文学の初歩とかに興味があった関係で、興味のアンテナは立ってた。

なのですぐに調べてみると、なんと今日で大丸ミュージアム・梅田でやってる「アインシュタインLOVE」展は終わりらしい。
ちょうど日曜日だし、行ってみるかー。という感じで、今日行ってきました。

っていうか、梅田の大丸に大丸ミュージアムなんていう展示場があること自体知らなかったですよ。

大丸の地下二階から、大丸ミュージアムのある15階まで延々エスカレーターで上っていったんですが、エスカレーターの途中で毎階壁に貼られたチラシにアインシュタインの名言がでかでかと書かれてて(しかもパターンが結構多い)、なんかそれ見てるだけでも結構楽しめました。

「アインシュタインLOVE」の「LOVE」ってどういうことよ?とか思いながら会場についたら、最終日ということもあってか、意外と混んでました。
正直、デパートの中のしょぼい展示場だろうから、ガラガラかなー、とも思ってたんですが。すいません。

展示は大きく分けて4つのブロックになってて、

  1. アインシュタインの見た「ニッポン」
  2. ありのままのアインシュタイン
  3. 科学者アインシュタイン
  4. "?"から"!"への科学体験ワールド

というタイトルがつけられてました。

最初の『アインシュタインの見た「ニッポン」』は、大正11年にアインシュタインが来日した際のことを詳細な資料と共に展示してありました。

正直、恥ずかしながらアインシュタインが来日していたことすら知らなかった僕ですが、アインシュタインが、今僕の住んでいる神戸から入国し、僕の実家のある奈良にも行って東大寺でお辞儀する鹿にお辞儀し返している写真とかを見ただけでめちゃくちゃ親近感が沸きましたですよ。単純ですね。

その後の展示の「ありのままのアインシュタイン」「科学者アインシュタイン」共に、アインシュタインという「人」に非常にフォーカスを当てた展示となっていました。

20世紀最大の天才物理学者と言われる人が、どんな人生を送っていたのか、というのはとても興味深かったし、あの有名な、舌をペロっと出した写真にも見られる、人柄の良さというか人間臭さというか、そういうものを感じられて面白かったです。

ただ、「相対性理論」なんかの、物理学の素人にはよく意味のわからないものを、わかりやすく説明してくれているような展示を期待していたんですが、そういった部分は最後の「"?"から"!"への科学体験ワールド」だけで、そこもあまり力を入れた展示ではない感じだったのが、少々残念でした。

まあ、あくまで「アインシュタインLOVE」という名前通り、アインシュタインという「人」がメインの展示なので、期待するところが間違っていたな、ということですね。

けど、物理学とかその辺にも興味を持てたので、よい経験になりました。

ブックマークに追加する
関連するブログ記事
カテゴリー
博物館巡り
タグ
アインシュタイン | 偉人 | 博物館 | 大丸ミュージアム・梅田 | 物理学 | 相対性理論

コメント(0) | トラックバック(0)

 

perlでPostgreSQL

2007年8月11日 23:59 perlでPostgreSQL

今回も旧サイトからネタを引っ張ってきました。すんません。

PostgreSQL関連は早めに転載しとかないと、色々と困るので......。


DBIモジュールを使用する

perlにはデータベースを操作するためのモジュール「DBI」が用意されている。
Windows用のActivePerlを使う場合は、2003年3月現在は別途DBIモジュールをインストールしないといけない。
詳しいやり方は忘れた。DOS窓からppmコマンドで色々やったらインストールできたはず。

とりあえず、

#-- DBIモジュールの使用を宣言
use DBI;

データベースに接続

DBIモジュールを使ってPostgreSQLデータベースに接続するには、connect ステートメントを使用する。
「Amethyst」という名前のデータベースに、アカウント名「amethyst」パスワード「abcdefg」で接続する場合、下記のようにする。

#-- データベースに接続
$DB = DBI->connect("DBI:Pg:dbname=Amethyst","amethyst","abcdefg");

一つのプログラムで何度もデータベースに対してSQL文を発行する場合は、 その都度connectしたりせずにプログラムの最初に connect して、全ての処理が終わったら disconnect した方が良いらしい。


データの編集

データベース内のデータの編集関連のSQL文(insert,update,delete)の使用例。

#-- insert文の使用例
#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("insert into $table_name (ID,Name) values ($id,$name)");
#-- SQL文を実行
$RESULT = $SQLstat->execute;
#-- 実行したSQL文を破棄
$SQLstat->finish;

#-- update文の使用例
#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("update $table_name set Name='$name' where ID = '$id'");
#-- SQL文を実行
$RESULT = $SQLstat->execute;
#-- 実行したSQL文を破棄
$SQLstat->finish;

#-- delete文の使用例
#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("delete from $table_name where ID = '$id'");
#-- SQL文を実行
$RESULT = $SQLstat->execute;
#-- 実行したSQL文を破棄
$SQLstat->finish;

SQL文内に変数を用いる場合も、数値以外はシングルクォーテーション「'」で括ること。

各SQL文を execute すると、結果が変数 $RESULT に代入される。
$RESULT に代入される値はSQL文実行によって変更のあった列数なので、処理実行後 $RESULT の値を調べることで、エラーチェックができる。

#-- エラーチェック
if($RESULT < 1){die print 'データの編集に失敗しました';}

データの検索

データベース内のデータの検索のためのSQL文(select)の使用例。

#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("select * from $table_name where Name like '%$name%'");
#-- SQL文を実行
$SQLstat->execute;
#-- マッチした件数を取得
$match = $SQLstat->rows;
print qq|$match 件 マッチしました。\n\n|;
#-- マッチしたデータを配列 @DATA に順番に格納
while(@DATA = $SQLstat->fetchrow_array){
	($ID,$NAME,$PASS,$MAIL,$BIRTH) = @DATA;
	print qq|ID: $ID\n|;
	print qq|Name: $NAME\n|;
	print qq|Password: $PASS\n|;
	print qq|Email: $MAIL\n|;
	print qq|Birthday: $BIRTH\n|;
	print qq|\n|;
}
#-- 実行したSQL文を破棄
$SQLstat->finish;

rows は、execute したSQL文にマッチした列数を返す。
fetchrow_array は、実行されるたびに、execute したSQL文で取り出した列を順番に一行ずつ配列として返す。


プレースホルダ

下記のように、ループの中で何度も似たようなSQL文を prepare して execute して finish するのは非効率的らしい。

foreach $ID (keys(%NAME)){
	$SQLstat = $DB->prepare("update $table_name set Name='$NAME{'$ID'}' where ID = $ID");
	$RESULT = $SQLstat->execute;
	$SQLstat->finish;
	if($RESULT < 1){die print qq|ID: $ID, Name: $NAME{'$ID'} の更新に失敗しました。\n|;}
}

こういう時は、ループの外でSQL文を prepare し、変数が入る部分には「?」を入れておく。
この「?」をプレースホルダと呼ぶらしい。

$SQLstat = $DB->prepare("update $table_name set Name=? where ID = ?");
foreach $ID (keys(%NAME)){
	$RESULT = $SQLstat->execute($NAME{'$ID'},$ID);
	if($RESULT < 1){die print qq|ID: $ID, Name: $NAME{'$ID'} の更新に失敗しました。\n|;}
}
$SQLstat->finish;

このように、execute する際にプレースホルダにバインドする順番に変数を渡してやると、意図通りに実行される。
また、execute する前に bind_param でプレースホルダにバインドする値を指定する方法もある。

$SQLstat = $DB->prepare("update $table_name set Name=? where ID = ?");
foreach $ID (keys(%NAME)){
	$SQLstat->bind_param(1,$NAME{'$ID'});
	$SQLstat->bind_param(2,$ID);
	$RESULT = $SQLstat->execute;
	if($RESULT < 1){die print qq|ID: $ID, Name: $NAME{'$ID'} の更新に失敗しました。\n|;}
}
$SQLstat->finish;

bind_param 時に渡す値は「何番目のプレースホルダなのか」という数値と、「バインドする値」の二つ。


データベースとの接続を終了する

データベースを操作する処理が終了したら、データベースとの接続を終了する。

#-- データベースとの接続を終了
$DB->disconnect;
ブックマークに追加する
関連するブログ記事
カテゴリー
PostgreSQL | perl/CGI
タグ
perl | PostgreSQL | RDBMS | SQL

コメント(0) | トラックバック(0)

 

au(EZweb)向けサイトで音声ファイルを配布する方法

Web系Tipsが旧サイトからの転載ネタばっかりなので、たまには新ネタを。

au(Ezweb)向けサイトでオリジナルの音声ファイルを配布する方法です。

1. 音声ファイルをEZムービー用の3GPP2形式(拡張子.3g2)に変換する

これは色んなソフトがありますが、au推奨はQuick Time Proのようです。

他には、Sound it!とか、QTConverterとか、色々あるみたいです。

2. 3g2ファイルをアップロード

作成した3g2ファイルをFTPでWebサーバーにアップロードします。

3. .htaccessに3g2ファイルのMIMEタイプの設定を追加する

.htaccessに以下の記述を追加します。

AddType audio/3gpp2 .3g2

音声だけでなく、動画も配布する場合は、以下も追加。

AddType video/3gpp2 .3g2

4. ダウンロードページのhtmlファイルを作成する

ダウンロードページを作ります。

音声ファイルのダウンロード用のリンクは、下記のように記述します。

<object data="http://www.abe-tatsuya.com/hyakkusenman.3g2" type="audio/3gpp2"
 copyright="no" standby="ダウンロードする">
<param name="disposition" value="devmpzz" valuetype="data" />
<param name="size" value="12345678" valuetype="data" />
<param name="title" value="思い出は百千万" valuetype="data" />
</object>
object要素
data属性には音声ファイルのURIを指定します。
type属性には、音声ファイルなら「audio/3gpp2」、動画ファイルなら「video/3gpp2」を指定します。
copyright属性には、ダウンロード配信なら「no」、ストリーミングなら「yes」を指定します。
standby属性には、画面に表示されるリンクのテキストを指定します。
param要素 (name="disposition)
value属性にデータタイプを指定します。3g2ファイルの場合は「devmpzz」を指定。
param要素 (name="size")
value属性には、音声ファイルのサイズをバイト単位で指定します。
param要素 (name="title")
value属性には、音声ファイルのタイトルを指定します。最大40バイト(全角文字で20文字ですね)らしいです。

このhtmlファイルをWebサーバーにアップロードすれば、auの3g2対応端末でアクセスすると音声ファイルがダウンロードできます。

各端末の対応状況は、au公式サイトのマルチメディアデータ対応表を参照のこと。

ブックマークに追加する
関連するブログ記事
カテゴリー
モバイル(携帯電話・ケータイ)Web
タグ
au | モバイル | 着うた

コメント(0) | トラックバック(0)

 

起業家に贈る、B'zの名曲五選

起業家っていうのは、なかなか大変な商売でして、自分のモチベーションの維持というのが結構大変です。

調子が良い時は、何も意識しなくても物凄い高モチベーションで、やる気満々なんですが、ちょっとスランプに陥って、モチベーションが下がってくると致命的です。
基本的に、起業家というのは自分の行動がそのままダイレクトに売上や収入、結果に繋がる商売ですから、これは下手をすると生死に関わる大問題です。

そういった時、人それぞれ色んな方法で自分を奮い立たせて、下がったモチベーションを再び上げていくんだと思います。
僕なんかは、自分より先を行っている人や、自分の後ろから追いかけてきている人と会って話すことで刺激を受けて、自分のモチベーションを再度アップさせることとかが多いかも。

他にも色々ありますが、「モチベーションの上がる歌詞の曲を聴いたり歌ったりする」というのも、なかなかやる気が出てくる手段です。

というわけで、実はB'zファンを17年程やっている僕が、『起業家に贈る、B'zの名曲五選』をご紹介。
どれもやる気の出てくる良い曲ばかりです。

MOVE

B'z The Mixture』・『ミエナイチカラ ~INVISIBLE ONE~』収録。

もうこれは、歌詞の最初から最後までモチベーションを上げるための歌、という感じですね。
じっくり聴いてると、今すぐ動きたくなって、いてもたってもいられなくなります。
特にサビの部分の歌詞は、ヘコんでる時には激しいボディブローになるかも。

何をびびってるの キミは今?
でかいチャンスを目の前にして
なんてことはないよね何事も
楽しい者勝ち動けや MOVE ON, MOVE ON, NOW
『MOVE』より引用

とか、ほんとにびびってる自分が馬鹿らしくなります。

曲調もアップテンポなロックで、凄く燃えてくる名曲です。

Pleasure'91、Pleasure'98

B'z The Best Treasure』・『LADY NAVIGATION』収録。

先の見えない不安な状態の時、この曲を聴くと「あー、頑張るしかないよなー」と、しみじみ思えます。
かっこいいメロディに、哀愁漂う歌詞がマッチして何とも言えない良さ。

人生一度きりなんだから、悩んでる暇があったら楽しまなきゃ損だなー、という気持ちにさせてくれる名曲です。

イエス、自分は間違ってない
この先の浮き沈みも歌えば楽し
『Pleasure'91』より引用

そうそう。浮くのも沈むのも、自分だけのための自分にしかできない、貴重な経験なわけですよ。

X

THE CIRCLE』収録。

これまためちゃくちゃかっこいい曲なんですが、詞がまた凄く良いです。
自分で選んだ起業家という道や境遇に、不安や不満を抱いたときに聴くと、自分を叱咤して燃えてきます。

突然何が起こるかわからない人生を、とことんまで味わい尽くしてやろう!という気にさせてくれますね。

さあ 目ざめるがいい 邯鄲の夢からその身を起こしなさい
波乱ぶくみの人生が望みだったんだろう 存分に楽しめよ
『X』より引用

という初っ端の歌詞が、凄くダイレクトに心に響きます。

THE RACE

Peace Of Mind』収録。

これはB'zじゃなくて、B'zのボーカルの稲葉浩志さんのソロの曲ですが。

この曲は、周りに取り残されてる感に打ちひしがれた時に聴くと、とっても心に響きます。
「あー、そういや俺はマイペースで生きたいから起業したんだった」と思い出させてくれます。

競争につかれた時には是非一度聴いてみてください。

走れよ走れ 無様に煌いて
誰にも見えないあの白いテープを切ろう見事に
『THE RACE』より引用

他人には理解されないかもしれないけど、「ここが自分のゴール」みたいなのがあって、それを達成するのが人生の意味やん? とか素で思える。

O.NO.RE

志庵』収録。

こちらも稲葉さんのソロの曲。

自分の手に負えるかどうかわからない仕事を前に、ちょっと身が竦んでいる時にはこれを聴いて、静かに燃えると良いです。
まだまだ自分の限界はこんなもんじゃないだろ、と思い込むことができます。

身のほどを知れ 力を抜け
You can't get away やりたきゃやりゃええんじゃやりゃええんじゃ
やらずに悔やむよりゃええ
『O.NO.RE』より引用

「やらずに悔やむよりやって悔やむ方が~」ってのは良く言われることですが、ほんとに正論ですよね。いい意味で。
やらずに悔やむのは、ほんとに後悔しか残りませんもんね。


あー、なんかこの記事書きながらこの5曲聴いてたら、めっちゃやる気出てきた~!

ブックマークに追加する
関連するブログ記事
カテゴリー
B'z
タグ
B'z | MOVE | O.NO.RE | Pleasure'91 | Pleasure'98 | THE RACE | X | モチベーション | 松本孝弘 | 稲葉浩志 | 起業家

コメント(0) | トラックバック(1)

 

携帯端末判別法(i-mode,J-SKY,EZweb)

なんというか、今回のは相当古い情報なんですが......最近、携帯関連の仕事も増えてきたし、古くても今でもある程度は通用するノウハウなので、一応旧サイトから転載しておきます。


単純に判別してみる

とりあえず、i-mode,J-SKY,EZwebの各UserAgentに関しては、公式サイトに詳しく載ってます。

  • i-mode(DoCoMo Net)
  • J-SKY(J-PHONE developer Program)
  • EZweb(EZwebホームページを作ろう!)

上記を踏まえた上で、凄く単純に各携帯端末を判別してみる(perlで)。

#-- i-mode
if($ENV{'HTTP_USER_AGENT'} =~ /^DoCoMo\//){$UA = 'i';}
#-- J-SKY
elsif($ENV{'HTTP_USER_AGENT'} =~ /^J-PHONE\//){$UA = 'j';}
#-- EZweb
elsif($ENV{'HTTP_USER_AGENT'} =~ /^UP\.Browser\//){$UA = 'e';}
#-- EZweb(WAP2.0対応機)
elsif($ENV{'HTTP_USER_AGENT'} =~ /^KDDI-/){$UA = 'e2';}
#-- その他
else{$UA = 'other';}

実際には、EZwebのWAP2.0非対応機でもEZサーバーがc-html・xhtml・htmlもhdmlに変換して端末へ情報を送ってくれるので、 今後のことを考えれば、携帯端末用コンテンツはEZwebのHTMLコンテンツ変換仕様を考慮した上で、 i-modeやJ-SKY独自の属性を取り込みつつxhtmlで記述するのが一番楽ちんだと思う。

各社のhtml,xhtml等の対応状況とか独自属性とかは下記公式サイト参照。

  • i-mode(DoCoMo Net)
  • J-SKY(J-PHONE developer Program)
  • EZweb(EZwebホームページを作ろう!)
ブックマークに追加する
関連するブログ記事
カテゴリー
モバイル(携帯電話・ケータイ)Web
タグ
au | DoCoMo | perl | User-Agent | ソフトバンク | モバイル | 環境変数

コメント(0) | トラックバック(0)

 

PostgreSQLの初歩

2007年8月 7日 23:59 PostgreSQLの初歩

毎度毎度、旧サイトからの転載で申し訳ないんですが……。
ちょうど今日客先でWebアプリ構築の仕事をやっていて、単純なSQL文すら忘れていることに愕然としたんですよ。

最近、PostgreSQLを全然触ってなかったからなぁ……。
こんな程度を忘れるのはさすがに自分でも酷いと思うけど。

結局、客先でWayBack Machineから自分の旧サイトをひっぱり出して、これを調べる始末。

なので次に同じことが起きたときのために、今のうちにこっちに移しておきます。

というわけで、以下は旧サイトからの転載です。


データベースを作る

シェル上で createdb コマンドを実行。

% createdb Amethyst	# "Amethyst"はデータベース名
CREATE DATABASE	# レスポンス

これでデータベース作成完了。
レンタルサーバーなんかだと、最初から自分のアカウント名のデータベースを用意してくれてることが多いみたい。
そういうところは大抵自分で新たにデータベースを作成することはできないと思う。
そんな場合はデータベース作成は飛ばして次へ。


psqlの起動

シェル上で psql コマンドを実行する。引数としてデータベース名を指定。
この際、引数を指定しない場合は自動的に自分のアカウント名が引数にセットされる。

% psql Amethyst
# 以下、レスポンス
Welcome to psql, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit
# ここまで
Amethyst=>

psqlを起動すると、プロンプトは「データベース名=>」になる。
この際、設定によってはユーザー名やパスワードを要求されることもある。

psql起動中は、SQL文の他に「internal slash commands」(個人的に「\コマンド」と呼んでる)とやらが使える。
個人的によく使うのは以下。

  • \q psqlの終了
  • \d データベース内のテーブルを一覧表示
  • \h SQL文のヘルプを表示
  • \? \コマンドの一覧表示

テーブルの作成

テーブルの作成は
「create table テーブル名 ( フィールド(列)名 データ型 オプション , フィールド名 データ型 オプション , ……);」
というSQL文で行う。
create table に限らず全てのSQL文のラストには、セミコロン「;」をつけなければならない。
逆に言うと、セミコロンをつけるまで、一つのSQL文を何行にも渡って記述することも可能。
というか、そうしないとやってられない。

ID,Name,Password,Email という四つのフィールド持つ UserList というテーブルを作るには下記のようにする。

Amethyst=> create table UserList (
# 以下、括弧内の部分を記述しているということが一目でわかるよう
# プロンプトが「(>」に変わるところが便利
Amethyst(> ID text PRIMARY KEY,
Amethyst(> Name text NOT NULL,
Amethyst(> Password text NOT NULL,
Amethyst(> Email text
Amethyst(> );
# 以下、レスポンス
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 'userlist_pkey' for table 'userlist'
CREATE

フィールド「ID」に「PRIMARY KEY」のオプションをつけたので、自動的に「userlist_pkey」というindexが作成される。
indexが何なのか理屈はよく知らないけど、とりあえずこれでIDをキーに検索するときは効率が良くなるらしい。


データ型

個人的によく使う、フィールドのデータ型は下記。

numeric
バイト数可変の1000桁までの正数と小数。
数値を格納するフィールドはよっぽど特殊な場合以外はこれでOKだと思う。
text
バイト数可変の文字列。
上に同じく文字列を格納するフィールドはよっぽど特殊な場合以外はこれでOKだと思う。
timestamp
日付・時刻。
入力・取り出しは「2003-04-20 17:05:06」の形式が使いやすいと思う。
inet
IPアドレス。
ネットワーク系の処理のために使うのでなければtext型でも充分だけど、せっかく専用のデータ型が用意されてるので使ってるだけ……。

オプション

個人的によく使う、フィールドのオプション(という呼び方は正しくないような気もするけど)は下記。

PRIMARY KEY
ひとつのテーブルにつきひとつのフィールドにしか指定できない。
indexが作成されるので、このフィールドをキーにした検索は効率が良いらしい。
フィールドが一意で、かつ、NULLではないという条件がある。
UNIQUE
ひとつのテーブル内の複数のフィールドに指定できること以外は PRIMARY KEY と基本的に同じだと思う。
PRIMARY KEY に指定したフィールドは、自動的に UNIQUE も指定されている。
NOT NULL
NULL値を認めないフィールドに指定。
PRIMARY KEY や UNIQUE に指定したフィールドは、自動的に NOT NULL も指定されている。
DEFAULT value
新たな行が追加された時に、自動的に挿入されるデフォルト値(value)を指定できる。

フィールドの追加

既存のテーブルにフィールドを追加する時は
「alter table テーブル名 add フィールド名 データ型 オプション;」
というSQL文で行う。

先程作ったテーブル UserList に BirthDay というフィールドを追加する場合は下記のようにする。

Amethyst=> alter table UserList add BirthDay timestamp;
ALTER TABLE	# レスポンス

numeric型のフィールドを追加する時は、デフォルト値として 0 をセットしといた方が良いと思う。
そうしないと、フィールドを追加する前に存在した行の該当フィールドの値は全てNULLになるため後々不便(0 と NULL は別物なので)。
perlからデータベースを使う場合は特に。


既存フィールドのデフォルト値の設定

既存のフィールドの DEFAULT value の設定・変更は
「alter table テーブル名 alter フィールド名 set default デフォルト値;」
というSQL文で行う。

先程作ったテーブル UserList の Email フィールドにデフォルト値 anonymous を設定する場合は下記のようにする。

Amethyst=> alter table UserList alter Email set default 'anonymous';
ALTER TABLE	# レスポンス

なお、デフォルト値の設定を破棄する場合は「set default デフォルト値」の代わりに「drop default」を使う。

Amethyst=> alter table UserList alter Email drop default;
ALTER TABLE	# レスポンス
2003.04.26 追記

データの挿入

テーブルにデータを挿入するときは
「insert into テーブル名 (フィールド名1,フィールド名2,……) values (値1,値2,……);」
というSQL文で行う。

先程作ったテーブル UserList にデータを挿入する場合は下記のようにする。

Amethyst=> insert into UserList(
Amethyst(> ID,Name,Password,Email,BirthDay)
Amethyst-> values (	# SQL文の途中、かつ括弧内でない場合のプロンプトは「->」になる
Amethyst(> '00001',
Amethyst(> 'Amethyst',
Amethyst(> '01234567',
Amethyst(> 'amethyst@amethyst-web.org',
Amethyst(> '1976-05-06'
Amethyst(> );
INSERT 2910628 1	# レスポンス

値を入力するとき、数値以外はシングルクォーテーション「'」で囲むこと。


データの表示

テーブル内のデータを表示するときは
「select フィールド名1,フィールド名2,…… from テーブル名 条件 (ソート方法);」 というSQL文で行う。

先程作ったテーブル UserList から、「Emailが空でないデータのみ、NameとEmailを表示」する場合は下記のようにする。

Amethyst=> select Name,Email from UserList where Email != '';
# 以下、レスポンス
   name   |           email
----------+---------------------------
 Amethyst | amethyst@amethyst-web.org
(1 row)	# マッチした件数(行数)が表示される

全てのフィールドを表示したい時は、フィールド名をアスタリスク「*」一文字にするだけでOK。
「select * from テーブル名 条件 (ソート方法)」

where句以下の条件を指定しなければ、テーブル内のデータ全てが表示される。

特定のフィールドの値を元に昇順にソートして表示したい場合は、select文末尾に「order by フィールド名」
降順にソートして表示したい場合は「order by フィールド名 desc」


データの検索

前項の例のように、データの検索には
「where 条件」
という句をSQL文に追加して実行する。

単純にフィールドが条件と合致しているものを検索するには「where フィールド名 = 条件」。

複数の条件で検索するには「where フィールド名 in(条件1,条件2,……)」

逆に条件と合致していないものを検索するには「where フィールド名 != 条件」。

値の一部が合致しているものを検索するには「where フィールド名 like 条件」。
「%」が「0文字以上の何か」を表すので、「Aから始まる文字列」の検索は「where フィールド名 like 'A%'」という感じ。

numeric型やtimestamp型では「> < <= >=」もよく使う。

and や or を使って、複数の条件を指定するすることも可能。

別のテーブルの検索結果を条件に指定することも可能。
「where フィールド名 in (select文)」


データの更新

既存のデータの値を更新する時は
「update テーブル名 set フィールド名1=値1,フィールド名2=値2,…… 条件(where句)」
というSQL文で行う。

先程挿入したデータのPassword「01234567」を「abcdefgh」に変更する場合は下記のようにする。

Amethyst=> update UserList set Password='abcdefgh' where ID = '00001';
UPDATE 1	# レスポンス

where句以下の条件を指定せずに実行すると、テーブル内のデータ全てが更新されるので一括更新がしたいときは楽。
ただし、一括更新するつもりがない時はwhere句の指定を忘れないよう注意が必要。


データの削除

既存のテーブルからデータを削除する時は
「delete from テーブル名 条件(where句)」
というSQL文で行う。

先程挿入したデータを削除する場合は下記のようにする。

Amethyst=> delete from UserList where ID = '00001';
DELETE 1	# レスポンス

where句以下の条件を指定せずに実行するとテーブル内のデータは綺麗さっぱりなくなってしまうので要注意。


テーブルの削除

既存のテーブルそのものを削除する時は
「drop table テーブル名」
というSQL文で行う。

先程作成したテーブル UserList を削除する場合は下記のようにする。

Amethyst=> drop table UserList;
DROP TABLE	# レスポンス

前項のdelete文で全てのデータを削除してもテーブル自体は残っているので、テーブルそのものを削除する時はこちらを使う。


データベースのバックアップ

データベースのバックアップを取るときは、シェル上で pg_dump コマンドを実行。

% pg_dump Amethyst > AmethystDB.bak
# "Amethyst"はデータベース名。"AmethystDB.bak"はバックアップファイル名

これで"AmethystDB.bak"という名前のバックアップファイルが作成される。
中身はSQL文とかが沢山書かれたテキストファイル。

バックアップファイルをもとにデータベースを再作成するときは psql コマンドに -e オプションをつけて実行する。

% psql -e Amethyst < AmethystDB.bak
# "Amethyst"はデータベース名。"AmethystDB.bak"はバックアップファイル名
ブックマークに追加する
関連するブログ記事
カテゴリー
PostgreSQL
タグ
PostgreSQL | RDBMS | SQL |