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イベント自体を使っちゃいけないのかな、なんて気になっちゃいますよね。

2012年10月11日木曜日

中国人エリートは日本をこう見る

プロローグ 実は小泉元首相は人気がある?

第1章 中国人はなぜ日本が好きなのか
第2章 日本はとても居心地がいい国
第3章 日本企業は人材をじっくり育ててくれる
第4章 でも、日本人の仕事は細かすぎて…
第5章 「日本人は幸せだ」と思えるこれだけの理由
第6章 やっぱり不思議な日本人の性格と行動
第7章 日本人が見ているのは「昔の中国人」です

エピローグ 隣国という関係は永遠に続く

本書は著者が、中国人エリートと会話した内容を元に作られているるようです。
中国の国内外のトップ大学を卒業し、華々しく活躍している20~30代の中国人が日本を
どのように見ているか。


同世代の私としては非常に興味深く読ませていただきました。

本書を手に取る前からも、各所では実は中国人は日本を評価している、といったような
話は聞いたことがありました。でも、そんなの30年くらい前の過去の日本のイメージですごいとおもってるだけでしょ、今の実態を知ったらそんなこといわないでしょ、なんて思ってましたが本書を読むとそうでもなさそうです。


「今は中国が世界中から注目を集めていますが、それはつい最近のこと。日本の電車の正確なダイヤ、落ち着いていていつも綺麗な服装で街をあるく人々。来日して社会の成熟度とか民度とかいう点でも中国は日本には絶対にかなわないなと実感しました。少なくともあと何十年かは追いつくのは無理だとおもいました」

「私達の生活は以前に比べれば良くなっていますが、日本に旅行をしたことがある人は日本との桁違いの生活レベルの差を実感しているはず。だから日本を抜いて第二位だと言われてもなんとも思いません。むしろ恥ずかしくなるくらい。どんなに経済成長してもこの汚い空気と安全かどうかもわからない食べ物を心配しながら食べてる私達の姿を想像してみて下さい。」

なるほど。日本の生活レベルはまだまだ高いとのこと。
そしてこれに加えて日本を羨ましく感じるいくつかのエピソードが紹介されています。

「日本では能力されあれば、外国人でも日本人と対等に仕事ができるし、日本の法律に則って日本で起業することもできます。でも中国ではどんなことでもすべてが濃い『人間関係』で決まるんです」

「自分の能力次第で誰に頼らずとも道を切り開いていける。強いコネがなくとも純粋に仕事を頑張っていればある程度は出世の道がひらける。他人とフラットな付き合いをしていれば普通に生活ができる。そんな日本が羨ましい。日本人は本当に幸せだと思います」

中国はコネ社会なため、何をするにもコネが必要になるととか。コンサートのチケットを買うのにも、仕事を回してもらうにも何をするにも日頃のお付き合いが重視されそれがかなりのストレスになるとのこと。本の中で日本がシステマティックとか効率的とか言われてたりしますが、正直、毎日のように日本組織の非効率性がパッシングされていることを思い出すと、非常に違和感のある褒め言葉です。

日本のシステムは非効率で全くいいところなし。いろんなところでこんな言われ方をしています。確かに、これは事実なのかもしれませんが、冷静に周りを見渡せばまだ機能してる方のシステムに分類できるのかもしれません。

また書籍の中ではここでも引用させていたように、たくさんの中国人エリートのコメントが載せられています。コメントは洞察が深く、彼らの教養の深さを感じさせられました。三島由紀夫の著作についてコメントをしてる方もいたりして、正直そんな本まで読んでるのかと感心させられます。

グローバル・グローバルと巷間騒がれてますが、世界がもっとフラットになったら彼らとガチンコバトルがスタートするんですよね。もう負けちゃいそうです。

タイトルにもあるように、本書は若手中国人エース達が見ている日本と中国についてのありのままが書かれています。中国について少しでも興味のある方は手にとって読んでみる価値のあると思います

2012年10月7日日曜日

実行中プロセスをhtmlで出力するpower shellスクリプト





powershellにはConvertTo-Htmlというhtml変換のためのコマンドレットが標準提供されています。

デフォルトの形式のままでもtableタグを使って表形式で表示されているのですが、見た目的にあまりにシンプルで味気ないので、テーブルをzebraで表示するスクリプトを書いてみました。


$a = Get-Process | ConvertTo-Html -Title "Process Table" -Body "<h2>Current Running Processes</h2>"
$red = $true

for($i = 0; $i -le $a.length; $i++){
    if($a[$i] -like "*<tr>*</tr>"){
        if($red){
            $a[$i].replace("<tr>","<tr bgcolor=FF8C00>")
            $red = $false;
         }else{
            $a[$i].replace("<tr>","<tr bgcolor=FFE4C4>")
            $red = $true;
         }         
     }else{
        $a[$i]
     }
}
出力されるHTMLはこちら