2017年1月18日水曜日

日本語の読み上げをするChrome拡張機能を作ってみた

動作確認環境
Chrome バージョン 55.0.2883.95 (64-bit)
macOS X EI Capitain バージョン 10.11.6
確認日:2017年1月


長ったらしい業務メールや、読んでおきたいけど分量に及び腰になっちゃうBlog記事を、読み上げてもらって文章を眺めながら聞くというやり方で、集中力が低下している時にもとりあえず処理できるようにして生産性を上げたい(上がる?)。


ちょっとググるとなかなか良いサービスがある。
http://imtranslator.net/translate-and-speak/speak/japanese/
  • 読み上げも我慢して使えるレベル。一昔前と比べるとかなり良くなった
  • 読み上げのスピードを選べるところがGood
    • ちんたら読まれたらイラつくからね
  • フォームにテキストをコピーして[Speak Japanese]をクリックすると、音声ファイルが生成されて画面上で再生可能となる
    • ちょっと面倒臭い
  • (無料では)文字数制限がある。自動的に可能な範囲で良い上げてくれるのはGood
    • 長文を読み上げたいという用途なので、かなり面倒臭い
  • 僕には不要だが、複数言語に対応している
ということで、制限のないサービスを探そう。

かと思ったけど、無料で制限のないサービスなんて都合の良いものが存在するかわからないし、あったとしてもテキストをコピペして読み上げる形になるだろうから手間がかかってしまうイマイチ感は拭えない。

そしてちょっと調べただけでも自分で作ってしまえそうだったので、日本語を読み上げるGoogle拡張を作ってみた。Chrome拡張は作ったことなかったのだけど、とりあえず動くものなら意外に簡単にできた。



こんなものを作りたい

  • 読み上げしたいテキストを選択する
  • 右クリックメニューの「読み上げ」をクリック
  • オプションで読み上げの速度を変更可能



作るもの

  • 適当にフォルダを作る。その中に以下のファイルを置く
  • icon16.png アイコンをPNGファイルで作る。自動で伸縮されるのでとりあえず適当でいい
  • manifest.json (後述)
  • options.html (後述)
  • background.js (後述)
  • options.js (後述)
https://developer.chrome.com/extensions


manifest.json

Chrome拡張機能の基本動作や必要なファイルを定義する基本的な設定ファイル。
manifest_versionは必須項目。
今回はコンテキストメニュー(右クリックメニュー)を使うので、permissionsにeontextMenusを設定、オプション(設定画面)を使うのでoptions_pageを指定しているあたりがポイント。

https://developer.chrome.com/extensions/manifest

{
 "name" : "Japanese Text to Speach",
 "version": "0.1",
 "manifest_version" : 2,

 "description": "選択したテキストを右クリックメニューの「読み上げ」から読み上>げます。日本語のみ対応。",

 "permissions": [
  "tabs", "http://*/*", "https://*/*", "contextMenus"
  ],

 "options_page": "options.html",

 "icons":{
  "16": "icon16.png"
 },

 "background": {
  "scripts": ["background.js"]
 }
}


options.html

図の通り、アイコンをクリック→オプションから開くオプション画面(設定画面)。
オプション画面の動作をscriptタグで指定しているoptons.jsに記述する。

https://developer.chrome.com/extensions/options
<code class="html"> <html lang="ja"> <head> </head> <body> <h1> Japanese Text to Speach</h1> <input name="rate" type="radio" value="1" /> Normal <input name="rate" type="radio" value="1" /> Fast <input name="rate" type="radio" value="1" /> Fastest <button id="save">保存</button> <script src="options.js"></script> </body> </html> </code>


background.js

https://developer.chrome.com/extensions/options

chrome.contextMenus.create({
        "title": "読み上げ",
        "type": "normal",
        "contexts": ["selection"],
        "onclick": function(info) {
                var synthes = new SpeechSynthesisUtterance(
                        info.selectionText
                );
                synthes.lang = "ja-JP";
                synthes.volume = 0.3;
                var rate = localStorage['rate'] ? localStorage['rate'] : '1.0';
                synthes.rate = parseFloat(rate);
                speechSynthesis.speak( synthes );
        }
});


options.js

オプション画面(options.html)の動作を記述する。localStorageを使って設定を保存する。未設定の状態で画面を開いた時の初期値の設定をしているのがポイント。

var rate = document.getElementsByName('rate');

document.getElementById('save').onclick = function() {
 if (rate[0].checked) {
  localStorage['rate'] = '1';
 } else if (rate[1].checked) {
  localStorage['rate'] = '1.3';
 } else {
  localStorage['rate'] = '1.5';
 }
}

document.body.onload = function() {
 switch(localStorage['rate']) {
  case '1':
   rate[0].checked = true;
   break;
  case '1.3':
   rate[1].checked = true;
   break;
  case '1.5':
   rate[2].checked = true;
   break;
  default:
   rate[0].checked = true;
   break;
 }
}



自作した拡張機能を読み込む

メニュー[その他のツール]-[拡張機能]を開く。
[デベロッパーモード]にチェックを入れる。
[パッケージ化されていない拡張機能を読み込む]ボタンをクリック。
作成したフォルダをしてして開く。





使う!

読み上げたいテキストを選択。
コンテキストメニュー(右クリックメニュー)の[読み上げ]をクリック。

読み上げられましたか?




自作した拡張機能を削除する

拡張機能の画面を開く。[ゴミ箱]アイコンをクリックして、不要となった拡張機能を削除する。



考えられる機能拡張

サクッと作った割にはなかなかの出来だと思うが、使ってみるとすぐに不満が出てくる。まず真っ先に気がつくのが読み上げの停止ができないこと(拡張機能のリロードを行うと止まるが...)。


  • 読み上げの停止
  • 読み上げ中に新たに読み上げを指定したら現在の読み上げを停止後にすぐ読み上げ
  • スピードの細かな調整
  • 音量の調整
  • 他言語対応
  • 読み上げ言語自動判別



参考









中竹竜二氏の講演は素晴らしかった(リーダーシップについて)

先日、会社で中竹竜二氏の2時間ありの講演を聞く機会があった。

中竹氏のことは知らなかったし、ラグビーU-20代表監督という肩書きを見て、優秀な選手を相手にしている恵まれた環境でリーダーシップを語られても、しがない課長風情の状況とは違いすぎるぜーと、たいして期待していなかったのだが、実に素晴らしい講演で、感銘を受けた

中竹氏の背景には、特に欧米で科学的に研究されているリーダーシップがあり、実績も豊富、さらに話も面白いので、とても共感できた。講演では具体的には触れられなかったが、リーダーシップには様々な能力が定義されおり、その個々の能力向けのトレーニングがあるということだったので、とても興味がわいた。

特殊な才能は不要。(トレーニングを受ければ)誰にでもできる。という考えであるところも聞くに値する信頼が置けるところだ。

記憶に残った言葉

  • 自分の能力をどこで伸ばすか。それは、普段じゃないところ。
  • 自分にしかできないことを「0」に!すると、組織に再現性が生まれる。
  • 口癖は意識して作った方が良い。ヒトは一回では伝わらない。言い続けることが大切。
  • リーダーの典型的な失敗パターン、それは「自滅」。虚像との戦い。
  • 高めたい力:目標を設定する力
  • ゴールデンサークル。偉人はWHYから始めた。
  • 部下への期待、それ今伝えるべきですか?言い過ぎてないか。期待を伝えているつもりで「自分の方が偉い」を伝えようとしている人が多い。
  • 期待しないことを伝えるのも重要。みんなやろうとしてしまう。
  • 大局的視点法。部下を育てることを考える時、「部下を潰すにはどうすればよいか?」を考えてみる。実は部下を育てるためにと考えて潰す行為をしてしまっていないか。
  • タレント発掘の基準は、オフ・ザ・ボール、オフ・ザ・フィールド。



紹介された書籍




中竹竜二氏の著作もいくつか読んでみたいと思った。







2017年1月6日金曜日

知能は遺伝するに決まっているじゃないか

「芸術やスポーツは才能が必要だけど、勉強は努力すれば誰でも平等に向上する」とオトナは言うけど、「んなこたーない。」ということはごく一部の秀才を除くすべての小学生が知っている。子供でもわかることがなぜ大人にはわからないのだろう。

進化論(ダーウィニズム)を信じるならば、知性が遺伝しなければ、人間はどのように高度な知性を獲得したのかが説明がつかないではないか。そして、個体差があるのは当たり前だ。

だからこの記事のタイトルの問いは実に馬鹿げている。分かりきっていたことなのだから。


しかし、どの程度が遺伝の影響で、どの程度なら努力で獲得できる能力なのだろうか。上の記事では『日本人の9割が知らない遺伝の真実 (SB新書) 』(安藤寿康 著)の内容として次のように紹介してる。


安藤教授らの研究プロジェクトでは、18年間総数1万組の双生児ペアについて、知能・学力や性格、精神疾患や発達障害などを調査しました。その結果、神経質、外向性、開拓性、同調性、勤勉性といった性格については30〜50%が遺伝で説明できることがわかりました。また知能については70%以上学力は50〜60%程度が遺伝で説明されました。

双生児法を用いた行動遺伝学研究はいまや世界各国で膨大な研究の蓄積があり、音楽や執筆、数学、スポーツに関しては遺伝の寄与率は80%にもなるという報告もあります。


間違えてはいけないのは、遺伝なので当然親の影響を受けるが、それは親の特徴をそのまま受け継ぐということではないということ。

この数字の受け止め方は人それぞれだろう。この数字を受けて親はどのように努力すればいいのだろうかと考えているところに、こんなことをぶち込んでくる。これは(僕にとっては)新しい知見だ。


行動遺伝学が導き出した重要な知見の1つは、個人の形質のほとんどは遺伝と非共有環境(家族のメンバーを異ならせようとする環境)から成り立っていて、共有環境の影響はほとんど見られないことです。共有環境をつくる主役は親(または親にあたる人)であり、親の愛情ある子育てが子どもの成長に重要であることはいうまでもありませんが、その親がどんなふるまいや子育ての仕方をするということは、子どもの個人差にはほとんど影響を与えません


けっこう衝撃的な内容じゃないでしょうか。親のなくとも子は育つの科学的裏付け?

親の役割は良い非共有環境を与えてあげることか!  ...と思いきや、


学力の場合、さらに20〜30%程度、共有環境の影響も見られます


うーん、やっぱり親が頑張らなくちゃ!

我が子を統計的にあつかいたい親なんているわけない。自分の子は教育によって劇的に伸びるかもしれないのだから、結局、教育が大切ってことに変わりはないよね。






2017年1月5日木曜日

800人もいる落語家、食えるのは100人だけ?

落語家(前座・真打)の年収を徹底解説!平均550万円!|平均年収.jp『食える噺家は100人だけ、落語界昇進制度の歪み(Page 1, 2, 3)』(ウェブ魚拓 1, 2, 3)に、落語家の収入について興味深いまとめがあったので転載。




検索してみると『落語家(前座・真打)の年収を徹底解説!平均550万円!|平均年収.jp』にこんな情報も。

落語家の階級別年収
  • 見習い:120万円
  • 前座:360万円
  • 二つ目:550万円
  • 真打:650万円以上
これを見ると100人しか食えないってことはないようにも思えますが、どうなんでしょう。

10年以上も修行して、平均650万円の年収では夢のない職業ですね。

「落語家  ギャラ」で検索すると、いろいろ面白い情報が見つかります。





JSのグラフライブラリを今選ぶならHighchartsかGoogle Chartsで決まり

2015年に書いた記事の更新版です。


グラフライブラリは多種多様に存在する。google trendで、highcharts、Google Charts、chart.jsなど、今選択するなら何がよいのか調べてみた。

結論

Highchartsを採用。商用利用は有償。
有償を避けたいならGoogle Chartsを採用。

理由

圧倒的に使われている(っぽい)から。Googleトレンドでの他のライブラリとの比較。



上記で圧倒的に差をつけられたChart.jsと他ライブラリ jqplot、amcharts、chartist.js、c3.js との比較。


その他のライブラリ Canvas.js、plotly.js、taucharts.js、sigma.js はさらに比較にならない。


Highcharts

highcharts公式サイト

http://www.highcharts.com/

参考になるサイト

http://yubais.net/doc/highcharts/

商用は有償

http://www.altech-ads.com/Others/Highcharts.htm?gclid=CLOoiPif1MMCFRUGvAodPAEA0g
  • High-five License : 64,216 円
  • Highcharts - Single Developer License : 64,216 円

デモ

http://www.highcharts.com/demo



Google Charts

Google Charts公式サイト

https://developers.google.com/chart/

商用利用可

Frequently Asked Questions # commercial use - Google Chart Tools — Google Developers
Terms of Service - Google Chart Tools — Google Developers

デモ

https://developers.google.com/chart/interactive/docs/gallery



調査メモ

highcharts

  • ベクターデータでグラフ描画できる。
  • とにかく綺麗。
  • オプションしだいで細部までいじれるので好き。
  • Gemもあるのでとにかく便利です。lazy_high_charts このGemを使う際はController上に直接書くとControllerをかなり汚すのでHelper化してしまいましょう。
  • ptengineというアクセス解析サービスで使っていた。
  • 動きが恰好よい。マップもあるしぱねぇ。
  • iphone4だとちと重い。
  • 商用に限り有料。ライセンス購入が必要。結構高い。

Google Charts

  • 仕上がりがちょっとダサい

jqplot


amcharts

  • MicroSoftやAmazonも使用していライブラリ。
  • ここで紹介する中でも一番多機能だと思います。
  • デザインもフラットできれいなのでチャート単体でも映えるので、色々なところに使えそうです。

chart.js

  • シンプルで、動きがあって、見ためはcchart.jsより好み。
  • ccchartは自分のやりたいことがほぼできたので、機能的に不満はないけど、こっちがどれだけのことが出来るかチェックしてみよう。
  • HTML5 canvasベースのJSライブラリ。
  • フラットなグラフをかける。




参考





2017年1月3日火曜日

エンジニア垂涎のメカニカルおもちゃ

偶然みつけて興奮していくつもの動画を連続で見てしまった、このおもちゃ。
大人も子供もこれを見れば欲しくなること間違いなし。この動画を見れば、その良さがわかるはずです。



クラウドファンディングサイトのKickstarterで商品化されたものです。
部品を接着剤不要で組み立てる自作キットで、動力はゴムです。歯車の動きが蜜者を魅了します。

日本でもAmazonで入手可能です。


機関車モデル 自分で組み立てて、ゴム動力で動く3Dパズル Ugears インテリアにも最適 日本正規販売


他にもいろいろあります。













2016年12月31日土曜日

アップルの哲学を読み解く

アップルのコンセプトビデオから哲学を読み解いてみましょう。

「Think Different.」はあまりにも有名なアップルの広告コピーです。そのまま訳せば「ものの見方を変える」ですが、この言葉には「誰かと違う自分だけの考えを持とう。そのための助けをするのがアップルなのだ」という彼らの強い共有価値観が込められています。



1997年のThnik Diffarent.から20年弱の時間が経ち、近年のアップルが持つ製品哲学や共有価値観はさらに深みを増しています。

その深みはアップルが新製品のために作るコンセプトビデオに凝縮されています。「iPad Air」のコンセプトビデオ「What Will Your Verse Be?」を見ていきましょう。



注目したいのはタイトルにある「Your Verse(ユア・バース)」という言葉です。公式には「あなたの物語は何ですか?」と訳されてていますが、この言葉に複雑なニュアンスを与えて、とても余韻のある終わり方をしています。これはどんな問いかけを意味するのでしょうか。

このコンセプトビデオを通して、アップルは私たちに「人類は『ヴァース』をつくる情熱を持っているのだ」という共有価値観を伝えているのです。

英語の「verse」に「単一の」という接頭辞の「uni-」を付けると、「宇宙」などを意味する「universe」という言葉になります。これをふまえると、「verse」は人類という一つの宇宙を形づくる一人ひとりの「あなただけの小宇宙」とも言えるかもしれません。

「Think Diffarent.」以降にアップルがたどり着いた哲学。それが「Your Verse」という言葉に込められているのです。

「Thnik Diffarent.」という言葉を思い返せば、かつてのアップルは他人と違う人間になるツールを提供する会社に過ぎず、その先には「では、他人と違うあなたは一体何を考えているのか」という問いがあったはずです。アップルは「私たちはあなたの情熱を拾い上げて、あなただけの『verse』を生きられるよに手助けをします」と背中を強く押します。「iPad」はそうしたアップルの共有価値観を込めてつくられた、表現のためのデバイスだったのです。



アップルの「Your Verse」という哲学は、2015年4月に発売された「Apple Watch」のコンセプトビデオのなかでも探求されています。

まずビデオの冒頭で「make it accessible, relevant, and ultimately personal(世界中の情報がお前に紐づくから、もう世界はお前の一部になるんだし、お前らしくなれるんだぜ)」という言葉が登場します。アップルらしい共有価値観がよく出ています。

特に重要なのはビデオの中盤から終盤あたりで、「ニュアンス・コミュニケーション(Nuance communications)」(≒日本語の「微妙なニュアンス」)という言葉が登場します。この言葉と一緒に「Apple Watch」の相手に自分の鼓動を送れる機能を紹介しています。つまり、身体が躍動するデータをそのまま時計を通じて相手に届けることで、言語を用いない微妙なニュアンスのコミュニケーションが可能になると提案しているのです。





尾原和啓氏の洞察力に感服しました。
ザ・プラットフォーム―IT企業はなぜ世界を変えるのか? (NHK出版新書 463)
オススメです。