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

2007年3月6日 火曜日

PHP による並べ替え

Filed under: コンピューター,雑多
時間:1時58分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 ひろまささんの連載記事『PHP で遊ぼう』の第6回は if と変数。この記事では並べ替え、いわゆるソートのアルゴリズムについて書かれています。

 ソートについて習ったのは大学のときです。サンプルコードは Pascal でした。懐かしさを感じるくらい前の話。3つの数字のソートプログラムを募集とのことでしたので、懐かしついでにやってみました。

  1. <html>
  2. <body>
  3. < ?php
  4.     $left = 8;
  5.     $center = 2;
  6.     $right = 4;
  7.  
  8.     // 並べ替えの処理;
  9.     echo "start: $left $center $right<br />\n";
  10.  
  11.     if ( $left > $center )
  12.     {
  13.         $temp = $center;
  14.         $center = $left;
  15.         $left = $temp;
  16.     }
  17.     echo "1st: $left $center $right<br />\n";
  18.  
  19.     if ( $center > $right )
  20.     {
  21.         $temp = $right;
  22.         $right = $center;
  23.         $center = $temp;
  24.     }
  25.     echo "2nd: $left $center $right<br />\n";
  26.  
  27.     if ( $left > $center )
  28.     {
  29.         $temp = $center;
  30.         $center = $left;
  31.         $left = $temp;
  32.     }
  33.     echo "3rd: $left $center $right<br />\n";
  34. ?>
  35. <p>左が < ?php echo $left; ?> で、真ん中が < ?php echo $center; ?> で、右が < ?php echo $right; ?> です。</p>
  36. </body>
  37. </html>

 ループを使うのが普通ですが、ここはあえて使わない方向で挑んで見ました。長ったらしいコードになってしまっていますが、これはいわゆるバブルソートですね。隣同士を比較して入れ替えていくというやつです。N個の場合の比較回数は N(N-1)/2 で、3(3-1)/2 = 6/2 = 3。なので3回分の if を書いています。

Comments (0)

2007年2月22日 木曜日

FreeBSD 6.x のロケールファイルは 5.x と違うらしい

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

 FreeBSD をアップグレードしてしばらく経ちますが、ある Perl ライブラリがバージョンアップできなくて悩んでました。ロケールが設定されてないとか何とか。環境変数を設定しなおしても同じメッセージが。

 エラーメッセージを検索してみたりしているうちに、ロケールファイルというものがあるらしいという情報が。「FreeBSD ロケールファイル」で検索してみると、確かにあるようです。ロケールが名前になっているディレクトリがたくさんあり、その中にもなにやらファイルが。どうやらこれのことのようです。

 で、さらに検索結果を眺めていると、6.0 からはロケールファイルのフォーマットが変わっているという情報が。6.0 以前の環境でコンパイルしたプログラムは、このせいでうまく動作しないとか。問題のライブラリは Perl スクリプトでコンパイルするようです。そして、インストールされている Perl は FreeBSD をアップグレードする前に Ports からインストールしたものです。 perl -v で同じメッセージも出ます。

 というわけで、Perl の再インストールをしてみました。perl -v でエラーメッセージが出なくなりました。

Comments (0)

2007年2月18日 日曜日

EntryKeywords 0.5.0 公開しました

Filed under: EntryKeywords,WordPress,プラグイン
時間:15時34分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 『公開迫る』といいつつ、結局2週間も過ぎてしまいました。自作 WordPress プラグインの EntryKeywords 0.5.0 をやっと公開です。

 公開場所は、予定通り JSeries になりました。その中に専用のページを作り、リリース情報などを掲載するようにしています。

 また、このブログに専用のカテゴリーを新設しました。JSeries はコメントやトラックバックができませんので、必要な場合はカテゴリー内の記事にでもしていただければと思います。

Comments (2)

2007年2月15日 木曜日

ドメインの移管完了

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

 今朝移管が完了したようです。特にメールが来たりはしないようで、VALUE-DOMAIN.COM(以降、VDC と表記)管理メニューの『移管中のドメインの状態を確認』で確認しました。

 注意が必要なのは、移管すると DNS の再設定が必要なこと。割引価格で移管した場合は、DNS サーバーが eNom から VDC のものに変更になります。その場合、設定が引き継がれたりはしません。
 しかも、以前設定したページは VDC 用のものに変えられてしまって、以前のものは見ることができません。現在移管中や移管の予定の方は、設定画面で『VALUE-DOMAIN独自のDNS機能で、同等の設定内容を表示するにはここをクリックしてください。』で設定を表示させ、テキストファイルに保存するなどしておくことをお勧めします。

 というわけで、設定が間違えてなければうまく切り替わるはずです。間違ってた場合は数日でエラーが・・・。

2007年2月17日追記

 無事切り替えられたようです。

Comments (0)

WordPress プラグインのトラブル解決

Filed under: EntryKeywords,WordPress,ハック,プラグイン
時間:4時14分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 フック admin_headdo_action を実行している直前で $wp_filter の中身をすべて表示させてみたところ、あっさり解決しました。
 関数名を検索してみるとしっかり登録されていたので登録内容を確認。フックのところを見たとき愕然としました。

 フック名は、「admin_head 」。後ろに余計なスペースが・・・。

 はい。単なる入力ミスです。こんなのに3日も悩んでたんですか。
 スペルを間違えないようにコピーしてきたときにスペースが入ってしまったのではないかと。本末転倒もいいところです(^^;

 フックは開発者が自由に決められる仕組みなので、スペルミスには注意が必要ですね。構文エラーなら PHP が面倒を見てくれますが、今回のような論理エラーは思い込みなどで気がつくのに時間がかかります。皆さんもご注意くださいませ。

Comments (0)

WordPress プラグインの仕組み

Filed under: EntryKeywords,WordPress,ハック,プラグイン
時間:3時25分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 自作プラグイン EntryKeywords のオプション設定画面を CSS で装飾したくて作業中。

 マニュアルを見ていて add_action('admin_head ', '関数'); とすればいいはずと目星をつけていましたが、なぜか動いてくれません。2日以上悩み続けています。仕方がないので流れを追いかけてみることに。
 結局動くまでには至っていませんが、せっかくなので仕組みをメモ。

登録

 まず、関数 add_action でフックに対応する関数の登録を行います。2.0.7 では add_filter を呼び出すだけなので、実際の処理は 関数 add_filter を見ます。定義は、/wp-includes/functions.php にあります。

  1. function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
  2.     global $wp_filter;
  3.  
  4.     // check that we don't already have the same filter at the same priority
  5.     if ( isset($wp_filter[$tag]["$priority"]) ) {
  6.         foreach($wp_filter[$tag]["$priority"] as $filter) {
  7.             // uncomment if we want to match function AND accepted_args
  8.             // if ( $filter == array($function, $accepted_args) ) {
  9.             if ( $filter['function'] == $function_to_add ) {
  10.                 return true;
  11.             }
  12.         }
  13.     }
  14.  
  15.     // So the format is wp_filter['tag']['array of priorities']['array of ['array (functions, accepted_args)]']
  16.     $wp_filter[$tag]["$priority"][] = array('function'=>$function_to_add, 'accepted_args'=>$accepted_args);
  17.     return true;
  18. }

 フックの登録は、グローバル変数 $wp_filter に配列として登録されます。関数 add_filter の処理は大きく2つに分かれていて、登録処理は後半の部分で行います。前半は重複して登録しないためのチェックです。
 登録処理のコメントにもありますが、登録情報はフックと優先度で分類されています。また、関数にはオブジェクトのメンバー関数も登録できます。その場合は、array(オブジェクトインスタンス, 関数名) という配列を使います。オブジェクトインスタンスは参照渡しする必要があります。そのため、PHP 4 では変数の頭に & をつけて明示的に参照渡しにする必要があります。

実行

 登録した関数を実行するには、関数 do_action を使います。この定義も /wp-includes/functions.php にあります。

  1. function do_action($tag, $arg = '') {
  2.     global $wp_filter;
  3.     $extra_args = array_slice(func_get_args(), 2);
  4.     if ( is_array($arg) )
  5.         $args = array_merge($arg, $extra_args);
  6.     else
  7.         $args = array_merge(array($arg), $extra_args);
  8.  
  9.     merge_filters($tag);
  10.  
  11.     if ( !isset($wp_filter[$tag]) ) {
  12.         return;
  13.     }
  14.     foreach ($wp_filter[$tag] as $priority => $functions) {
  15.         if ( !is_null($functions) ) {
  16.             foreach($functions as $function) {
  17.  
  18.                 $function_name = $function['function'];
  19.                 $accepted_args = $function['accepted_args'];
  20.  
  21.                 if ( $accepted_args == 1 ) {
  22.                     if ( is_array($arg) )
  23.                         $the_args = $arg;
  24.                     else
  25.                         $the_args = array($arg);
  26.                 } elseif ( $accepted_args > 1 ) {
  27.                     $the_args = array_slice($args, 0, $accepted_args);
  28.                 } elseif ( $accepted_args == 0 ) {
  29.                     $the_args = NULL;
  30.                 } else {
  31.                     $the_args = $args;
  32.                 }
  33.  
  34.                 $string = call_user_func_array($function_name, $the_args);
  35.             }
  36.         }
  37.     }
  38. }

 前半は飛ばして、後半の foreach を見ます。
 特定のフックに対する登録情報を順に処理しています。情報を取り出し、引数の処理をし、最後に組み込み関数 call_user_func_array で関数をコールします。

どこまでは動いているのか

 調べた結果、少なくとも add_filter での重複チェックを通過していることはわかりました。最後の return の直前($wp_filter への登録直後)で $wp_filter[$tag]["$priority"] の値を表示させて確認しました。
 add_action を経由しないで直接登録した場合ではきちんと動作しましたので、何らかの理由により登録を削除されているのではないかと考えています。

Comments (1)

2007年2月13日 火曜日

電源ユニット買ってきました

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

 ドスパラで電源ユニット買って来ました。エバーグリーンサイレントキング4の450W。5,980円でした。

 で、実は昨日から異音がしなくなってます。原因がなくなったのか嵐の前の静けさなのかわかりませんが、とにかく今は治まっています。なので、買ってきただけで交換はしていません。しばらく様子見です。

Comments (0)

2007年2月11日 日曜日

パソコンから甲高い異音が

Filed under: コンピューター
時間:21時17分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 昨日くらいから、パソコンが甲高い異音を発していることに気がつきました。最初のころは金属的なキュルキュルといった感じでしたが、今は耳鳴りのようなキーンという感じ。

 いろいろ調べていると、どうやらCPU負荷に関係がありそうです。3Dゲームを起動していると音が聞こえ、終了すると収まります。負荷をキーワードに検索を繰り返していると、電源ユニットが原因だったという情報を発見。その方の場合はコンデンサの不良だったようです。
 この情報を元に改めて音の出元を探ってみることに。蓋をはずしたパソコンの横からだと HDD 付近が一番大きいような気がしましたが、裏側で探してみると電源ユニットのファンの穴からかなり大きな音が。HDD の比ではありません。

 現在使っている電源ユニットは、TORICA の Sei Plus 360W。買ってきたのは1年9ヶ月前でした。2年以上使い続ける気でいたんですけどねぇ。

 明日新しいのを買ってこようと思います。サービスコンセントつきのがいいんですけど、最近少ないんですよね・・・。

Comments (1)

WordPress ダッシュボードの構文エラーの修正

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

 WordPress ダッシュボードには、ブログ内のページにリンクを張っているサイトのリストが表示されています。Me の日本語リリースでは「リンク元」とタイトルがつけられているところです。

 このリストですが、リンク部分に構文エラーがありました。リンクの終了タグである </a> がありません。2.0.6 の時点でなっていました。2.0.7 でも直っていません。

 2.0.7 での修正方法は次のとおり。

 修正前。/wp-admin/index.php の28行目。

  1. <li><a href="<?php echo wp_filter_kses($item['link']); ?>">< ?php echo wptexturize(wp_specialchars(wpj_rss_convert($item['title']))); ?></a></li>

 修正後。行末の </li> の直前に終了タグを入れます。

  1. <li><a href="<?php echo wp_filter_kses($item['link']); ?>">< ?php echo wptexturize(wp_specialchars(wpj_rss_convert($item['title']))); ?></a></li>

 これで構文エラーはなくなりました。

 なお、ほかのバージョンで修正箇所を探す場合は、次のコードを目印にするといいかもしれません。タイトルの部分です。そこから5・6行下に修正箇所があると思います。

  1. < ?php _e('Incoming Links'); ?>
Comments (0)

2007年2月5日 月曜日

ドメイン移管のお知らせ

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

 VALUE-DOMAIN.COM の割引サービス利用のため、このブログを設置したサーバーに割り当てたドメイン yoshitomo.org の移管を申請しました。

 サーバーは同じなので大丈夫だとは思いますが、移管とともに DNS サーバーの切り替えも行うため、一時的にこのブログにアクセスできなくなる可能性があります。数日から1週間ほどでアクセス可能になると思いますので、しばらくお待ちください。

Comments (1)
Page 18 of 31« First...10...1617181920...30...Last »

HTML convert time: 0.337 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo