グーグルデスクトップ検索、日本語版が登場

グーグルデスクトップ検索、日本語版が登場 – CNET Japan
Googleは3月15日、「Googleデスクトップ検索」の日本語版(ベータ版)を提供開始した。Googleでウェブ検索する場合と同じように、インターネットに接続することなくユーザーが個々のパソコン内の情報を検索できるというもので、3月7日に米国で発表された英語版「Google Desktop Search 1.0」(正式版)と同じ機能を持っている。

日本語の検索が少し気になっていたところ。英語版では日本語の構文的な検索ではなく、「日本語」と検索した場合に「日」「本」「語」と別々の単語として認識されてインデックス化されていた。そのあたりがうまくできているのか試用してみる。

wp-mail.phpを改造して地図へのリンクを表示する

wp-mail.php サムネイル+機能強化版
こちらで配布されているwp-mail.phpに手を加え、画像が添付された際にサムネイルを作成できるように機能追加しました。

wp-mail.phpのサムネイル+機能強化版を利用して、GPS情報のある写真が添付された場合に地図へのリンクを記事に挿入する改造を行ってみました。

  • 仕様
    • 複数の写真が添付された場合、GPS情報を取得できるのは1枚目の写真のみ
    • GPS情報は世界測地系(WGS-84)/日本測地系(Tokyo)の両測地系に対応し、世界測地系であれば日本測地系に変換を行い地図サイトへのリンクを生成します
  • 注意
    • 携帯電話 au W21S でしか確認していません
    • ライセンスは元のwp-mail.phpが GNU GPL となっていますのでGPLです
  • &color(#F00){‘2005/03/15 更新‘}
    • GPS情報が日本測地系の場合エラーが発生する問題を修正。
    • メールを2件以上処理する場合でも、1件目のGPS情報を利用してしまう問題を修正
<!--more-->

wp-mail.php サムネイル+機能強化版を入れる

wp-mail.php サムネイル+機能強化版から somy_wp-mail.lzh(EUC-JPの場合はsomy_wp-mail_euc.lzh)をとってきて、WordPressのディレクトリに展開する。

wp-mail.phpを改造する

結構無理やりな事をしています。。。 😳

get_gps_information()関数の $content = … あたりで地図サイトへのリンクを生成していますので、お好みに合わせて変更してください。

114行目に追加

// GPS地図リンク作成用の設定

      /* GPS情報がある場合地図へのリンクを作成 ''1'':する ''0'':しない */
  $wpmail_get_gps_information = ''1'';

    /* 地図サイトへのURL一覧(日本測地系) URL中の$latは緯度、$lonは経度 */
 $_gps_map_urls = array(
            ''Yahoo'' => ''http://map.yahoo.co.jp/pl?nl=$lat&el=$lon'',
          ''Mapion'' => ''http://www.mapion.co.jp/c/f?uc=1&grp=all&nl=$lat&el=$lon'',
           ''MapFan'' => ''http://www.mapfan.com/index.cgi?MAP=E$lonN$lat&ZM=11'',
      );

      /* 地図サイトへのURL一覧からの名前 */
    $_gps_map_url = ''MapFan'';

     /* [ラジアン/度](変更の必要がなければ修正しないでください) */
  $rd = pi() / 180;

   /* [変換用データ](変更の必要がなければ修正しないでください) */
   $geo_param = array(
         ''WGS-84'' => array(
                     ''a'' => 6378137,
                        ''1/f'' => 298.257223563,
       ''dx'' => 0,
                      ''dy'' => 0,
                    ''dz'' => 0,
              ),
          ''TOKYO'' => array(
     ''a'' => 6377397.155,
                     ''1/f'' => 299.152813,
  ''dx'' => 148,
                    ''dy'' => -507,
                 ''dz'' => -681,
           ),
  ) ;

332行目付近に追加

// GPS情報取得
   if($wpmail_get_gps_information && count($_wpmail_photo_filepaths) > 0) {
        $content = get_gps_information($_wpmail_photo_filepaths[0]).$content;
       $_wpmail_photo_filepaths = array();
  }

399行目に追加

   global $_wpmail_photo_filepaths;

462行目に追加

    $_wpmail_photo_filepaths[] = $file_path;

620行目に追加

/**
 * GPS情報取得
 */
function get_gps_information($filename) {
        global $_gps_map_urls, $_gps_map_url;

    $content = "";

    if(($exif  = exif_read_data($filename, 0, true)) && array_key_exists("GPS", $exif)){
              $lon = degstr($exif["GPS"]["GPSLongitude"]);
            $lat = degstr($exif["GPS"]["GPSLatitude"]);

            $gps_geo = $exif["GPS"]["GPSMapDatum"];

            if($gps_geo != "TOKYO"){
                  $gps_geo_tokyo = convert_gps_geo($gps_geo, "TOKYO", $lon, $lat);
          }else{
                      $gps_geo_tokyo = array("Longitude" => $lon, "Latitude" => $lat);
          }
           $replace_patterns = array(''/$lon/'', ''/$lat/'');
              $location_mapurl = preg_replace($replace_patterns, $gps_geo_tokyo, $_gps_map_urls[$_gps_map_url]);
          $location = get_map_location_from_url($location_mapurl);

            $dt = dtstr( $exif["EXIF"]["DateTimeOriginal"]);

            $content = "<blockquote>n"
                                ."<strong>GPS情報:</strong>n"
                              ."$dtn"
                          ."<a href="$location_mapurl">$location</a>n"
                             ."</blockquote>n";
 }

       return $content;
}

function get_map_location_from_url($url) {
     $content = get_content_from_url($url);
      if(preg_match("/<title>([^<>]+)< /title>/i", $content, $match)){
              $title = htmlspecialchars($match[1]);
               list($title, $location) = explode(" - ", $title);
         if(strstr($location, "周辺") === false){
 $location = $title;
          }
   }
   return $location == "" ? "不明" : str_replace("地図", "", $location);
}

function get_content_from_url($url) {
     $content = @join("", @file($url));
        $content = mb_convert_encoding($content, get_settings(''blog_charset''), "EUC-JP");

    return $content;
}

function degstr($parry) {
      $d = ratstr2num($parry[0]);
$m = ratstr2num($parry[1]);
  $s = ratstr2num($parry[2]);
 list($g,$l) = explode(''.'', $s);

       return sprintf("%02d.%02d.%02d.%02d", $d, $m, $g, $l);
}

function ratstr2num($str) {
    list($ch, $mot) = explode(''/'', $str);
     return $mot == 0 ? 0 : ($ch/$mot);
}

function dtstr($str)
{
    list($y, $m, $d) = explode('':'', substr($str,0,10));
       list($h, $i, $s) = explode('':'', substr($str,-8));

    $time = mktime( $h, $i, $s, $m, $d, $y) - (TZ*60*60);

    return date(get_settings("date_format") . '' '' . get_settings("time_format"), $time);
}

function convert_gps_geo($geo_from, $geo_to, $lon, $lat, $altitude=0) {
      global $geo_param;

      $llh_pattern = "/^(d+).(d+).(d+.d+)$/";

     preg_match($llh_pattern, $lon, $match);
     $longitude = $match[1] + $match[2]/60 + $match[3]/3600;

preg_match($llh_pattern, $lat, $match);
      $latitude = $match[1] + $match[2]/60 + $match[3]/3600;

  if(!isset($geo_param[$geo_from]))
          die("''geo_param[$geo_from]'' not supported");
     if(!isset($geo_param[$geo_to]))
             die("''geo_param[$geo_to]'' not supported");

  list($x,$y,$z) = ellipsoid_to_rectangular(
          $longitude,
         $latitude,
          $altitude,
          $geo_param[$geo_from][''a''],
               calc_eccentricity( $geo_param[$geo_from][''1/f''] )
 ) ;

     list($longitude, $latitude, $altitude) = rectangular_to_ellipsoid(
          $x+$geo_param[$geo_to][dx],
         $y+$geo_param[$geo_to][dy],
         $z+$geo_param[$geo_to][dz],
         $geo_param[$geo_to][a],
             calc_eccentricity( $geo_param[$geo_to][''1/f''] )
  ) ;

      $converted_lat = deg_to_dms( $latitude ) ;
  $converted_lon = deg_to_dms( $longitude ) ;
 return array($converted_lat, $converted_lon);
}

function calc_eccentricity($i_f) {
        $f = 1/$i_f ;
      return 2*$f-$f*$f ;
}

function ellipsoid_to_rectangular($l, $b, $h, $a, $ec) {
     global $rd;

     $b *= $rd ;
 $l *= $rd ;
 $sb = sin( $b ) ;
   $cb = cos( $b ) ;
   $cl = cos( $l ) ;
   $sl = sin( $l ) ;

       $k = $a/sqrt( 1 - $ec*$sb*$sb ) ;
   $x = ($k+$h) * $cb * $cl ;
  $y = ($k+$h) * $cb * $sl ;
  $z = ($k*(1-$ec)+$h) * $sb ;

   return array($x, $y, $z);
}

function rectangular_to_ellipsoid($x, $y, $z,$a, $ec) {
        global $rd;

     $sq = sqrt( 1-$ec ) ;
      $r1 = sqrt( $x*$x + $y*$y ) ;
        $s = atan2( $z, $r1*$sq ) ;
 $st = sin( $s ) ;
   $ct = cos( $s ) ;
   $b = atan2( $z + $ec*$a / $sq*$st*$st*$st, $r1 - $ec*$a*$ct*$ct*$ct ) ;
     $l = atan2( $y, $x ) ;

  $sb = sin( $b ) ;
   $rn = $a / sqrt( 1 - $ec*$sb*$sb ) ;
        $h = $r1/cos( $b ) - $rn ;

      return array($b/$rd, $l/$rd, $h) ;
}

function deg_to_dms($d) {
    $h = floor($d);
     $m = floor( (($d-$h)*60) % 60 ) ;
   $s = ($d-$h-$m/60)*3600;

        return sprintf("%d.%02d.%02.2f", $h,$m,$s) ;
}</title>

Google Desktop Searchが正式リリース

Google Desktop Searchが正式版に、マルチメディアファイルにも対応
米Googleは米国時間の6日深夜、デスクトップ検索ソフト「Google Desktop Search 1.0」を公開した。2004年10月以降ベータ版として提供されていたものが今回、正式版にアップデートされたかたちになる。PDFやマルチメディアファイルにも対応したほか、Deskbar上から検索できる機能も追加された。

Google Desktop Search 日本語化 第一版 barlog ≫+||||≪

前々からThunderbirdに対応しないものかなーと思っていたら正式版で対応したのかわからないけれど、対応している!ということで早速初めてのデスクトップ検索をインストール。当面は仕組みに感動するような状態か、使い込んで飽きたらアンインストールします。。。笑

脱MovableTypeしました!

前々から気になっていたWordpressにメジャーリリースがあり、まだDevelopmentバージョンのようだけれど 1.5 がリリースされたのでちょこちょこ触っていたらなかなか止まらなくて。。笑

ついにMovableTypeと入れ替えても良いかなと考え、今まで運用していたMovableTypeのブログをWordpressへ移行してみました。比べてどうか、と言われるどちらかというと個人的にはPerlよりもPHPのほうがカスタマイズし易いので触りやすいぐらいか、そんな個人的な事情です。。まだまだテンプレートなど改良の余地がありますがとりあえずです。

当面はプラグインの開発とかWordpress 1.5 Strayhorn でとりあえず問題になっている個所と対策などを取り上げていきたいと思います。

また、MovableType の時に書いていた幾つかのエントリを復元する予定です。少々お待ち下さい。