ドコモの絵文字のことで問い合わせてみた(その1)

2009/07/22 | ケータイ

昨今著作権、著作権とうるさい世の中になった。携帯の絵文字も当然著作権が絡んでくる。以前、AUとソフトバンクについてはウェブ上で確認が取れたが、ドコモはウェブサイトに記述がなく、他人のブログ記事の又聞きで「大丈夫っぽい」と書いた。でも、実際クライアントに「大丈夫ですか」と聞かれてしまい、仕方なくドコモにたずねることにした。

「携帯とPCの両方対応のサイトを作るが、PCサイト上に携帯絵文字を表示させないといけない。その際、ドコモの絵文字と見た目がほぼ似たような画像を使う予定だが、著作権的に問題ないのか」

さっそくドコモに電話してみた。どこに電話してよいかわからないから、とりあえず総合案内(151)に電話。3分ほど待ってお姉さんにつながった。そこで「こうこう、こういうことなんですが、問題ないでしょうか」と聞いてみた。当然即答できず、しばらく待ち状態。3分ほどしてお姉さんが出て「もう少しお待ちください」。そしてもう3分ほど待つと「今、お答えできないのでお調べして折り返し連絡させていただきたいのですが」とのこと。なんだか申し訳ないことをしてしまったと罪悪感に包まれつつ、電話を切った。ドコモ携帯から電話していたので、そのドコモ携帯の番号がわからず、ソフトバンクの番号を教えるというちょっと恥ずかしいこともしながら連絡を待つことにした。

大丈夫だとは思うんだけど、ちょっとどきどき。

PostgreSQLデータベースがディスクを圧迫したので(その後)

2009/07/21 | PostgreSQL

PostgreSQLを長期間vacuumせず放置してディスクを浪費した件で、対処方法を調べたのでメモ。

一番簡単なのはvacuumをかけることだが、vacuumをかけるにはディスク容量を必要とする。例えばデータベース容量が膨れ上がって2GBになってしまったが実際は1GB程度のデータベースだったと仮定する。このデータベースにvacuumをかける際、ディスクの空き容量として1GB程度が必要になる(らしい)。しかもvacuumには時間がかかりそう。多分、いったんデータベースがダンプされ、データベースを削除し、ダンプされたデータベースから復旧する、というイメージなんだと思う。

とりあえず実際のデータベース容量がわからず、かつ膨れ上がったデータベース(テーブル)がテンポラリ用途で使用していたので、不要な行をすべて削除してからダンプした。ほとんどファイル構造だけのダンプなので数十キロバイトですんだ。その後dropdbでデータベースを削除した。2GB強のデータベースだったが、数秒で削除された。その後、データベースを再作成して、ダンプデータから復旧。これで復旧できた。空き容量もしっかり確保できた。

データベースは適当に運用しちゃだめだね。

英数字も数値文字参照

2009/07/19 | PHPの基本

以前、数値文字参照の文字列を作成する方法について記事を書いた。mb_convert_encodingで変換後のエンコーディングにHTML-ENTITIESを指定すれば、数値文字参照に変換することができた。でも、これ、英数字は変換してくれない。

実際の効果のほどはわからないけれどメールアドレスを数値文字参照を使って表現すれば、スパムでもっていかれる確率が少し下がるので、メールアドレスを変換するための関数を書いた。それのメモ。

function str2entities($str){
$value=”;
for($i=0;$i<strlen($str);$i++){
$value.=’&#’.ord(substr($str,$i,1)).';';
}
return $value;
}

引数に変換したいメールアドレスを与えると、数値文字参照で構成されたメールアドレスが返される。マルチバイトでも何でもこいな変換関数を書くのは、mb関数を使うなり適宜工夫すればできそう(今のところ必要ない)。

パスを整理

2009/07/17 | PHPの基本

プログラムを書くときは、相対パスを使うことが多いのだが、../が大量にあったりすると、実際にどのディレクトリが指定されているのかわからなくなることがある。「なんかうまい方法がないかなぁ」と考えたけど、「そんな関数ありそうだよね」と思って調べたらやっぱりあった。

realpath

引数にパスを指定してやると、絶対パスを返してくれる。相対パスを指定しても、おそらくカレントディレクトリを判断して絶対パスを返すだろうし、../を多用してわかりにくくなってしまったパスも整理して絶対パスで返してくれる。便利、便利。

SJISなCSVを読み込む手法

2009/07/13 | PHPの基本

CSVを読み込むためにPHPではfgetcsvという便利な関数が用意されている。だけどPHPで使用できる文字コードの関係で、CSVファイルがシフトJISな場合はデータが破損してしまうことがある。普通なら「文字コードを変換すれば」ということになるが、fgetcsv関数はファイルポインタを引数としてとるため、一旦文字コード変換した内容を一時ファイルに書き出してやらなければならない。しかしこれはスマートでない。また、実はPHPにはそれさえも考慮したstr_getcsv関数があるらしい。こちらは引数として文字列を与えることができる!。しかしこの関数、どうもCVSバージョンだけに存在するらしく、たいていの場合この関数を使用できる環境ではなさそうだ。

実は便利な手法があった。ファイルとして書き出すのではなく「いったんメモリに保存する」というなんともおしゃれな手法だ。やり方としてはこんな感じ。

$text=file_get_contents($filePath);
$text=mb_convert_encoding($text,’UTF-8′,’SJIS’);
$fp=fopen(‘php://temp’,’r+’);
fwrite($fp,$text);
rewind($fp);
while($values=fgetcsv($fp,1024)){
var_dump($values);
}

3行目がおしゃれ。php://tempとすることでメモリに書き出してくれるらしい。しかも容量を考慮して、容量が大きい場合はファイルに書き出してくれたりもする(たぶん一時ファイルとして書き出して処理完了後は消えてくれるんだろうと期待するわけだが)。この行が魅力的なのはr+でオープンしているところ。それは5行目を見れば理解できる。

もう一個ミソが5行目。書き出したファイルを一旦クローズして、再度オープンするなんてことはしない。rewind関数でファイルポインタを最初に戻してやるわけだ。ここでr+オープンした意味が出てくる。書き出しておいて、読み直すわけだ。

すごくかっこいい。多用しそう。でも「php://temp」はPHP5.1という条件付。入出力ストリームは使う機会こそ少ないけれど、要所要所で重要になる使い方だとしみじみ思う次第であった。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net