page_adsence

2011年6月29日水曜日

Vimで折りたたみ

長いソースになってくると読むのが大変になってくるが、折りたたみと画面分割コマンドを併用することで
結構読みやすくなると思う。

画面分割に関しては以前のエントリに記載した通りなので、
今回は折りたたみに関してまとめた。

よく使うコマンド
zi      折り畳みの有効無効の切り替え
zf      折り畳みを作成する
za      折り畳みの開け閉め
zd      折り畳みを削除する

時々使うコマンド
zA      折り畳みの開け閉め(再帰)
zD      折り畳みを削除する(再帰)
zE      全ての折り畳みを削除
zR      全ての折り畳みを開く
zM      全ての折り畳みを閉じる

折り畳みの種類の切り替えとか
set fdc=0           折り畳みカラム幅の設定
set fdm=manual      手動
set fdm=marker      マーカー
set fdm=indent      インデント

これらを駆使してこれからもVimを使い続けたいと思う。

HTML5を利用したJavascriptのアニメーションサイトがすごい!

このPaper.js。
やばい!

http://paperjs.org/examples/

こんなの作ってみたいなー。
試しにソース落としてきたけど7091行…。

じっくり読みます…。

今更だけどHTML5について調べてみた。

HTML5が出てからもう大分経ちますが、そろそろいろいろなブラウザでHTML5の主要な機能が出そろってきました。(とはいえまだまだ未対応の部分も多いですが…。)
そこでちょっと調べてみた。
まずセキュリティに関して。
調べてみたらこんな記事が出てきました。

「HTML5は優先順位を間違った。もういちどセキュリティの設計からやり直すべきだ」と語るJavaScript大家のDouglas Crockford氏
HTML5は安全か? 開発者が留意すべきセキュリティ問題
HTML5とは何かを簡単にまとめてみた

まぁ確かにいろいろ便利になったと思われる一方で、セキュリティに関してどうなんだろうと疑問に思っていましたが、案の定でした。
セキュリティに関してはまだまだ不安なところが多く、重要な情報を保存する時には使う気にはなれないですね。
とはいえ、漏れても問題ないようなデータに関しては、ガンガン使っていっていいと思います。
やっぱり使わないとわからないですしね。

ただ、悪いことばかりじゃないみたいです。

iframe用のサンドボックス機能をサポートする計画があり、それを使うと「データをどう解釈するかを開発者が選択することを可能にする」らしい。
「この機能を正しく利用するとサードパーティーの悪質な広告や、信頼できないコンテンツを受け取るフレームなどが再表示されるのを防ぐのに役立つ」

具体的にどうすればいいのかとか書いてないので、なんとも言えないんですが、
Javascriptを使う時にiframe使うとデバッグしづらいから、極力iframeを使いたくないんだけど、
その辺は開発中はiframeのみ表示して開発する感じにすれば何とかなるかな。
今後はどんどんと試していきたいです。

新しいiPhone4のケースが来た

iPhone4のケースプログラムでもらったケースがぶっ壊れてきたので、新しくケースを買ってみた。

ちなみに今まで使っていたのは
Griffin Reveal Etch iPhone 4 Graphite

よく尻ポケットに入れてたせいなのかも知れないのですが、
シリコン部分とカーボン部分をつないでいる部分が剥がれてきたってのと、
剥がれてきてから、シリコン部分が伸びてきてしまったので、さすがに買い換えようかなと。

で、新しいケースはシリコンかカーボンかどっちか1素材を使っていて、接着部がない、値段もそこそこのケースという条件で探してみました。

結果、新しいケースはこれにしました。
TUNEWEAR iPhone4用ソフトケース SOFTSHELL for iPhone4 ブルー TUN-PH-000047

ゴムとプラスティックの中間みたいな感じで、TPU素材というものを使っているそうです。
Amazonでのレビューも実際ケースを着用した時の色が写真と違うってこと以外は悪くないし、
iPhone4の黒にケースを着用した時の写真を購入者が上げてくれているので、
それを見て問題ないかなと。

で、先日届いたので早速ケースをつけかえてみた。
まず色に関して。
色はやっぱり写真と違ってもっと暗い感じの青になりますね。
別に僕は気にならないです。

続いて装着感。
いいですね、iPhone4にぴったりはまっていい感じです。
まぁこれに関しては使い続けてみて、伸びてきてブカブカになったりしないかとか、
いろいろ試してみたいと思います。

最後にボタン類の操作性。
全体的に硬いですね。
電源ボタン、ボリュームボタン共に押すのにそこそこ力が要ります。
これは買ったばかりだからかもしれないですが、
前のはそんなでもなかっただけに、ちょっと残念です。

まぁこれから使い続けてみてどうなるかですね。

Snowboarderカタログ号を立ち読みしてきた

Snowboarderのカタログ号が出てたので、ちょっと立ち読みしてきた。
立ち読みといってもパラパラと中身を見た程度ですが。
正直このカタログを買う気にはなれなかった。
まぁ一番早く出るカタログなんで、しょうがないといえばしょうがない。
新しいテクノロジーとかに関しての記事とかなかった(見つからなかった)し、
オレの好きな011も載ってなかったし。

やっぱ本命は7月上旬発売予定のSNOWboarder's BIBLE。
毎年買ってるけど、ボリュームが半端ないから読んでてもいろんな発見があるし、楽しいし、テンション上がる!
早く発売しないかなー。

JSファイル読み込み時のブロックを回避する方法

通常、ブラウザはいくつかのファイルを同時にダウンロードするようになっているが、
外部ファイル化されたscript要素のロードに入ると、他のファイルの読み込みがブロックされてしまう。
ブロックされる時間は、Javascriptファイルのダウンロード、構文解析、実行が完了するまで。

ブロックによる影響を最小限に抑えるには、bodyの閉じタグの直前にscript要素を記載することで、
画面側への影響は最小限に抑えられる。

さらにJavascriptのファイルを1ファイルにまとめて圧縮することで、その時間を短縮することが可能になる。
どうしても複数ファイルに分ける場合は、Javascriptのソースの中でscript要素を作成し、
DOMに追加することで並列にロードをすることが可能になる。

2011年6月28日火曜日

Nightly tester toolsの出番が増える

Nightly tester toolsが何かというとFirefoxの互換性のないアドオンを強制的に動かすアドオンで、
Firefox3.6系から4系に上げる時から使い始めたんですが、これから必要になる頻度が高くなってくるかも。

Firefoxは原則6週間ごとにメジャーバージョンアップするってことなんで、
これ入れてないとアドオンがしばらく使えない期間が発生するかも。

実際、Firefox3.6から4に上げたタイミングだと、13個入れているアドオンのうち、半分以上が使えなかった。
しかもFirebugやFireMobileSimulatorなど主要な開発ツールが未対応で、正直これでは仕事にならない。
Firefox4から5に上げた時も、同じくらい使えないアドオンがあった。
まぁ、4から5に上げた時はリリース日当日に上げたので、しょうがない部分も多少はあるが…。

これから6週間ごとにアップデートされていくが、基本的には後方互換は保っているとはいえ、
一時的にアドオンが使えなくなる事態は避けないといけない。

というわけで、Nightly tester toolsを使わずにはいられない。

2011年6月27日月曜日

TRANSWORLD SNOWboarder's BIBLE2011-12

まだ発売してないけど、そろそろ発売時期が近くなってきた。
トランスワールドのブログをみる限り7月上旬らしいから、もうすぐだ。
去年ウェア以外買い換えたので、今年は買ってもウェアと小物位だと思うけど、
カタログみて新しい技術が取り入れられたボードとか見ると、マジでテンションあがる。
早く発売してほしいなー。

PHPUnit3の導入方法

最近自分のソースにバグが多いことが嫌になってきたので、テストをきちんと書いてみようかと思ってPHPUnitを導入してみようかと思い、その作業ログを残してみました。
そもそもPHPUnitなんて使ったこともなければ、まともに調べたこともなかった。
PHPUnit自体はPHPUnit、PHPUnit2、PHPUnit3とあり、PHPUnitはPHP4用、PHPUnit2とPHPUnit3はPHP5用として配布されているみたいです。
PHPUnit3はPHPのバージョンやPEARのバージョン等がかなり新しくないと入らないみたいなので、
PHPUnit3を入れられる要件を満たしていない場合は無理に入れる必要はないかもしれません。
今回は調べながらいろいろやってたので、無駄にPHPUnit→PHPUnit2→PHPUnit3とインストールと削除を繰り返してしまいました…。

で、作業ログ。
とりあえず、PHPのバージョンをアップデートして、PHPUnitのインストールを試みる。

まずPHPUnitはソースを落としてきて置いただけ。
PHP4用に書かれてるんで参照渡しのところでWarningが出てた。
これしかないのかと思って調べているとPHPUnit2ってのがあることに気付いた。
さらに、PHPのバージョンを上げればPHPUnit3が使えるみたいなので、
それを使ってみることにした。

# pear channel-discover pear.phpunit.de
Channel "pear.phpunit.de" is already initialized

既に追加済みでした。
で、インストール

# pear install phpunit/PHPUnit
Did not download optional dependencies: ezc/ConsoleTools, use --alldeps to download automatically
phpunit/PHPUnit requires PEAR Installer (version >= 1.9.2), installed version is 1.9.1
phpunit/PHPUnit can optionally use PHP extension "dbus"
phpunit/File_Iterator requires PEAR Installer (version >= 1.9.2), installed version is 1.9.1
phpunit/PHP_CodeCoverage requires package "phpunit/File_Iterator" (version >= 1.2.2)
phpunit/PHPUnit_MockObject can optionally use PHP extension "soap"
downloading DbUnit-1.0.1.tgz ...
Starting to download DbUnit-1.0.1.tgz (39,055 bytes)
......done: 39,055 bytes
downloading Text_Template-1.1.0.tgz ...
Starting to download Text_Template-1.1.0.tgz (2,783 bytes)
...done: 2,783 bytes
downloading PHP_Timer-1.0.0.tgz ...
Starting to download PHP_Timer-1.0.0.tgz (2,536 bytes)
...done: 2,536 bytes
downloading PHPUnit_MockObject-1.0.8.tgz ...
Starting to download PHPUnit_MockObject-1.0.8.tgz (18,199 bytes)
...done: 18,199 bytes
downloading PHPUnit_Selenium-1.0.2.tgz ...
Starting to download PHPUnit_Selenium-1.0.2.tgz (16,412 bytes)
...done: 16,412 bytes
downloading YAML-1.0.5.tgz ...
Starting to download YAML-1.0.5.tgz (9,966 bytes)
...done: 9,966 bytes
downloading XML_RPC2-1.0.8.tgz ...
Starting to download XML_RPC2-1.0.8.tgz (67,063 bytes)
...done: 67,063 bytes
downloading PHP_TokenStream-1.0.1.tgz ...
Starting to download PHP_TokenStream-1.0.1.tgz (7,250 bytes)
...done: 7,250 bytes
downloading Cache_Lite-1.7.10.tgz ...
Starting to download Cache_Lite-1.7.10.tgz (30,348 bytes)
...done: 30,348 bytes
downloading ConsoleTools-1.6.1.tgz ...
Starting to download ConsoleTools-1.6.1.tgz (869,994 bytes)
...done: 869,994 bytes
downloading Base-1.8.tgz ...
Starting to download Base-1.8.tgz (236,357 bytes)
...done: 236,357 bytes
install ok: channel://pear.phpunit.de/Text_Template-1.1.0
install ok: channel://pear.phpunit.de/PHP_Timer-1.0.0
install ok: channel://pear.phpunit.de/PHPUnit_Selenium-1.0.2
install ok: channel://pear.symfony-project.com/YAML-1.0.5
install ok: channel://pear.php.net/Cache_Lite-1.7.10
install ok: channel://components.ez.no/Base-1.8
install ok: channel://pear.phpunit.de/DbUnit-1.0.1
install ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.0.8
ERROR: unable to unpack /tmp/pear/download/XML_RPC2-1.0.8.tgz
install ok: channel://components.ez.no/ConsoleTools-1.6.1
install ok: channel://pear.phpunit.de/PHP_TokenStream-1.0.1

失敗…。
pear listでPEARのバージョンを確認してみると
# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
PEAR 1.9.1 stable

1.9.1か…。
しかたないのでアップデート
# pear upgrade PEAR
downloading PEAR-1.9.2.tgz ...
Starting to download PEAR-1.9.2.tgz (295,120 bytes)
............................................................done: 295,120 bytes
downloading Archive_Tar-1.3.7.tgz ...
Starting to download Archive_Tar-1.3.7.tgz (17,610 bytes)
...done: 17,610 bytes
downloading Structures_Graph-1.0.4.tgz ...
Starting to download Structures_Graph-1.0.4.tgz (30,318 bytes)
...done: 30,318 bytes
downloading Console_Getopt-1.3.1.tgz ...
Starting to download Console_Getopt-1.3.1.tgz (4,471 bytes)
...done: 4,471 bytes
downloading XML_Util-1.2.1.tgz ...
Starting to download XML_Util-1.2.1.tgz (17,729 bytes)
...done: 17,729 bytes
upgrade ok: channel://pear.php.net/Archive_Tar-1.3.7
ERROR: unable to unpack /tmp/pear/download/Structures_Graph-1.0.4.tgz
upgrade ok: channel://pear.php.net/Console_Getopt-1.3.1
upgrade ok: channel://pear.php.net/XML_Util-1.2.1
upgrade ok: channel://pear.php.net/PEAR-1.9.2
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"

もう一回インストール

# pear install phpunit/PHPUnit
phpunit/PHPUnit can optionally use PHP extension "dbus"
downloading PHPUnit-3.5.13.tgz ...
Starting to download PHPUnit-3.5.13.tgz (118,553 bytes)
..........................done: 118,553 bytes
downloading File_Iterator-1.2.6.tgz ...
Starting to download File_Iterator-1.2.6.tgz (3,439 bytes)
...done: 3,439 bytes
downloading PHP_CodeCoverage-1.0.4.tgz ...
Starting to download PHP_CodeCoverage-1.0.4.tgz (115,029 bytes)
...done: 115,029 bytes
downloading XML_RPC2-1.0.8.tgz ...
Starting to download XML_RPC2-1.0.8.tgz (67,063 bytes)
...done: 67,063 bytes
install ok: channel://pear.phpunit.de/File_Iterator-1.2.6
install ok: channel://pear.php.net/XML_RPC2-1.0.8
install ok: channel://pear.phpunit.de/PHP_CodeCoverage-1.0.4
install ok: channel://pear.phpunit.de/PHPUnit-3.5.13

完了。

xhprofを使ってみる

前回は自分の環境にxhprofをインストールするまで完了したので、
今回はそれを実際に使ってみる。

例として以下のソースのプロファイルが取りたい場合

$action = new Action;
$action->execute();

まず、インストール時に作成された「xhprof_html」ディレクトリと「xhprof_lib」ディレクトリの場所を確認しておく。
今回の場合は「/tmp/pear/download/xhprof-0.9.2/」以下の2つのディレクトリがある。
2つのディレクトリはドキュメントルート以下にコピーして設置しておく。

で、以下の記述を追加する。
require_once '/tmp/pear/download/xhprof-0.9.2/xhprof_lib/utils/xhprof_lib.php';
require_once '/tmp/pear/download/xhprof-0.9.2/xhprof_lib/utils/xhprof_runs.php';

xhprof_enable();

$action = new Action;
$action->execute();

$xhprofData = xhprof_disable();
$sourceName = 'HTML Generator';
$xhprofRuns = new XHProfRuns_Default();
$runId      = $xhprofRuns->save_run($xhprofData, $sourceName);
echo '<a href="http://example.co.jp/xhprof/xhprof_html/index.php?run='.$runId.'&source='.$sourceName.'" target="_blank">xhprof Result</a>';

以上で追記しないといけない内容に関しては完了である。
これで実行すると、最後にechoで出力しているリンクをクリックするとプロファイルができている。
ちなみに、callgraphを出そうとする場合は、別途graphvizをインストールする必要がある。
インストール方法は以下の通り。

# cd /etc/yum.repos.d/
# wget http://www.graphviz.org/graphviz-rhel.repo
# yum install graphviz

xhprofをインストール

xhprofってのがあるってのを聞いて、とりあえず入れてみた。
pecl経由で簡単にインストールできるのかと思いきや、phpizeでエラーになってしまって、
どうにもインストールできなかったので、結局手動でインストールした。

まず、適当な場所にxhprofをダウンロードしてくる。
自分の場合は/tmp/pear/downloadの中に落としてた。

# wget http://pecl.php.net/get/xhprof-0.9.2.tgz

解凍する

# tar xvfz xhprof-0.9.2.tgz

ディレクトリを移動する。

# cd xhprof-0.9.2/extension/

ビルドする

# phpize

configure

# ./configure --with-php-config=/usr/bin/php-config

Makefile作成

# make

make testでエラーがないかチェック

# make test

インストール

# make install

インストールが完了すると「/tmp/pear/download/xhprof-0.9.2」以下に「xhprof_html」と「xhprof_lib」というフォルダができる。
この2つのフォルダ内のファイルを使ってプロファイルをWeb上に表示させる。

iniファイルに「extension=xhprof.so」を追加

# vi /etc/php.d/xhprof.ini

syntaxチェック

# /etc/init.d/httpd configtest

apache再起動

# /etc/init.d/httpd graceful

phpinfoを確認
xhprofという項目があればインストール完了

# php -i

で、インストールは完了。
次回は設置して、実際に使用してみる。
使用する際に、必要なファイルはこのインストールしたディレクトリ内にあるので、
パスを忘れないようにすること。
今回の場合は「/tmp/pear/download/xhprof-0.9.2/」以下にあるファイルを使用する。
必要に応じてコピーして使うのもあり。

2011年6月16日木曜日

MySQLで特定のテーブルだけdumpする

最後にテーブル名を追加してやれば、問題なくdumpできる。

mysqldump -u ユーザー名 DB名 テーブル名 > dump.sql

dumpするテーブルは複数でもいける。
スペース区切りで追加していけばOK。

mysqldump -u ユーザー名 DB名 テーブル名1 テーブル名2 > dump.sql

PHPアクセラレータ(APC)の導入とそのメリット

PHPはスクリプト言語だが、単純なインタプリタ言語ではない。
PHPスクリプトの実行時は、常に「ランタイム・コンパイラ」が自動的にスクリプトをバイトコードへコンパイルし、これを「エグゼキュータ」が実行する。
コンパイルといってもOSネイティブなバイナリに変換されるわけではなく、エグゼキュータが解釈可能な形式へ変換される。

PHPスクリプトは実行の度に毎回コンパイルされる。このため、ランタイム・コンパイラが同じスクリプトのコンパイルを何度も余分に行っていることになり、パフォーマンスは犠牲になっている。

アクセラレータなしの場合
リクエストが来る
      ↓
スクリプト読み込み
      ↓
スクリプト解析
      ↓
スクリプトコンパイル
      ↓
スクリプト実行
      ↓
レスポンスを返す

アクセラレータありで、キャッシュされている場合
リクエストが来る
      ↓
スクリプト実行
      ↓
レスポンスを返す

上記を見てもらうとわかるようにスクリプトの読み込み、解析、コンパイルという部分がまるっと必要なくなる。
ソース量が多ければ多いほど高速化に期待が持てる。

というわけで導入方法は以下の通り。

ソースコンパイルとかyumで入れるとかいろいろと方法はあるみたいですが、
既存のリポジトリにphp-apcがなかったので、PECLでインストールをしてみました。

[root@localhost yum.repos.d]# pecl install apc
downloading APC-3.1.9.tgz ...
Starting to download APC-3.1.9.tgz (155,540 bytes)
.................................done: 155,540 bytes
54 source files, building
running: phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
Enable internal debugging in APC [no] :
Enable per request file info about files used from the APC cache [no] :
Enable spin locks (EXPERIMENTAL) [no] :
Enable memory protection (EXPERIMENTAL) [no] :
Enable pthread mutexes (default) [yes] :
Enable pthread read/write locks (EXPERIMENTAL) [no] :

中略

Build process completed successfully
Installing '/usr/lib/php/modules/apc.so'
Installing '/usr/include/php/ext/apc/apc_serializer.h'
install ok: channel://pecl.php.net/APC-3.1.9
configuration option "php_ini" is not set to php.ini location
You should add "extension=apc.so" to php.ini

赤文字になっている部分はいろいろと質問されているみたいなんですが、
とりあえずインストールしてみたかっただけなので、
Enter連打でインストール完了。

# vi /etc/php.d/apc.ini
extension=apc.so

上記を追加して保存。
apache再起動

# /etc/init.d/httpd restart

phpinfoで確認

# php -i
Configuration

apc

APC Support => disabled
Version => 3.1.9
APC Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Locking type => pthread mutex Locks
Serialization Support => broken
Revision => $Revision: 308812 $
Build Date => Jun 15 2011 19:31:38

Directive => Local Value => Master Value
apc.cache_by_default => On => On
apc.canonicalize => On => On
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
apc.file_md5 => Off => Off
apc.file_update_protection => 2 => 2
apc.filters => no value => no value
apc.gc_ttl => 3600 => 3600
apc.include_once_override => Off => Off
apc.lazy_classes => Off => Off
apc.lazy_functions => Off => Off
apc.max_file_size => 1M => 1M
apc.mmap_file_mask => no value => no value
apc.num_files_hint => 1000 => 1000
apc.preload_path => no value => no value
apc.report_autofilter => Off => Off
apc.rfc1867 => Off => Off
apc.rfc1867_freq => 0 => 0
apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS
apc.rfc1867_prefix => upload_ => upload_
apc.rfc1867_ttl => 3600 => 3600
apc.serializer => default => default
apc.shm_segments => 1 => 1
apc.shm_size => 32M => 32M
apc.slam_defense => On => On
apc.stat => On => On
apc.stat_ctime => Off => Off
apc.ttl => 0 => 0
apc.use_request_time => On => On
apc.user_entries_hint => 4096 => 4096
apc.user_ttl => 0 => 0
apc.write_lock => On => On

とりあえず入ったみたいです。
使ってみたらまた感想を書いてみたいと思います。
とはいえVMWare上の自分しか使わないサーバなので、対して効果はないと思いますが…。

2011年6月10日金曜日

CentOS5.5でSendmailの設定

自分のVMWareはNAT接続しているので、メールの受け取りはできないですが、
送信だけであればできるので、それ用に設定してみた。
詳しいことはわからないので、ググって調べながら設定した。

sendmailの設定ファイルは「/etc/mail/sendmail.cf」というところにあるファイル。
けどこのsendmail.cfというファイルは直接編集することはしない。
ではどうやってこのsendmail.cfファイルを編集するかというと、
sendmail.mcファイルを修正し、それをm4マクロで変換したものをsendmail.cfファイルに書くこむことで、
更新が可能。

で、sendmail.mcファイルの変更内容は以下の通り。
※設定に失敗する可能性を想定してsendmail.mcとsendmail.cfは必ずバックアップを取っておくこと!

# vi /etc/mail/sendmail.mc
追加
define(`confMAX_MESSAGE_SIZE’,`10485760′)dnl ← 送信メールのサイズの制限(10MB) default:制限無し
define(`confMAX_RCPTS_PER_MESSAGE’, `50′)dnl ← 1つのメールで指定できる宛先数の上限を制限 default:制限無し

修正(先頭に「dnl」を削除することでアンコメントできる)
FEATURE(`masquerade_envelope’)dnl
MASQUERADE_AS(`example.com’)dnl ← 自分のドメイン
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl

コメントアウト(先頭に「dnl」を追加することでコメントアウトできる)
dnl EXPOSED_USER(`root’)dnl ← EXPOSED_USER(`****’)で指定されたユーザはドメインのマスカレードを行わない(rootもマスカレードする)
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl ← デフォルトではローカルからのメールしか受け付けない(外部からのメールを受信出来ない)
dnl FEATURE(`accept_unresolvable_domains’)dnl ← 発信者のアドレスのドメインがDNSで解決出来ない場合、SMTPセッションのMAIL FROM:を拒否する

で、保存してcfファイルを生成
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


メールサーバで受け取るドメインを指定
今回のサーバでは受信しないので、特に設定はいじらず。
# vi /etc/mail/local-host-names
localhost
localhost.localdomain
example.com ← 自分のドメイン


転送を許可 / 拒否するホストを記載する
# vi /etc/mail/access
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:192.168.1 RELAY
Connect:192.168.10 RELAY ← 許可するセグメント
Connect:172.16.10 REJECT ← 許可しないセグメント


DBに追加
# makemap hash /etc/mail/access.db < /etc/mail/access
sendmailを再起動
/etc/init.d/sendmail restart

2011年6月3日金曜日

MySQLの日付関連の便利関数のまとめ

MySQLで日付を取得したりするのにいろいろと便利な関数があるので、それをメモっておく。

現時刻を取得する方法
mysql> SELECT CURRENT_TIME;
+--------------+
| current_time |
+--------------+
| 10:43:15     |
+--------------+


日付を取得する方法
mysql> SELECT CURRENT_DATE;
+--------------+
| current_date |
+--------------+
| 2011-06-03   |
+--------------+


現在の日時を取得する方法(どちらで取っても同じ結果が取れる)
mysql> SELECT CURRENT_TIMESTAMP;
+---------------------+
| current_timestamp   |
+---------------------+
| 2011-06-13 10:14:47 |
+---------------------+

mysql> SELECT NOW();
+---------------------+
| now()               |
+---------------------+
| 2011-06-13 10:14:47 |
+---------------------+


曜日を取得する方法
mysql> SELECT DAYNAME(NOW());
+----------------+
| DAYNAME(NOW()) |
+----------------+
| Friday         |
+----------------+


曜日を数字で取得する方法(月曜日が0で1ずつ増えていく)
mysql> SELECT WEEKDAY(NOW());
+----------------+
| WEEKDAY(NOW()) |
+----------------+
|              0 |
+----------------+


今年に入って何日経過したかを取得する方法
mysql> SELECT DAYOFYEAR(NOW());
+-------------------+
| DAYOFYEAR(NOW())  |
+-------------------+
|               154 |
+-------------------+


今月に入って何日経過したかを取得する方法
mysql> SELECT DAYOFMONTH(NOW());
+-------------------+
| DAYOFMONTH(NOW()) |
+-------------------+
|                10 |
+-------------------+


月末の日付を取得する方法
mysql> SELECT LAST_DAY(NOW());
+-----------------+
| LAST_DAY(NOW()) |
+-----------------+
| 2011-06-30      |
+-----------------+


先月末を取得する方法
mysql> SELECT LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 month));
+----------------------------------------------+
| LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 month)) |
+----------------------------------------------+
| 2011-05-31                                   |
+----------------------------------------------+


日付を整形して取得する方法
mysql> SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s');
+------------------------------------+
| DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') |
+------------------------------------+
| 20110603093243                     |
+------------------------------------+


文字列を整形して日付にする方法
mysql> SELECT STR_TO_DATE(201106030932, '%Y%m%d%H%i%s');
+------------------------------------+
| STR_TO_DATE(NOW(), '%Y%m%d%H%i%s') |
+------------------------------------+
| 2011-06-03 09:32:00                |
+------------------------------------+


といった感じでいろいろな関数が用意されている。
以下のページに詳しく載っているので参考にする。

http://www.limy.org/program/db/mysql/mysql_operators.html

2011年6月2日木曜日

3キャリアのUserAgentに関して

アクセスしてきたユーザーが携帯かPCかを調べるために、携帯側のUserAgentに関して調べてみた。
Docomoの場合は「DoCoMo」、auの場合は「KDDI」、ソフトバンクは「Vodafone」か「SoftBank」という文字列が含まれている。
なお、auキャリアの判別には”UP.Browser”という文字列も使われていたのですが、これは当時「HDML(UAに”KDDI”を含まない)」と「WAP2.0(UAに”KDDI”を含む)」という2種類のフォーマットがあった時の名残りであり、現在では「WAP2.0」のみとなっているので、”KDDI”という文字列で見つける方がよい。

また同様にSoftbankでも、かつては「J-PHONE」という文字列も使われていましたが、これも既に停波済みなので無視してもよい。