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はこちら

2012年10月3日水曜日

powershellでスクリプト実行を許可する方法


powershellはデフォルトで全スクリプト実行がoffになっているようだ。

ローカルにあるスクリプトだけ実行できるようにコマンドをうつ(もちろんpowershellで)


PS C:¥develp>Set-ExecutionPolicy RemoteSigned

今の設定を確認するコマンドGet-ExecutionPolicyをうって設定が反映されていることを確認する

PS C:¥develp>Get-ExecutionPolicy
RemoteSigned

なお、スクリプトの許可権限は以下の4つがある。


  1. Restricted すべてのスクリプトが実行禁止。PowerShellインストール直後のデフォルト設定
  2. AllSigned 署名されているスクリプトのみが実行可能。署名されていないスクリプトは実行禁止
  3. RemoteSigned ローカルに保存されているスクリプトは実行可能。インターネットからダウンロードしたスクリプト(非ローカルのスクリプト)は、署名されているもののみが実行可能
  4. Unrestricted すべてのスクリプトが実行可能。ただしインターネットからダウンロードしたスクリプトは、実行するかどうかが確認されるので、ユーザーが明示的に許可した場合のみ実行される