Google Talk は生きている、のか?

先日、ChatSecure という携帯端末向け XMPP クライアントを試してみたとき、Google Talk (Google トーク)をふつうの XMPP として使えることに気がつきました。

2015年の初めころ、Google Finally Kills Off GoogleTalk and XMPP (Jabber) Integration などの記事を見て、XMPP との互換性を捨てて「Google ハングアウト」に移行する形で Google Talk はなくなったものだとばかり思っていました。そう、No, it’s not the end of XMPP for Google Talk というタイトルの記事を読んでいても、です。

これらの記事を目にした前後からついその時に至るまで、自分がふだん使っているクライアント Gajim で Google Talk のアカウントにログインできなくなっていました。それで「ああ、終わったんだな」と思い込んでしまったのです。

ところが先日 ChatSecure を試した際、その ChatSecure では GMail アカウントを用い、まったく他所の XMPP サーバーのアカウントの間でチャットできたのです。

前の記事を今よく読み返してみると、

Note that you can still continue to use the Google Talk Service with a third party XMPP client and the Google Talk XMPP servers continue to federate with other domains.

とあります。

ではどうして、PCのクライアントからはログインできなかったのでしょう? いろいろ検索して調べてみてわかったことは、Google アカウントの「2段階認証」を有効にしていたためにクライアント Gajim からログインできなかったようです。自分もこの2段階認証に切り替えたのが、ちょうど前の記事が出てそれを読んだ頃だったのかもしれません。

アプリ パスワードでログイン」というヘルプがその解決法でした。そこにあるとおりにパスワードを生成し、それを Gajim で使うことで無事にログインできました。いったんログインできてしまえば、あとはまったくふつうの XMPP アカウントとして使うことができます。

時系列的にまとめると

  • Google は 2005年ころ Google Talk というサービスを始めた。それは XMPP の拡張で、サードパーティの XMPP クライアントでも利用でき、また他の XMPP サーバーとも相互に会話できた。
  • Google は 2013年に Google Hangout という、Google Talk 後継のサービスを始めた。この時点で「Google Talk というサービスは終了」と言われているが、Google Hangout の機能のうちの文字によるチャットは Google Talk 互換であり、つまり XMPP として利用できた。
  • 2015年2月、Google 自身による Google Talk アプリ(Windows版)は廃止された。(Android版や、FirefoxやChromeの拡張機能の版も存在していたと思うが、たぶん同じ頃に消えたのだろう)
  • この2015年2月に「Google Talk は死んだ」と言われた。たとえば You Have No Choice: Google To Shutdown GTalk Feb. 23, Hello Hangouts など。しかしその記事でもじっくり読んでみると、However, users who are unable to give up GTalk can use third-party Windows apps, such as the open-source Miranda IM, Jitsi, and Psi, to continue using GTalk. と最後のほうに書いてある。

ということのようです。ただし「安全な接続」については注意が必要です。それこそ前の記事に書いたような、OTR など終端間暗号化(E2EE)を用いるのがいいかもしれません。

WordPress で Google マップを使う (再挑戦)

以前に「Google マップを使う」を書きましたが、その後 WordPress も Google マップもずいぶん進化して、時代遅れになってしまいました。

意図してる使い方は次のようなものです。

  • 固定ページに位置情報を持たせる。その固定ページにマップが表示される
  • それらのインデックスとなるような、上記の各ページにリンクされたマークが表示された全体図が、別の固定ページがある

たとえば、会社案内のサイトで各支店ごとに固定ページを作り、それぞれに案内地図を掲載し、「支店一覧」の全体図が別にもうひとつある、というイメージです。Lightweight Google Maps はほぼ条件を満たしていますが、その便利な機能がこちらの思惑には合いませんでした。

ざっと探してみましたが、「固定ページに位置情報」というものはなかなかありません。そこで、固定ページではなく投稿に、というプラグイン RomeLuv Google Maps for WordPress を見つけたので、それを改変することにしました。

RomeLuv Google Maps for WordPress を改変

--- romeluv-maps.php.orig
+++ romeluv-maps.php
@@ -51,6 +51,12 @@
         'romeluv_maps_inner_custom_box',
         'post' 
     );
+    add_meta_box( 
+        'romeluv_maps_sectionid',
+        __( 'Maps', 'romeluv_maps_textdomain' ),
+        'romeluv_maps_inner_custom_box',
+        'page' 
+    );
   
 }
 
@@ -361,6 +367,7 @@
 }
 
 add_action('save_post', 'romeluv_maps_handle_savepost');
+add_action('save_page', 'romeluv_maps_handle_savepost');
 
 
 
@@ -385,7 +392,7 @@
         if ($romeluv_single_map_done) return $post_content_html; else $romeluv_single_map_done=TRUE;
     
     
-       if (!is_single()) return $post_content_html;
+       if (!is_single() && !is_page()) return $post_content_html;
         //return "".$post_content_html;
        global $wpdb,$post,$mapheight;
        $savepost=$post;
@@ -552,13 +559,25 @@
     
     global $wpdb,$post;
     $savepost=$post;
+
     
+    extract( shortcode_atts( array(
+          'cat' => '', // category ID
+       ), $atts ) );
+       if (esc_attr($cat) == '') {
+         if (isset($_GET[cat])) $get_cat = $_GET[cat];
+       } else {
+         $get_cat = esc_attr($cat);
+       };
+
+
+
     ////query all the posts to display on the global map
      $querystr = "
        SELECT wposts.* 
        FROM $wpdb->posts wposts 
        WHERE  wposts.post_status = 'publish' 
-       AND wposts.post_type = 'post' ". $whereadditional ."
+       AND (wposts.post_type = 'post' OR wposts.post_type = 'page') ". $whereadditional ."
        ORDER BY wposts.post_date DESC
     ";
     //echo $querystr; //useful for debugging your custom query
@@ -571,9 +590,7 @@
     
     if ($result_posts):
     
-    if (isset($_GET[cat]))  echo '<h3 id="map-category-heading">'.get_cat_name($_GET[cat]).'</h3>';
-    
-    
+    if (isset($get_cat))  echo '<h3 id="map-category-heading">'.get_cat_name($get_cat).'</h3>';
     
     $mapwidth=get_option('global_romeluv_mapwidth');
     $mapheight=get_option('global_romeluv_mapheight');
@@ -614,7 +631,7 @@
                            
                              $count++;  
                            
-                           if (isset($_GET[cat])) if (!in_category($_GET[cat],$post->ID)) continue; //this allows category filtering adding the $_GET parameter ?cat=xx
+                           if (isset($get_cat)) if (!in_category($get_cat,$post->ID)) continue; //this allows category filtering adding the $_GET parameter ?cat=xx
                            
                            if (is_category()) { if (!in_category($cat_ID,$post->ID)) continue;  }   //skip posts if viewing a category page, if those do not match the current category
                            

改変の内容は、

  • 固定ページの作成画面にも「Maps」の入力欄を表示する
  • 全体図の出力の際に固定ページも対象にする
  • 全体図を出力するショートコード [GLOBALMAP] に、オプションcat を追加する

です。この最後の項目は次のような事情です。

このプラグインのオリジナル版では、全体図を表示させるには、固定ページでショートコード [GLOBALMAP] を用います。特定のカテゴリーに属する投稿だけを全体図に表示するという絞り込みができます。その方法は、カテゴリーの ID をパラメータで付加して、http://www.example.com/map?cat=6 のような形で、全体図のページを呼ぶようにします。

しかし、WordPress 標準のメニュー機能でこのような形式のリンクを作る方法が思い浮かびません。そこで、むしろ複数の全体図のページを用意することにして(たとえば http://www.example.com/map1 と http://www.example.com/map6)、それぞれのページでのショートコードにオプションでカテゴリー ID を付けるようにしました(たとえば [GLOBALMAP cat="1"][GLOBALMAP cat="6"])

さて、ここでは固定ページに位置情報を付加して、全体図を作ることを想定しています。すると固定ページにもカテゴリーが設定されていないと、上記の絞り込みができません。テーマの functions.php か何かで

function add_category_to_page() {
    register_taxonomy_for_object_type('category', 'page'); 
}
add_action('init', 'add_category_to_page');

とやって、固定ページにもカテゴリーを設定できるようにしておく必要があります。

twentyeleven で Google マップが壊れる

実際に使用してみると、表示される地図が微妙に壊れていました。タイルの継ぎ目が合わずに道や川がずれているような感じになります。はじめ、自分が使っているブラウザか何かの環境のせいかと思って、いろいろ調べましたがわかりません。ようやく、テーマ twentyeleven にすると壊れて、twentyten にすると正常に表示されることに気がつきました。それから今度は twentyeleven のスタイルシートのどの記述が影響しているのか順に見ていき、ついに imgmax-width が付いているとこの現象が起こることがわかりました。これだけで随分と時間を費やしました。

このプラグインの影響下の img のみ max-width を解除するため、

div#romeluv-global-map img,
div#single-post-map img {
        max-width: none;
}

をスタイルシートに書いて、解決しました。

Inline Google Maps Plugin改

[[http://blog.macfeeling.com/archives/2239|MacFeling]]で紹介されているのを見つけて、 [[//pasero.net/~mako/blog/s/35#inline_google_maps_plugin|先日書いたinline google maps plugin]]—WordPressの個々の記事やページにGoogleマップを置ける—の「ひとつの地図にひとつのマーク」という制約を改造して、複数のマークを置けるようにしてみた。書式の互換性がなくなってしまったので、ファイル名を gmaps-hm.php と変えておいた。 * [[//pasero.net/~mako/blog/gmaps-hm/|gmaps-hm]] オリジナルのほうは「ひとつの地図にひとつのマーク」をより便利に使えるように [[http://macdiggs.com/index.php/2006/10/13/inline-google-maps-for-wordpress-version-2/|v2.0]]へと進化しているが、こちらは v1.1改。 [gmap name=’20061015′ lat=’38.27501322074987′ lng=’140.83431959152222′ zoom=’12’] [gmark lat=’38.27501322074987′ lng=’140.83431959152222′ desc=’ひとつの場所’ label=’P’] [gmark lat=’38.281717′ lng=’140.869314′ desc=’もうひとつの場所’ label=’Q’] [/gmap] === WP-SimpleGmaps ==== 似たようなプラグイン [[http://aoina.com/archives/45|WP-SimpleGmaps]]というのを見つけた。でもこれもひとつの地図にひとつのマークのようだ。

Google マップを使う

WordPress でGoogle マップを使ってみる。

Plug ‘n’ Play Google Map

新しい版はPlug ‘n’ Play Google Map。旧版の日本語の解説がある

マップ型の目次といった使い方になるのか。このサイトのマップ

記事だけでなく、(静的)ページのマークも地図に載るように改造した[1]

ついでに、ページのマークは「アルファベット付」マークになるようにした。Tutorialのソースを参考に切り貼り。印刷時にもアルファベット付マークになるように printImagemozPrintImage も設定するようにした。印刷用のマーク(例: “A”)は

http://www.google.com/mapfiles/markerAie.gif
http://www.google.com/mapfiles/markerAff.gif

とか言う名前であった。

Inline Google Maps Plugin

“目次”マップではなく、個々の記事にマップを貼りたい。wp-dokuwikiプラグインに付属しているはずなのだが、うまく動かない。

Inline Google Maps Plugin というのがあった。これは簡単そう。

[gmap name='20061007' lat='38.27501322074987' lng='140.83431959152222' zoom='12' desc='プラグインのテスト']
[gmark lat='38.27501322074987' lng='140.83431959152222' desc='プラグインのテスト']
[/gmap]

ひとつのマップにひとつのマークしか置くことができない。

コメントにあるように、当分はこのままらしい。

  1. (静的)ページにも緯度経度情報を入力できるようにGeo プラグインもちょっと改造した。