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

2008年3月30日 日曜日

WordPress Japan が2008年3月31日で閉鎖

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

 WordPress 管理画面のダッシュボードには、登録された WordPress サイトの記事が表示されます。そして、有志による日本語化などを行った ME 版では、本家版とは違うものが表示されていました。私は RSS リーダー代わりに記事を書かないときにも頻繁に見ていて、新しい記事が表示されるのを結構楽しみにしていました。

 ここ数日更新されなくておかしいなと思っていたのですが、ふと気がつくと、運営者からのお知らせ(これもダッシュボードに表示されます)に閉鎖するとのメッセージが。2008年3月31日で、関連コンテンツも含め閉鎖とのことでした。

 すでにいくつかのコンテンツは閉鎖されていて、WordPress サイトの記事が更新されなくなったのもそのためのようです。この機能ははてなブックマークを利用して実現しているのですが、元となるブックマークが削除されていました。新規の取得が出来ないため、現在はキャッシュとして保持されているデータが表示されているのでしょう。

 WordPress を使い始めるに当たって、WordPress Japan のサイトには非常に助けられました。あれが英語で書かれていたら、おそらくかなり苦戦したと思います。もしかしたら挫折してしまった可能性も・・・。

 改めて、WordPress Japan および、ME 版に関わった多くの方々に感謝。

Comments (0)

2008年3月26日 水曜日

『メグとセロン Ⅰ』

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

 『リリアとトレイズ』からののスピンオフ作品です。もともと作者は狙っていたようです。アニメ化で実現したとか。

 時期は、『私の王子様』と重なるようです。


Comments (0)

2008年3月20日 木曜日

Safari 3.1 for Windows

Filed under: インターネット,ソフトウェア
時間:21時37分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 Safari 3.1 がリリースされました。ベータ版でなくなったと言うことで、Windows 用をインストールしてみました。

 インストールした環境は、Windows XP SP2。世界最速ということなのでいろいろ期待していたのですが、どうも重い。タブを5つ開いている Firefox 2.0.0.12 よりも重い。メニューを開くだけでもタイムラグがあります。

 表示や JavaScript の実行が速いと言う”世界最速”なわけですが、それが事実だとしてもこのもったり感がある限りはメインには出来ないです。個人的には、サブにする気にもなりませんでした。ボタンなども含め Mac 版と同じ外見になるので、表示確認で使うにはいいかもしれません。

 特徴としては、フォントスムージングがあります。フォントに対してアンチエイリアスをかけてくれる機能だと思うのですが、この機能の影響でフォントが太く見えます。標準・弱・中・強の4種類があり、標準にしたときが一番フォントが細くなりました。

フォントスムージングの設定

フォントスムージングを標準にした場合

フォントスムージングを強にした場合

 設定を変えても、特に軽くなった感じはしませんでした。見た目の好みなどで選んでいいと思います。

 なお、Safari のページにははじめてSafariを開くと、これまで使っていたブラウザのすべてのブックマークが自動的に読み込まれます。とありますが、それらしい処理はされませんでした。もしかすると、デフォルトのブラウザとして設定しないと駄目なのかもしれません。

Comments (0)

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)
Page 1 of 212

HTML convert time: 3.675 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo