2010kawama.jp2010年12月30日木曜日[php]ファイルをテンポラリなパスでダウンロードさせるpublicでない場所に置いてあるファイルを、ランダムなパスで一時的にダウンロードできるようにする。今zencartをいじっていて、ダウンロード販売機能のソースコードを参考にさせて(というかほぼそのまま使わせて)もらいました。該当のソースコードは以下のパスにあります。includes/modules/pages/download/header_php.phpプログラムの流れは1.ユーザーがphpにアクセス2.ランダムで一時ディレクトリを作成3.作成した一時ディレクトリの中にオリジナルファイルへのシンボリックリンクを作成。4.ユーザーをシンボリックリンクへ303リダイレクト5.ユーザーが目的のファイルを閲覧するとなります。それと、作成したディレクトリを定期的に削除することで、ファイルが一般に公開されてしまうことを防ぎます。zencartではphpにアクセスがあるたびに過去に作成した一時ディレクトリを削除していますが、必要ならばcronで定期的に削除するなどの処理を組み込んでもいいと思います。ソースはこんな感じになります。テンポラリ2010年12月21日火曜日phpのrequireとincludeの違いファイルを読み込むこの2つのメソッド。どちらも同じような動きをします。自分はrequire派です。なんとなくincludeよりrequireのほうが上等というか、レベルが高い印象があったので、requireを使ってました。今回とあるサンプルコードを読んでいたらincludeが使われており、気になって調べてみましたが、答えはphpマニュアルに書いてありました。レベルの致命的なエラーも発生するという点が異なります。スクリプトの処理がそこで止まってしまうということです。発するもののスクリプトの処理は続行します。http://phpspot.net/php/man/php/function.require.htmlとのことです。ちなみにrequire_once、include_onceというのもあって、こちらだとすでにそのファイルが読み込まれている場合はスキップしてくれます。_onceありは_onceなしに比べて処理が重くなるという話をどこかで読んだことがあります。(当然と言えば当然ですが)特に理由がないようならrequireを使っておくのが無難なようです。require_once2010年12月20日月曜日jqueryのhover()でプルダウンメニューを作る仕事でプルダウンメニューを作った際のメモ。jqueryを使ってちょっとしたプルダウンメニューを作りました。});という具合に、mouseoverとmouseoutのメソッドチェーンを使ってみました。これでも問題ないように見えましたが、実際に作ってみるとカーソルをメニュー要素からプルダウン要素に動かすと、その都度mouseoverの処理が走ってしまうということがわかりました。ただのプルダウンメニューであれば問題ないかもしれませんが、メニューの表示にajaxでのHTTPリクエストを入れていたので、パフォーマンスの点で問題があります。いうか使いものになりません。サンプルにconsole.logを仕込んであるので、実際にマウスを動かしながらfirebugのコンソールを見ると現象がよくわかると思います。そこで今度はhoverメソッドを使ってみたのですが、こちらはカーソルをグリグリ動かしても処理は1度しか走りませんでした。挙動が違う理由はよくわかりませんが、とりあえずhoverを採用して無事実装完了しました。情報を埋め込んでしまうsession.use_trans_sidをOnにしているサイトで、formのaction先が別ドメインのサイトなのにも関わらず、hiddenにセッションIDを付加してしまう、という問題に遭遇しました。session.use_trans_sidは外部ドメインへのformタグにも無差別に付加するけっこう面倒な問題。セキュリティ的にもかなりマズイです。上記のページではurl_rewriter.tagsを使った解決策をとっていますが、今回はjqueryのremove()でhiddenタグを削除するという方法を考えてみました。input:hidden[name=session_name]').remove();当然携帯サイトなどでは使えませんが、javascriptがOffだと送信できないフォームなので、この方法を使ってみました。最近話題のzen-coding、自分も秀丸にマクロ入れて使っています。秀丸のzen-codingマクロ普段からできる限りzen-codingを使おうとしてはいるのですが、なかなか使いこなすことができません。実際に使おうと思っても、記法が分からない時はリファレンスサイトを見に行かなくてはいけないので、そうなると「普通に手入力でいいや」となってしまいます。あと、ゼロからhtmlでページを作る機会があまり多くないのも原因のような気がします。部分修正の時にも使いたいのですが、インデントが崩れてしまったりするので、ちょっと使いにくい感じがします。そこで設定ファイルをいじって、自分なりのzen-codingの使い方を考えてみました。設定方法はzenhtml.iniのuse-indentをyesからnoにするだけ。こんな文字列があったとします。「真っ赤」を選択してCtrl+Shift+EでWrapモードを呼び出し、「span.red」を入力してOKします。class="red">真っ赤</span>に燃えるのをこうなります。ちなみにuse-indentがyesだと、こんな風にインデントが入ってしまいます。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年からバージョンが更新されていません。フロートメニュー自体あまり人気もないし、今後も更新されなさそうな感じなので、自作してみることにしました。拍子抜けするくらい簡単でした。ついでにanimateを使ったバージョンも作成。矢印キーでスクロールするとちょっと動作が怪しいです(汗サンプル:jqueryでフロートメニュー(animate版)jqueryの場合、こうした簡単な機能であればライブラリを探すよりも自作してしまったほうが早いというケースも多そうです。[追記]animate版のほうを若干修正。要素セレクタに:not(:animated)を加えることで、アニメーション実行中にさらにアニメーションが実行され、動作が不安定になるのを防止するようにしました。フロートメニュー2010年12月9日木曜日jQueryポケットリファレンス普通のリファレンスです。サイズが小さく、持ち運びやすいです。通勤時に電車内で読むために購入しました。朝の通勤時にこれを読み、脳みそをjqueryモードにするのに使っています。あと2010年4月発行と比較的新しく、ver1.4に対応している点もポイント高いと思います。内容はあまり濃くありません。3日ほどで読み終わりました。triggerメソッドについて記述がなかったりと、物足りない部分もあります。完璧なものは期待していないので、それほど気にはなりませんでした。空いた時間を使ってjqueryを脳みそにインプットしたい、という人にはおすすめできる一冊です。停止している可能性がありますというメッセージが数十通来ていました。エラーの数が一時的に増えていることが判明しました。サイトが停止している可能性があります。この問題は既に解決している可能性もあります。このメッセージはメールに転送することもできるようです。Googleウェブマスターツールはどんどん進化してると聞いてましたが、なるほど便利です。ちなみに404アラートはcoreserver移行を機にピタリと止まってました。面倒でしたが、やはり引っ越ししておいて良かったです。雑記帖2010年12月1日水曜日php,smarty,mysql,javascriptでゼロ埋め※javascriptも追加しました。ゼロ埋めとかゼロパディングと言われるものです。忘れてしまうのでまとめておきます。STR_PAD_LEFT);引数をひとつ以上渡すことも可能。005他にもいろいろやり方はありますが、とりあえずよく使うものはこんなところだと思います。ゼロ埋め2010年11月29日月曜日jQueryクックブックjQueryは少しかじった程度なんですが、本格的に勉強しようと思ってこのオライリー本を購入しました。480ページ、18章と、かなりボリュームがあります。電車の中で読んでいると腕が疲れてきます。カッターで2~3章ごとに切り分けて持ち運びたい衝動に何度も駆られました。ちなみに18章それぞれで著者が違うため、ソースコードの書き方などはバラバラで統一性がありません。本書は全編が一問一答形式になっています。基本的にこれの繰り返しです。実際に直面したことがあるようなケースなどがあると理解しやすいです。逆にHTML5を使った音楽プレーヤーの埋め込みなどは全く経験がないので、読んでいてチンプンカンプンでした。jQuery本は何冊か出ていて、どれを読めばいいかよくわからなかったのでオライリーにしてみましたが、良い選択だったと思います。一読はしましたが、今後さまざまな問題にぶち当たると思うので、必要に応じてまた読み返そうと思います。ちなみにamazonでサンプルコードがDLできないというレビューがありましたが、本家サイトでダウンロードできました。古いジャッキーチェン映画の日本語吹替について先日、知り合いとジャッキーチェンの話で盛り上がって、久しぶりジャッキー映画が見たくなったので、DVDをレンタルしました。楽天レンタルのスポットレンタルで借りました。見たのはプロジェクト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++と++ii++は値を返してから1加える。++iは1加えてから値を返す。普段i++しか使わないので、++iを見て「なんだこりゃ」と思いましたが、こういうことでした。ちなみに一部のブラウザでは++iのほうが動作が速いそうです。JavaScript2010年11月23日火曜日Smartyでforeachループをネストするよくやり方を忘れるので備忘録として。こんな感じの配列を使います。じゅう)))テンプレートはこんな感じで記述。同じコンテンツでも、アクセス解析ソフトなどは末尾のスラッシュの有無によって別ページと見なしてしまいます。した問題も、このmod_rewriteで解消できます。[L,R]このケースだとURLに.(ドット)を含まない場合はディレクトリと見なして末尾スラッシュ補完をしています。技術関連2010年11月16日火曜日mod_rewriteでURLを書き換えつつクエリはそのまま引き継ぐ「mod_rewriteを使って動的ページを静的ページのように見せる」というのが、SEO的に良いということで一時期流行りました。現在ではサーチエンジンも進化し、静的だろうか動的だろうか評価は変わらなくなったようですが、人間の目から見てもクエリ文字列が並ぶよりはディレクトリ階層になっているほうがきれいなので、サイト構築の常套手段として定着している感があります。mod_rewriteを使って動的ページを静的ページというテクニックはググればいくらでもでてきます。して処理されるようになります。ように、後ろにクエリパラメータが来てもその値が取得できないという問題があり、不便です。これを解決するのがQSAというオプション。[QSA,L]これでオシリに引数がくっついてもindex.phpで処理できるようになります。―「良いパーツ」によるベストプラクティス内容紹介やレビュー、目次を見たところ、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するのを試みました。fこのpermオプション、オプションで+や-をつけてさまざまな条件を付加させられます。"*.sh"でリストを作りました。こんな具合で大きな問題もなく移行完了。三郷のパソコンファームで不要PCを無料で処分する不要になったPC2台(WindowsMeが乗っていたthinkpadと、WindowsXP初期の頃の省スペースPC)を持てあましており、使い道も全くなかったので、前々から気になっていた三郷のパソコンファームに行って引き取ってもらいました。パソコンファームPCの処分はお金もかかるし何かと面倒ですが、ここに持って行けば無料で引き取ってくれます。郵送でも引き取り可能ですが、今回は新三郷のIKEAに行く用事があったので、車で行きました。大泉ICから外環外回りで外環三郷ICで降り、すぐの信号を左折。そのまま突き当たりの丁字路のところにパソコンファームがあります。見た感じ普通の倉庫という感じ。敷地内に入って車をとめると従業員の方があらわれて、引き取るPCを確認してすぐに持って行ってくれました。そのあと指定の用紙に名前や連絡先を記入して手続き完了。所要時間はほんの5分程度。おまけで缶コーヒーを2本くれました。不要なPCは今後しばらくは出ないと思いますが、PC以外でもさまざまな不要品を回収してくれるようなので、機会があればまた利用したいと思います。標準のエンコードの種類で設定変更できます。最近はhtmlやphpなども、ほぼ90%以上UTF-8を使っているので、デフォルトを変更してみました。標準DOMスクリプティング『DOMと言う言葉はよく聞くけれど、実際のところよくわかっていない。jqueryやそのライブラリを使って見よう見まねで簡単なアプリを作成できるが、高度なコーディングはできない。』こういう状態だったので、そろそろ本質的なところを勉強しないといけないな~と思っていたときに、手に取った本がこれでした。いうか、DOMについての本って他に見あたらなかったです。2007年の本で、ブラウザもIE6とかfirefox1.5の時代ですが、古さはあまり感じさせません。DOMの本質的な部分を扱っているので、今でも十分通用するし、勉強になります。DOMの用語や概念なんかは覚えておけばgoogle検索するときなどにもかなり役に立つと思います。ひさびさに技術書読みましたが、なかなか良い本でした。値段が高いですが、それに見合う価値はあると思います。サンプルスクリプトはこちらで見られます。http://www.futomi.com/books/dom/script/index.htmlそれと本書で取り上げられていたfirefoxのアドオンが3つあったので、とりあえず入れてみました。今度コーディングするときに使ってみようと思っています。技術関連CSS+画像で作るタブメニューCSSと画像で作るタブメニューのサンプルを探していたところ、こちらのサイトを見つけました。http://www.dezinerfolio.com/2007/10/17/creating-liquid-css-tabs-for-menus/画像による解説がものすごくわかりやすいです。いい勉強になりました。仕様変更のため、2010/11/09以降、PAAPIレスポンスデータからカスタマーレビューの文字情報が無くなり、かわりにiframe用のURLが返されるようになります。ちなみに実際のIFrameURLの内容などは、Amazon商品情報ビューワーで見るとよくわかります。(最近このツールよく使ってます)しかも合計レビュー数や評価平均などのサマリ情報も取得できなくなります。これは過去何度かあったPAAPIの仕様変更の中でも、一番影響が大きいのではないかと思います。この新仕様の制約の中で、どうすれば最善の対応ができるか。