2010年12月30日木曜日

[php]ファイルをテンポラリなパスでダウンロードさせる

publicでない場所に置いてあるファイルを、ランダムなパスで一時的にダウンロードできるようにする。

というのを作りました。

ちょうど今zencartをいじっていて、ダウンロード販売機能のソースコードを参考にさせて(というかほぼそのまま使わせて)もらいました。
該当のソースコードは以下のパスにあります。
includes/modules/pages/download/header_php.php

プログラムの流れは

1.ユーザーがphpにアクセス
2.ランダムで一時ディレクトリを作成
3.作成した一時ディレクトリの中にオリジナルファイルへのシンボリックリンクを作成。
4.ユーザーをシンボリックリンクへ303リダイレクト
5.ユーザーが目的のファイルを閲覧する

となります。

それと、作成したディレクトリを定期的に削除することで、ファイルが一般に公開されてしまうことを防ぎます。

zencartではphpにアクセスがあるたびに過去に作成した一時ディレクトリを削除していますが、必要ならばcronで定期的に削除するなどの処理を組み込んでもいいと思います。

ソースはこんな感じになります。


//古いシンボリックリンクを削除
zen_unlink_temp_dir(DIR_FS_DOWNLOAD_PUBLIC);

//ディレクトリ作成
$tempdir = zen_random_name();
umask(0000);
mkdir(DIR_FS_DOWNLOAD_PUBLIC . $tempdir, 0777);

$symlink_file = DIR_FS_DOWNLOAD_PUBLIC . $tempdir . '/' . $file_name;
$redirect_link = "/pub/" . $tempdir . '/' . $file_name;

//シンボリックリンク作成
$link_create_status = @symlink($org_file, $symlink_file);

//リダイレクト
if ($link_create_status==true) {
header("HTTP/1.1 303 See Other");
header("Location: ".$redirect_link);
}

2010年12月21日火曜日

phpのrequireとincludeの違い

ファイルを読み込むこの2つのメソッド。どちらも同じような動きをします。

自分はrequire派です。なんとなくincludeよりrequireのほうが上等というか、レベルが高い印象があったので、requireを使ってました。

今回とあるサンプルコードを読んでいたらincludeが使われており、気になって調べてみましたが、答えはphpマニュアルに書いてありました。

require() は include() とほぼ同じですが、失敗した場合に E_COMPILE_ERROR レベルの致命的なエラーも発生するという点が異なります。 つまり、スクリプトの処理がそこで止まってしまうということです。一方 include() の場合は、警告 (E_WARNING) を発するもののスクリプトの処理は続行します。


http://phpspot.net/php/man/php/function.require.html

とのことです。なるほど。

ちなみにrequire_once、include_onceというのもあって、こちらだとすでにそのファイルが読み込まれている場合はスキップしてくれます。

便利です。が、_onceありは_onceなしに比べて処理が重くなるという話をどこかで読んだことがあります。(当然と言えば当然ですが)

特に理由がないようならrequireを使っておくのが無難なようです。

2010年12月20日月曜日

jqueryのhover()でプルダウンメニューを作る

仕事でプルダウンメニューを作った際のメモ。

jqueryを使ってちょっとしたプルダウンメニューを作りました。

サンプル:jqueryのhoverでプルダウンメニュー

最初は

$('#menu').mouseover(function(){ ...処理... }).mouseout(function(){ ...処理... });

という具合に、mouseoverとmouseoutのメソッドチェーンを使ってみました。

これでも問題ないように見えましたが、実際に作ってみるとカーソルをメニュー要素からプルダウン要素に動かすと、その都度mouseoverの処理が走ってしまうということがわかりました。

ただのプルダウンメニューであれば問題ないかもしれませんが、メニューの表示にajaxでのHTTPリクエストを入れていたので、パフォーマンスの点で問題があります。というか使いものになりません。
サンプルにconsole.logを仕込んであるので、実際にマウスを動かしながらfirebugのコンソールを見ると現象がよくわかると思います。

そこで今度はhoverメソッドを使ってみたのですが、こちらはカーソルをグリグリ動かしても処理は1度しか走りませんでした。

挙動が違う理由はよくわかりませんが、とりあえずhoverを採用して無事実装完了しました。

2010年12月18日土曜日

session.use_trans_sidがOnだと、別ドメインへのformでもhiddenにセッション 情報を埋め込んでしまう

session.use_trans_sidをOnにしているサイトで、formのaction先が別ドメインのサイトなのにも関わらず、hiddenにセッションIDを付加してしまう、という問題に遭遇しました。

session.use_trans_sidは外部ドメインへのformタグにも無差別に付加する

けっこう面倒な問題。セキュリティ的にもかなりマズイです。

上記のページではurl_rewriter.tagsを使った解決策をとっていますが、今回はjqueryのremove()でhiddenタグを削除するという方法を考えてみました。

$('#form1 input:hidden[name=session_name]').remove();

当然携帯サイトなどでは使えませんが、javascriptがOffだと送信できないフォームなので、この方法を使ってみました。

2010年12月16日木曜日

秀丸のzen-codingマクロでhtmlコーディングをちょっとだけ効率化

最近話題のzen-coding、自分も秀丸にマクロ入れて使っています。

秀丸のzen-codingマクロ

普段からできる限りzen-codingを使おうとしてはいるのですが、なかなか使いこなすことができません。

実際に使おうと思っても、記法が分からない時はリファレンスサイトを見に行かなくてはいけないので、そうなると「普通に手入力でいいや」となってしまいます。

あと、ゼロからhtmlでページを作る機会があまり多くないのも原因のような気がします。
部分修正の時にも使いたいのですが、インデントが崩れてしまったりするので、ちょっと使いにくい感じがします。


そこで設定ファイルをいじって、自分なりのzen-codingの使い方を考えてみました。


設定方法はzenhtml.iniのuse-indentをyesからnoにするだけ。

たとえばこんな文字列があったとします。

君は見たか愛が真っ赤に燃えるのを

「真っ赤」を<span>で囲み、class属性にredを指定したい場合、

「真っ赤」を選択してCtrl+Shift+EでWrapモードを呼び出し、「span.red」を入力してOKします。



すると

君は見たか愛が<span class="red">真っ赤</span>に燃えるのを

こうなります。

ちなみにuse-indentがyesだと、こんな風にインデントが入ってしまいます。

君は見たか愛が<span class="red">
    真っ赤</span>に燃えるのを


zen-codingの本来の使い方からすると少しズレてるのかもしれませんが、最近のコーディングはclassとかidを指定することが多いので、かなり役立ってます。

次のバージョンアップで、Wrapモードの時はインデントをオフにする、みたいな設定ができるようになると嬉しいですね。

2010年12月14日火曜日

phpで関数の頭に@(アットマーク)の意味

phpで、関数名の前に@がついてるのをたまに見かけます。

たとえば

@file($filename);

とか

@file_get_contents($url);

など。

これはエラー制御演算子といって、エラーログの出力を抑制するためのものなんだそうです。
上記の例では、ファイルが存在しなかったり、エラーを吐かないようになります。

なお関数だけじゃなく、変数などでも使えるようです。

基本的にはerror_reporting等でエラー出力の設定をして、部分的な対応のみこのエラー制御演算子を使う、というやり方になるようです。

2010年12月10日金曜日

jqueryでフロートメニューを自作する

以前、フロートメニューを作る際に「jquery-scroll-follow」というjqueryのプラグインを使ったことがあったんですが、今回新たに調べてみたところ、最新版のjqueryでは動作しないことがわかりました。

「jquery-scroll-follow」は2008年からバージョンが更新されていません。
フロートメニュー自体あまり人気もないし、今後も更新されなさそうな感じなので、自作してみることにしました。

サンプル:jqueryでフロートメニュー

拍子抜けするくらい簡単でした。

ついでにanimateを使ったバージョンも作成。矢印キーでスクロールするとちょっと動作が怪しいです(汗

サンプル:jqueryでフロートメニュー(animate版)

jqueryの場合、こうした簡単な機能であればライブラリを探すよりも自作してしまったほうが早いというケースも多そうです。

[追記]
animate版のほうを若干修正。要素セレクタに:not(:animated)を加えることで、アニメーション実行中にさらにアニメーションが実行され、動作が不安定になるのを防止するようにしました。

2010年12月9日木曜日

jQueryポケットリファレンス

普通のリファレンスです。サイズが小さく、持ち運びやすいです。
通勤時に電車内で読むために購入しました。

朝の通勤時にこれを読み、脳みそをjqueryモードにするのに使っています。

あと2010年4月発行と比較的新しく、ver1.4に対応している点もポイント高いと思います。

内容はあまり濃くありません。3日ほどで読み終わりました。
triggerメソッドについて記述がなかったりと、物足りない部分もあります。が、もともと完璧なものは期待していないので、それほど気にはなりませんでした。

空いた時間を使ってjqueryを脳みそにインプットしたい、という人にはおすすめできる一冊です。

2010年12月2日木曜日

Googleウェブマスターツールの404アラート

久しぶりにGoogleウェブマスターツールにログインしたら

http://kawama.jp/: 停止している可能性があります


というメッセージが数十通来ていました。

内容は、

サイトをクロールした際、2010-10-20 10:00 UTC(日本標準時は -9 時間)頃にソフト 404 エラーの数が一時的に増えていることが判明しました。サイトが停止している可能性があります。また、この問題は既に解決している可能性もあります。


というもの。このメッセージはメールに転送することもできるようです。
Googleウェブマスターツールはどんどん進化してると聞いてましたが、なるほど便利です。

ちなみに404アラートはcoreserver移行を機にピタリと止まってました。

面倒でしたが、やはり引っ越ししておいて良かったです。

2010年12月1日水曜日

php,smarty,mysql,javascriptでゼロ埋め

※javascriptも追加しました。

ゼロ埋めとかゼロパディングと言われるものです。
よく忘れてしまうのでまとめておきます。

■php
echo sprintf("%05d", $number);

echo str_pad($number, 5, "0", STR_PAD_LEFT);

引数をひとつ以上渡すことも可能。
echo sprintf("%04d-%02d-%02d", $year, $month, $day);

■smarty
{$number|string_format:"%05d"}

■mysql
select lpad(number, 5, '0') from table;

select to_char(number, '00000') from table;

■javascript

var number = 5;
alert(("0"+number).slice(-2));
> 05
alert(("00"+number).slice(-3));
> 005




他にもいろいろやり方はありますが、とりあえずよく使うものはこんなところだと思います。

2010年11月29日月曜日

jQueryクックブック

jQueryは少しかじった程度なんですが、本格的に勉強しようと思ってこのオライリー本を購入しました。



480ページ、18章と、かなりボリュームがあります。電車の中で読んでいると腕が疲れてきます。カッターで2~3章ごとに切り分けて持ち運びたい衝動に何度も駆られました。

ちなみに18章それぞれで著者が違うため、ソースコードの書き方などはバラバラで統一性がありません。

本書は全編が一問一答形式になっています。

「子要素だけを選択するには?」 → 「解答」 → 「解説」

基本的にこれの繰り返しです。かなり実用的です。
実際に直面したことがあるようなケースなどがあると理解しやすいです。

逆にHTML5を使った音楽プレーヤーの埋め込みなどは全く経験がないので、読んでいてチンプンカンプンでした。


jQuery本は何冊か出ていて、どれを読めばいいかよくわからなかったのでオライリーにしてみましたが、良い選択だったと思います。
とりあえず一読はしましたが、今後さまざまな問題にぶち当たると思うので、必要に応じてまた読み返そうと思います。

ちなみにamazonでサンプルコードがDLできないというレビューがありましたが、本家サイトでダウンロードできました。

http://examples.oreilly.com/9780596159788/

2010年11月26日金曜日

古いジャッキーチェン映画の日本語吹替について

先日、知り合いとジャッキーチェンの話で盛り上がって、久しぶりジャッキー映画が見たくなったので、DVDをレンタルしました。

借りたのは

・プロジェクトA/デジタル・リマスター版
・拳精

の2本。
楽天レンタルのスポットレンタルで借りました。


まずは見たのはプロジェクトA


久しぶりに見ても最高におもしろく、楽しませてもらいました。
が、音声を日本語吹替にしているのに、ところどころで強制的に元の広東語音声に切り替わってしまうというのがすごく気になりました。あきらかに不自然です。

調べてみたところ、プロジェクトAの日本語吹替音声はテレビ用にカットされたバージョンしかないんだそうです。
今回見たデジタルリマスター版はノーカットです。テレビ用にカットされた箇所は吹替音声が存在しないため、その部分だけ字幕になってしまう、ということでした。納得です。

たぶんパッケージに説明書きなどがあるんでしょうが、ネットDVDレンタルだと円盤だけしか届かないので、音声が切り替わる理由がわからず、戸惑いました。

ちなみにデジタル・リマスター版じゃない普通のプロジェクトAのDVDは、日本語吹替そのものがないそうです。



続いて拳精

驚いたことに、日本語吹替が石丸博也じゃないんです。

吹替は山野井仁という声優さんでした。
この人はCSI科学捜査班のウォリック・ブラウンの声をやってる人です。

シブくてかっこいい声なので、はっきり言ってジャッキーの吹替えには合わないと思います。山野井仁さんも頑張って石丸ジャッキー風の声を作っているようですが、これはちょっと、、、

自分は「ジャッキーの吹替は石丸博也の声以外あり得ない」というタイプなので、この吹替はちょっと受け入れ難いです。



なぜこんなことになっているのか、調べてみました。

ブロードウェイという会社から発売された笑拳、天中拳、少林寺木人拳、拳精、蛇鶴八拳、龍拳、成龍拳のビデオとDVDだけは山野井仁という方が吹き替えを担当しています。また飛行機上映用に制作されたドラゴンキングダムの吹き替え版も別人の方でした。今のところは石丸博也氏以外の方が担当した場合はこの2つの例だけです。


http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1128247001

と、いうことだそうです。

今回借りたDVDもブロードウェイの商品でした。


ちなみに拳精ではチャイナ・ガールという曲が修行シーンなど随所で挿入歌として使われていますが、権利の関係でDVD版では使われていません。


というわけで、昔テレビで観たジャッキー映画を、当時と変わらない形で見ることはもうできないようです。
録画したビデオテープなどを持っている人は、宝物として大切に保存しておきましょう。


あとYoutubeに拳精や蛇拳、酔拳などの日本語吹替版がけっこう上がっています。結局自分は拳精のDVDは途中で見るのをやめ、Youtubeのほうを見直しました。

VHS3倍録画なので画質があまりよくなかったり、CMもカットしていなかったりと、当時のテレビ番組のなつかしい雰囲気を味わうことができ、なかなか楽しかったです。

やはりジャッキー映画は石丸ボイスがしっくりきますね。

2010年11月25日木曜日

Excelの表をDreamWeaverにコピペしたらテーブルになった

タイトルのまんまなんですが、試しにやってみたら、見事にできました。



ソースはこんな感じ。


ちなみにそれぞれのバージョンは、Excelが2003、DreamWeaverが8です。

セルの背景色とかfont-weightとかはコピーされなかったので、属性情報は引き継がれないようです。

でもcolspanやrowspanなどはばっちりコピーされるので、使いようによってはかなりの効率化ができそうです。

2010年11月24日水曜日

JavaScript入門講座

はてぶの人気記事に出てたので、読んでみました。

https://dl.dropbox.com/u/336104/slide/jstudy2/startupjs/index.html

全57ページですが、プレゼン用資料なのでさらっと読めます。本当に入門用なので、初心者向き。

このドキュメント読んでから書籍なんかを読むと理解度がより高まると思います。特にスコープとかクロージャのあたりはよく読んでおくと良いと思います。

あとdropboxはこういう使い方もできるんだなぁ、と。静的ファイル置き場としても便利ですね。

JavaScriptのi++と++i

i++は値を返してから1加える。
++iは1加えてから値を返す。

という違いみたいです。
普段i++しか使わないので、++iを見て「なんだこりゃ」と思いましたが、こういうことでした。

ちなみに一部のブラウザでは++iのほうが動作が速いそうです。

2010年11月23日火曜日

Smartyでforeachループをネストする

よくやり方を忘れるので備忘録として。

こんな感じの配列を使います。

Array
(
[array1] => Array
(
[0] => Array
(
[id] => 3
[name] => さん
)

[1] => Array
(
[id] => 4
[name] => よん
)

[2] => Array
(
[id] => 5
[name] => ご
)
)
[array2] => Array
(
[0] => Array
(
[id] => 9
[name] => きゅう
)
[1] => Array
(
[id] => 10
[name] => じゅう
)
)
)


テンプレートはこんな感じで記述。

{foreach from=$alllist item="list1" name="list1"}
<ul>
{foreach from=$list1 item="list2" name="list2"}
<li id="{$list2.id}">{$list2.name}</li>
{/foreach}
</ul>
{/foreach}

2010年11月17日水曜日

mod_rewriteでURL末尾のスラッシュを補完

同じコンテンツでも、アクセス解析ソフトなどは末尾のスラッシュの有無によって別ページと見なしてしまいます。
そうした問題も、このmod_rewriteで解消できます。

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule .* %{REQUEST_URI}/ [L,R]


このケースだとURLに.(ドット)を含まない場合はディレクトリと見なして末尾スラッシュ補完をしています。

参考
http://d.hatena.ne.jp/hiro-tak/20080508

2010年11月16日火曜日

mod_rewriteでURLを書き換えつつクエリはそのまま引き継ぐ

「mod_rewriteを使って動的ページを静的ページのように見せる」というのが、SEO的に良いということで一時期流行りました。

現在ではサーチエンジンも進化し、静的だろうか動的だろうか評価は変わらなくなったようですが、人間の目から見てもクエリ文字列が並ぶよりはディレクトリ階層になっているほうがきれいなので、サイト構築の常套手段として定着している感があります。

mod_rewriteを使って動的ページを静的ページというテクニックはググればいくらでもでてきます。
たとえばこんな感じ。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z_]+)/$ index.php?var1=$1 [L]


こうすることで、http://example.com/hoge/ が http://example.com/index.php?var1=hoge として処理されるようになります。

ただこのままでは http://example.com/hoge/?page=1 とか http://example.com/hoge/?search=hoge のように、後ろにクエリパラメータが来てもその値が取得できないという問題があり、不便です。

これを解決するのがQSAというオプション。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z_]+)/$ index.php?var1=$1 [QSA,L]


これでオシリに引数がくっついてもindex.phpで処理できるようになります。

参考
http://blog.fkoji.com/2008/07172155.html

2010年11月15日月曜日

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス



内容紹介やレビュー、目次を見たところ、JavaScriptを浅くしか理解していない自分にとってちょうど良い本だと思い、読んでみました。

序盤はスラスラと読み進み、基本文法やオブジェクトの概念(プロトタイプなど)あたりは気持ちよく理解できました。久しぶりにオライリーの本を読みましたが、さすがにクオリティ高いと思います。

ただ、中盤から後半にかけて徐々に内容が難しくなり、5章「継承」あたりからは、なんどもソースコードを読み直してようやく理解できる、という感じになってきます。

基本的にJavaScriptという言語はクセがかなり強く、php以外の言語をほとんど触ったことがない、あまり柔軟性のない自分の頭脳にはなかなかスンナリ入ってこなかったです。

もう少しJavaScriptという言語に触れてから読み直したほうが良さそうだと思ったので、終盤は斜め読みで済ましました。
というわけで、しばらくしてからまた読み直したいと思います。

2010年11月9日火曜日

coreserverでサーバー再移行

ここ最近、利用していたcore-bのサーバーが毎日昼間に断続的に重くなり、サイトにアクセスできなくなる状態が続いていました。

例えばその時間帯にこのkawama.jpにアクセスすると、「データベースに接続できません」というwordpressのエラー画面が表示されます。おそらく誰かがmysqlに対して負荷の高いプロセスを動かしていたのだと思います。

1ヶ月くらい様子を見ていたのですが、改善される様子もありません。
エラー画面を見るたびにイライラしてしまうのは精神的に良くないので、この週末にサーバーを引っ越ししました。

ちなみに今回はb15.coreserver.jpからb27.coreserver.jpへの引っ越しです。

あらかじめこちらのページをチェックし、負荷が高くないと思われるサーバーを選びました。

xrea障害メンテナンス情報
coreserver障害メンテナンス情報

このページでは負荷がリアルタイムで更新されています。1日に何度か除いてみて、ステータスバーがオレンジや赤になっている回数が多いようなサーバーはハズレなので避けたほうが無難だと思います。


引っ越し作業自体は今回で3回目くらい。
過去にまとめた移行手順を参照しつつ作業を行い、2時間弱ほどで終わりました。


基本的にスムーズにすすめられたのですが、2点ほど躓いた点があったのでメモしておきます。

(1)ドメインの同期設定は移行できない

ドメインウェブの設定はテキストで一括移行できるんですが、同期設定(シンボリックリンク)は移行できないので、手動で移行してやる必要がありました。

(2)パーミッションのチェック

これは以前書きましたが、xrea,coreserverのサーバー間コピーはパーミッションを保持してくれないので、666のファイルとか777のディレクトリなんかのパーミッションを移行後に変更しないといけません。

で、今回findを使って旧サーバーでパーミッションをいじってるファイル、ディレクトリを検索してリスト化し、新サーバーで一括でchmodするのを試みました。

たとえばfindで777のディレクトリを探すには

find ./ -perm 777 -type d

666のファイルを探すには

find ./ -perm 666 -type f

このpermオプション、オプションで+や-をつけてさまざまな条件を付加させられます。が、これがけっこう複雑だったので、結局は-name "*.cgi"とか-name "*.sh"でリストを作りました。


と、こんな具合で大きな問題もなく移行完了。
今度のサーバーは低負荷で安定してくれるといいんですが、、、

2010年11月7日日曜日

三郷のパソコンファームで不要PCを無料で処分する

不要になったPC2台(WindowsMeが乗っていたthinkpadと、WindowsXP初期の頃の省スペースPC)を持てあましており、使い道も全くなかったので、前々から気になっていた三郷のパソコンファームに行って引き取ってもらいました。

パソコンファーム

PCの処分はお金もかかるし何かと面倒ですが、ここに持って行けば無料で引き取ってくれます。

郵送でも引き取り可能ですが、今回は新三郷のIKEAに行く用事があったので、車で行きました。

大泉ICから外環外回りで外環三郷ICで降り、すぐの信号を左折。そのまま突き当たりの丁字路のところにパソコンファームがあります。

見た感じ普通の倉庫という感じ。敷地内に入って車をとめると従業員の方があらわれて、引き取るPCを確認してすぐに持って行ってくれました。
そのあと指定の用紙に名前や連絡先を記入して手続き完了。所要時間はほんの5分程度。しかもおまけで缶コーヒーを2本くれました。

不要なPCは今後しばらくは出ないと思いますが、PC以外でもさまざまな不要品を回収してくれるようなので、機会があればまた利用したいと思います。

2010年11月6日土曜日

秀丸でデフォルトのエンコードをSJISからUTF-8に変更

その他 → 動作設定 → ファイル → エンコード1 → 標準のエンコードの種類

で設定変更できます。
最近はhtmlやphpなども、ほぼ90%以上UTF-8を使っているので、デフォルトを変更してみました。

2010年11月3日水曜日

標準DOMスクリプティング



『DOMと言う言葉はよく聞くけれど、実際のところよくわかっていない。jqueryやそのライブラリを使って見よう見まねで簡単なアプリを作成できるが、高度なコーディングはできない。』

こういう状態だったので、そろそろ本質的なところを勉強しないといけないな~と思っていたときに、手に取った本がこれでした。
というか、DOMについての本って他に見あたらなかったです。

2007年の本で、ブラウザもIE6とかfirefox1.5の時代ですが、古さはあまり感じさせません。
DOMの本質的な部分を扱っているので、今でも十分通用するし、勉強になります。
特にDOMの用語や概念なんかは覚えておけばgoogle検索するときなどにもかなり役に立つと思います。

ひさびさに技術書読みましたが、なかなか良い本でした。少し値段が高いですが、それに見合う価値はあると思います。

なおサンプルスクリプトはこちらで見られます。
http://www.futomi.com/books/dom/script/index.html

それと本書で取り上げられていたfirefoxのアドオンが3つあったので、とりあえず入れてみました。
今度コーディングするときに使ってみようと思っています。

DOM Inspector
JavaScript Debugger
HTML Validator

CSS+画像で作るタブメニュー

CSSと画像で作るタブメニューのサンプルを探していたところ、こちらのサイトを見つけました。

http://www.dezinerfolio.com/2007/10/17/creating-liquid-css-tabs-for-menus/

画像による解説がものすごくわかりやすいです。いい勉強になりました。

2010年10月30日土曜日

Amazon PAAPIのカスタマーレビューiframe対応

またAmazon PAAPIネタです。

仕様変更のため、2010/11/09以降、PAAPIレスポンスデータからカスタマーレビューの文字情報が無くなり、かわりにiframe用のURLが返されるようになります。詳細はこちら

ちなみに実際のIFrameURLの内容などは、Amazon商品情報ビューワーで見るとよくわかります。(最近このツールよく使ってます)


しかも合計レビュー数や評価平均などのサマリ情報も取得できなくなります。
これは過去何度かあったPAAPIの仕様変更の中でも、一番影響が大きいのではないかと思います。

この新仕様の制約の中で、どうすれば最善の対応ができるか。調べてみました。


、、、が、特にいい案も浮かばず。とりあえずはそのままiframeタグを使って表示するしかなさそうです。


iframeを使う上でネックになるのが高さ(height)です。
ひとまず適当に500pxとかで指定するんですが、レビューがないと下300pxくらいスカスカになってしまうし、逆にレビューが多いとスクロールバーが出てしまうので、インターフェース的にあまりキレイじゃないです。

JavaScriptでIFrameURLの高さを取得して、heightを動的に変更、なんてこともできるんでしょうけど、色々面倒なことになりそうです。

あとphpでincludeする方法もありますが、PAAPI公式ページのよくある質問に見ると、

IFRAMEのみが、現在カスタマーレビューデータを表示する唯一の方法となります。ご了承ください。

IFRAMEのみが、現在カスタマーレビューデータを表示する、Amazonにおける唯一の方法となります。

現状、IFRAMEのみがサポート対象となっております。当方としては、アソシエイトの皆様にAmazonの商品を紹介いただくお手伝いをするために、近い将来、他のフォーマットについてのサポートについても検討予定です。


と、IFRAMEのみを連呼されてるので、iframe以外の方法を使うとガイドライン違反と判定されてしまう可能性もなくはありません。

というわけで、ひとまず素直にiframeを使うことにして、しばらく様子をみてみようと思います。最後の近い将来、他のフォーマットについてのサポートについても検討予定です。というのに期待したいと思います。


あともうひとつの大きな問題として、携帯対応があります。

そもそもiframe対応していない機種はどうしようもありません。

実際に自分の端末(ドコモP-09A)で試してみたところ、iframeは表示できたのですが、iframeの枠をクリックしてフォーカスさせないとスクロールできないので、PC以上にインターフェースが分かりにくくなってしまいます。

それよりも問題なのがiframe内のリンクをクリックしてもPC用ページに飛んでしまうこと。携帯のことはまったく考慮されていないようです。

というわけで、携帯サイトのほうは現状ではレビュー表示なしにするしかない、という結論に至りました。



正直かなり残念な仕様変更ですが、もう決まってしまったことなので利用者としては変更にはおとなしく従い、今後のバージョンアップで改善されることを期待するしかないです。

2010年10月29日金曜日

findを使って特定ディレクトリ以下のファイル数カウント・削除をする

findを使ってファイル数のカウント、削除をするコマンドです。

PAAPIのリクエスト2000回制限で導入した、放っておくと際限なく増えてしまうキャッシュファイルの対応用です。

特定ディレクトリ以下のファイル数カウント
/usr/bin/find /path/to/cache_dir/ -type f | /usr/bin/wc -l

最後にアクセスしたのが120分以上前のファイルを削除
/usr/bin/find /path/to/cache_dir/ -amin +120 -exec /bin/rm -f {} \;

これをcronでスケジュール化し、増え続けるキャッシュファイル対策は完了です。

参考ページ
http://mytips.exblog.jp/7558083/
http://d.hatena.ne.jp/yohei-a/20090303/1236048930
http://aligach.net/diary/20090624.html
http://www.k-tanaka.net/unix/find.html

2010年10月26日火曜日

Amazon PAAPIのリクエスト回数制限(1時間2000回)にひっかかる

先週のことですが、Amazon商品情報ビューワーを見てデータの構造をチェックしていたところ、突然「503エラー」が出て、amazonから情報が取得できなくなり、ちょっと焦りました。

調べてみたところ、この503エラーは「1時間につき2,000リクエストまでの当初利用限度」という利用制限にひっかかったのが原因みたいです。

この制限は2010年10月15日から施行されていたようですが、「1時間2000リクエストなんて自分のサイトではあり得ない」と思って完全スルーを決め込んでいました。

1時間に2000リクエストということは、1分に33.333リクエスト。だいたい2秒に1リクエストくらいです。

自分の管理サイトがこんなにアクセスが多いはずはないんですが、放置するわけにもいかないですし、とりあえず調査します。


ひとまず様子をみてみましたが、だいたい毎時30分くらいになると503エラーが出るようになり、毎時55分~00分くらいになると商品情報取得が再開され、また30分くらいで503になる、、、というのが繰りかえされていました。

30分足らずで2000リクエストの制限を使い切ってしまっているようです。
人間によるアクセスがこんなに多いというのはありえないので、おそらくbotによるアクセスが原因でしょう。


とりあえず、以下の対策をとってみました。


■自作ウィジェットを削除

まずはこのブログのサイドバーに置いていた自作のウィジェットを削除しました。今はAmazon公式のウィジェットにしてます。

ちなみに削除したウィジェットはキャッシュを使ってなかったので1アクセスごとにリクエストを送っていました。

このブログはだいたい1日あたり1,200PVくらい(Google Analyticsの解析結果)なんですが、analogの解析結果だと5,000PVくらいありました。

まずはこれで1時間あたり200くらいはリクエストを削減できたと思います。(後になって焼け石に水だったわかりましたが)


■不明なボットを弾く

別の管理サイトのログを見てみたら、ここ数日同一ホストから1日8,000ほどアクセスがあるのがわかりました。User-agentも名乗らず、リファラもなし。ホストが「www????.sakura.ne.jp」になってるので、たぶん誰かがレンタルサーバーに設置してるbotだと思います。

.htaccessで

deny from www????.sakura.ne.jp

して弾くようにしました。


■GoogleBot-Imageを弾く

GoogleBot-Imageが大挙襲来していたのが分かりました。
画像をインデックスしてもらっても特にメリットはないので、robots.txtでブロックすることにしました。
あとmsnやyahooのボットもちょくちょく来てるようなので、ついでにCrawl-delayも追加。

User-agent: Googlebot-Image
Disallow: /

Crawl-delay: 10



■キャッシュを使う

キャッシュを使うようにしました。

キャッシュは当然使うべきなんですが、実は過去に

bot襲来→キャッシュファイル増大→数GBに膨らむ→サーバ落ちる→サーバ再起動時のディスクチェックに12時間以上かかる

という苦い経験があったので、キャッシュを使うのは避けていました。

とりあえずキャッシュの設定を復活させ、有効期限を半日にしてしばらく様子を見みます。

で、一晩明けてみてみたら、まあ予想はしてましたが、キャッシュファイル数が1万を軽く超えてました。

とりあえず一旦キャッシュファイル全削除。
ちなみに調べてみましたが、Linuxでひとつのディレクトリ内に格納できるファイル数はせいぜい1万程度ということらしいです。それ以上だとパフォーマンスが大幅に落ちたりするらしいです。とりあえず全削除で凌ぐとして、この問題はなんとかしないといけません。

というわけで、キャッシュの使用によって新たな問題をひとつ抱えることになってしまいました。。


■asianetcom.netを弾く

ログをみていたら、MSIEのUserAgentを名乗っているものの、アクセス数も動きも人間のものではないIPアドレスがいくつかありました。
逆引きしてみたら、「asianetcom.net」といういかにもあやしいホスト名。調べてみたら、どうもBaidu関係の、お行儀の悪いBotのようです。

http://wiki.livedoor.jp/aissle/d/%A5%ED%A5%DC%A5%C3%A5%C8%A1%CA%B9%F1%C6%E2%A1%CB#content_2_4

↑こちらのページを参考に、というかそのまんまの設定でBotを弾くことにしました。


deny from 61.14.160.0/19
deny from 122.152.128.0/18
deny from 125.252.64.0/18
deny from 202.147.0.0/18
deny from 203.192.160.0/19
deny from 210.232.15.16/29


これがかなり効果があり、ほぼ1時間2000リクエスト以内におさまるようになりました。


■Amazonへのリンク先をDetailPageURLにする

1時間2000リクエストの制限は、売上に応じて変動します。

Product Advertising APIへのアクセスのために使用される各アカウントは、1時間につき2,000リクエストまでの当初利用限度が認められます。その後は、各アカウントは、 30日間に発生する出荷された商品の1時間あたりの収益100円ごとに、1時間につき500リクエスト(1時間につき最大25,000リクエストまで)が受けられます。


要は売上に応じて段階的にリクエストの上限が増えるということです。

さらに

利用限度は収益実績に基づき毎日再計算されます。また、各アカウントに利用限度の追加が認められるかどうかを確認するため、アマゾンへのリンクバック時にはProduct Advertising APIのレスポンスにより返されるURLを改変なしに使用しなければならず、使用されるアソシエイトタグは、Product Advertising APIアカウント所有者のEメールアドレスと同一のEメールアドレスのもとに設定されたものでなければなりません。登録アドレスが一致しない場合、上記利用コントロールが正しく適用されない恐れがありますので、ご注意ください。


ともあります。

これまで自分の場合、amazonへのリンクはhttp://www.amazon.co.jp/exec/obidos/ASIN/B003T9VDIC/myhp-22/みたいなシンプルなものを使っていたんですが、これだと収益実績としてカウントしてくれないわけです。

というわけで、PAAPIのレスポンスにあるDetailPageURLを使うように変更しました。




以上でひとまず対応完了。
悪質なbotはいなくなったものの、まだgoogleやyahooのbotが頻繁に来てるので、やや危ない水準ですけど、2000リクエスト制限問題はほぼ解決しました。

しかしお行儀の悪いbotって本当に迷惑ですね。特にレンタルサーバだと思ったようにアクセスログが取れないこともあるので、対応に苦労しました。

このまま落ち着いてくれるといいんですけど、まだ対応を終えて数日しかたっていないので、しばらくは監視を続けようと思います。

2010年10月22日金曜日

Yahooウェブ検索APIのバージョンアップ対応

Yahooのウェブ検索APIがバージョンアップし、いずれ古いバージョンが使えなくなるということなので、バージョンアップ対応しました。

http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html

まあ対応といっても自分の場合は一カ所だけ、しかも/V1//V2/に変えるだけで済みました。

これもYSTからGoogleエンジンの移行への布石なんでしょうかね。

[jQuery]フォームのテキストフィールドに入力例を入れておき、フォーカスと同 時に消す



こういうやつです。



コードはこれだけ。かなりシンプルです。

$(function(){
$('input').focus(function(){
$(this).val('').css("color","#000");;
});
});




参考にした例。
http://gihyo.jp/design/serial/01/jquery-site-production/0009?page=1
http://h2ham.seesaa.net/article/103945151.html
http://txqz.net/blog/2009/05/16/2312

プラグインもありました。
http://phpspot.org/blog/archives/2009/04/toggleval.html

2010年10月21日木曜日

MySQLのカラム名の大文字・小文字

MySQLでカラム名を

regiDate

とか

startTime

みたいな感じにしてみたんですが、どうもこれはよくないみたいです。
Pear::MDB2でデータを引っ張り出して配列に格納したら、添字がregidateとstarttimeになってました。

http://dev.mysql.com/doc/refman/5.1/ja/identifier-case-sensitivity.html

カラム名、インデックス名、ストアされたルーチン名とカラムのエイリアスは、どのプラットフォームでも大文字と小文字が区別されません。トリガ名では大文字と小文字が区別されます。


長いことMySQLを使ってましたが、これは知らなかったです。
小文字+アンダースコアの形式を使っておくのがいいみたいです。

2010年10月20日水曜日

fireworksのスクリプトでファイルを一括トリミング&書き出し

・124x80のjpg画像が50個ほどあり、
・真ん中でトリミングしてサイズを110x80にし、
・ファイル名はそのままにしつつ、書き出す

ということをfireworksのスクリプト(jsf)でやってみました。ちなみにスクリプト言語はjavascriptが使えます。

var dom = fw.getDocumentDOM();

var basePath = "file:///C:/path/to/origImage/";
var outPath = "file:///C:/path/to/newImage/";

var jpgs = new Array("1.jpg","2.jpg","3.jpg","4.jpg");

dom.deleteAllInDocument();

var jNum = jpgs.length;
for ( var i = 0; i < jNum; i++ ) {
fw.getDocumentDOM().importFile(basePath+jpgs[i], {left:0, top:0, right:0, bottom:0}, false);
saveFile(jpgs[i]);
dom.deleteAllInDocument();
}

function saveFile(F){
dom.exportTo( outPath + F , {
exportFormat: "JPEG",

percentScale: 100,
crop:"true",
cropTop: 0,
cropLeft: 7,
cropRight: 117,
cropBottom: 80,
});
}



fireworksを起動後、適当なサイズで空の新規ドキュメントを開き、[コマンド→スクリプトの実行]でこのスクリプトを実行すれば、一気に書き出されます。

javascriptとはいえ、fireworksでのオブジェクトやドキュメントの扱いは初めてなので少し時間がかかりましたが、思うようにスクリプトが動いて一気に書き出しされると気持ちいいですね。

あと欲を言うとフォルダ内の全ファイルを自動で処理できたらいいんですけど、そこまではわからなかったので、ファイル名は自分で配列に入れています。


ちなみに使ったfireworksのバージョンは8です。たぶんCSやもっと古いバージョンでも動くと思います。


以下は今回参考にさせてもらったサイトです。
http://help.adobe.com/en_US/Fireworks/9.0_Extending/
http://trinine.net/blog/?p=74
http://www.pixelimage.jp/blog/2008/02/_fireworks.html

2010年10月9日土曜日

角丸背景画像が簡単に作れるWebツール「RoundedCornr」

最近はCSSだけで角丸を実現してるケースが多いようですが、個人的には背景を画像にするやり方のほうが好みです。

ただ、いちいち画像を作るのも面倒なので、いいツールないかな~と思って見つけたのがこれです。

RoundedCornr

ページ内にツールが複数あって、画像を生成してくれるのは一番下のSingle RoundedCornr Imageというやつになります。
他のはCSS方式のようです。

色やサイズ、角の大きさなどを指定して、こういう画像が簡単に作れます。なかなか便利です。



2010年10月1日金曜日

CSS文法チェッカー

長いCSSファイルを編集している時、途中どこかで文法を間違えてしまったようで、CSSが機能しなくなってしまいました。

おそらくカギ括弧の閉じ忘れとか、セミコロンを普通のコロンにしてしまったなどのミスで、正直上から一行ずつチェックしていくのは面倒。

そういえばCSSの文法チェッカーってないのかな?と思ってググったら、ありました。

CSS検証サービス

これでチェックしたら一発でした。原因はやはりカギ括弧の閉じ忘れ。

かなり便利なので、これからちょくちょくお世話になりそうです。

2010年9月12日日曜日

AmazonPAAPI仕様変更 CustomerContentLookup廃止

amazonより、Product Advertising APIの仕様変更についてのお達しがありました。


利用率低下のため、以下に記載する Product Advertising API のオペレーション/レスポンス・グループは、2010年10月15日をもってサポートを終了いたします。

オペレーション



  • CustomerContentLookup

  • CustomerContentSearch

  • Help

  • ListLookup

  • ListSearch

  • TagLookup

  • TransactionLookup

  • VehiclePartLookup

  • VehiclePartSearch

  • VehicleSearch



レスポンスグループ



  • ListmaniaLists

  • MerchantItemAttributes

  • PromotionDetails

  • Subjects

  • Tags

  • TagsSummary

  • VariationMinimum




とのこと。
あまりメジャーでない機能の廃止なので、自分には関係ないかな、と思ってたんですが、念のため調べてみたら、CustomerContentLookupを使ってるところが一カ所だけありました。

自分で作ったウィッシュリストをAPI経由で参照してリストを作成する、という機能。ほとんど使っていなかったので影響はそれほど大きくありません。
ウィッシュリストが活用できるという点でけっこう便利だと思ってたので、なくなっちゃうのは少し寂しい気がします。


とは言っても廃止が決定してしまったのはしょうがないので、APIを使うのをやめ、代わりにASINを配列に保存するという簡単な改修を行って対応を完了しました。

2010年9月11日土曜日

Services_TwitterのOAuth対応

少し前にTwitterAPIがOAuth対応になり、これまでのベーシック認証が使えなくなりました。

そのうち対応させなきゃいけないなー、と思いつつ後回しにしていたのですが、こちらの記事を見て簡単にできることがわかったので対応してみました。

http://phpspot.org/blog/archives/2010/09/oauthphptwitter.html

まずは必要なPearライブラリを用意。その時点での最新バージョンをインストールします。


pear install channel://pear.php.net/Net_URL2-0.3.1
pear install channel://pear.php.net/HTTP_Request2-0.5.2
pear install HTTP_OAuth-0.1.18
pear upgrade channel://pear.php.net/Services_Twitter-0.6.2


※Services_Twitterはバージョン0.4以降はphp5.2以上でないとインストールできません。
自分の場合、php5.1の環境だったんですが、-fオプションで強制的にインストールしました。
そのまま使ってますが、今のところ特に問題はでていません。


続いてソースコードの修正。こんな感じになります。


require("Services/Twitter.php");
require("HTTP/OAuth/Consumer.php");

$tweet = "ツイートです\n";

$twitter = new Services_Twitter();
$oauth = new HTTP_OAuth_Consumer(
'*************', //Consumer Key
'*************', //Consumer Secret
'*************', //Access Token
'*************' //Access Token Secret
);
$twitter->setOAuth($oauth);
$msg = $twitter->statuses->update($tweet);
echo "Tweet OK \n\n";


これでAPI経由でtweetできるようになりました。

2010年9月8日水曜日

Webサーバー上のファイルのキャッシュの制御

ファイルのキャッシュコントロールをする要件があったので、復習の意味も兼ねて調査しつつ、手法をまとめてみました。


■htmlのmetaを付加する

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">


一番簡単でポピュラーなやり方だと思います。
使えるのはHTMLファイルのみという制約がありますが。


■ファイルのオシリに引数を付ける

<img src="hoge.gif?20100907">
<link type="text/css" rel="stylesheet" href="hoge.css?20100908">
<script type="text/javascript" src="js/hoge.js?20100909" language="JavaScript"></script>


みたいな感じ。
引数を付けることによってファイルの内容が異なることを明示し、ブラウザにキャッシュさせないというやり方。
これもかなりポピュラーかと思います。


■Apacheで制御する

Header set Cache-Control "no-cache"
Header set Pragma "no-cache"


こんな具合に、httpヘッダにno-cacheを出力するように設定することで、httpd.confや.htaccessでも制御可能です。


今回はこちらのサイトを参考にしました。
http://blog.look-ss.jp/article.php/2008092600255048 http://tech.bayashi.net/pdmemo/browsercache.html



あと大事なのは実際キャッシュされているかどうかの確認。
firefoxのアドオン「CacheViewer」が便利です。
https://addons.mozilla.org/ja/firefox/addon/2489/

2010年8月18日水曜日

キーボードなしでデスクトップPCを起動するには

自宅のデスクトップPCで使っていたPS2キーボードの調子が悪いので、USBキーボードに変えたのですが、PCが起動しなくなってしまいました。

というわけでBIOS設定をいじります。
デフォルトではHalt Onの項目がAll ErrorsになっていたのでAll, But Keyboardに変更。

これでキーボードが見つからなくてもPCの起動を続行する、という設定になり、無事起動するようになりました。

2010年8月8日日曜日

クリアクリーンの顆粒

初診で歯医者に行った時のこと。

歯を見始めてしばらくして、歯科医師に「歯磨き粉はクリアクリーン使ってますか?」と聞かれ、「は、はい、、、でもどうして分かるんですか?」と答えました。

どうやら自分の歯と歯の隙間、いわゆる歯周ポケットにクリアクリーンの顆粒が入っていて、すぐ分かったんだそうです。

クリアクリーンは隙間の歯垢を落とすミクロクラッシュ顆粒がウリなんですけど、その顆粒が歯の隙間に残ったままになっているケースがよくあるそうです。

歯並びや歯みがきの仕方にもよるようですが、歯みがきの後は念入りに口をゆすがないと、残ってしまうことが多いんだとか。


。。。歯を診ただけで、使ってる歯磨き粉をずばり当てられたのはちょっと驚きでした。

2010年8月2日月曜日

MySQLで日付の差分を求める

日付型のカラム2つの差分を調べようと思い、

select date1 - date2 from table

とやったら、変な数字が返ってきてしまいました。

調べてみたら、こういうときはdatediffという関数を使えばいいようです。
こんな具合です。

SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');

http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html

2010年7月31日土曜日

PEAR::HTML_QuickFormの拡張

今すぐ何かに必要、というわけではないんですが、PEAR::HTML_QuickFormを拡張して使っている例で参考になりそうなのがあったので、自分用メモとして投稿。

inputタグの末尾のスラッシュを外す拡張
http://d.hatena.ne.jp/KeyKey/20071220/1198154161

出力コードをカスタマイズする拡張
http://mamok.com/2007/06/05/342/

2010年7月27日火曜日

「Setup is inspecting your computer's hardware configuration」エラーで WinXPインストールができない

WindowsXPをCD-ROMからインストールしようとしたら、「Setup is inspecting your computer's hardware configuration」というエラーが出ました。
BIOSの設定とか見ても特におかしいところはないし、原因不明。

とりあえずエラーメッセージでそのままググって見たところ、同じような問題に遭遇している方が何人かいました。

http://d.hatena.ne.jp/elwoodblues/20081006/1223273848

今回インストールしようとしていたPCはもともとCentOSが入っており、それが原因ということでした。

面倒でしたが、knoppixを焼いてCDからブートし、HDDの内容を消去し、XPのCDを入れたところ、無事にインストールできました。

しかしまあ、毎度色んなエラーに遭遇するもんです。

2010年7月16日金曜日

Linuxで外付けHDDを使うには

一時的なデータバックアップに余っている外付けHDDを使おうと思い、手順を調べてみたところ、すぐに詳しく説明されているページを見つけられました。

http://www.mk-mode.com/wordpress/?p=2783

手順が詳しく書いてあるので助かります。
ほぼこの通りに実行して、無事認識されました。

ウェブページをローカルに保存できるfirefoxのアドオン「ScrapBook」

ブラウザでページを保存するやり方はあまり使えないので、フリーウェアで何かないかな、と思って探していたらこのScrapBookを見つけました。

http://amb.vis.ne.jp/mozilla/scrapbook/index.php?lang=ja

画像はもちろん、cssやjavascriptもしっかりローカルに保存してくれます。

firebug等を使えばウェブページのcssやhtmlを直接いじることもできますが、ローカルに落として作業したいということも少なくないので、そういう時にScrapBookが活躍してます。

2010年7月10日土曜日

ワンクリックでサーバ切替ができるfirefoxのアドオン「Server Switcher」

https://addons.mozilla.org/en-US/firefox/addon/2409/

導入手順は以下。

1.アドオンをインストールしてfirefoxを再起動。
2.ツール→アドオンからServer Switcherの設定。
3.プロジェクト名を入力し、テストサーバと本番サーバを登録してOK。
4.最後にもう一度firefoxを再起動し、テストサーバ、本番サーバのいずれかにアクセス。
5.すると、アドレスバーの右の方(ブックマークの星印のとなり)にアイコンが表示されています。このアイコンをクリックするとテストサーバ←→本番サーバの切り替えができます。

シンプルだけど、なかなか便利なアドオンだと思います。

2010年7月9日金曜日

Linuxでモニタの電源を管理

現在古いノートPC(ThinkPadR50e)のLinuxサーバ化を計画中で、いろいろ試してます。

今回はモニタ(ディスプレイ)の電源をLinux側からコントロールする方法について調べてみました。

フタを閉じればモニタの電源もOFFになるんですが、放熱のためフタは少し開けておきたいと思います。

そうなるとモニタは付きっぱなし状態。電気代もかかるし、ムダな熱も発します。

ググってみると、settermというコマンドがあるのがわかりました。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/253usedpmscon.html

まずはページにあるコマンドをそのまま実行。
# setterm -blank 5 -powersave on -powerdown 15
cannot (un)set powersave mode


よくわかりませんが、パワーセーブモードに対応してないのでダメなようです。
さらに確認のため、

# setterm -powerdown 1

とやるとエラーは出ませんが、モニタの電源は落ちませんでした。-powerdownも対応してないようです。
というわけで、

# setterm -blank 1

としてみました。
1分経ったら画面が真っ黒になり、コンソールから何か入力したりマウスを動かすと戻ります。

この状態だと画面が黒くなるだけでモニタは点灯しています。
電源OFFにしたいので、他の方法がないか探してみると、vbetoolというのが見つかりました。

http://tmp.blogdns.org/archives/2009/03/post-306.html
http://diary.sshida.com/20081027-3-diary.html

# yum install vbetool
であっさりインストールOK。

# vbetool dpms off
これで消灯。
# vbetool dpms on
これで点灯。

他にオプションでstandbyとかsuspendとかあるので試してみましたが、offと同じでした。

/etc/rc.d/rc.local/usr/sbin/vbetool dpms offを追記。これで次回起動時からモニタの電源はOFFになります。

ただ、起動後にモニタを点けたい時はちょっと面倒。

ssh接続できれば問題ありませんが、直接コンソールから入力する場合、画面が真っ黒な状態で『root[Enter]パスワード[Enter]vbetool dpms on[Enter]』とキーボードから入力しないといけません。

まあ滅多にないことだと思うので、とりあえずvbetoolを使ってみます。

2010年7月8日木曜日

text-indent:-9999pxとCSS Sprite

自分はよくcssのtext-indent:-9999pxを使ってます。
このやり方は検索エンジンスパムになるという噂(?)があるのは知ってましたが、便利だし、具体的にペナルティをくらったという事例も聞かないので、そのまま今も使い続けています。

最近もtext-indent:-9999pxに関して調べていて、その際にこちらのページがヒットしました。

http://otaxa.com/css/text-hiding-without-text-indent-9999px/

text-indent:-9999pxを使わない方法、いわゆるCSS Spriteについて書かれています。
CSS Spriteについては以前から存在は知っていましたが、スルーしてました。が、このページはGoogleとYahooの事例を使って説明されていてすごくわかりやすく、自分もCSS Sprite使ってみようかな~と思うようになりました。

何にしてもまずは実際に使ってみないといけないですね。一度メリットやデメリットを体感してみたいと思います。

とりあえず「画像のファイル名を考える必要がなくなる」というのが大きなメリットのような気がします。ファイル名考えるのって意外と面倒なんですよね。管理も面倒ですし。

2010年7月7日水曜日

CentOS4の不要と思われるデーモンのリスト

こちらのページでまとめられています。
http://mountainbigroad.jp/centos/services.html

デーモン(サービス)ごとに説明があるのが助かります。不要なサービスを停止するときにはかなり役に立ちそうです。

2010年7月4日日曜日

ログアウト後もバックグラウンドでプロセスを実行する

定期的に yum update を実行してるんですが、これがなかなか時間がかかります。

Ctrl+zで一旦停止して、bg %でバックグラウンドで実行。というやり方でもいいんですが、これだとログアウトするとジョブが終了してしまうようです。

というわけで、nohupというのを使ってみました。

nohup yum -y update &

これだとログアウトしてもそのままジョブが実行され、標準でカレントディレクトリにnohup.outという実行ログが出力されます。

2010年7月3日土曜日

text-indent:-9999pxしたアンカーをクリックした時に点線が左に伸びるのを解 消

text-indent:-9999pxは最近よく使うんですが、テキストを左に9999px分移動させるため、リンクをクリックしたときに出る点線が画面左端まで伸びてしまいます。

これはoverflow:hiddenで解消できます。
↓クリックしてみてください。

伸びる
伸びる

伸びない
伸びない


しかしoverflow:hiddenはいろんなところで活躍しますね。
最近、困ったときはとりあえずoverflow:hiddenするクセがついてしまいました。

2010年7月2日金曜日

cssの「cursor:pointer」でカーソルを指アイコンに

「cursor:pointer」を使うと、要素にカーソルを合わせたときに指アイコンにすることができます。

<div style="width:30px;height:30px;cursor:pointer;background-color:orange;padding:20px;">hoge</div>

hoge


アンカー以外の要素をリンクっぽく見せたい場合などに使えます。

cssのoutlineプロパティでフォーム要素のアウトラインを指定する


cssのoutlineプロパティを使うと、フォームの各要素をデコレーションできます。


<style type="text/css">
input:focus, select:focus, checkbox:focus { outline: 5px #0000ff dotted; }
</style>

<form name="test" id="outlineTest">
<input type="text" name="t1" value=""><br>
<select name="t2"><option value="1">select1</option><option value="2">select2</option><option value="3">select3</option></select><br>
<input type="checkbox" name="t3" value="1">checkbox
</form>


こんな感じになります。




checkbox




cssのみで手軽に実装できるので便利です。

参考:http://www.tagindex.com/stylesheet/form/outline.html

2010年7月1日木曜日

自宅用小型静音サーバを探す

今自宅には外部非公開のLinuxサーバを置いていて、自動バックアップとか、テストで使ったりしてます。

4年ほど前に買ったSycomの静音省スペースPCを使ってるんですが、ハードウェアトラブルもなく、音も静かで快適。いい買い物をしたと思っています。

ただ省スペースといってもそれなりのサイズがあり、ケーブル類も含めて机の上の一角を占有してしまっているのが唯一気に入らない点。
というわけで、新しく小型静音サーバを買って、ルーターと一緒に棚の中に格納してしまおう、と考えています。
(現LinuxサーバはWindowsデスクトップPCとして使う予定)

調べてみて、良さそうだったのが以下の2社。

http://minipc.jp/
http://www.oliospec.com/

どちらも静音、小型という要件は満たしています。
値段は¥35,000~と、それなりのお値段です。

非公開の自宅サーバ程度にあまりお金をかけたくないというのが本音ですが、過去にハードウェアをケチったせいで、トラブルに悩まされたことがあり、そのことを考えるとこの程度の金額はかかって当然かな、という気もします。

特に急いではいないので、とりあえずもうしばらく検討してみるつもりです。

2010年6月29日火曜日

sshでパスワードなしでログインする

まずは接続元サーバで、接続元のユーザー(adminとします)でキーを作成。DSAで。
$ ssh-keygen -t dsa

キー保存先を聞かれますが、デフォルトでいいと思います。
続いてパスフレーズも聞かれます。ここ大事です。
普通にパスフレーズを入力してもいいですが、何も入力せずにEnterすることもでき、その場合パスフレーズなしになります。
パスフレーズなしにしておくと、ssh接続の際に毎回パスフレーズを入力しなくて済みます

これで/home/admin/.sshのディレクトリに、id_dsaとid_dsa.pubが生成されます。

id_dsaはそのまま。id_dsa.pubは接続先サーバに持って行きます。

そして接続先サーバで以下を実行。

$ cat id_dsa.pub >> $HOME/.ssh/authorized_keys
$ chmod 600 $HOME/.ssh/authorized_keys

以上で設定完了。
sshすると、パスフレーズなしの場合は即接続。パスフレーズありの場合は入力を求められ、認証が通れば接続できます。

なお、パスフレーズありの場合でもssh-agentとssh-addを使った仕組みを用意する必要すれば、パスフレーズ入力が自動化できるようです。

xrea,coreserverでのサーバー移動(引っ越し)

自分はレンタルサーバーのxreaとcoreserverを使ってます。
このkawama.jpもxreaに置いてたんですが、接続が重くなったり、一時的に繋がらなかったりすることが出てきたので、サーバーの移動をしてみました。

以下、その手順です。


※s1サーバーからs2サーバーへ移動するケースを想定
・新規でs2サーバーにアカウントを作る。アカウント名は既存のサーバーと同じにする。
・1~2日待つ。(※1)
・s1の管理画面にて、mysqlのDBを全部保存する。DBの数ぶんmysql_dbname.dumpができているのを確認。
・s2の管理画面にて、サーバー間コピーをする。s1サーバーからミラー(削除なし)ですべてのファイルをコピーする。(※2)
・s2の管理画面にて、s1と同じDB名でデータベースを登録し、DBを復元する。
・s1の管理画面からs2の管理画面にcronjobを移す。手作業。
・s1の管理画面からs2の管理画面にドメインウェブを移す。(テキストで一括。強制設定する)
・s1の管理画面からs2の管理画面にドメインメールを移す(テキストで一括。強制設定する)
・動作確認をする。※3
・動作確認OK後、DNSを変更。s2に向ける。

(※1)アカウント作成後はアカウントに割り当てられるリソースが少ないため、サーバー間コピーが失敗してしまうから。 http://sb.xrea.com/archive/index.php/t-11899.html
(※2)仕様の問題なのか、サーバー間コピーをするとパーミッションが変わってしまうので注意。777のディレクトリが705になってたりします。
(※3)自分の場合、hostsにs2のIPを書いて確認しました。


以上で無事に移動が完了しました。

なお今回の移動でxrea,coreserverの使い方のコツみたいなものを感じたので、メモしておきます。


■ドメインは自前のものを用意する
yourid.s1.coreserver.jp などのアドレスは、サーバーを移動したら使えなくなるので、なるべく使わないほうが無難。
あとxreaで1個、coreserverで10個まで使えるサブドメイン(***.xrea.jpとか***.coreserv.comとか)はサーバーを移動すると一緒に移動されますが、xreaから他のレンタルサーバーへ移動するという可能性もあるので、あまり依存しないほうがいいと思います。
またcoreserverで複数サブドメインを登録している場合、サーバー移動と同時に移されるサブドメインは最初に登録したひとつだけのようです。2個目以降は削除→再登録という手順が必要でした。

■cnameを使う
ドメインを多数所持しており、それらをxrea,coreserverで使っている場合はcnameを使うとサーバー移動の時に便利です。
aネームでIPを割り当てるのは一つだけにし、それ以外はcnameを使うようにすると、サーバーを移動してもaネーム指定したものだけを変えればいいからです。

具体的にはこんな感じ。


example.comのDNS設定
a coresrv 123.456.789.123

example.netのDNS設定
cname www coresrv.example.com.
cname @ coresrv.example.com.

example.orgのDNS設定
cname www coresrv.example.com.
cname @ coresrv.example.com.


■DBはなるべく少なく
データベースの数が多いと移行が面倒です。
coreserverはDB数が無制限ですが、移行の手間を考えるとなるべく少なくしておいたほうが無難です。

■パーミッションの変更が必要なファイルやディレクトリはまとめておく
前述しましたが、サーバー間コピーでパーミッションが変わってしまうので、777のディレクトリ(例えばSmartyのコンパイルディレクトリとか)は一カ所にまとめておいたほうが楽だと思います。


だいたいこんなところです。
サーバーを移動してレスポンスが劇的に改善されました。イライラがなくなって本当にスッキリしました。

準備にそれなりの時間がかかりましたが、一度経験しておけば以後はスムーズに移動できると思います。

xrea,coreserverを継続して使っていくのであれば、サーバー移動の経験とスキルは身につけておいて損はないと思います。


※メールに関する注意事項
メール設定を移行した場合は、/Maildirに注意。
サーバー間コピーでルートディレクトリを対象にすると/Maildirもコピーされるが、そのままだとエラーが出てメール受信できない。なので/Maildirの中身を削除したあとにアカウント設定をすること。
http://sb.xrea.com/archive/index.php/t-5494.html

※再度引っ越ししました
coreserverでサーバー再移行

2010年6月25日金曜日

WinDVDでAVCHD Liteの動画を見る

今使っているデジカメの動画フォーマットがAVCHD Liteという形式。デジカメ動画といえばMotionJPGが有名ですが、AVCHDはBD時代の新しいフォーマットだそうです。(Liteは少し解像度が低いバージョン)

当然ですが、画質がきれいです。
が、困ったことにPCで再生するハードルが高いです。WMP12ならスムーズに再生できるようですが、Windows7じゃないと導入不可。

フリーのVLC Playerとかでも再生できるんですが、カクカクしたりしてあまりスムーズとは言い難いです(環境にもよると思いますが)。


いろいろ調べましたが、お金出してソフトを買ったほうが良さそうな雰囲気なので、買いました。


PowerDVD 10 Standard

以前CyberLinkのPowerDirectorという編集ソフトを使ってたので、あまり深く考えずにダウンロード版を購入。

さっそくインストールして再生・・・できない?!

サイトに戻って仕様を見てみたら、なんとStandard版はAVCHD未対応。対応してるのは最上位版のUltra 3Dのみ。
5000円ムダにしました。。


このままではおさまりがつかないので、WinDVDをチェック。


Corel WinDVD 2010 通常版

今度はしっかり体験版DLして再生できるかどうか確認しました。こちらはStandard版でも再生OK。しかもスムーズ。
というわけで結局WinDVDも買って、こっちを使っています。



我ながらひどいミスをしてしまったもんです。
今度から気をつけよう。。

2010年6月11日金曜日

jqueryでカルーセルパネル

amazonの「この商品を買った人はこんな商品も買っています」みたいな、商品がくるくるまわるウィジットを作りたいと思い、jqueryベースのちょうどいいライブラリがないか調べてみました。

こういうのです↓



この手のウィジットはカルーセルパネルと呼ばれています。カルーセルというのはメリーゴーランドのこと。くるくるまわるからそう名付けられたようです。英語だとcarrouselまたはcarousel。rは1個でも2個でもどっちでもいいみたいです。

軽くググって見つけたのがこれら。

jCarousel
定番

jCarousel Lite
jCarouselを軽量化し、導入を簡単にしたもの

Billy Carousel
あまり調べてないが、シンプルな感じ

jquery carrousel
スライダーもついてる。ドキュメントはあまりない

Slider Gallery
Apple風スライドギャラリー

WordPressの各エントリー記事にスライダーギャラリーを飾る
上のApple風のカスタマイズ


上の3つなどはかなり機能が充実していて、マニュアル読んでオプションをいじるだけでも幅広く対応できると思います。


あと参考になりそうなアスキーの記事があったので、貼っておきます。
http://ascii.jp/elem/000/000/173/173575/ http://ascii.jp/elem/000/000/481/481241/

納税コールセンターから間違い督促電話

"納税コールセンター"というところから電話があり、かなり感じの悪いオバチャンに、矢継ぎ早に以下のようなことを言われました。

「あなたは税金を約15万円滞納しています」
「先月通知と納付書を送りました(届いてない)」
「早く納付してください」
「滞納税もかかります」
「1日滞納するごとにどんどん滞納税が増えます」
「お宅の住所は○丁目○番地の○○マンション○号ですね(ちょっと違ってる感じだったので電話口で訂正)」
「都税事務所名義で納付書を再送します」

まったく身に覚えがないので軽く混乱。一瞬詐欺かとも思いました。
仕事中だったし、紙とペンも持ってなかったので担当者の名前も聞かずに「納付書が届いたらすぐ納付します」といって電話を切ってしまいました。


後であらためて考えてみましたが、やっぱり全く身に覚えがない。3月に提出した確定申告は記述ミスがあり、修正申告の後に還付金の額が減るということはあったものの、追加で15万円も課税される覚えはまったくありません。


というわけで翌日、管轄の税務署に電話。記憶してる範囲で上記のやりとりがあった旨を説明すると、「都税事務所に電話してください」と言われる。
続いて都税事務所に電話。これまでのいきさつを説明し、名前と住所を伝えて一旦電話を切る。折り返し電話が来るが、「該当がない」とのこと。

結局よくわからないので、着信履歴から納税コールセンターに電話したら、税務署のほうに電話して確認を取るとのこと。
(ちなみに納税コールセンターは税の徴収に関わる事務を、税務署の下請けとしてやってる機関だそうです)


で、折り返しの連絡が来て、結局ミスだったことが分かりました。

ミスがあったのは納税コールセンターなのか、それとも税務署か、またはその両方なのか。そこまでは教えてもらえませんでしたが、修正申告があった影響でミスを引き起こしたようです。



おかげで落ち着かない気持で1日過ごす羽目になりました。

ミスがあるのはしょうがないと思います。
納得いかないのが最初の電話のオバチャンの態度。特に「1日滞納するごとにどんどん滞納税が増えます」の一言で不安を煽られ、冷静さを失いました。もう少し柔らかい対応であれば、不安も軽減され、落ち着いてより素早く対処できたと思います。
高圧的に、事務的なことしか喋らない・喋れないのであれば、初音ミクでも使ってくれればいいのに、と思います。

まあオバチャンの高圧的な態度くらいで混乱するようじゃ、自分もまだまだ甘いってことでしょうね。


この程度のことでは税務署や納税コールセンターを責めるつもりはありません。
今回のことで思ったのは、「どんな時も冷静に落ち着いて対処しなきゃいけない」ということ。

もういい大人なので、多少のことでは動じないようにしたいですね。

2010年6月3日木曜日

QTTabBarでエクスプローラーのタブ化

PCで作業しているとエクスプローラーのウィンドウがどんどん増えて、目的のフォルダがどれかわからなくなってしまうことがよくあり、これを解消したいと思ってエクスプローラーのタブ化ソフトを導入してみました。

「エクスプローラー タブ」でググるといろいろ出てきます。とりあえず評判の良さそうなQTTabBarを入れてみました。
実際使ってみると、多機能で便利。ただ起動・動作がやや遅いのがネック。エクスプローラー自体が落ちることも多くなった気がします。

で、他のタブ化ソフトも試してみることにしました。

MDIE
HandyTab
TabExplorer

どれも悪くないです。MDIEは多機能で便利。
が、3つとも個人的な絶対要件である以下の2点を満たしていませんでした。

[Ctrl + Tab]でタブ切り替え
[Ctrl + w]でタブ閉じ

FireFoxと同じ操作でタブを扱いたいんですよね。

というわけでちょっと重いけどQTTabBarを使い続けることで落ち着きました。

2010年6月2日水曜日

ieでposition:relativeが正常に表示されない

毎度のことですけど、HTMLコーディングしてたらieだけ表示がおかしくなる問題が発生。

今回はposition:relativeのバグでした。ie6とie7で確認。ie8は環境がないので見てません。

「position:relative ie」などでググると同様の問題で困ってる人がけっこう多いことがわかります。
特にこのあたりのページが参考になりました。

overflow:auto(scroll) 要素内の position:relative(absolute) 要素 注意点
IEでposition:relative;の孫要素のborderが消える

2010年5月28日金曜日

text-indent:-10000pxが効かないのはtext-alignのせいだった

CSSのtext-indent:-10000pxを使って要素内の文字列を表示させない、というのをやろうとしたんですが、今日はこれが効かない。なぜだ!?

で、そのまんま「text-indent 効かない」でググってみたらすぐに答えが見つかりました。
text-alignを削除したらtext-indentが効くようになり、問題解決。

やっぱりGoogleはすごい。

2010年5月21日金曜日

amazon商品情報ビューワー

というのを作ってみました。

amzon商品情報ビューワー

Amazon PAAPI(Product Advertising API)で取得できる商品情報はかなり量が多いので、階層構造を見やすくしてみたら便利かな、と思って作ってみました。

PearのServices_Amazonを使ってます。
軽い気持ちで始めてみたんですが、階層表示の調整などをしているうちに、それなりの時間がかかってしまいました。

そのうちBrowseNode検索とかキーワード検索にも対応させたいと思ってますが、いまのところ未定です。

2010年5月19日水曜日

Oracleで時刻を24時間表示にする

TO_CHAR('YYYY/MM/DD HH:MI')

こうすると、HHの部分が12時間表記になる。これを24時間表記にするにはHH24を使う。

こんな感じ。

TO_CHAR('YYYY/MM/DD HH24:MI')

2010年4月22日木曜日

NHKビデオカウボーイ

http://webdog.be/archives/10417_014508.php

こちらのサイトから見ました。NHKの映像コンテンツ制作入門動画です。

おもしろいです。すごく。
しかも勉強になります。

実際にこれらのテクニックを使うことはないと思いますが、知っておくだけで映像を見るときの目が変わると思います。

3分強の動画が4本ありますが、おもしろいのであっという間に見終わってしまいます。おすすめです。

2010年4月17日土曜日

動画でphotoshopの勉強

今さらだけどphotoshopを使えるようになっておこうと思い、勉強をはじめました。
ちなみに現在自分のデザインスキルはfireworksを少しかじっている程度。photoshopはほとんど触ったことはありません。

で、とりあえずこの本を買ってみました。



定価¥2,079。内容はそんなに多くありません。最初の一歩には悪くないかと思います。

正直なところ、本は買わなくても良かったかも。
ざっと読んだだけなので、立ち読みや図書館でも十分な程度でした。



それよりも役に立ったのはウェブサイト。

まずはここ。
http://www.fmod.jp/
基礎講座がかなり勉強になりました。


さらに役に立ったのが動画。ニコニコです。

初心者のためのフォトショップ講座

【Photoshop】 FFっぽいロゴの作り方ですとも!【FF手描き】

【補足編】グラデの説明~FFっぽいロゴの作り方ですとも! 2

Photoshopマイリスト

これら動画での学習(これがeラーニング?)の効果は抜群でした。

元の動画自体のクオリティが高いのと、あとはユーザーのコメントも役に立ちました。「この機能はCSから名前が変わってる」とか、有益なコメントがけっこうあって助かりました。まあ大半は役に立たないコメントなんですが。

今後もこうしたPCアプリを学ぶ機会があったら、まず動画を探すところから始めてみようと思います。

2010年4月13日火曜日

vmware-authd.exeを停止

たまにタスクマネージャを開くと、vmware-authd.exeというプロセスのメモリ使用量が多いのが目につく。

vmware関係のデーモンだと思うけど、なんだろう。必要ないなら止めてしまいたい。

と思い、調べてみたところ、どうやら止めても平気なようです。

http://www.over-rabbit.com/hobby/blog/pc-diary/337

というわけで、サービスの管理にて「VMware Authorization Service」を停止&スタートアップ手動化。

vmwareも普通に起動できるし、今のところ問題ありません。

2010年3月28日日曜日

mod_rewriteで503のメンテナンス中ページを表示させる

メンテナンス等でサイトを一時停止する場合は、ステータスコード503を使います。
検索エンジンボットに「あくまで一時的な停止だよ」と教えてあげるためです。

今回リニューアルにあたって、短時間ですけどメンテナンスページを用意し、503を返すようにしてみました。

こちらを参考にしました。
http://web-tan.forum.impressrd.jp/e/2009/06/16/5880

ローカルでテストしてうまく動作したので、当然本番でもそのまま使おうとしたんですが、おなじみの 500 Internal server errorが出てしまった。

うーん、なぜだ。

しばらく悩んで、解決にいたりました。原因はapacheのバージョン違い。
ローカルはapache2で、本番サーバーはapache1。mod_rewirteの動作が違うようです。

で、こちらのページを参考にして対応しました。
http://ff11guide.com/weblog/wordpress-2-9-updata/

これでうまくいきました。

リニューアル完了。mtからwpに移行

前々からやろうと思ってたmtからwpへの移行が終わりました。

2005年から約5年の間、mt3には本当にお世話になりました。

既にmtもバージョン5が出てますが、重厚長大なエンタープライズ路線を突き進んでるようなので、wpを選ぶことにしました。
wpは他のサイトでも使っているし、やはりphp使いとしてはperlのmtよりwpのほうが圧倒的に扱いやすいです。

今回リニューアルにかかった時間は、下調べから実作業まで、だいたい丸一日程度でした。

なお記事の移行等についてはこちらのページを参考にさせていただきました。
http://www.ideaxidea.com/archives/2008/12/movabletypewordpress.html

当サイトのリニューアルはこれが2回目。cmsは最初がzope、次はmt、そして現在のwpという歴史を歩んでいます。

次のリニューアルは2015年くらいでしょうかね。そのころにはまた新たなcmsが登場してるのかな

2010年3月25日木曜日

ホームエレクター購入

自宅に物が増えてきて、きちんと整理して収納したいと思い、前々から欲しかったホームエレクター(ERACTA)でラックを組むことにしました。
ステンレスタイプで、高さ1900mm×幅750mm×奥350mmのラックを組みます。
構成は「ポスト2本組(H74PS2)×2」と「シェルフ(H1430C1)×4」。

最終的に買ったのはこのお店→ERECTA Style

もちろん注文前に下調べして最安値を比較。とは言ってもGoogleの1ページ目で目についたサイトをいくつか拾った程度ですが。






























お店価格
amazon(出品者es)\18600
@インテリア\17999
インテリア・マーケット\17746
ERECTA SHOP\18326
アスクル\26040
楽天ERECTA Style\17595

※しっかり調べたわけではないので、あくまで参考程度でみてください

1万8千円前後が相場みたいです。どこも送料無料でした。
あとはポイントがつくとか、オマケがついてくるとか、個々の好みで決めればいいと思います。
自分は楽天ポイントをためてるので、楽天のお店にしました。

商品は週末に届く予定。楽しみです。

2010年3月12日金曜日

HTMLのラベルタグ()を使ってユーザビリティ向上

よくある「チェックボックスやラジオボタン横のテキストをクリックすると、セレクト要素が選択される」というの、どうやれば実現できるか調べてみたんですが、htmlのlabelを使えば簡単に実装できることが分かりました。

http://javascript123.seesaa.net/article/106611858.html

こんなに簡単だったとは。。
次からHTMLでフォームを作るときは使うようにしたいと思います。

Pale Moonを入れたらFireFoxが速くなった

FireFoxが重い。重くてどうしようもない。
起動はもちろん、時間が経つにつれて動作自体もどんどん遅くなってきて、chromeに乗り換えようと本気で考えました。
「firefox 重い」「firefox 高速化」などでググって出てくる対策はだいたいやりました。

AFOM
MetaboFix
SQLite Optimizer
Vacuum Places Improved

なども試しました。
それぞれ導入した当初はちょっと速くなったように思いましたが、時間が経つにつれて効果がなくなってきたような気がします。
もう潮時かな、、、と思い始めたとき、Pale Moonの存在を知って、最後の望みとしてインストールしてみました。
http://toolog.net/tool/palemoonbrowzer.html
確かに速いです。インターフェースもfirefoxと同じだし、アドオンもだいたい使えます。
速さは申し分ないのですが、いくつかのアドオンが使えなくて、特に愛用アドオン「Colorful Tabs」が使えないのは自分にとって致命的。
というわけでchromeに乗り換え決定。
しばらくchromeでブラウジングしてたんですが、firebugを使うことがあって再度firefoxを起動したら、、、なんか劇的に速くなってました。
Pale Moonがfirefoxのconfigを書き換えて、それでfirefoxも速くなったんじゃないか、と思ってます。実際はどうなのかわかりませんが。
結局そのままfirefoxを使ってます。快適です。
やっぱfirefoxはconfigいじって最適化しないとダメってことですかね。

2010年3月8日月曜日

OpenVPNを導入

自宅にOpenVPN導入した際のメモです。

環境はサーバーがCentOS4.2、クライアントがWinXP。
OpenVPNはルーティングモードとブリッジモードがありますが、今回はブリッジモードで構築。
違いはこの辺を参照。
http://www.atmarkit.co.jp/flinux/special/openvpn/openvpnb.html


以下、参考にしたページ。

http://www.stackasterisk.jp/tech/systemConstruction/openVpn01_01.jsp(このサイトのやり方をベースにしました)
http://freescitech.net/2/ovpn2_examples.html
http://nai.homelinux.net/openvpn.html
http://centossrv.com/openvpn.shtml(ルーティングモードでの手順だが、鍵の作成あたりはブリッジモードでもそのまま参考にできる)
http://kano.feena.jp/?OpenVPN

各種設定は上記のページを参考にしつつ、IPなどを自分の環境に置き換えてすんなり対応できました。
そして最後に自宅のルーターにvpn接続用の穴を開けて完了です。

以下は対応手順。鍵作成はメモするのを忘れていたで割愛しています。

openvpnをインストール
# yum install openvpn

仮想デバイス作成用のbridge-utilsをインストール
# yum install bridge-utils

openvpnの設定
# /etc/openvpn/server.conf
port 1194
proto udp
dev tap0
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
ifconfig-pool-persist ipp.txt
server-bridge 192.168.1.3 255.255.255.0 192.168.1.110 192.168.1.111
push "route 192.168.1.0 255.255.255.0"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
management localhost 7505


各種起動・停止スクリプトをコピーして実行権限を与える
# cp /usr/share/doc/openvpn-2.0.9/sample-scripts/bridge-start /etc/openvpn
# cp /usr/share/doc/openvpn-2.0.9/sample-scripts/bridge-stop /etc/openvpn
# cp /usr/share/doc/openvpn-2.0.9/sample-scripts/openvpn.init /etc/openvpn
# chmod +x /etc/openvpn/bridge-start
# chmod +x /etc/openvpn/bridge-stop
# chmod +x /etc/openvpn/openvpn.init

IPフォワードの設定。これをしておかないと、VPNで接続できてもVPNサーバから外に出て行けない。
# echo 1 > /proc/sys/net/ipv4/ip_forward
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 ##0を1に変更

openvpnの起動スクリプトを作成(http://www.stackasterisk.jp/tech/systemConstruction/openVpn01_03.jsp#4_5)
# cp /etc/rc.d/init.d/network /etc/rc.d/init.d/vpn
# vi /etc/rc.d/init.d/vpn
(ボールド部分を追記する)

(~省略~)
touch /var/lock/subsys/network

#ブリッジモードの有効化
/etc/openvpn/bridge-start

#OpenVPNサーバの起動
/etc/openvpn/openvpn.init start


;;

stop)
#OpenVPNサーバの停止
/etc/openvpn/openvpn.init stop

#ブリッジモードの無効化
/etc/openvpn/bridge-stop



# If this is a final shutdown/halt, check for network FS,
# and unmount them even if the user didn't turn on netfs
(~省略~)


起動スクリプトの調整
# chkconfig --del network
# chkconfig --add vpn
# chkconfig --del openvpn




それからつまずいた点が2点ほど。

(1)鍵
「./build-key-pass client1」で証明書を作ろうとしたらエラーが出る。
以前client1という名前で鍵を作っているのでNGということらしく、名前を「client2」にして回避。
http://wiki.milkcup.jp/index.php?%BE%DA%CC%C0%BD%F1%A4%CE%C8%AF%B9%D4

(2)iptables
iptables -A INPUT -i tap0 -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A FORWARD -i br0 -j ACCEPT
をやり忘れていたため、VPNサーバーへの接続はできるけど、他のマシンにアクセスできない状態でしばらく悩みました。
http://freescitech.net/2/ovpn2_ether_ja.html

最後に「redirect-gateway def1」について。

このオプションを使うと、デフォルトゲートウェイがOpenVPNサーバになり、すべての通信がVPNサーバを介することになる。
サーバ側、クライアント側のどちらでも設定可能。ONとOFFでそれぞれtracertで経路を確認すると動きがよく分かります。
自分の場合はとりあえずOFFにしておいて、クライアント側で状況に応じて使い分ける予定です。

2010年3月3日水曜日

部屋干しトップ 粉末と液体の比較

普段は部屋干しトップの粉末タイプを愛用してますが、一度くらいは液体タイプも買ってみようと思ってamazonで注文しました。
注文する前にそれぞれのコストを計算してみたので、いちおうメモしておきます。
粉末タイプ

使用量の目安:水30L(洗濯物量1.5Kg)に対し20g
容量:1000g
amazon最安値:\348
1箱あたりの使用回数目安(容量÷使用量):50回
1回の洗濯あたりの金額:\6.96
液体タイプ

使用量の目安:水30L(洗濯物量1.5Kg)に対し20ml
容量:820ml
amazon最安値:\298
1本あたりの使用回数目安(容量÷使用量):41回
1回の洗濯あたりの金額:\7.26
液体のほうが高いイメージがありましたけど、それほどでもなかったです。
それよりも液体タイプは詰替用の値段が高すぎです。ボトルよりも高いってのはあり得ないですね。

2010年3月2日火曜日

エコポイントの申請通りました

エコポイント付与の通知ハガキが届いてました。申請した38000ポイントすべて付与されました。よかった~
申請したのが1月中ごろだったので、約1ヶ月半待ったことになります。リサイクルの委任状もあの書式でOKだったようです。
今はポイントを何に使うかで迷ってます。とりあえず半分くらいを地域商品券にする予定で、残り半分をどうしようか考え中です。

2010年2月15日月曜日

QT TabBarのメモ

エクスプローラーをタブ化できるフリーウェア「QT TabBar」を使ってます。
http://qttabbar-ja.wikidot.com/
とても便利なアプリケーションだけど、設定のやり方が少し変わってるので、忘れないようにメモ。
・インストール直後、[エクスプローラー]→[表示]→[ツールバー]→[QT TabBar]で使用開始
・[エクスプローラー]を開いてるときに[Alt+O]でオプション設定画面へ。(ツールチッププレビューが余計だと思ったので、[その他]タブで外した)

phpの三項演算子

三項演算子とは、「if ~ else ~」を一行で書ける文法。
たまに使うんだけど、よく忘れるのでメモしておきます。

$hoge = 1;
print ($hoge == "1") ? "hogeは1です" : "hogeは1じゃありません";

http://php.net/manual/ja/language.operators.comparison.php

2010年2月4日木曜日

[PHPExcel]phpでエクセルファイルを扱う

PHPExcelをちょこっと試してみましたが、なかなかいい感じです。
以前、PearのSpreadsheet_Excel_Writerを使ったことがあるけど、こっちのほうが良さそうな印象でした。
もっともSpreadsheet_Excel_Writerもだいぶバージョンが上がってるみたいなので、もう一度評価しなおさないといけませんが。
http://www.codeplex.com/PHPExcel
http://journal.mycom.co.jp/articles/2009/03/06/phpexcel/002.html
http://iidx.jp/archives/2007/07/phpexcel.html
http://oshiete1.goo.ne.jp/qa5287229.html

2010年1月26日火曜日

.htaccessでphpのerror_reportingを設定する

php_value error_reporting 0
これで、phpスクリプト上でerror_reporting(0);を実行するのと同じ効果を得られる。
phpスクリプトだとE_ERRORとかE_WARNINGみたいな定数が使えるが、.htaccessではそれが使えないので、数値で指定してやる必要がある。
http://jp2.php.net/manual/ja/errorfunc.constants.php

2010年1月15日金曜日

エコポイントの申請(リサイクル委任状の書き方)

エコポイントの申請をしました。
夏にエアコン2台、昨年末に液晶テレビを買い、さらに古いテレビのリサイクルも合わせて合計で38000ポイント。計算したわけではありませんが、エコポイントは一人あたり最大39000ポイントまでもらえるので、ほぼ限度ギリギリになりました。
そしてこの申請、とにかく面倒。
まずエアコン×2、テレビ×1で、合計3枚申請用紙を書かなくてはいけない。
また必要書類は「メーカー保証書のコピー」「購入店舗のレシート」「リサイクル証明書のコピー」などがあり、それらの用意も手間でした。
なお今回申請したエアコン×2は自宅用ですが、テレビ×1は祖父母宅へのプレゼントです。で、リサイクルした古いテレビも祖父母宅のものを引き取ってもらったんですが、自分と祖父母では苗字が違うので、申請用紙の名前とリサイクル証明書の名前が異なってしまいます。
このまま提出して不受理になったら嫌なので、エコポイントの事務局に電話して確認してみました。
このケースは「申請者(自分)が祖父母にテレビのリサイクルを委任した」ということになるので、委任状を添えて申請すればOK、ということだそうです。
---------------
平成○年○月○日
稲葉浩志は、松本孝弘にリサイクルを委任しました。
 稲葉浩志 印
 東京都千代田区永田町1丁目7番1号
 松本孝弘
 東京都港区芝公園4丁目2-8
---------------
申請者の印は必須だそうです。
このフォーマットで委任状を用意し、申請書に添付して郵送しました。
申請から2~3ヶ月待たされるようなので、ポイントが付与されるのは春頃でしょう。
しかし面倒な手続きだった。。

2010年1月13日水曜日

家庭用DVD/HDDレコーダーで、DVDが読み込めなくなった

2004年くらいに買ったパイオニアのDVD/HDDレコーダーで、DVDディスクを読み込めない、読み込めても時間がかかる、何度も失敗してようやく読み込みに成功する、という症状が発生。
ちなみに失敗するのはDVD-Rのみ。セルDVDやレンタルDVDは滅多に失敗しません。
気になったので原因を調べてみました。
RやRWの読み込みが失敗しやすい理由
http://questionbox.jp.msn.com/qa5238543.html
反射板について
http://blog.livedoor.jp/shin__blog/archives/50022938.html
ドライブのレーザー出力低下
http://girled.net/archives/000812.html
レーザー出力の調整
http://www.geocities.jp/arcus_270/a/DVDdrive_laser.html
よく理解できました。
昔、安物のCDプレーヤーを買って1年くらいですぐダメになったことがあったけど、そういうのもレーザー出力の低下が原因だったようです。
うちのDVD/HDDレコーダーはもう長いこと使ってるので、レンズ部にホコリがたまってるだろうし、部品の劣化でレーザー出力は確実に低下していると思われます。
でも分解はやりたくないし、メーカーに修理に出すのも面倒。
そろそろ買い換えてもいい時期だと思いますが、次もまた5~6年で同じ問題が起こることを思うと、あまり高いお金は払いたくないですね。
さてどうしようか。。