2012年2月23日木曜日

vsphere client: where has my Console Window gone?

Sometimes console window opened from vsphere client (may be connected to vmware esxi server) seems to have disappeared or gone somewhere, and selecting the window from task bar doesn't help (as it seems). From my experience, this happens every time I minimize both the main window of vsphere client and the console window.

In that case,
  1. Select the console window from task bar. Never mind if the window does not come up.
  2. Press Alt+Space. This will show window resizing/moving menu.
  3. Select Restore or something you like.
  4. That's it. You will see the console window again!
Remember, 'Alt+Space' can save you also in other cases.

vsphere client (おそらく vmware esxi server に接続している) から開いたコンソールウィンドウが消えてどこかに行ってしまい,タスクバーから選ぶ等しても元に戻らないことがある.経験的には,コンソールウィンドウを開き,そのコンソールウィンドウと vsphere client のメインウィンドウを最小化すると,100%そうなる.

そんなときは,
  1. コンソールウィンドウをタスクバーから選ぶ.ウィンドウが元に戻らなくても気にしない.
  2. Alt+Space を押す.ウィンドウに関するメニューが出る.
  3. 「元のサイズに戻す」を選ぶ.最大化でもいいだろう.
  4. 以上.コンソールウィンドウは再び白日の下にその身を晒すであろう!
Alt+Space を覚えておくと何かと救われるかもしれない.

FYI:
参考画面:

2012年2月16日木曜日

回線:flets から WiMAX へ

引っ越しに伴い,家の回線を flets から WiMAX へと移行した.

機器の設定としては,家のルータ(NEC Aterm WR8700N, メーカーの製品ページ)の動作モードを PPPoE からローカルルータに変え,クレードルに乗せた WiMAX モバイルルータ(NEC Aterm WM3500R, メーカーの製品ページ)の LAN ポートと WR8700N の WAN ポートを接続したのみ.これで全く問題なく動いた.

そういえば,WR8700N はときどき通信速度が著しく低下することがあって,再起動すると直る.原因が WR8700N にあるのか他にあるのかわからないけど,あれはなんなんだろう.


WiMAX は諸般の事情で少し前から利用を開始しており,移行のために新たに導入したわけではない.WiMAX は,WiMAXルータを家においておく限りは常時接続回線として使える.WiMAXルータを持ち出すときは,家からインターネットにはアクセスできないことになる.家の常時接続を確保するには,ファミ得パックに申し込んでWiMAXを2回線同時につなぐ手もあるが,私の場合は flets で常時接続した方が快適そうだ.ある住所で過去にフレッツ光回線を使っていた人がまた新たに申し込むのはキャンペーン適用外となるようだが,住所が変わっていたら大丈夫らしい.今回は引っ越したから大丈夫と思われる.キャッシュバックの大きさを考えると(例えば価格.comの等),1年なり2年なりの継続利用が義務付けられたとしても,ファミ得パックと同等以上に安く上がるかもしれない.回線の使用感としては,少なくとも以前住んでいたところでは,flets の方が確実に速かった.が,お金持ちに非ざる身としては,手間と費用はとにかく少ないほうがいいのである.完全常時接続でなくとも,1回線でしのげるならそうするのだ.

常時起動マシン+常時接続回線があると,Windows Live Mesh でファイル同期システムが構築できてよいのである.が,職場で Mesh はセキュリティ的にアウトとされているので,SpiderOak で同期することにしている(以前書いた記事使用メモを参照)のだが,これも常時起動サーバと常時接続回線があればそれに越したことはない.SpiderOak (あるいはほかのクラウド側にストレージがあるサービス) であれば,家から WiMAX を持ち出していても同期に困らないから,今の利用形態にはより合っていると思われる.

2012年2月10日金曜日

matlab: find いらずの一発参照・代入

matlab では,配列の要素のうち特定の条件を満たすものを参照する際,ものすごく効率的な方法が用意されている.それが Logical Subscripting だ(logical indexing という人もいる).基本的な説明は Matlab の help の Getting Started や mathworks のページにも載っているが,もう少し掘り下げてみよう.

ここでいう Logical とは,論理値配列の意味の論理である.早速やってみよう.

例: 行列 A のうち,値が 0.5 未満の要素は 0 にする.閾値処理ですな.
>> A = rand(3)
A =
    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575

>> A(A<0.5) = 0
A =
    0.8147    0.9134         0
    0.9058    0.6324    0.5469
         0         0    0.9575

その通り,find は使わなくてよいのである.今まで使いまくってたよ‥
A(find(A<0.5)) = 0
とか書いてたよ‥.はずかちー.

[多次元インデクス自体については matlab: 一目で分かる多次元インデクス をどうぞ]

もちろん,A の参照に A に関する論理式を使う必要はない.他のものでも使える.
例:同サイズの別配列による条件づけ
>> Score = [60,55,80]
Score =
    60    55    80

>> Effort = [50,75,60]
Effort =
    50    75    60

>> Score(Effort>70) = Score(Effort>70) + 20
Score =
    60    75    80

頑張った人に+20点とかね.Score(Effort>70)が2回出てくるのがなんとも野暮ったいけど,何とかならないだろうか?以下,速度と効率を追求してみよう.

* 速度の検討

logical は比較的小さい容量になる(1byte/element)ので,保存して使いまわしてもよさそうだ.

例: 大きな配列の論理参照における論理配列の使いまわしの効果


>> S=rand(5000);S1=S;N=10;T=zeros(N,1);
>> for n=1:N,tic;S1(S>0.5)=S(S>0.5)+2;T(n)=toc;end;mean(T)
ans =
    1.7190

>> S=rand(5000);S1=S;N=10;T=zeros(N,1);
>> for n=1:N,tic;LS=S>0.5;S1(LS)=S(LS)+2;T(n)=toc;end;mean(T)
ans =
    1.3880

2割以上速くなる.ちなみに,自分の過去のやり方(findする)だと

>> S=rand(5000);S1=S;N=10;T=zeros(N,1);
>> for n=1:N,tic;IS=find(S>0.5);S1(IS)=S(IS)+2;T(n)=toc;end;mean(T)
ans =
    1.6312

あれ?意外と速い.個数の問題か?




例: 参照個数による処理時間の変化(find vs. logical subscripting)


>> S=rand(5000);S1=S;N=10;T=zeros(N,1);
>> for n=1:N,tic;IS=find(S>0.9);S1(IS)=S(IS)+2;T(n)=toc;end;mean(T)
ans =
    0.6060

うおっ.てきめん.一方の logical subscripting はどうか?

>> S=rand(5000);S1=S;N=10;T=zeros(N,1);
>> for n=1:N,tic;LS=S>0.9;S1(LS)=S(LS)+2;T(n)=toc;end;mean(T)
ans =
    0.6400

>> S=rand(5000);S1=S;N=10;T=zeros(N,1);
>> for n=1:N,tic;LS=S>0.1;S1(LS)=S(LS)+2;T(n)=toc;end;mean(T)
ans =
    1.1668

な ん で だ よ
なんで速度に差が出るのよ.たとえば,裏で find や sparse 的なことをしてて,対象個数が少ないほうに合わせてどうこうしてるのか?

条件に引っかかる個数を減らしながら,かかる時間をプロットしてみよう.

例: 参照個数による処理時間の変化(Logical Subscripting)

>> S=rand(5000);S1=S;N=4;LN=15;LVLs=linspace(0,1,LN);T=zeros(N,LN);
>> for ln=1:LN,for n=1:N,tic;LS=S>LVLs(ln);S1(LS)=S(LS)+2;T(n,ln)=toc;end;end;
>> figure;plot(LVLs,mean(T,1),'o-','linewidth',3);set(gca,'fontsize',20);grid on;
>> ylabel('elapsed time');xlabel('the threshold used');
>> print(gcf,'-dpng','logical_subscripting_etimes');

そうしてできたプロットがこれである.

参照される要素数が,
多い(グラフ左):半分より多くなるほど線形に速くなるが,係数は小さい.
半分(グラフ中央):一番遅い
少ない(グラフ右):半分より少なくなるほど,おおむね比例的に速くなる.
という結果が得られた.

例: 参照個数による処理時間の変化(find)

>> S=rand(5000);S1=S;N=4;LN=15;LVLs=linspace(0,1,LN);T=zeros(N,LN); >> for ln=1:LN,for n=1:N,tic;IS=find(S>LVLs(ln));S1(IS)=S(IS)+2;T(n,ln)=toc;end;end;
>> figure;plot(LVLs,mean(T,1),'o-','linewidth',3);set(gca,'fontsize',20);grid on;
>> ylabel('elapsed time');xlabel('the threshold used');
>> print(gcf,'-dpng','find_etimes');
find でやると素直に

要素が少なくなると処理が早く済む,となる.
二つの結果を重ねると
基本的には logical subscripting を使っていればよさそうだ.要素が少なくなってくると find がわずかに早いこともあるが,その差は微小だ.


logical subscripting の挙動の理由はいまいちわかりませんが,パフォーマンスにこだわる方は参考にしてみてください.ちなみに,R2007b on Win7 x64 on core2duo (mobile) です.

*プログラミング上の性質の検討


この Logical Subscripting の要点は,まさに logical 型の配列を括弧内に与えることにある.カッコ内に与えられた配列が logical かどうかはちゃんとチェックされ,数値 0 と論理値 false は区別される.
例:0 と false の区別
>> a=1
a =
     1

>> a(0)=3
??? Subscript indices must either be real positive
integers or logicals.

>> a(logical(0))=3
a =
     1

>> a(logical(1))=3
a =
     3

また,少なくとも R2007b では,参照に使う論理配列は,元の配列より小さくてもよいようだ.

例:参照に使う論理配列と入れ物の配列の大小

>> B=reshape([1:6],[3,2])
B =
     1     4
     2     5
     3     6

>> B(logical([0,0,0,1]))=9
B =
     1     9
     2     5
     3     6

逆に,大きいと怒られる.

>> B(logical([0,0,0,0,0,0,1]))=9
???  In an assignment  A(I) = B, a matrix A cannot
be resized.

ご参考まで.

-- 当ブログの matlab 関係へはこちらからどうぞ.--

2012年2月7日火曜日

Mail: winmail.dat が添付されていたら

受信したメールに,winmail.dat という謎の添付ファイルがあった.
この winmail.dat (win.dat の場合もある)は大雑把に言ってアーカイブファイルのようなもので,解凍(解読)すれば中身のファイル(たち)が取り出せる.

解凍方法・解読方法としては,
  • Thunderbird を使っている場合
  • Gmail / Yahoo! Mail が使える場合
    • Gmail や Yahoo! Mail の自分のアカウントに winmail.dat を添付して送りつけるとうまいこと認識して中身を抽出してくれると誠 Biz.IDのページにあった.これが一番賢いかもしれない.
  • Windows / Linux を使っている場合
  • Mac を使っている場合
などが考えられる.筆者は Thunderbird を使っており,Lookout でうまくいった.受信メールの添付ファイルに,winmail.dat を解凍したものも自動的に加えてくれる.ちなみに,fentun で扱えなかったものも Lookout ではうまくいったりする.
なお,winmail.dat や TNEF で検索すると,何かいろいろダウンロードボタンが出てくるような類のページがバンバン引っかかってウザめだ.

ということで,おすすめは,
  • Thunderbird 使ってる → アドオンの Lookout を使う
  • Gmail Yahoo! Mail のアカウントがある → 添付してそこに送る
  • それ以外 → がんばれ
です.

Amazon で調べてみると, Thunderbird関係の本が10件しかないのに対し,Gmail関係の本は106件もある(執筆時点).勢いの差を感じますなあ.しかし私は Gmail も使うが,Thunderbird メインなのだ.Gmail アカウントも Thunderbird から使っている.いいメーラーだよぅ!

ファイルについて簡単に解説.送信者が Outlook を使っていると winmail.dat が発生することがある,と,マイクロソフトのサポートに情報がある.サポートページによれば,解決策は,送信者側がテキスト形式でメールを送るようにすることだそうだ.おいおい.
この winmail.dat はTNEFという(Microsoft独自?)フォーマットによるファイルらしい(エンコード・コレクションのページの解説Wikipedia(en) の解説).もう独自形式とかどうにかしたほうがいいんじゃないだろうか.

久々に開け方のわからないファイルでした.あ,あと,セキュリティの設定で開けない場合は,お使いのセキュリティソフトの情報をあたってみてください.

[2013/05/30加筆]
Microsoft のページに日本語解説が作られていた:
初心者でもわかる! Outlook 添付ファイルのトラブル対処法 : 受信トラブル 2: 受信したメールに「winmail.dat」というファイルが添付されている
対策を要約すると,受信側も outlook を使うか,送信側がリッチテキスト形式で送るのをやめるかのどちらかだそうだ.なので,特に本記事に追加すべき情報はなかった.

2012年2月2日木曜日

Web: SpiderOak 使用メモ


オンラインのファイルバックアップ/同期サービス・オンラインストレージとして,SpiderOak というのを使っています(なぜ選んだかは前のエントリを参照).使用していて気付いたことや感想を随時このエントリにメモっていきます.使い始めたい方は,この紹介リンクどなたかの紹介リンクから登録して頂くと,通常 2GB のところ 3GB からスタートになり,紹介者の容量も +1GB されますので,よろしければぜひ.では,内容をば.
  • データをダウンロードする(データを取り出す・読み込む)
    • SpiderOak アプリからでもブラウザからでもデータをロード可能.
    • フォルダの一括ダウンロードも可能.アプリからでもブラウザからでも行ける.
  • 同期・バックアップのタイミング
    • 基本は特に何も意識せず,SpiderOak アプリ(サービス?)が自動で変更を検出するのを待てばよい.変更を即時サーバへ反映させたいときは,アプリ左下のくるくるマークの Rescan ボタンを押せばよいようだ.
    SpiderOak アプリ左下,くるくるマークのボタンを押すと即時ファイル変更をスキャンする.
    • アプリを起動するまではバックアップ・同期などを開始していない気がする?(要確認).アプリ非起動時にはファイルの変更は監視しないそうだ(下図).
    SpiderOak アプリを終了しちゃうとファイルの変更は監視しなくなるよという説明.アプリのウィンドウ右上 x ボタン(閉じるボタン)を押すと出てくるダイアログです.
    •  自動起動するには,SpiderOak アプリの Preferences の Interface タブで,'Launch SpiderOak at OS startup?' にチェックを入れておけばよい.
  • バージョン(履歴)管理・同期
    • 更新されたファイルは,どのバージョンでも選んで取り出せる(そう,バージョン管理がされているのだ). 差分管理を利用しているそうだ(参考:FAQ#7).ちなみに,同じファイルの複数のバージョンを選んで(Ctrl+クリック等)ダウンロードした場合,例えば下図の proc00.m の場合,proc00.m (682バイト・新しい) と proc00 1.m (613バイト・古い) ができた.
    ファイルの過去のバージョンも選んでダウンロードできる.
    • いろいろ試してみたい.消したファイルとか取り出せるのだろうか.逆に,スペース確保のため等で履歴を消去したい場合どうするのだろう.
    • 消したファイルは取り出せる(2013/05/29) .View タブで,デバイスに並んで「Deleted Items」の項目がある(図の赤マーク).これを選ぶと,そのデバイスで削除したファイルも取り戻せる.すばらしい.
    • ファイルシステム上で消したファイルを取り出すには,View タブで Deleted Items を選ぶ.
    • 多数箇所での同期について少し試してみた(2012/2/19, windows マシン3機の同期).以下のことが判明.
      • 最終的に,きちんと全マシンで rescan がかかった場合,タイムスタンプが最新のファイルに同期する.ファイルのタイムスタンプの関係によっては,自動 rescan が発動しない場合もあるように見えたが,手動で rescan をかけたらそうなった.
      • ファイルのバージョン履歴はマシンごとに記録される.マシン3機で別々の変更を行ったなら,各マシンのバージョン履歴には,そのマシンで作った ファイルと,同期した結果の最新版のファイルが残る.なので,いろんなマシンで別々に変更した後同期しても,変更したマシンに対応するバージョン履歴には ちゃんと記録される.しかし,マージしたければバージョン履歴からどこかにダウンロードして手動マージする羽目になる.とにかく同期後には最新のタイムス タンプのファイルのみがファイルシステムに残る.
      •  全マシンで最新のファイルに同期が完了した後,あるマシンでわざと古いファイルで上書きしたら,その古いファイルはそのマシンのバージョン履歴として取り込まれ,その後で最新ファイルで上書きされた.このときは手動rescanをかける必要があった.
    • 履歴中の旧バージョンのファイルの削除について試してみた(2012/3/2).
      • そのマシン(SpiderOak で言うところのデバイス)についての履歴は,選択して消せる.ただし,単純にSpiderOak の空き容量が増えるとは限らないようだ.
      • 別のマシンについての履歴は消せない.その履歴を作ったマシンのアプリでないと消せないようだ.ブラウザでログインしても,ダウンロードはできて も削除はできない.デバイス自体はほかのデバイスからも除去できるので,それを使えということか.そのデバイスの履歴は,そのデバイスのアプリと確実に通 信できるとき(つまり,そのデバイス上のアプリ自体でやってるとき)にしか消せない,ということと推測する.
そのマシン(=デバイス)のファイル履歴を選んで消すには,消したいバージョンを選んで画像上の方の赤い「×」ボタンをクリックする.ここでは,43個のバージョンを持つ「ほにゃらら.docx」 の,2012/02/28 13:50:16 のバージョンを選んでいる.
  • View タブで「Merge」というボタンがあることに気付いた(2012/3/2).2つ(?)のフォルダをそのタイミングでSyncするっぽい.今度試してみよう.
  • 動作が怪しい(更新情報のやり取りが終わらないとか) 場合,基本はひたすら待ってればそのうち終わる.あまりにも終わらないとき(一週間とか)は,仕切り直しをする手がある(2013/7/5).
    • 手順の例:SpiderOak FAQのこれ
      • これ自体はアップロード完了前にファイルを消してしまった場合の対処手順だが,一般の復旧にも便利そう.
      • この手順では preferences がリセットされるので,必要なら再設定すること.特にバックアップの除外設定を忘れて起動するとひどいことになるので要注意.
    1.  SpiderOak を閉じる.プロセスに残っていないかも確認した方が良い.windows ならタスクマネージャ.
    2. コマンドラインで c:\"Program Files"\SpiderOak\SpiderOak.exe --destroy-shelved-x
      • 完了するまで待つ.時間はそれなりにかかる.
      • 出てくるメッセージの例:
      • c:\Program Files\SpiderOak>SpiderOak.exe --destroy-shelved-x
        c:\Program Files\SpiderOak>Connecting to server and dropping shelved xacts from session...
        Dropped on server, now dropping locally...
        Rebuilding snapshot...
        Committing...
        Done. You should probably also run --rebuild-reference-database or --repair now.
    3. コマンドラインで c:\"Program Files"\SpiderOak\SpiderOak.exe --repair
      • 完了するまで待つ.こちらもそれなりにかかる.
      • 出てくるメッセージの例:
      • c:\Program Files\SpiderOak>SpiderOak.exe --repair
        c:\Program Files\SpiderOak>Generating local cache digest
        Connecting to server...
        Connected to server, requesting repair...(this may take awhile)
        8049 updated items and 44428 new items found.
        Building database of encrypted blocks
        Rebuilding reference database (this may take awhile...)
        Rebuild of reference database complete (123005 updates made).
        Rebuilding snapshot...
        Repair complete.
    4. spideroak を再び起動する.
  • バックアップ速度
    • 本家のFAQにも典型的には24時間で10~15GBと書いてあるが確かにそのくらいのようだ.データ使用量が69hで39GBほど増えた(先日から有料の容量無制限プランに入ったので,過去データをドーンとバックアップしている途中.回線は十分すぎるくらい高速なもの).このデータ使用量表示は圧縮や de-dup を行った後のものなので,実際のバックアップ速度はもう少し上のはず.とはいえおおまかには約 560MB/h だから 157KB/s くらいと考えてよい.この速度感を把握して用途を設計しないと,私のように「あれ,あと200日かかるの?」となるので要注意.なお,公式アカウントは2014年5月のtweetで平均25GB/dayとつぶやいている.(2016/01/18)
    • バックアップ対象のファイルの残りで見ると, 確かに 25GB/day くらいのようだ.(2016/01/22)
  • 困ったら本家に(特に FAQ に)大体書いてある.
    • コマンドラインオプションがいろいろあるので,たいてい何とかはなりそう.
冒頭にも述べましたが,使い始めたい方は,この紹介リンクどなたかの紹介リンクから登録して頂くと,通常 2GB のところ 3GB からスタートになり,紹介者の容量も +1GB されますので,よろしければどうぞ.最初のころの +1GB はかなり大きいです.

市販のソフトでは,amazon で同期ソフトを検索すると31件ほどヒットした(2013/06/03時点).便利なものはあるだろうか?