2007年8月10日金曜日

Smartyのディレクトリ構成

Smartyは、以下のようなディレクトリ構成で配置する

<htdocs>
+-- <smartyapplication>
+-- <templates>
+-- <templates_c>
+-- <config>
+-- <cache>



phpをここにおく。
templateは<templates>におく。
とりあえず、今はこれだけ。
<templates_c>は、コンパイルされたファイルが置かれる。

これらのディレクトリをSmartyに教えてあげるには
smartyオブジェクトを生成後に指定すればよい。


// エンジンの指定
require_once('Smarty/Smarty.class.php');

// オブジェクトの作成
$smarty = new Smarty;

// テンプレートファイル
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';
$smarty->config_dir = './configs/';

2007年8月8日水曜日

データベース/フィールド/日付時間型


DATE
| TIME
| TIMESTAMP
| DATETIME
| YEAR


*DATE [#w9fa72d8]

mysql> create table d ( d date );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into d values('2007-08-06');
Query OK, 1 row affected (0.02 sec)

mysql> select * from d;
+------------+
| d |
+------------+
| 2007-08-06 |
+------------+
1 row in set (0.00 sec)

mysql> insert into d values(NULL);
Query OK, 1 row affected (0.03 sec)

mysql> select * from d;
+------------+
| d |
+------------+
| 2007-08-06 |
| NULL |
+------------+
2 rows in set (0.00 sec)


mysql> select * from d where d='2007-08-06';
+------------+
| d |
+------------+
| 2007-08-06 |
+------------+
1 row in set (0.00 sec)

mysql> select * from d where d='2007/08/06';
+------------+
| d |
+------------+
| 2007-08-06 |
+------------+
1 row in set (0.00 sec)

-日付の形式は「年-月-日」や「年/月/日」を使える。
-区切り文字は何でも良いようだ。(区切り文字を保存しているわけでない。あくまでも保存しているのは年月日)

mysql> insert into d values('2010@08@30');
Query OK, 1 row affected (0.03 sec)

mysql> select * from d where d = '2010|08:30';
+------------+
| d |
+------------+
| 2010-08-30 |
+------------+
1 row in set (0.00 sec)

*TIME [#tf0eeb6d]
MySQLでは、TIME型は時刻を格納するだけではなく~
時間の間隔を保存できるように-838:59:59~838:59:59の範囲の時間を保存できます。~

mysql> create table t ( t time );
Query OK, 0 rows affected (0.08 sec)

mysql> insert into t values('10:10:10');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t;
+----------+
| t |
+----------+
| 10:10:10 |
+----------+
1 row in set (0.00 sec)


mysql> insert into t values('-838:59:59');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t values('838:59:59');
Query OK, 1 row affected (0.03 sec)

mysql> select * from t;
+------------+
| t |
+------------+
| 10:10:10 |
| -838:59:59 |
| 838:59:59 |
+------------+
3 rows in set (0.01 sec)

-また、時間を日数換算で指定することもできます。但し指定できる範囲は0から33日までです。

mysql> insert into t values('15 5:30:21');
Query OK, 1 row affected (0.03 sec)

mysql> select * from t;
+------------+
| t |
+------------+
| 10:10:10 |
| -838:59:59 |
| 838:59:59 |
| 365:30:21 | ←これが15日(360時間)と5時間30分21秒
+------------+
6 rows in set (0.00 sec)

*TIMESTAMP [#xa619097]

mysql> create table ts ( i int, ts timestamp );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into ts(i) values(1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from ts;
+------+---------------------+
| i | ts |
+------+---------------------+
| 1 | 2007-08-07 16:09:02 |
+------+---------------------+
1 row in set (0.00 sec)


mysql> create table ts2 ( i int, ts1 timestamp, ts2 timestamp );
Query OK, 0 rows affected (0.08 sec)

mysql> insert into ts2(i) values(1);
Query OK, 1 row affected (0.03 sec)

mysql> select * from ts2;
+------+---------------------+---------------------+
| i | ts1 | ts2 |
+------+---------------------+---------------------+
| 1 | 2007-08-07 16:10:47 | 0000-00-00 00:00:00 |
+------+---------------------+---------------------+
1 row in set (0.00 sec)


-2つのtimestamp型が存在した場合は、1つめのフィールドだけに、挿入時、更新時にセットされます。

*DATETIME [#lde9a930]

mysql> create table dt (dt datetime );
Query OK, 0 rows affected (0.09 sec)

mysql> insert into dt values('2007-08-06 16:15:30');
Query OK, 1 row affected (0.03 sec)

mysql> select * from dt;
+---------------------+
| dt |
+---------------------+
| 2007-08-06 16:15:30 |
+---------------------+
1 row in set (0.00 sec)

*YEAR [#a5fbae73]

mysql> create table y ( y year );
Query OK, 0 rows affected (0.09 sec)

mysql> insert into y values('2007-08-30');
ERROR 1265 (01000): Data truncated for column 'y' at row 1
mysql> insert into y values('2007');
Query OK, 1 row affected (0.03 sec)

mysql> insert into y values('1968');
Query OK, 1 row affected (0.03 sec)

mysql> insert into y values('-1');
ERROR 1264 (22003): Out of range value adjusted for column 'y' at row 1
mysql> select * from y;
+------+
| y |
+------+
| 2007 |
| 1968 |
+------+
2 rows in set (0.00 sec)

2007年8月7日火曜日

dfGallery

dfGalleryというフォトスライドショーを使ってみた。
http://www.dezinerfolio.com/2007/06/07/dfgallery/
フロントエンドがFlash, バックエンドがPHPの組み合わせで、
フルスクリーンへの切り替えも可能。
なかなかスムーズでしかもフリーというのが素晴らしい。

重要な特色:
* Flickr、Picasa、Fotki、PhotobucketとCustom Imagesの両方に対応するFlash Gallery。
*「Print Screen」を利用可、不可を設定可能。
* 容易にカスタマイズ可能です。
* 完全なScreenモード。
* RSSとCustom Imagesの両方対応している。
* どんなサイズでも対応。
* バックグラウンドで流れるMP3ファイルを指定可能。
* 複数の言語サポート。
* 新しいアップデートが利用可能であるなら、通知する。
* 無料です。

フリーでこれだけできていれば感謝ですね。
ただ、下に表示されるサムネイルの画像も指定しなければならないのだけれど
勝手にリサイズしてサムネイル画像をつくってくれるとよいのだが。
噴出しに出る画像に合せるとへんな部分(左上の一部?)が表示されている。


o 試してみたフォトスライドショー
+ http://www.iplusone.sakura.ne.jp/photo/dfgallery/

2007年8月5日日曜日

JavaScript

Ajaxのライブラリを調べているうちに、JavaScriptの復習をしておこう。と思った。

JavaScriptが出てきたときは、Webでは使い物にならない言語と酷評されるように
なってしまった。これは言語自体の問題ではなく、時代背景や、その使い方、使われ方に問題があったわけだ。
今では、当たり前のようにライブラリが出回り、ほとんどのサイトでは
JavaScriptがオンでないと使えないという具合に時代は変わったのです。

JavaScript †

* ジャバスクリプト、ジャヴァスクリプト、略称:JS
* スクリプト言語
* 主にWebブラウザ上で動作する。
* HTMLの動的書き換えや入力フォームの自動補完など、Webページの使用感向上を目的として使用されたり、リッチクライアントアプリケーションの構築に使われる。

よくJavaとJavaScriptは同じなの?と聞かれるが
ネーミングが似ているだけである。
これは、wikipediaにも書いてあるが、誕生したとき

* JavaScriptはネットスケープコミュニケーションズのBrendan Eichによって開発され、Netscape Navigator 2.0 で実装された。
* 開発当初は「LiveScript」と呼ばれていた

そうなんだ。最初からJavaScriptではなかった。

* 1995年にSun Microsystems社の開発したプログラミング言語「Java」が当時大きな注目を浴びており、これに便乗したネットスケープ社のマーケティング的な思惑が働き「JavaScript」という名前に変更されたといわれている。

そういうこと。

* 1996年にマイクロソフトのInternet Explorer3.0に搭載される
* その手軽さからJavaScriptは急速に普及していく。

ここから、ザラウザ非互換性の時代がやってくる。独自の拡張が行われ、
同じ記述でも、ブラウザによって表示が変わってしまうなんてことが
当たり前の時代でした。そこで、ブラウザに何が使われているかを判定して
それぞれの記述を書くなんてことをやっていました。

あと、Visual Basicのときにもあったが、敷居が低いので、精通していない開発者が
増えすぎたというのも問題でした。

面白いライブラリを利用してみました。
http://www.iplusone.sakura.ne.jp/SKILLUP/JavaScript/rintaro.html

2007年8月4日土曜日

Ajax

Ajaxは「Asynchronous(エイシンクロナス) JavaScript + XML」の略で、
スクリプト言語のJavaScriptやWeb記述言語のXMLといった技術を
組み合わせて開発する手法を指す。

Ajaxという技術があるのではなく、
動的にWebの表示を変化させるDynamic HTML(JavaScript? + CSS)と、
表示内容を適宜サーバから通信を介して取得するXMLHttpRequest?という、
従来からある標準的な技術を組み合わせで、
より効果的な利用方法を提唱したものを指している。

この技術に対し、米国のJesse James Garrett氏が2005年2月に
「Ajax: A New Approach to Web Applications」というコラム内で、
「Ajax」という分かりやすい名前を付けたことで、この言葉が世界中に広がった。


HTTPのリクエスト&レスポンスという枠を超えて、
インタラクティブな処理を取り入れたり、
スタンドアロンアプリケーションを開発しているかのような感覚になります。

ユーザーインターフェース+非同期通信

従来のWebアプリケーションは、サーバへリクエストを送信した後、レスポンスを新たにWebページとして受け取り、画面遷移が発生していた。
しかし、Ajaxは画面遷移を伴わない動的なWebアプリケーションの製作が実現可能になる。
例えばWeb検索に応用することで、従来は入力確定後にボタンをクリックしてから行っていた検索を、
ユーザがキー入力をする間に(入力されるたびに)非同期でバックグラウンドで行うことで
リアルタイムに検索結果を表示していくといったことが可能になる。


既存技術の組み合わせ

Webブラウザのみで動作する、既存の技術の組み合わせであることが特徴。
基本的な仕組みはJavaScriptだけでかけるので、ブラウザ側が処理を行う。
GoogleがGoogle マップやGoogle サジェストにこの技術を利用したことで有名になり、
Webアプリケーションの可能性を広げた。
Ajaxの実用性がGoogleのWebアプリケーションを通じて世間に認知されはじめ、
今では、業務システムにまで取り入れられようとしている。

2007年8月1日水曜日

各ユーザ別にWebページを公開する場合の設定

httpサーバにはapacheを使っています。
通常はhttpd.confの中でDocumentRootで指定したディレクトリにドキュメント(HTMLファイル等)を配置します。

http://ドメイン名/index.html

のURLの場合、index.htmlは、このDocumentRootで指定したディレクトリにあるindex.htmlのことです。

このほかに、登録ユーザごとに、独立したDocumentRootを指定することも可能です。

Fedora7では、httpd.confは、以下の場所にあります。

/etc/httpd/conf/httpd.conf


httpd.confファイルの場所はディストリビューションやインストール方法によって異なります。

/etc/httpd/conf/      : Fedora CoreなどRed Hat系
/etc/apache2/        : SUSE系
/usr/local/apache2/conf/ : ソースからインストールした場合

などに配置されています。



これを開いて、
ユーザごとのディレクトリを利用する指定と
そのディレクトリ名を指定します。
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
#UserDir disable <---コメントにする

#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
#
UserDir public_html <--コメントをはずす

</IfModule>
と編集します。

また、以下の範囲の Directoryセクションのコメントをはずして、AllowOverride, Optionsは以下のように変更します。


<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
AllowOverride FileInfo None
Options SymLinksIfOwnerMatch
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>


各ユーザごとに、以下の処理を行います。

・homeディレクトリにpublic_htmlディレクトリを作成する。
・public_htmlディレクトリに読み込み権限、実行権限を付与します。
・ホームディレクトリは実行権限を付与します。
・SELinuxの制限を解除するために、ラベルを変更します。

/home/ishii を例書くと、以下のようになります。


[ishii@fedora7 ~]$ pwd
/home/ishii
[ishii@fedora7 ~]$ mkdir public_html
[ishii@fedora7 ~]$ chmod o+rw public_html/
[ishii@fedora7 ~]$ chmod o+x ./
[ishii@fedora7 ~]$ /sbin/restorecon -R public_html/

データベース/フィールド/任意精度型

浮動小数点よりも正確な値が必要な場合、非常に大きい値、または非常に小さい値を扱う場合、任意精度型を利用します。


DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
| NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]

* DECIMALもNUMERICも同じです。
* (a)整数部100桁の精度ももつフィールド







CREATE TABLE t1 (d NUMERIC(100));


* (b) (a)をDECIMALで書く







CREATE TABLE t2 (d DECIMAL(100));


* 全体の精度が100桁で、少数桁が10桁であるNUMERIC型







CREATE TABLE t3 (d DECIMAL(110, 10));


* MySQLでは指定した桁数より1桁多い情報を保持する
o NUMBER(5,2)の場合、全体の桁数を6桁、少数桁を2桁で格納できる
* 指定した少数桁よりも小さい値を格納した場合、1桁小さい桁で四捨五入される。
* 最大値や最小値から溢れる値を格納しようとした場合、PostgreSQLはエラーにあんるが MySQLは、エラーにならず、最大値(または最小値)で格納される。

データベース/フィールド/浮動小数点数型


REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
| FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
| NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]


MySQLでは、REAL, FLOAT, DOUBLE, DOUBLE PRECISIONは、どれも8バイトで
扱える範囲は、-1e+308~+1e+308です。
UNSIGNEDは符号なし、ZEROFILLは頭を0で埋めます。


mysql> create table d (
-> r real,
-> dp double precision,
-> f8 float8,
-> d double );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into d(r) value(-1e+308);
Query OK, 1 row affected (0.05 sec)

mysql> insert into d(r) value(+1e+308);
Query OK, 1 row affected (0.03 sec)

mysql> insert into d(dp) value(-1e+308);
Query OK, 1 row affected (0.02 sec)

mysql> insert into d(dp) value(+1e+308);
Query OK, 1 row affected (0.03 sec)

mysql> insert into d(f8) value(-1e+308);
Query OK, 1 row affected (0.02 sec)

mysql> insert into d(f8) value(+1e+308);
Query OK, 1 row affected (0.02 sec)

mysql> insert into d(d) value(-1e+308);
Query OK, 1 row affected (0.02 sec)

mysql> insert into d(d) value(+1e+308);
Query OK, 1 row affected (0.02 sec)

2007年7月31日火曜日

セキュリティ強化でWebアプリが動かない

IE7のセキュリティ強化によってIE6で使っていたWebアプリケーションが使えなくなるトラブルを招く可能性がある。

セキュリティ強化でWebアプリが動かない

Smartyのキャッシュを使って負荷を下げよう

【PHP TIPS】 47. Smartyのキャッシュを使って負荷を下げよう

いま知るべきRubyCocoa - Mac OS X Leopard最新情報

オブジェクト指向スクリプト言語Rubyとその周辺では、 Ruby on Rails や JRuby 、 IronRuby などホットな話題が続いています。そんな中、RubyCocoaプロジェクトでは、10月にリリース予定のMac OS X Leopard(RubyCocoa標準搭載)に向けて、オープンソースソフトウェアRubyCocoa 1.0の開発を進めています。

いま知るべきRubyCocoa - Mac OS X Leopard最新情報

Web関連ニュース

消えてしまったWebページを閲覧する

Webマスターが変える 企業サイトの「秘力」:

Webサイト更新に6割強の企業がアウトソーシングを利用

米ヤフーが無償分析ツールとアドバイス集を提供開始 
Webページを軽くする13の改善ポイント


Web経由の攻撃が激増、問題サイトの8割はハッキングで被害に

第2回 Amazon WebAPIを使ってみる

グレープシティ、Ajaxを強化した「SPREAD for .NET 3.0J Web Forms Ed.」

最小構成で6227万円

日本IBMがPOWER6搭載の「System i」新製品、「MySQL」への対応も打ち出す

MySQLをSystem iの専用OS「i5/OS」に対応させたと。
IBMといえば、DB2なのだが、これは驚きだ。しかも将来的には
DB2とMySQLの連携を計画していると。

最小構成で6227万円

しかし、最小構成で6227万円もするシステムで、
オープンソースが利用したいという声に応えて・・・ん~素晴らしい

MySQL文字コード

文字コードの違いによる弊害は,文字化けという表示の問題だけではない。データベースは,データの蓄積と提供が重要な役割である。大量のデータを提供する際には,並べ替えが必要になる。実は,文字データの場合,文字コードによって,並びが変化することをご存知だろうか。今回は,ソート処理と文字列の関係を解説する。

【MySQLウォッチ】第37回 文字コードに起因する問題は文字化けだけじゃない,ソート順とcollationの関係

PHP版Ruby on Rails? - DB操作クラスを自動生成する"PHP Object Generator"

PHPのソースコードを自動生成するWebアプリケーションであるPHP Object Generatorの最新版「PHP Object Generator (以下、POG)3.0」が26日(米国時間)、公開された。

PHP版Ruby on Rails? - DB操作クラスを自動生成する"PHP Object Generator"

Googleカレンダーをテレビ番組表に

Googleのカレンダー・サービスを使ってマッシュアップ・サイトを作ります。テレビ番組サイトが配信しているRSSデータを取得して,Ruby on Railsでカレンダーのフォーマットに変換します。それをGoogleカレンダーに取り込んで,オリジナルの番組表を作ってみましょう。

Googleカレンダーをテレビ番組表に

Ruby普及を支援する「Rubyアソシエーション」設立

プログラミング言語「Ruby」の開発者まつもとゆきひろ氏とネットワーク応用通信研究所(NaCl、本社:松江市)は、Rubyの普及支援を目的とする「Ruby アソシエーション」を2007年7月27日付で設立した。"日本版LLC"である合同会社として設立したもの。 RubyとRuby on Rails ...
Ruby普及を支援する「Rubyアソシエーション」設立

ImageMagick

PHPのライブラリでImageMagickという画像処理ライブラリが存在する。
【PHP TIPS】 48. ImageMagickで簡単に画像処理

2007年7月30日月曜日

POST

Webシステムを開発する場合、どんな言語を使おうが
ベースはHTTPプロトコルである。

POST/GETは理解できているかな?
このPOSTデータを言語からどう利用するか?

PHPなら、$_POST["変数名"]だ。以前は、直接変数名でも参照できたが
セキュリティ上それは不可能になった。

2007年7月29日日曜日

データベース/フィールド/整数型/AUTO_INCREMENT

MySqlでは整数型のフィールドにAUTO_INCREMENTをつけると、1から自動で番号を振ります。


mysql> CREATE TABLE `user` (
-> `ID` int(11) AUTO_INCREMENT,
-> `MAIL_ADDR` varchar(50) default NULL,
-> `NICKNAME` varchar(50) default NULL,
-> `NAME1` varchar(50) default NULL,
-> `NAME2` varchar(50) default NULL,
-> `password` varchar(50) default NULL,
-> KEY `index_USER` (`ID`)
-> ) ;
Query OK, 0 rows affected (0.06 sec)

mysql> describe user;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| ID | int(11) | NO | MUL | NULL | auto_increment |
| MAIL_ADDR | varchar(50) | YES | | NULL | |
| NICKNAME | varchar(50) | YES | | NULL | |
| NAME1 | varchar(50) | YES | | NULL | |
| NAME2 | varchar(50) | YES | | NULL | |
| password | varchar(50) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
6 rows in set (0.03 sec)

2007年7月28日土曜日

データベース/フィールド/整数型/UNSIGNED

mysql> create table t3 ( i integer unsigned);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into t3 values(-1);
ERROR 1264 (22003): Out of range value adjusted for column 'i' at row 1
mysql>
mysql> describe t3;

+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| i | int(10) unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+

1 row in set (0.01 sec)

Typeのところでint(10)となっているが、この10は10バイトという意味ではない。表示幅が10桁という意味です。

mysql> create table t ( i integer);
Query OK, 0 rows affected (0.07 sec)

mysql> describe t;

+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+

1 row in set (0.03 sec)

signedで作成した場合は、11桁になります。-2147483648でマイナス符号の分が考慮されています。


絶対にマイナスにならない値を保持するような場合には、
例えば年齢とか、なんかの点数など
UNSIGNEDにして、利用できる値を大きくする、もしくは利用する領域を減らす
ということに対応できます。

データベース/フィールド/整数型

* MySQLもPostgreSQLも、多くのデータ型をもつ。
* どんなデータ型が存在するのか、どういう指定ができるかを整理しておく必要がある。
* 別名なども利用できるが、基本型が何で、別名がどれなのか。
* どれとどれが同意であるのかも把握しておく必要がある。


データ型 サイズ 最小値 最大値
TINYINT  1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807


基本型の別名が用意されている。


型名 データサイズ 備考
INT2 2 SMALLINTの別名
INT 4 INTEGERの別名
INT4 4 INTEGERの別名
INT8 8 BIGINTの別名


UNSIGNEDの場合 †

負の値が絶対に有り得ないフィールドの場合は、MySQLではUNSGINEDを検討してもよい。
その分、正の数の範囲が倍近く多くなる。

型名 データサイズ 最小値 最大値
TINYINT UNSIGNED 1 0 255
SMALLINT UNSIGNED 2 0 65535
MEDIUMINT UNSIGNED 3 0 16777215
INT UNSIGNED 4 0 4294967295
BIGINT UNSIGNED 8 0 18446744073709551615


TINYINTを例に、実際にテーブルを作り、インサートしてみる。

mysql> create table t2 (a tinyint);
Query OK, 0 rows affected (0.08 sec)

mysql> describe t2;

+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| a | tinyint(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+

1 row in set (0.02 sec)

mysql> insert into t2 values(-129);
ERROR 1264 (22003): Out of range value adjusted for column 'a' at row 1
mysql> insert into t2 values(-128);
Query OK, 1 row affected (0.03 sec)

mysql> insert into t2 values(128);
ERROR 1264 (22003): Out of range value adjusted for column 'a' at row 1
mysql> insert into t2 values(127);
Query OK, 1 row affected (0.03 sec)

符号ありであれば、-128から127までの値はセット可能。
MySQL4.xの頃は、警告だけで登録はできていたはずだが、5.0からはエラーとなり登録できない。

データベース/フィールド/ビット型

mysql> CREATE TABLE t (b BIT(8));
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO t SET b = b'11111111';
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO t SET b = b'1010';
Query OK, 1 row affected (0.01 sec)

mysql> select * from t;
+------+
| b |
+------+
|  |
|
|
+------+
2 rows in set (0.00 sec)

表示はさすがに化けます。何かちゃんと出力する方法があるのだろうか?

ビットフィールドを扱えるというのは、非常に便利だ。
例えば、ひとつのフィールドごとに、何かの有無を表現するテーブルを作成する場合

自転車の有無
自動車の有無
家の有無

などそれぞれ1で、整数のフィールドを持つのは無駄である。
それぞれ、ビットフィールドにするのでもよいが、

それこそ3ビットのフィールド1つにすることも可能である。

C言語のプログラムではないのでここまでやる必要もないが。
メモリ使用量は減るが、その分、ロジック側で考える部分もでてくるので
利用する場合は、ある程度の指針をもって使いべきである。

データベース/フィールド

テーブルの論理設計の段階では、整数、文字列などのレベルでもよいが、
物理設計レベルで、具体的にどのデータ型にすればよいのかはすこし悩む。
MySQLもPostgreSQLも、多くのデータ型をもつので、まずはどんなデータ型が存在するのか、
どういう指定ができるかを整理しておく必要がある。
別名なども利用できるが、基本型が何で、別名がどれなのか、
どれとどれが同意であるのかも把握しておく必要がある。

環境

Linux/Fedora7
System Linux fedora7.localdomain 2.6.21-1.3194.fc7 #1 SMP Wed May 23 22:35:01 EDT 2007 i686 Build Date May 8 2007 08:15:45

Apache
[root@fedora7 ~]# httpd -v
Server version: Apache/2.2.4 (Unix)
Server built: May 9 2007 06:26:12

MySQL
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.37 Source distribution

PHP
PHP Version 5.2.2

2007年7月27日金曜日

LAMP類似用語

LAMPは、1998年、ドイツのコンピュータ雑誌C'tでM. Kunzeという人が提唱したのが始まりだそうだ。で、そのLAMPの構成をすこし変えたものの類似用語というのがWikipediaにのっていた。
やはりWindowsの場合は、WAMPだった。

























AMP LAMPからLinuxを除いたもの
LAPP LAMPのMySQLの代わりにPostgreSQLのもの
FLAP LAMPのMySQLの代わりにFirebirdのもの
WAMP LAMPのLinuxの代わりにMicrosoft Windowsのもの
MAMP LAMPのLinuxの代わりにMacintoshのもの
SAMP LAMPのLinuxの代わりにSolarisのもの

PHP4サポート終了時期決定

PHP 4 end of life announcement


・PHP5がリリースされてから既に3年がたった。
・PHP4には多くの改良が行われてきた。
・PHP5は速く、安定していて、PHP6の生産準備もできているので、PHP4は製造中止になるでしょう。

・PHP開発チームは、PHP4のサポートは今年いっぱいで終わると発表した。
・2007年12月31日以降、PHP4.4のリリースはない。
・セキュリティに関する改善はケースバイケースで2008年8月8日までフィックスし続けるつもりだ。
・アプリケーションをPHP5へ対応してください。
・PHP4からPHP5への移植に関するドキュメンテーションとして、移植ガイドを提供する。
・移植に関するPHP5.0からPHP5.1、PHP5.1からPHP5.2で利用可能な追加情報があります。

2007年7月22日日曜日

WindowsへのLAMP環境構築

WindowsでApache, MySQL, PHPの環境を作ることもできる。この場合はLinuxではなく
Windowsなので、WAMPか。

LAMP環境の構築

まずは、環境をつくる話から。

Linuxが登場して、すでに20年近くたとうとしている。Linuxのディストリビューションも沢山出てきて、インストールは楽チン、デスクトップとしても十二分に利用できるくらいにアプリが豊富で、日本語利用も問題なし。ちなみにLinuxという場合には、Linuxカーネルの部分を指して、ディストリビューションは、Linuxカーネルと一緒にインストーラーやサーバやアプリケーションのパッケージをまとめて提供しているものです。

さっそくLinux環境の構築から。

ディストリビューションは、今回Fedora7を利用する。
DVDのisoイメージをダウンロードしてきて、DVDに焼くか、もしくはDVD附属の雑誌を買うのもでもよい。

http://fedoraproject.org/wiki/

魔法のランプ

魔法のランプといえば、ディズニー映画のアラジンを思い出す。
この作品の原作は、「アラジンと魔法のランプ」だが、千夜一夜物語の中の1つの物語だ。

ここで書くのは、そのランプではなく、Linux, Apache, MySQL, PHP構成での開発についてである。それぞれオープンソースで提供される、OS, httpサーバ、DBサーバ、そして開発言語環境だ。これらを組み合わてWebサイト制作や、社内のイントラシステムを構築しているところは多い。またPHPがクラスに対応したことや、MySQLがトランザクションやストアドプロシジャーに対応することにより企業システムとしての利用も益々増加すると思われます。