Google Crisis Response(Google)
災害に関する情報源や、行方不明者情報の収集と検索を行う『パーソンファインダー』を初めとするツールの提供が行われています。

2008年3月19日 水曜日

Yahoo! Japan がアクセス解析サービスを開始

Filed under: インターネット
時間:0時02分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 Yahoo! Japan が、個人サイト向けのアクセス解析ツールのサービスを開始しました。

 サービスの名前は「Yahoo! ログール」。単なるアクセス解析ではなく、ほかのユーザーを登録する「お気に入り」機能などを持ち、SNS のようなコミュニティーとしての面が強く出ています。利用には、Yahoo! Japan のアカウントが必要です。

 アクセス解析ツールと言うと、Google Analytics を無視することは出来ません。Google Analytics は Urchin がベースとなっているためか、SEO を目的としたプロ向けツールのイメージが抜けません。各項目名も「参照元」のように硬い感じのものが多いです。

 これに対して、Yahoo! ログールは一般向けのイメージです。導入説明ではキャラクターが使用され、ファンシーですらあります。
 項目名も、「ここから来ました」や「ここに行きました」のような、やわらかい言葉が使われています。アバターの設定が出来たり、自分をお気に入りに登録した人がわかる「ファンリスト」などもあります。いわゆる「足跡」機能もあり、アクセス解析というよりも SNS のようです。

 ベータ版というこもあり、機能の充実と言う点では Google Analytics に負けています。しかし、はてなブックマークの登録数がわかるなど、注目されそうな機能もあります。アクセスは気になるけど、Google Analytics は難しくてよくわからないと言う人にはいいかもしれません。将来は、マニアックな Google Analyics と手軽な Yahoo! ログールといったようになり、2大アクセス解析サービスと言うことになるかもしれません。ちょっと注目して見たいと思います。

Comments (0)

2008年3月17日 月曜日

『ソード・ワールド・ノベル 輝け!へっぽこ冒険譚 3』

Filed under: 読書中
タグ:, ,
時間:23時29分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 ”へっぽこーず”を主人公としたソード・ワールド長編シリーズの第3弾。舞台は石の街グードン。

 ちなみに、帯には『花嫁衣裳と白鎧は乙女の夢?』と書かれています。どう考えてもあのキャラクターのこと。鎧を褒めると喜ぶようです。鎧で喜ぶ16歳って・・・。

Comments (0)

2008年3月16日 日曜日

Smarty で date() の書式設定を使う

Filed under: プログラミング
時間:22時39分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 Smarty というテンプレートエンジンがあります。おそらく、PHP では定番中の定番だと思います。

 この Smarty は私のお気に入りでして、PHP でそれなりの規模のもの(といっても、プログラムとしては小さなものですが)を作るときには必ずといっていいほど使っています。現在製作中のものにも使っているのですが、日付を表示させる部分で不満がありました。1桁の時には10の位の部分が0になったり半角スペースになってしまうのです。

 書式を指定して日付を表示するには date_format という就職子を使うのですが、書式がいまいち充実していなくて思うような表示をさせることができません。データ保持に使っている MySQL のほうがよっぽど多機能だったので、思わずそちらで整形済みの日付を作成してしまいました。しかし、できれば Smarty 側で処理をさせたいと思い、大雑把ですがプラグイン機能を使って実装してしまいました。

実装

 実装したといっても、大したことはやってなかったりします。もともと date_format もプラグインとして実装されていて、内部では PHP の strftime() という組み込み関数を使用しています。冒頭で書いた不満は、この関数の機能に起因します。

 対して、同じ組み込み関数である date() では、1桁の時には1桁で表示するということが可能です。そこで、date_format のファイルを基にして date() を使うようにしてみたというわけです。それが次のコードです。ライセンスは Smarty に従って LGPL となります。

  1. <?php
  2. /**
  3.  * Smarty plugin
  4.  * @package Smarty
  5.  * @subpackage plugins
  6.  */
  7.  
  8. /**
  9.  * Include the {@link shared.make_timestamp.php} plugin
  10.  */
  11. require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp');
  12. /**
  13.  * Smarty date_format modifier plugin
  14.  *
  15.  * Type:     modifier<br>
  16.  * Name:     date<br>
  17.  * Purpose:  format datestamps via date<br>
  18.  * Input:<br>
  19.  *         - string: input date string
  20.  *         - format: strftime format for output
  21.  *         - default_date: default date if $string is empty
  22.  * @author   Yoshitomo
  23.  * @param string
  24.  * @param string
  25.  * @param string
  26.  * @return string|void
  27.  * @uses smarty_make_timestamp()
  28.  */
  29. function smarty_modifier_date($string, $format = 'M d, Y', $default_date = '')
  30. {
  31.     if ($string != '') {
  32.         $timestamp = smarty_make_timestamp($string);
  33.     } elseif ($default_date != '') {
  34.         $timestamp = smarty_make_timestamp($default_date);
  35.     } else {
  36.         return;
  37.     }
  38.     return date($format, $timestamp);
  39. }
  40.  
  41. /* vim: set expandtab: */
  42.  
  43. ?>

 この内容を、modifier.date.php というファイル名で保存して、Smarty のプラグインディレクトリに置いてください。使い方は書式が date() に従うというだけで、あとは date_format と同じです。

[Smarty]
{$date_value|date:”Y年n月j日”}
[/Smarty]

残る不満

 無事便利になったわけですが、分と秒に関しては結局満足できる結果にはなりませんでした。この2つの項目は、なぜか1桁で表示するという書式設定ができません。
 書式の表をよく見てみると、小文字のときは0がついて、大文字の時には0がつかないと言うようになっていることがわかります。そして、分と秒に対する0のつく場合の文字としては i と s があり、その大文字である I と S はすでに別の項目で使われてしまっています。大文字と小文字の対応を崩したくないために実装していないのではないかと、思わず疑ってしまいました。

 I も S も、日本ではあまり需要がない項目であるのがなんとも残念です。時間を見て実装をと思っていますが、もしすでにあってご存知でしたらぜひ教えてください。

Comments (0)

2008年3月14日 金曜日

管理者なのに新規にページが公開できない原因

Filed under: WordPress,ハック
時間:1時10分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 先週の記事でも書きましたように、Google AdSense の規約変更のためにプライバシーポリシーの掲載が必要となりました。いろいろと考えて自力で作ったのですが、なぜか肝心のページの公開ができません。

 公開するには、ステータスを「公開」にすればいいはずですが、私の場合はなぜかその項目が表示されていません。その部分のコードを探して確認してみることに。久しぶりのハックです。バージョンは ME2.1.3。ME2.0 からアップグレードしてあります。

解析編

 ページ編集画面のアドレスからファイルを推測したどっていくと、wp-admin/edit-page-form.php に該当箇所が見つかりました。

  1. <fieldset class="dbx-box">
  2. <h3 class="dbx-handle"><?php _e('Page Status') ?></h3>
  3. <div class="dbx-content"><?php if ( current_user_can('publish_pages') ) : ?>
  4. <label for="post_status_publish" class="selectit"><input id="post_status_publish" name="post_status" type="radio" value="publish" <?php checked($post->post_status, 'publish'); checked($post->post_status, 'future'); ?> /> <?php _e('Published') ?></label>
  5. <?php endif; ?>
  6.       <label for="post_status_draft" class="selectit"><input id="post_status_draft" name="post_status" type="radio" value="draft" <?php checked($post->post_status, 'draft'); ?> /> <?php _e('Draft') ?></label>
  7.       <label for="post_status_private" class="selectit"><input id="post_status_private" name="post_status" type="radio" value="private" <?php checked($post->post_status, 'private'); ?> /> <?php _e('Private') ?></label></div>
  8. </fieldset>

 63行目が公開とする項目で、62行目のところで権限の有無によって処理を分岐しているようです。管理者アカウントで作業しているので権限がないとは思えないのですが。

 今度は条件式に使われている関数 current_user_can() を調べます。まずは定義場所を見つける必要があります。ファイル群から検索という方法でもいいのですが、試しに Google で検索してみることに。キーワードは「WordPress current_user_can」。
 capabilities.php というファイルにあるという情報が見つかりました。コアファイルの置かれているところを探してみると、wp-includes/ にありました。

  1. // Capability checking wrapper around the global $current_user object.
  2. function current_user_can($capability) {
  3.     $current_user = wp_get_current_user();
  4.  
  5.     $args = array_slice(func_get_args(), 1);
  6.     $args = array_merge(array($capability), $args);
  7.  
  8.     if ( empty($current_user) )
  9.         return false;
  10.  
  11.     return call_user_func_array(array(&$current_user, 'has_cap'), $args);
  12. }

 446行目で wp_get_current_user() が返す値を変数に入れています。変数の値を調べてみると、クラス WP_User のインスタンスが入っていました。このクラスも、capabilities.php に定義があります。長いのでコードは省略します。

 448行目の処理は、この関数の2番目以降の引数を要素として持つ配列を取得しています。今回引数は1つだけなので、当然この行の直後では $args は要素を持たない配列です。449行では配列の結合をしていて、変数 $args には array('publish_pages') に相当する値が入ります。

 454行目では、コールバック処理の結果を返しています。変数 $current_user にはクラス WP_User のインスタンスが入っていますので、コールバック関数は WP_User のメンバ関数 has_cap() と言うことになります。定義は次のようになっています。

  1. //has_cap(capability_or_role_name) or
  2.     //has_cap('edit_post', post_id)
  3.     function has_cap($cap) {
  4.         if ( is_numeric($cap) )
  5.             $cap = $this->translate_level_to_cap($cap);
  6.  
  7.         $args = array_slice(func_get_args(), 1);
  8.         $args = array_merge(array($cap, $this->ID), $args);
  9.         $caps = call_user_func_array('map_meta_cap', $args);
  10.         // Must have ALL requested caps
  11.         $capabilities = apply_filters('user_has_cap', $this->allcaps, $caps, $args);
  12.         foreach ($caps as $cap) {
  13.             //echo "Checking cap $cap<br/>";
  14.             if(empty($capabilities[$cap]) || !$capabilities[$cap])
  15.                 return false;
  16.         }
  17.  
  18.         return true;
  19.     }

 引数 $cap には、コールバックで渡された文字列 publish_pages が入ります。数値ではないので、262行目の処理は行われません。264行目と265行目は、current_user_can() の場合と同じですね。$this->ID は、ログイン中のユーザーのID(ログインIDではなく、データベーステーブルの主キー)が入っています。

 266行目で再びコールバックです。この段階 $args には array(‘publish_pages’, ユーザーID) が入っているので、map_meta_cap('publish_pages', ユーザーID) ということをしていることになります。

 関数の定義は、285行目から442行目にかけて記述されています。これもかなり長いですが、やっていることは第一引数の値で switch 分岐処理をしているだけです。publish_pages のところはないので、default 節で次のように処理をしているだけです。

  1. default:
  2.         // If no meta caps match, return the original cap.
  3.         $caps[] = $cap;

 そして、その戻り値は予想通り array('publish_pages') でした。

 268行目。プラグイン作成ではおなじみの、apply_filters が使われています。以前にもこの関数のハックに挑んだことがありますが、ややこしくて苦手です。面倒なので $capabilities の中身を見てみるだけに。連想配列になっていて、ユーザステータスを記録しているようです。$capabilities['publish_pages'] はありませんでした。

 269~273行目では、値がないか Not true のものが見つかったら false でリターンするという処理です。値がないので false になってしまいます。

解決編

 すっかり弱ってしまいました。散々調べ続けて、わかったのは間違いなくページを公開する権限がないことだけ。(仕組みがわかって勉強になったというのもありますけど・・・)

 方向を変えて、publish_pages について調べてみることに。「WordPress publish_pages」と検索。WordPress Japan のフォーラムに、よく似た不具合のスレッドを発見。

 そこからリンクされているページを見ると、データベースに記録されているシステム設定に問題がある模様。どれどれと確認してみると、$capabilities の内容によく似たデータが。そして、そこには publish_pages はありませんでした。2.0 からアップグレードするときに、スクリプトが修正してくれなかっただけなのではないでしょうか。実際、プラグインチェック用に新規インストールした 2.1 のほうでは次のような内容で、そこにはちゃんと publish_pages があります。

  1. a:5:{s:13:"administrator";a:2:{s:4:"name";s:27:"管理人 - (Administrator)";s:12:"capabilities";a:47:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;}}s:6:"editor";a:2:{s:4:"name";s:20:"編集者 - (Editor)";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}s:6:"author";a:2:{s:4:"name";s:20:"投稿者 - (Author)";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:25:"寄稿者 - (Contributor)";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:24:"購読者 - (Subscriber)";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}

 思い切ってデータを差し替えてみると、見事公開の選択肢が表示されるように。これで、やっとプライバシーポリシーの公開ができます。

Comments (0)

2008年3月12日 水曜日

『ブギーポップ・クエスチョン沈黙ピラミッド』

Filed under: 読書中
タグ:, ,
時間:20時48分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

ブギーポップシリーズ1年半ぶりの新作です。メインは新キャラですが、お馴染みの登場人物も結構出てます。

 ところで、表紙のブギーポップ子供っぽくなってません?挟んであった電撃の缶詰のイラストは幼いと言ったほうがいいくらい。

Comments (0)

2008年3月6日 木曜日

Amazon.com も動画広告へ参入

Filed under: アフィリエイト
時間:20時31分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 動画用の Google AdSense 広告である「AdSense for video」のベータ版が開始されていますが、Amazon.com も動画広告に参入です。

 このサービスは「Your Video Widget」というウィジェットで、アップロードした動画に広告の好きなコマ位置に広告を掲載し、それをサイトに掲載します。YouTube のように、専用のプレーヤーが提供されます。

Comments (0)

2008年3月3日 月曜日

Google AdSense の規約変更

Filed under: アフィリエイト
時間:23時34分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 このサイトでは Google AdSense によるアフィリエイト広告を掲載しています。最近、このサービスの規約が変更され、その内容が話題となってます。

 話題になっているのは、広告配信の際に Cookieウェブビーコンを使用しており、そのことを一般の閲覧者に対して通知せよという部分。通知するだけならまだしも、プライバシーポリシーとして規定し、その中には Cookie の管理について閲覧者(規約では「ユーザー」)が選択できる手段についての情報も記載する必要があります。

 サービスを利用し続けるにはやるしかないのですが、正直自力で用意できる人はそんなに多くないのではないでしょうか。ほかの人が用意したものを利用するか、それとも諦めるかのどちらかになりそうな気がします。私もその中に入りそうですが、幸い期限まではまだあります。挑んでみるのも悪くないかもしれません。

 なお、ヘルプフォーラムに関連スレッドがあります。プライバシーポリシー作成の際には、ここの内容も参考にしようと思っています。

 法人運営で AdSense 広告を掲載しているサイトも参考になりそうです。株式会社Impress Watch のものがしっかりしていていいですね。

Comments (2)

2008年3月1日 土曜日

東日本信用リサーチ

Filed under: 雑多
時間:12時21分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 しばらく前に、株式会社東信用リサーチというところからメールが来ました。内容は長期滞納者あてに身元調査をするという依頼を受けたというもの。要するに架空請求です。まだあったのですね。

 身元調査なのに、料金の清算手続きや退会処理もやるようです。サービスがいいことです。
 不明点の確認は、依頼主ではなくこの会社の担当者に連絡せよと記載されていますが、直接連絡があったほうが依頼主も喜ぶんじゃないでしょうかねぇ。矛盾だらけです。

 文面等は、下記ページをご覧ください。送信元アドレスの情報なども見ることができます。担当者の名前は複数あり、私のところに来たのは”根本”でした。送信元のアドレスは 08030947397。

 なお、(株)東信用リサーチの名前での送信もあるようです。こちらも架空請求ですね。

 くれぐれも電話したりしないようにご注意ください。

Comments (0)

2008年2月23日 土曜日

花粉襲来!

Filed under: 雑多
時間:14時22分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 今年もやってきました。スギ花粉の季節!

 なんか暖かいなと思ってたら、10分くらいで症状が出ました。私の場合は鼻に来るタイプでして、くしゃみ鼻水鼻づまり。サプリを早めに飲み始めていましたが、どうやら効果はなかったようです。

 帰宅してすぐに薬の力を借りました。1時間くらいぼんやりしてたら効果が出てきまして、一気に鼻と喉がカラカラに。初めて飲む薬だったためなか、効果が出すぎてしまいました。これはこれでつらいですが、鼻炎の症状に比べたらずっとマシなので我慢我慢。

Comments (0)

2008年2月19日 火曜日

『ダークエルフの口づけ Ⅳ』

Filed under: 読書中
タグ:, , ,
時間:20時46分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 混沌の王国ファンドリアを舞台としたファンタジー小説『ダークエルフの口づけ』の、第一部完結編です。

 現在半分ほど読み終えたところですが、「そんなことになっちゃうの?」といった感じ。完結編だけあって、展開がものすごいことになっています。残り半分の展開が非常に楽しみです。

Comments (0)
Page 20 of 55« First...10...1819202122...304050...Last »

HTML convert time: 6.205 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo