AJAXの読み込みを待つプログレスバーを表示する

jQueryプラグインの、http://www.gayadesign.com/diy/queryloader2-preload-your-images-with-ease/:QueryLoader2プラグインを使うと、全画面表示のプログレスバーを表示することができる。(デモサイト)

しかしこのプラグインが検出するのは、HTMLドキュメント中の画像の読み込みの完了だけである。そのため、AJAXでHTML要素を順次読み込んでいくようなモノグサな仕様のサイトでは、このプラグインによってプログレスバーの画面を表示させることができない。そこで、このプラグインを改造して、AJAXリクエストがいくつ完了したかに応じて、プログレスバーの表示を行うようにした。

そのコードが以下のようなものである。

(function($) {
  var qlAjaxDone = 0;

  var qLimageContainer = "";
  var qLoverlay = "";
  var qLbar = "";
  var qLpercentage = "";

  var qLoptions = {
    ajaxEventCount : 0,
    onComplete : function() {
    },
    backgroundColor : "#000",
    barColor : "#fff",
    barHeight : 1,
    percentage : false,
    completeAnimation : "fade",
    onLoadComplete : function() {
      if (qLoptions.completeAnimation == "grow") {
        $(qLbar).stop().css("width", "100%").animate({
          top : "0%",
          height : "100%"
        }, 500, function() {
          $(qLoverlay).fadeOut(500, function() {
            $(this).remove();
            qLoptions.onComplete();
          })
        });
      } else {
        $(qLoverlay).fadeOut(1000, function() {
          $(qLoverlay).remove();
          qLoptions.onComplete();
        });
      }
    }
  }

  var completeAjax = function() {
    if (qlAjaxDone < qLoptions.ajaxEventCount) {
      qlAjaxDone++;
    }

    var percentage = (qlAjaxDone / qLoptions.ajaxEventCount) * 100;
    $(qLbar).stop().animate({
      width : percentage + "%"
    }, 700);

    if (qLoptions.percentage == true) {
      $(qLpercentage).text(Math.ceil(percentage) + "%");
    }

    if (qlAjaxDone == qLoptions.ajaxEventCount) {
      destroyQueryLoader();
    }
  }

  var destroyQueryLoader = function() {
    $(qLimageContainer).remove();
    qLoptions.onLoadComplete();
  }

  var createOverlayLoader = function() {
    qLoverlay = $("<div id='qLoverlay'><div id='loadingLogo'></div></div>").css({
      width : "100%",
      height : "100%",
      backgroundColor : qLoptions.backgroundColor,
      backgroundPosition : "fixed",
      position : "fixed",
      zIndex : 666999,
      top : 0,
      left : 0
    }).appendTo("body");
    qLbar = $("<div id='qLbar'></div>").css({
      height : qLoptions.barHeight + "px",
      marginTop : "-" + (qLoptions.barHeight / 2) + "px",
      backgroundColor : qLoptions.barColor,
      width : "0%",
      position : "absolute",
      top : "50%"
    }).appendTo(qLoverlay);
    if (qLoptions.percentage == true) {
      qLpercentage = $("<div id='qLpercentage'></div>").text("0%").css({
        height : "40px",
        width : "100px",
        position : "absolute",
        fontSize : "3em",
        top : "50%",
        left : "50%",
        marginTop : "-" + (59 + qLoptions.barHeight) + "px",
        textAlign : "center",
        marginLeft : "-50px",
        color : qLoptions.barColor
      }).appendTo(qLoverlay);
    }
  }


  $.fn.queryLoader2 = function(options) {
    if (options) {
      $.extend(qLoptions, options);
    }
    this.ajaxComplete(function() {
      completeAjax();
    });
    createOverlayLoader();
    return this;
  };

})(jQuery);

iPhone5と定期なくした。でどうしたか?

定期券(PASMO)再発行

駅事務所で再発行の依頼。レシートみたいなものが発行されるので、それを持って定期売り場へ。手数料500円+デポジット500円の計1000円で再発行してもらえる。チャージしていた金額もそのまま。

iPhone5 (au)

SIMカード再発行

auショップで再発行手続き。本人確認書類だけで手続き可能。料金は3150円だった。(nanoSIMだけ高いらしい。他は2100円)

代替端末の用意

適当な端末を中古で買って、それにSIM刺して使おうかと考えたが、

  • auなのでSIMフリー端末の選択肢はほぼ無い。
  • 中古にしても、LTE対応機でなくてはSIMが認識されないor使用出来ないらしい。これらはまだ中古市場でも高価。

ということでボツ。

そこで、寝かしてあったSoftBank回線をauiPhone5MNPすることに。auから携帯屋のインセンティブが高い時期であることもあり、ちょっとしたゴミ(WiMAXモバイルルータとその回線)付きで一括0円にて取得。
新規回線のSIMはサクッと抜き取り、再発行したSIMを刺すと無事認識。新規回線の方は後日各種オプション、パケット定額等を外す事で、auのウェルカム割により月3円運用とする。

この回線も2年後にタマとして使えるなぁとか思っちゃうあたりアレ。

Ciscoコマンド覚書

よく使うであろうコマンドや設定項目を雑多に列挙。

ルータ初期化

startup-configを空にして、再起動する。

Router#erase startup-config
Router#reload

ログに邪魔されずにコマンド入力できるようにする

初期設定だと、コマンド入力時にログが表示されまくって入力の邪魔なので設定。

Router(config)#line console 0
Router(line-config)#logging synchronous

ドメインルックアップ抑止

間違えたコマンドを入力すると、Ciscoルータは入力された文字列をホストだと認識して、名前解決をしようとして作業できなくなってしまう。この動作を抑止する。

Router(config)#no ip domain-lookup

host名設定

手動でhost名を設定する場合。(テスト環境でもない限り、普通は使わないだろうが。)

Router(config)#ip host  

パスワード解析

パスワードを

  • service password-encryption

などで暗号化すると、Type7というCisco独自の暗号化方式で暗号化される。
show runnning-configなどで見ると、こんな感じ。

line vty 0 4
 password 7 051F031C355C4F1A0A
 login

この暗号化されたパスワードは、Ciscoルータのkey chainコマンドを使うことで、Ciscoルータ上で解析して平分に戻すことができる。

たとえば「051F031C355C4F1A0A」というパスワードを解読するとすれば、以下のようにすれば「testpass」と解析できる。

Router(config)#key chain kaidoku
Router(config-keychain)#key 1
Router(config-keychain-key)#key-string 7 051F031C355C4F1A0A
Router(config-keychain-key)#end
Routar#show key chain kaidoku
Key-chain kaidoku:
    key 1 -- text "testpass"
        accept lifetime (always valid) - (always valid) [valid now]
        send lifetime (always valid) - (always valid) [valid now]

HP ProLiant MicroServer + CentOS6 + RAID5

HP ProLiant MicroServerにCentOS6を突っ込んで、3台のWD20EARXでRAID5を組んでみたので、ベンチマークした。

RAID5の組み方はここを参考にした。CentOSでソフトウェアRAIDの構築 - maruko2 Note.

スペックは以下のとおり。

プロセッサー AMD Turion〓 II NEO N40Lプロセッサー(1.5GHz、15W、2MB)×1
メモリ PC3-10600E DDR3 UB ECC 2GB(1×2GB)
起動ディスク SanDisk Cruzer〓 Fit〓 USB Flash Drive (8GB)
ストレージ Western Digital WD20EARX * 3

起動ディスクとストレージ以外は、購入したまま素の状態です。

bonnie++実行結果

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
proliant         4G   385  89 15659   5 13914   4  1956  88 259150  30 304.8  15
Latency               664ms    1526ms     926ms   86556us     146ms    3213ms
Version  1.96       ------Sequential Create------ --------Random Create--------
proliant            -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  8341  14 +++++ +++ 12678  17 12761  21 +++++ +++ 12167  16
Latency             16474us     622us     665us   42511us      32us      56us

Sequential Output(Block)が15MB/s、Sequential Input(Block)が259MB/sですな。書き込みが異様に遅いのは、パリティ計算とかでしょうがないのかな・・・。

ddも試してみる。こんな感じで5GBのファイルを作成する。

dd if=/dev/zero of=/data/zero.dat count=10000000
10000000+0 records in
10000000+0 records out
5120000000 bytes (5.1 GB) copied, 303.784 s, 16.9 MB/s

やっぱし遅い・・・

ddを動かしている間のtopはこんな感じ。ddがCPU使用率2割ぐらい。RAID5のプロセスが6%ぐらい。

top - xx:xx:xx up  x:xx,  x users,  load average: 1.81, 0.64, 0.37
Tasks: 126 total,   2 running, 124 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.7%us, 13.5%sy,  0.0%ni, 27.5%id, 58.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1923184k total,  1848112k used,    75072k free,    18176k buffers
Swap:  3866616k total,        0k used,  3866616k free,  1637704k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2274 root      20   0  102m  652  548 S 17.6  0.0   0:18.65 dd
  825 root      20   0     0    0    0 R  6.6  0.0   1:11.06 md0_raid5
  986 root      20   0     0    0    0 D  2.3  0.0   0:23.23 kjournald
 2273 root      20   0     0    0    0 D  1.0  0.0   0:00.85 flush-9:0

うーん。CPUが非力すぎるということなのか、どういうことなのか。
GbE越しのファイル転送とかも試してみたいね。それはまた今度の宿題。

BD -> New iPad

BDの映画をFull-HD画質のままでNew iPadで見るための方法。備忘録なので簡潔に。
nVidiaのCUDAを使った変換を想定しているが、ちょっと書き換えればCPUエンコードでもいけるはず。
ビデオの「ソース:MEncoder」が多分字幕焼付けのキモ。

ツール(実際に動作を確認したもの)

  1. MakeMKVでBDからMKVを作成。字幕も忘れずに読み込むように!
  2. MediaCoderMKVを読ませ、以下の様な設定を実施。
  • ビデオ
  • オーディオ:
    • 形式:HE-AAC
    • エンコーダ:Nero Encoder
    • ソース:Default
  • コンテナ:
    • コンテナ:MP4
    • 多重チャンネル:有効 MP4Box
  • 画像:
    • 1920x1080
    • 23.976(decrese_only).
    • csp:I420
    • エフェクト:encoder_filter

骨折した

生まれて初めて骨折した.何かと役に立つかもしれないので,時系列に従った記録をここに残しておく.

2012/01/03

夜,酔った時に階段を踏み外して,右足首を思い切りひねった.
酔っていたにも関わらずとにかく痛かったので,「これはやってしまったか?」と思ったが,とりあえずは研究室で休むことにした.

2012/01/04

研究室のベッドで寝ていたが,朝5時頃に痛みで起きる.平時の1.5倍ぐらいに足が腫れている.内出血もあるようで,足首の関節のあたりが青黒くなっている.
なんとか物につかまっていれば立ち上がれるし,相当痛いが歩くこともどうにかなったので,トイレに行ったり水を飲んだりして時間を潰した.研究室にあったオフィスチェアーが,簡易車椅子として非常に優秀だった.

そのまま医者にかかるのも手だったが,とりあえずは家に帰ったほうがいいだろうと考えているところに,研究室の先輩が来た.事情を話すと家に帰るためにタクシーを捕まえるのを手伝ってくれるということなので,ありがたく甘えて,先輩の捕まえたタクシーに乗って家へ帰った.
タクシーの運転手は気さくな人で,事情を話したところ大笑いして湿布を分けて頂いた.

家に帰ったが,その日は車を運転できる人が家にいなかったので,足を持ち上げて湿布を貼った状態で放置した.

2012/01/05

11:45頃に近所の整形外科医院へ向かう.午前の受付は既に終了してしまっていたので,午後1番の予約をした.

14:00に診察開始.すぐに車椅子に載せられてレントゲン室へ.
上がってきたレントゲン写真を見ると,右足の細い方の骨が,足首の関節付近でパッキリと折れており,その上斜めに5mm程ズレてしまっていた.
右足関節外果骨折というらしい.
しかもズレが有るために,これを治す手術が必要と言われてしまう.
骨折部にプレートをボルトで固定する手術らしい.
年始だということで病院側の手術予定も立てこんでおり,次に手術可能な日は12日と言われてしまった.
手術に関する詳しい説明等は,次の日に受けることになった.

足には添え木を付けられたが,この添え木が興味深かった.
厚さ2cm程度のシート状のものに水を入れて,それを足に押し付けると,次第にシートが熱を帯びてきて硬くなり,添え木として使えるものである.グラスファイバーが入っているようだ.OPTIMA Splintという商品らしい.

アルミ製の松葉杖をレンタル(100円/日)した.

2012/01/05

詳しい治療方針等を聞きに,整形外科医院へ向かう.
以下の事が決まった.

  • 手術は12日
  • 麻酔は腰椎麻酔
  • 前日の11日から入院
  • 右足を剃毛してくること
  • 手術後2-3日は感染症予防のために点滴を入れる
  • 退院は経過が良ければ16日
  • 遅くとも18日には退院
  • ゴツイ金属プレートとボルトを足に入れる
  • 術後はしばらくは足を持ち上げながら移動できる車椅子で移動

改めてレントゲンを見せられたが,昨日よりもひどく見えた.



to be continued....