2013年5月20日月曜日

jquery.tmpl.jsのテンプレートを外部化して動的に読み込みつつレンダリングするには?

クライアントサイドのテンプレートエンジンは色々あるけれど、JSPに慣れた人間からするとjquery.tmpl.jsが一番わかりやすかった。

BorisMoore/jquery-tmpl · GitHub

ただ、このライブラリは開発が停止している。このライブラリをフォークして開発が続けられているのがこちららしい。

KanbanSolutions/jquery-tmpl · GitHub

こちらのサンプルを参考にすると本当に簡単にできた。

jQuery公式のテンプレートplugin 「jQuery Templates」-JavaScript Library Archive

もはや、サーバーサイドのCPUを使ってHTMLをレンダリングする時代じゃないんだなというのを実感。

ただ、サンプル通りにやるとHTMLのコードが読みづらくなったりエディターでフォーマットしづらくなる。

その辺をどうにかしたいと思って簡単なサンプルアプリケーションを作ってみた。

「行を追加」というボタンをクリックするとlinesパラグラフに行番号と追加日時の行が追加されるというアプリケーション。この行のレンダリングにテンプレートエンジンを使う。


サンプルコード一式

HTMLのコードはこんな風。

<!DOCTYPE html>
<html lang="ja">

  <head>
    <meta charset="utf-8">
    <title>JSPライクにテンプレート</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script src="jquery.tmpl.js"></script>
    <script src="main.js"></script>
  </head>

  <body>
    <p><button onclick="addLine();">行を追加</button></p>
    <p id="lines"></p>
  </body>

</html>

ごらんの通り、HTMLにはテンプレートが含まれていない。ここが第1のポイント。

サンプルではHTMLの中にscriptタグを書いて、その中にテンプレートを書いているけれど、これだとエディターでフォーマットがしづらくなる。

そこでまず、行のテンプレートを_template.htmlというファイルに外部化する。外部化すればエディターでフォーマットしやすい。

<div><strong>${lineNum}.</strong> ${date}</div>

そして、この_template.htmlをHTTPのGETで動的に読み込む。そのためにはjQueryのgetが使える。ここが第2のポイント。

これはJSPで言えば「@ include file="_template.html"」的なものだ。

main.jsはこんな風。

//テンプレート
var $template = null;

//行番号
var lineNum = 0;


//初期化
$(document).ready(function() {

  //_template.htmlをHTTP GETで読み込んで$templateに代入
  $.get("_template.html", function(tmpl) { $template = tmpl; });

});


//行を追加するメソッド
function addLine() {

  //行番号インクリメント
  lineNum++;

  //置換に使うパラメーターオブジェクト作成
  var obj = new Object();
  obj.lineNum = lineNum;
  obj.date = new Date();

  //テンプレートをパラメーターオブジェクトの値で置換してlineのパラグラフに追加
  $.tmpl($template, obj).appendTo("#lines");

} // END addLine()

初期化後、ボタンをクリックするとaddLine()が呼び出されて、置換するパラメーターを作り、テンプレートエンジンでテンプレートを変換し、その変換された行がlinesパラグラフに追加される。

うん。これでスッキリ!

2013年5月11日土曜日

NHKや民放に、YouTubeの「月額課金制チャンネル」を是非とも開設して欲しい!

YouTube、月額課金制のチャンネルを開設できる新サービスを米国でスタート(イイヅカ アキラ) - BLOGOS(ブロゴス)

YouTubeは5月9日(米国時間)、月額課金制でチャンネルを開設できる新サービスをパイロットプログラムとしてスタートした。

これはすばらしい。

先日、NHKや民放のしょーもない施策の報道に釣られたわけだけど。。。

琴線探査: 本日の日経の一面トップ記事「NHK・民放の番組 スマホでどこでも視聴」に釣られたでござる

求めているのはこれですよ。NHKや民放がYouTubeで月額課金制で番組を配信し、結果として「スマホでどこでも視聴」。これなんですよ。

動画を配信するにはインフラ面で相当大きな投資が必要になるので単独では難しいというのは理解できる。しかし、YouTubeがこういった機能を出してしまった以上、これはもう言い訳できない。

「アンカー」とかね、是非できるだけ早く対応して欲しい。いや、「お願いします」というレベル。

いちいちYouTubeで検索したり、「消えちゃった」とかいう苦難がなくなるのなら喜んで課金に応じますので、是非よろしくお願いします!

あとは、法律の問題なんだろうか・・・もし問題があるのなら、ネットに造詣のある安倍政権には期待したい。

しかし、Google関連のRSSはかなり購読してるつもりだったけど、このニュースは知らなかったな。まだまだ重要なRSSがあるらしい。

Google Readerを廃止するなんて愚挙だと思うけどな。G+とかSNSだと情報が流れちゃうから、やっぱりダメだと思うけどな。

森山大道「狩人 ヨコスカ」。「におう」写真。今、横須賀美術館で見られるらしい。

日経13.05.11朝 森山大道「狩人 ヨコスカ」

日経記事より

(1971年、東京工芸大学写大ギャラリー蔵)

「街の記憶ー写真と現代美術でたどるヨコスカ」(6月30日まで、横須賀市、横須賀美術館)より

森山大道氏の写真には前にも感銘を受けたことがある。これだ。

琴線探査: 「写真とは真を写すものではまったくない」そして「アレ・ブレ・ボケ」 | はてなの芸術十選 4 アートディレクター 長澤章生 - 日経

今回の写真も、何というか「におい」のようなものを感じる。

いかにもスカっぽい狭〜いトタン製の通路に、なぜパンツ見えそうなミニスカの女性が?(^^); 意味わからんけど、すごい。「シェンムー」を思い出すな。

6月30日までか。森山大道氏の写真だけではないようだけど、おもしろそう。

横須賀美術館

キングガズ曰く「変化は拒めない。でも、そこにしか発展もない。」

日経13.05.10朝 サッカー人として 三浦知良 変化にしか発展はない

Jリーグができて20年。あっという間だったね。…
変化は拒めない。でも、そこにしか発展もない。
(元日本代表 横浜FC)

うーん。その通りだと思う。

似たようなことは色々なところでも言われている。

しかし、選手として歳を重ねていかざるを得ないキングガズ独自の感覚として「変化は拒めない」というところが「重いな」と思う。

中国産鶏肉の使用状況はどう?(日高屋、ケンタ、マック、ほっともっと)

日経13.05.09夕 鳥インフル備え急ぐ 外食チェーン 中国産鶏肉、扱い中止など


ハイデイ日高は連休明けから「日高屋」で提供する唐揚げ用の鶏肉で中国産の使用をやめた…
(日本KFC)…同社は中国産は使用せず、フライドチキンなどに使う鶏肉の大半に国産を使っている…
日本マクドナルドホールディングスはホームページで、原料の原産地や食品管理手法について説明している。

鳥インフルに対する自衛として、外食の中国産鶏肉の使用状況には注意している。各社大変だろうけれど、こういった情報はありがたい。

少なくとも、日高屋、ケンタ、マックでは中国産は使っていないご様子か?

日高屋は4月4日時点では中国産鶏肉を使っていたけれど(PDF)、残念ながら「やめた」という最新の資料は見当たらなかった。

ケンタは中国産ではないようだ。



マック。このページによるとタイ産と中国産のようだけど・・・

主要原材料の原産地 | おいしさと安全のために | McDonald's Japan

記事では「原料の原産地や食品管理手法について説明している」と言っているので嘘ではないけれど、やっぱ使っているように見えるな。

ほっともっとでは「おろしチキン竜田弁当」、「極うま親子丼」は注意だな。



うーん。ネガキャンになっちゃうかもしれないけれど、やっぱり、外食はできるだけしないほうがよさそう。だって、自分で作れば原産地の管理はできるもんね。。。

少々高くなってもいいから、国産!と言い切れる状況になったほうが、国内の産業に対しても、消費者に対しても、結果として提供する側としても、いいような気がするけどね。

2013年5月5日日曜日

幸せの丘「あゆコロちゃんのデザート」の解剖

先日、神奈川フードバトルと同時開催で「あつぎスイーツランド2012」があって、いつもお世話になっているケーキ屋さん「幸せの丘」が出店していた。
第5回かながわフードバトルinあつぎ【関連リンク】

そこでひときわ目立つ「あゆコロちゃんのデザート」なるものがあったので、解剖することにした(^^);

ネタバレ注意
「あゆコロちゃんのデザート」を楽しみにしている方には不適切な情報が含まれています。

グロ注意
およそかわいい「デザート」を語るには相応しくない表現が含まれています。

まずは完全体。


どこから攻めようかと考えた挙句、とりあえず帽子を除去。


次に、鮎を除去して食す。うむ。寒天かな?だいぶ痛い感じに(ノ∀`)


次は後頭部からだ。つるつるのゼリーっぽい皮とベリーっぽい味のババロアっぽいものを除去すると、何やら白いものが!


さらに除去を進めていくと、頭蓋骨らしきものが!


そのホワイトチョコっぽい頭蓋骨を無残にもかち割ると・・・いちごジュレっぽい脳髄がッ!!


おいしゅうございました。なーむー。


全然関係ないけど、この皿はアメリカのニューオーリンズの「HOUSE OF BLUES」でもらってきたものなんだけど、その言葉に感動した。

UNITY IN DIVERSITY」、「多様性の中に一貫性がある」とでも訳すか。

全然気づかなかったけれど、その通りだね。

個性豊かなプレイヤーの集まりが、ひとつのすばらしい音楽をつくり上げるんだ。

アメリカは世界のリーダーの座を降りたがっているらしい。日本が自立しなければならなくなる日は意外と近いのかも。

日経13.05.05朝 対シリア軍事介入 地上戦「想定せず」 米大統領 化学兵器確認でも

【ワシントン=吉野直也】オバマ米大統領は3日、シリアのアサド政権が反体制派に化学兵器を使用したことが確認できたとしても「地上部隊を送るシナリオは想定していない」と述べた。米軍が介入する場合も空からの攻撃や反体制派への武器供与などが選択肢になるとの考えを示唆したものだ…
オバマ氏は、シリアに地上部隊を送らないとする理由として「地上部隊の派遣は米国とシリアにとっても利益にならない」と明言…
化学兵器使用の有無が明確になった際は「国際社会に提示する。米国だけの問題ではなく、世界全体が憂慮すべきだ」…

空爆や反体制派に武器を供与するとしても、陸上部隊を送るまでのコストはかけられないと。

その理由は「地上部隊の派遣は米国とシリアにとっても利益にならない」から。いや、「米国の利益にならない」だろ?シェールガスが米国内で出てきたんで、アメリカ国益に対する中東のプレゼンスが相対的に落ちてるんだろう。

もし化学兵器の使用が明らかになっても、「国際社会に提示する。米国だけの問題ではなく、世界全体が憂慮すべきだ」と。なるほど。つまり、「なんでオレばっかの責任にするの?みんなの責任だろ?」といっているようだ。

要するに、アメリカは世界のリーダーの座を降りたがっているらしいね。

まあシリアの件にしても北朝鮮の件にしても、そろそろアメリカは頼りにならなくなるかもなあと強く感じる。

とは言え、それは別にアメリカが悪いわけじゃない。アメリカが頼りにならないってことは、日本が本当に自立しなければならないってことだ。ここは日本自身の問題だ。

日米同盟は続くにしても、日本が本当に自立しなければならない日は意外と近いのかもしれないと感じた。

憲法改正など、そうなった時にどうするかを今から考えておかないと。日米同盟だって永遠じゃないんだ。

本日の日経の一面トップ記事「NHK・民放の番組 スマホでどこでも視聴」に釣られたでござる

日経13.05.05朝 NHK・民放の番組 スマホでどこでも視聴 年内にも 専用テレビで転送

…映像データを圧縮し、ネットで転送する専用テレビをメーカー3社が発売する。自宅内にだけ転送するテレビは既に販売中で、この技術を応用する。価格は通常のテレビより最大で数万円高くなる見通し。テレビの買い替え需要が発生する可能性がある。…
テレビ局はこれまでネット経由の番組提供に慎重だった。しかし、ネット上には無料で視聴できる動画があふれ、若者を中心にテレビ離れが加速する。各局は端末への転送で視聴機会を増やす方が得策と判断した。

この記事、今日の日経の1面トップだった。

「NHK・民放の番組 スマホでどこでも視聴」とか言うから、一体どんなすごいことが始まるのか?と一瞬思った。

しかし次の瞬間、「専用テレビで転送」という文字が目に入り、「??」となる。

そして、どういうことなのさよ?と読み進めて行くと、こんな図が。

日経記事より

別に何にも新しくねーじゃん。これは釣り記事だよ。記事というより広告と言ってもいいかもしれない。オレの3分返してくれる?

日経も「自宅内にだけ転送するテレビは既に販売中」と書いているので「基本的には新しくない」という認識はあると思うが、外出先で見られるようになるということが新しいらしいね。いや、そういうのも既に聞いたことあるけど・・・

「テレビの買い替え需要が発生する可能性がある」ですか。。。甘いよ。少なくとも自分は買わないね。

痛いニュース(ノ∀`) : NHKがネットで無料視聴可能に 視聴対象を拡大へ - ライブドアブログ

「各局は端末への転送で視聴機会を増やす方が得策と判断した」だって?現状と何も変わらないし。このままだと日経が言うように、さらに「若者を中心にテレビ離れが加速する」んじゃないか?

求めているのはそういうことじゃないんだ。求めている第1段階はテレビのRadiko化。第2段階はテレビのYouTube化。

そういうことじゃないんだよ・・・

「オカザえもん」というゆるキャラがいるようなんだが・・・w

日経13.05.01夕 オカザえもん かわいい? 愛知・岡崎のご当地キャラ 「芸術」PR、怖がる子も

…文化や芸術のPRを委託されたご当地キャラクター「オカザえもん」…
「気持ち悪い」「いや、よく見るとかわいい」…
もともとは、名古屋市の現代美術作家、斉と公平太さん(40)が、昨年岡崎市であった芸術イベントに出品したイラスト作品…
髪型と顔で「岡」の字を、胸毛で「崎」の字を表現。奥さんに逃げられた、子持ちの40歳という設定だ…
「怖い」と泣きだしたり、近づくのを嫌がったりする子供もいるという…

「オカザえもん」というゆるキャラがいるようなんだが・・・これだ。

日経記事より

すばらしい。圧倒的なビジュアルじゃないかw

かわいいか?かわいくないか?ったら、そんなのかわいくねーに決まってるw ミッキーやドラえもんやピカチュウに見られる「かわいい」の法則からしてかわいくねー

しかしだ。『奥さんに逃げられた、子持ちの40歳という設定』というところが何か引っかかるんだ。

その何とも言えない痛さが、あの髪型と口の形と、そして全体的に投げやりなそのデザインに、お腹いっぱい表現されているような気がするからである。

Twitterのアカウントがあるというので逝ってみた。



「ござる」キャラのようである。

最近で最もインパクトのあるゆるキャラは小田原の「えっさほいファミリー」だったが・・・


超えてるなw

2013年5月4日土曜日

各種シェアボタンを整然とブログに設置するテーブルを書いてみた(特にBlogger向けに)

Bloggerのテンプレートをリセットする必要がありまして。リセットしたら各記事のフッターにあった各種シェアボタンが吹っ飛んでしまったでござる。

そこで、前から設置しようと思っていたPocketなどを含めつつ、こんな感じに前よりも整然と設置できないかなと思って。



基本形テーブル

こんなテーブルを書いてみた。

<!-- シェアボタン系テーブル -->
<table style='margin-top:8px; border:1px;' cellpadding="4">
  <tr>

    <!-- Twitter -->
    <td>
      <a class='twitter-share-button' data-lang='ja' href='https://twitter.com/share' data-count='vertical'>ツイート</a>
  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?&#39;http&#39;:&#39;https&#39;;if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+&#39;://platform.twitter.com/widgets.js&#39;;fjs.parentNode.insertBefore(js,fjs);}}(document, &#39;script&#39;, &#39;twitter-wjs&#39;);</script>
    </td>

    <!-- facebook -->
    <td>
      <div id="fb-root"></div>
      <script>(function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/ja_JP/all.js#xfbml=1";
        fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));</script>
      <div class="fb-like" data-send="false" data-layout="box_count" data-width="450" data-show-faces="false"></div>
    </td>

    <!-- Google+ -->
    <td>
      <div class='g-plusone' data-size='tall'/>
      <script type='text/javascript'>
        window.___gcfg = {lang: &#39;ja&#39;};
        (function() {
        var po = document.createElement(&#39;script&#39;); po.type = &#39;text/javascript&#39;; po.async = true;
        po.src = &#39;https://apis.google.com/js/plusone.js&#39;;
        var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(po, s);
        })();
      </script>
    </td>

    <!-- はてなブックマーク -->
    <td>
      <a class='hatena-bookmark-button' data-hatena-bookmark-layout='vertical-balloon' href='http://b.hatena.ne.jp/entry/' title='このエントリーをはてなブックマークに追加'><img alt='このエントリーをはてなブックマークに追加' height='20' src='http://b.st-hatena.com/images/entry-button/button-only.gif' style='border: none;' width='20'/></a><script async='async' charset='utf-8' src='http://b.st-hatena.com/js/bookmark_button.js' type='text/javascript'/>
    </td>

    <!-- pocket -->
    <td>
      <a class='pocket-btn' data-lang='en' data-pocket-count='vertical' data-pocket-label='pocket'/>
      <script type='text/javascript'>!function(d,i){if(!d.getElementById(i)){var j=d.createElement(&quot;script&quot;);j.id=i;j.src=&quot;https://widgets.getpocket.com/v1/j/btn.js?v=1&quot;;var w=d.getElementById(i);d.body.appendChild(j);}}(document,&quot;pocket-btn-js&quot;);</script>
    </td>

  </tr>
</table>


各種シェアボタン作成リンク集

各種シェアボタンを作成するリンクはこちら。

Twitter / Twitterボタン

Like Button - Facebook開発者

+1 Button - Google+ Platform — Google Developers

はてなブックマークボタンの作成・設置について

Pocket for Publishers: Pocket Button


Blogger専用の設定

以下はBloggerの人のための話。

しかし、下記のカスタマイズを行うと日本のBloggerのドメインがblogspot.comからblogspot.jpに変更された関係で全てのシェア数がゼロになってしまう可能性があるので注意。

自分の場合、もったいないなとは思いつつ、恐らくこの先Bloggerがblogspot.comに戻ることはないと思うので、見切りを付けてエイヤ!でやってしまうことにした。

カスタマイズにはBloggerのレイアウトタグが必要になるので、ここが参考になる。
レイアウト データ タグ - Blogger ヘルプ


テーブルを書く場所

ダッシュボード>テンプレート>HTMLの編集に入り、次のようなタグの中に上のテーブルのコードを書くといい。

<div class='post-footer-line post-footer-line-3'></div>

ブログによってはpost-footer-line-2までしか無いかもしれない。


Twitterボタンのカスタマイズ

上のままでも各記事のページ上では問題ないけれど、記事リスト表示の時に実際のその記事のツイート数が表示されないので、下記のようにexpr:data-urlとexpr:data-textアトリビュートを追加する。

<a 
  class='twitter-share-button'
  data-count='vertical'
  data-lang='ja'
  href='https://twitter.com/share' 
  expr:data-url="data:post.url"
  expr:data-text='data:post.title + &quot;琴線探査:&quot;'>ツイート</a>


facebookボタンのカスタマイズ

上のままでも各記事のページ上では問題ないけれど、記事リスト表示の時に実際のその記事のいいね数が表示されないので、下記のようにexpr:data-hrefアトリビュートを追加する。

<div
  class='fb-like'
  data-layout='box_count'
  data-send='false'
  data-show-faces='false'
  data-width='450'
  expr:data-href='data:post.url'/>


Google+ボタンのカスタマイズ

上のままでも各記事のページ上では問題ないけれど、記事リスト表示の時に実際のその記事の+1数が表示されないので、下記のようにexpr:data-hrefアトリビュートを追加する。

<div class='g-plusone' data-size='tall' expr:data-href='data:post.url'/>


はてなブックマークボタンのカスタマイズ

上のままでも各記事のページ上では問題ないけれど、記事リスト表示の時に実際のその記事のブックマーク数が表示されないので、下記のようにhrefアトリビュートをexpr:hrefアトリビュートに変更する。

<a class='hatena-bookmark-button' data-hatena-bookmark-layout='vertical-balloon' expr:href='&quot;http://b.hatena.ne.jp/entry/&quot; + data:post.url' title='このエントリーをはてなブックマークに追加'>


pocketボタンのカスタマイズ

上のままでも各記事のページ上では問題ないけれど、記事リスト表示の時に実際のその記事のpocket数が表示されないので、下記のようにexpr:data-save-urlアトリビュートを追加する。

<a class='pocket-btn' data-lang='en' data-pocket-count='vertical' data-pocket-label='pocket' expr:data-save-url='data:post.url'/>


Blogger用完成形テーブル

で、全てのカスタマイズを行ったBlogger専用の完成形テーブルがこれ。

<!-- シェアボタン系テーブル -->
<table cellpadding='4' style='margin-top:8px; border:1px;'>
  <tr>

    <!-- Twitter -->
    <td>
      <a class='twitter-share-button' data-count='vertical' data-lang='ja' href='https://twitter.com/share' expr:data-url='data:post.url' expr:data-text='data:post.title'>ツイート</a>
  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?&#39;http&#39;:&#39;https&#39;;if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+&#39;://platform.twitter.com/widgets.js&#39;;fjs.parentNode.insertBefore(js,fjs);}}(document, &#39;script&#39;, &#39;twitter-wjs&#39;);</script>
    </td>

    <!-- facebook -->
    <td>
      <div id='fb-root'/>
      <script>(function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = &quot;//connect.facebook.net/ja_JP/all.js#xfbml=1&quot;;
        fjs.parentNode.insertBefore(js, fjs);
        }(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));</script>
      <div class='fb-like' data-layout='box_count' data-send='false' data-show-faces='false' data-width='450' expr:data-href='data:post.url'/>
    </td>

    <!-- Google+ -->
    <td>
      <div class='g-plusone' data-size='tall' expr:data-href='data:post.url'/>
      <script type='text/javascript'>
        window.___gcfg = {lang: &#39;ja&#39;};
        (function() {
        var po = document.createElement(&#39;script&#39;); po.type = &#39;text/javascript&#39;; po.async = true;
        po.src = &#39;https://apis.google.com/js/plusone.js&#39;;
        var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(po, s);
        })();
      </script>
    </td>

    <!-- はてなブックマーク -->
    <td>
      <a class='hatena-bookmark-button' data-hatena-bookmark-layout='vertical-balloon' expr:href='&quot;http://b.hatena.ne.jp/entry/&quot; + data:post.url' title='このエントリーをはてなブックマークに追加'><img alt='このエントリーをはてなブックマークに追加' height='20' src='http://b.st-hatena.com/images/entry-button/button-only.gif' style='border: none;' width='20'/></a><script async='async' charset='utf-8' src='http://b.st-hatena.com/js/bookmark_button.js' type='text/javascript'/>
    </td>

    <!-- pocket -->
    <td>
      <a class='pocket-btn' data-lang='en' data-pocket-count='vertical' data-pocket-label='pocket' expr:data-save-url='data:post.url'/>
      <script type='text/javascript'>!function(d,i){if(!d.getElementById(i)){var j=d.createElement(&quot;script&quot;);j.id=i;j.src=&quot;https://widgets.getpocket.com/v1/j/btn.js?v=1&quot;;var w=d.getElementById(i);d.body.appendChild(j);}}(document,&quot;pocket-btn-js&quot;);</script>
    </td>

  </tr>
</table>

以上、終了! we out ちょ〜

Google GlassはGPSを搭載していないということに気が付いた

Google Glass、近くiPhoneでもナビゲーションとテキスト・メッセージが可能に | TechCrunch Japan


今でもGlassはBluetooth経由でiPhoneとペアリングして利用できる…
念のために言っておくと、Glassは独自にインターネットに接続できるという噂をよく聞くが、間違っている…
Glassはコンパスは内蔵しているが、独自のGPS受信機は持っていない。GPS情報はペアリングしたスマートフォンから読み出す…

Google GlassはてっきりAndroid専用かと思ったら、そうじゃないみたい。すでにiPhoneとも動いているらしい。

そりゃそうだ。Googleにとって、ユーザーをAndroidユーザーだけに限ってしまうのは損失だものね。

ところで、Glassは単体で「ネットに接続できない」というのは知っていたけれど、「GPSを搭載していない」とは知らなかった!

Tech specs - Google Glass Help


The MyGlass companion app requires Android 4.0.3 (Ice Cream Sandwich) or higher. MyGlass enables GPS and SMS messaging.

確かに。「MyGlassというアプリがGPSとSMSの機能を可能にする」とある。。。

まぁGPSは電力を食うしね。妥当だろうな。

ということは、Glassは単体では何の役にも立たないというわけだね(^^); あくまでスマホ有りきなわけだ。

2013年5月1日水曜日

「逆grep」は素晴らしい。大量のゴミテキストデータの中から宝を探すことができる。

例えばこのように、あるディレクトリとあるディレクトリで差分を取ってテキストデータを作る。

# diff -rq dir1 dir2 > diff.txt

すると、大抵ゴミの行(無視していい行)だらけになる。例えば「.DS_Store」を含む行とか、「._」を含む行とか。

それをいちいち目で見て判断するのは人間がやることではないので、何とか機械的に出来ないだろうか?と考えた。

そこでこうしてやった。

# cat diff.txt | grep -v '\.DS_Store' | grep -v '\._' > diff_filtered.txt

ポイントはgrepの-vオプションだ。これは「--invert-match」の意味で、grepに逆の動作をさせることができるようになる。

つまり、「-v '\.DS_Store'」は「.DS_Storeを含まない行を出力せよ」となる。

このようにして複数キーワードを逆grepしつつパイプでつないでやると、最終的に欲しい行のみのテキストデータが出来上がる。

いやあ、UNIXって素晴らしい。