2013年4月21日日曜日

機械との競争

第1章 テクノロジーが雇用と経済に与える影響
第2章 チェス盤の残り半分にさしかかった技術と人間
第3章 創造的破壊ー加速するテクノロジー、消えてゆく仕事
第4章 では、どうすればいいか
第5章 結論ーデジタルフロンティア



コンピュータのが進化するにつれて、人間に任せるまでもない仕事が増えてきた。

例えば、ここ20年くらいで秘書の仕事が激減したということはよく報じられている。他にも事務仕事は減り続けているだろうし、今後も減少の一途を辿ることももはや常識だろう。

コンピュータの処理速度は日進月歩で向上し、価格の下落も激しい。そのような中、もはや人間が勝負を挑み続けても勝ち目は到底ない。

そこで、勝ち目のない競争(race against machine)を挑むのではなく、上手く利用してやろう(race with machine)、というのが本書の提案となる。

計算能力などでは無類の強さを誇るコンピュータも新しいアイデアを出したり人とのコミュニケーションを必要とする分野ではまだまだ人類を伍する事ができない。コンピュータの演算能力を存分に利用し、価値のあるサービスを提供することが必要となる。


ちょうど、最近、電王戦というコンピュータと人間の将棋の大会が行われた。結果はコンピュータの勝利ということだが、これは単に一つのマイルストーンを確認したに過ぎない。仮に人間側が勝利していたとしても、数年以内には確実に負ける宿命だっただろう。

競技としての将棋は、ちょうどオリンピックの陸上競技のように人間同士の純粋な健闘をたたえ楽しむ形で意義が存続できるという主張も多いが、ビジネスという側面で考えると、またひとつ人間が磨いても金にならない技能が増えたことになる。


2013年3月17日日曜日

JavaでPageRankアルゴリズム

有名なgoogleのPageRankアルゴリズム。
今更ながらどうやって実装してるのか調べてみました。

評価の高いページに参照されてるページは評価が高いはず、の仮説に基づいているのは有名な話ですが、実際にこれをコードに落としこむロジックはなかなか綺麗で良くできているものだと感心してしまいました。

論文に書かれている再帰的な数式をどうプログラムで表現すべきか、的な話はこちらが詳しいので興味を持った方はご参照を。

リンク解析とか: 重要度尺度と von Neumann カーネル

2013年1月20日日曜日

Google Apps Scriptでのファイル入出力

何年か前まではSpread Sheet用のVBA程度しかなかったGoogle Apps Script。
この前ちょっと調べてたらGoogle Drive上にファイルを書き込んだり読み込んだりできるよになったました。

なのでAPIの調査がてらFile操作関連のサンプルコード書いてみました。
ソースはこちら。(github)

1. Plain Textファイルの読み込み

まずGoogle Drive上にあるファイルを読み込むスクリプト
function readPlainFileByName(){
  var files = DocsList.getFiles();
  for(var i = 0; i < files.length; i++){
    var fileName = files[i].getName();
    if(fileName == "sampleFile"){
      var contents = files[i].getContentAsString();
      Logger.log(contents);
    }
  }
}
sampleFileというファイル名のファイルを読み込んでいます。 

ファイル名をピンポイントで指定するメソッドはないようですが、ファイルの中身を全検索してヒットしたファイル一覧を取得するメソッドはあるようです。
function readPlainFileBySeach(){
  var files = DocsList.find('Hello World!');
  for(var i = 0; i < files.length; i++){

    /* Stringに変換できないFileTypeはgetContentAsStringでエラーになるため */
    if(files[i].getFileType() == DocsList.FileType.OTHER){
      var contents = files[i].getContentAsString();
      Logger.log(contents);
    }
  }
}

2. Plain Textファイルの書き込み

次にGoogle Drive上にファイルを作成して文字列を書き込むスクリプト
function writePlainFile(){
    outputFile = DocsList.createFile('sampleFile', ''); 
    outputFile.append('Hello World!');
}
sampleFileにHello Worldしています。

3. Google Doc形式(拡張子がgdoc)のファイルの読み込み

Google Doc形式のリッチテキストを操作するには専用のクラスが用意されている。
function readRichFile(){
  var doc = DocumentApp.openById('Google Docのid');
  var text = doc.getText();  
  Logger.log(text);

}

Google DocのIDはGoogle DriveからGoogle Docを開いた時のURLに表示されています
https://docs.google.com/document/d/[Google DocのID]/edit

4. Google Doc形式のファイルの書き込み


同様にリッチテキスト用のクラスを利用してファイル書き出し
function writeRichFile(){
  var doc = DocumentApp.create('sampleRichFile');
  doc.appendParagraph('Hello World!');
  doc.saveAndClose(); 
}

感想


Google Drive上のファイル操作ができるので、できることの幅は広がりそうですが、ファイル名がピンポイントで指定できなかったり、google doc形式のファイルを開くのにid指定だったりと使い勝手がいまいちなのが残念。

あとjavascriptということなので、plain text操作時に改行を出力するすべがないみたいです。試しに改行を含んだファイルを読み込んだところ、綺麗に除去されてjavascript上に渡って来ました。

改行使えないとさすがに見栄えが悪すぎて実用に耐えないので、このへんはFile.writeNewLine()とか専用のメソッドを用意して対応してほしいところですね。




2012年12月30日日曜日

外からみえる日本企業と中からみた日本企業


叩かれ、蔑まれる日本企業


昨今何をしても日本企業が叩かれるので、勤めてる一人としては非常に肩身が狭い思いをしています。

例えば某日本企業が炊飯器にandroidを搭載したときはめっちゃ叩かれたのに、サムソンが冷蔵庫にtwitterつけたときは礼賛されるばかりか、「日本企業にこの発想力はない!」と、ちょっと前の批判はどこいったのよ、と文句を言いたくなるばかりの始末です。

業界初! アンドロイドスマホと連携の炊飯ジャー登場にびっくり【売れ筋チェック】

冷蔵庫にツイッターがついた!サムスンの発想力に日本メーカーは追いつけるか


主義主張もなく、ユーザが食いつきそうなネタを展開している各種メディアにはなんの感情もわきませんが、このような日本企業叩きを記事を喜んで読む人が多い現状がとても悲しくなります。

まあ結果を出してない人間が何いっても説得力がないのと同じように、今の状況で「日本企業って実はこんないいとこあるんだぜ!」なんていっても誰も興味を持たないでしょう。

超長期的な会社経営の観点で、新卒主義、長期雇用、集団主義の利点を合理的に反論することに成功したとしても、「でも利益出てないじゃん」で一括されればそこで黙るしかないでしょう。

でも、それでも、日本企業は実体以上に叩かれて蔑まされている気がしています。

本当にほんなにひどいの?


なぜなんでしょう。

悔しいのでしばらく考えたことがありますが、どうやら、それは日本企業に務める人間の情報発信に問題があるような気がしてます。

勤めているとすぐに分かるのですが、実は会社に満足している方々は少なからず存在します。中には会社を愛しててとても献身的に働いている方もいます。

静かなる満ち足りた人たち


ただし、そのような方々は積極的に会社のいいところについてtwitterやfacebookでほとんど情報発信をしていません。恥ずかしいのか、反論された叩かれるのがいやなのか、必要性を感じてないのかはわかりませんが、とにかくネットにコミットすることがほとんどありません。

他方、比較的、会社に文句のある方は、毎日のように不満を公にばらまきます。

また、これは一人一人に限っても同じ話が当てはまります。
いい時は何もtweetしないのに、何か不満があるときだけtweetすることが多い、というのは結構当てはまる人も多いのではないでしょうか。

この結果、おそらく全体で見れば日本企業についての情報は悪い点ばかり外に出ていくことになり、外の人から見れば悪い点しか目につかなくなるでしょう。

2012年12月28日金曜日

MAKERS―21世紀の産業革命が始まる

第1章 発明革命
第2章 新産業革命
第3章 未来の歴史
第4章 僕らはみんなデザイナー
第5章 モノのロングテール
第6章 変革のツール
第7章 オープンハードウェア
第8章 巨大産業を作り替える
第9章 オープンオーガニゼーション
第10章 メイカーズの資金調達
第11章 メイカービジネス
第12章 クラウド・ファクトリー
第13章 DIYバイオロジー


3Dプリンターの普及による次世代を描いた本。

ソフトウェアの世界でオープンソース化が起きたように、今度はハードウェアの世界でオープンソース化(オープンハードウェア)が起きると予見しています。

思いついたアイディアをCADなどのデジタルツールで設計し、最近話題の3Dプリンタで試作品を作りフィードバックを行い、SNSなどを通じて賛同者を募り、そこで製品を気に入った人から資金を集めて会社を起こしていく。これによってスタートアップの障壁は一段と低くなり、新たに多くの企業が花開く新しいものづくりのあり方が描かれています。


実用ベースでどこまで作れるのかはまだまだ未知数ですが、少なくとも趣味ベースではとっても面白い未来がまってそうです。

2012年11月4日日曜日

「枯れた技術の水平思考」とは何か?

第1章 横井軍平の「ものづくり」
第2章 <バーチャルボーイ>とは何だったのか
第3章 偉大なる「すきま産業」

任天堂でゲームボーイとかバーチャルボーイとか開発した人であり枯れた技術の水平思考という言葉で有名な方です。本書は彼のインタビューを追いながら、彼のゲーム開発の哲学を追求することを目的としています。

ざっくりと説明してしまうと、枯れた技術とは、世の中に広く流通し、安価に応用出来る技術のことです。一方、水平思考とはそれを普通の人が思ってもいなかった使い方に流用することです。

例えば、枯れた技術の水平思考の適用例として、ゲーム&ウォッチを挙げることができます。

ゲーム&ウォッチは電卓の技術を利用して作られています。発売当初に最先端の技術を駆使して開発された電卓は、40万円以上もしましたが、やがて時が立つにつれコモディティ化が進み、その頃には数千円で購入できるようになっていました。横井氏は、出張中に電卓を叩いて遊んでいるサラリーマンを見かけ、それをゲームとして再利用することを思いつきました。


彼は娯楽を安価な値段で提供するために、コストの安い枯れた技術を使用することに哲学を持っていました。そんな横井氏は、今の最新技術を求めてゲームを作る風潮をこう表現しています


いまのゲームは松茸とフォアグラで餃子を作っているようなもんですね。

ゲームは娯楽(餃子)で安くないと買ってもらえないから、高価な技術(松茸とフォアグラ)でつくるなんて矛盾してるよ、とウィットな表現で問題提起をしています。確かにちょっと前にはSONYがPS3を5万円と、当時の相場を大きく越える価格設定をしたために普及の妨げになりました。昨今でも任天堂が3DSを高価格で販売したために売上不振に陥り、わずか半年で異例の値下げに踏み切ったのは記憶にあたらしいところでしょう。

また本書を読んでいると、枯れた技術を利用しているのはコスト観点からだけではないような気がしています。横井氏は主体的に遊べる、素朴な、創造的なゲームを追求しているようで、それが次のような発言に表れています。


TVというのはあくまでも情報機器であってクリアなほうがいい。
けれど遊びというものには、それは必要ないんです。
もっと想像の世界があったほうが膨らみがあるということを感じますね
ゲームを考えるときに、まずは◯とか■でどういうことをしたら面白いか考えるわけですよ。次のその映像を何に置き換えるかという時にどうしたら、それを説明書なしに理解できるかという How To Playをキャラクターに置き換えるのです。それが本来のゲームの姿なんですよ。


彼はもともとウルトラハンドやラブテスターなどTVゲーム以前の素朴な技術を使っておもちゃを作ってた人でした。なのでTVゲームと言えどもグラフィックがきらびやかなだけのゲームは好まないのでしょう。

最近のゲームはオンラインゲームやソーシャルゲームに代表されるように、本能的な刺激にボタンを押すだけのゲームが多くなっています。主体的に遊ぶゲームと言うよりは、もはやパチンコやパチスロといったジャンルに近いです。

いい悪いは別として、彼の望んでいる方向とはまったく逆の方向にゲームは進化し続けています。どちらかといえば古き良き任天堂のゲームが好きな私としては彼の早い死を惜しく思ったりします。

2012年10月12日金曜日

jquery mobileのreadyとpageinitイベント〜その1

jquery mobileのページ初期化イベントを発行するpageinit。これは単にjqueryのreadyに相当するのかと思っていたのですが、どうやらそうではない様子。

jquery mobileの公式ページによるとreadyとpageinitについてこんな記述があります。


Important: Use $(document).bind('pageinit'), not $(document).ready()The first thing you learn in jQuery is to call code inside the $(document).ready()function so everything will execute as soon as the DOM is loaded. However, in jQuery Mobile, Ajax is used to load the contents of each page into the DOM as you navigate, and the DOM ready handler only executes for the first page. To execute code whenever a new page is loaded and created, you can bind to the pageinit event. This event is explained in detail at the bottom of this page.


なので、安直にjqueryで$(document).ready()としていたところを$(document).bind('pageinit')とすればいいのかと思ってましたが、やってみるとそれではうまくいきません。たとえばclickイベントをbindする処理。

pageinitイベントは<div data-role='page'>で指定したページが初期化されるときに呼ばれるので、$(document).bind('pageinit')にしてしまうと、初めてページ遷移するときに必ず呼ばれてしまいます。

例えば次のようにページを2つ遷移させたあとにあるlabelにclickイベントをbindする処理では、labelを開くまでに3回bindが実行されてしまうので、labelをclickした時に3回分だけalertが実行されることになります。

 <script type="text/javascript">

$(document).bind('pageinit',function() {

     $('label').live("click",
             function(){
                  alert("clicked!");
             }
     );
});
</script>
</head> 
<body>
  <div data-role="page" data-theme="b" id="page1">
     <div data-role="content" id="page_word_list_content">
      <a href="#page2">to page2<a> 
    </div>
  </div>
  <div data-role="page" data-theme="b" id="page2">
    <div data-role="content" id="page_word_list_content">
      <a href="#page3">to page3</a>
    </div>
  </div>
  <div data-role="page" data-theme="b" id="page3">
    <div data-role="content" id="page_word_list_content">
      <label>click me!
    </div>
   </div>
</body>




なので、pageinitイベントはあくまでもdata-role="page"の初期化相当に限り、イベントハンドラの登録処理などは相変わらず$(document).readyを利用して記述するのがよさそうです。

まあ考えてみれば当たり前なんですが、公式のドキュメントで


Important: Use $(document).bind('pageinit'), not $(document).ready()

なんて言われちゃうとreadyイベント自体を使っちゃいけないのかな、なんて気になっちゃいますよね。