2014年11月11日火曜日

「スタートはこちら」「え、どちら?」

Vista 上の Vmware Player に Windows 8.1 をインストールした。
Windows 8 をさわるのは初めてだ。
インストール後最初の起動で現れたのはデスクトップ画面だった。
デスクトップからスタート画面に切り替えアプリ版のIEを起動すると、画面右に「スタートはこちら」という表示が現れた。
じゃまである。消したい。マウスポインタを持っていっても消えない。
その表示には『端から内側へスワイプして、「スタート」をタップします』とあるが、デスクトップPCでタッチパネルなどない。どうやって「スワイプ」して「タップ」すればいいのか。とりあえずその表示を右端から左にドラッグしたりクリックしたりしたが変化はない。
仕方がないのでググった。結局チャームを出せばいいのだ。これでこのうるさい表示は消える。つまり適切なメッセージは「マウスポインタを画面の右上隅か右下隅に合わせてチャームを表示し、スタートアイコンをクリックします」である。
同様に画面左に「アプリの切り替え 直前に使っていたアプリに戻るには、端から内側にスワイプします。ヒント:最初は画面の外側に指を置きます」という表示が出ることがある。これも適切なメッセージは「直前に使っていたアプリに戻るには、マウスポインタを左上隅に合わせて縮小表示されたアプリをクリックします」だ。
 タッチパネルの存在しないPC上で「スワイプしろ」なんていう的外れのメッセージを表示するとは。あきれてしまった。一事が万事という言葉がある。Windows 8 のUIの評判が悪いのは知っていたが、これほど低レベルとは。

Windows 8.1 通常版とDSP版の違い

スクリプトの動作確認のためにアマゾンで Windows 8.1 を購入した。
まず、Windows 8 にはPCなどのハードウエアと無関係に新規インストール可能なDSP版というのがあって安い、という先入観があった。
で、とまどったのがDSP版のほかに通常版が売っていて、しかもDSP版より何百円か安いということだ。
調べてみると、通常版は32ビットと64ビットの2枚のメディアが入っているのに対し、DSP版は32ビットと64ビットで別のパッケージになっていていずれかを選択して買わなければならない。ただし通常版は2枚入っているがインストールできるのは32/64ビットのいずれか一方だけだ。
また通常版のほうだけマイクロソフトのサポートを受けられるという情報もあったが、公式なソースで確認することはできなかった。
ぼくは当面は仮想マシン上でメモリ要件の小さい32ビット版を動かし、将来的にはリアルなPCに64ビット版をインストールするつもりなので、この通常版はありがたかった。
それにしてもこの実売価格の違いではDSP版の存在意義が失われている。

2014年9月8日月曜日

firefox のプロファイルデータを任意の場所に置く

firefox のプロファイルデータの場所を変更してネットワーク上に置く必要が生じた。

ネットワーク上に限らず任意のフォルダに置くことができる。以下 firefox 32.0 の場合である。

1.コマンドラインから firefox -ProfileManager でプロファイルマネージャーを起動する。すべての firefox を終了させておかないとプロファイルマネージャーは起動しないので留意すること。

2.「Firefox - ユーザプロファイルの選択」ダイアログで「新しいプロファイルを作成」をクリック

3.プロファイル名を入力し、プロファイルを置くフォルダを選択する。フォルダ選択ダイアログで新規にフォルダを作成することもできる

4.最後に「今後このプロファイルを使用する」をチェックすれば、以後 Firefox はこの新しいプロファイルを使用して起動するようになる

以上である。

蛇足。
自前のアドオンの場所を、myext@localhost というテキストファイルに記述して、プロファイルデータフォルダの extensions フォルダ置いていた。自前のアドオンの場所をネットワーク上に変更したので場所の記述を「\\some-pc\shared\firefoxext\」としたがアドオンを読み込まない。結局ネットワーク上のフォルダをドライブに割り当ててそれを記述すると読み込むことが分かった。 たとえば \\some-pc\shared を Z ドライブに割り当て「Z:\firefoxext\」と記述するとアドオンを読み込むのである。
最初はセキュリティ上の問題からネットワーク上のアドオンを読み込まないのかと思ったが、単にドライブ名を 割り当てるだけで読み込むので、そういう問題でもないらしい。

ハードディスクの突然死。二十数年分のデータを必死にサルベージ

2014年5月の話。

vmware player で動かしていた仮想マシンがフリーズした。仮想マシンのデータを置いていた外付けのUSBハードディスク 500GB が突然お亡くなりになったのである。この HDD には MS-DOS の時代から現在に至る二十数年分のデータが蓄積されていた。自分で作成したデータもほとんどがこの HDD のみに保存していた。かなりのショックだ。

とりあえず情報収集。現状ドライブとしては認識されているが、Windows のディスク管理ツールで見てみると、すべての領域が未割り当てになっている。少なくともパーティションテーブルは飛んでいるようだ。インターネットでさまざまに調べ、いくつかの試行錯誤の末、「完全データ復元PRO14」の無料体験版をダウンロードしドライブをスキャンしてみた。その結果、必要なファイルをほぼ認識しているようなので正式に購入してファイルを復元した。

このときハードディスクを直接スキャンせずに「イメージファイルの作成」を選択して別ドライブにイメージファイルのバックアップを作り、作成したイメージファイルに対してスキャンしたほうがよい。ぼくは購入後に気づいたので無料体験版でこの機能が使えるかは未確認。500GBのHDDイメージファイルのスキャンに要した時間は約6時間だった。

HDD データサルベージのひとつのポイントは、対象 HDD へのアクセスを最低限にすることだ。アクセスするほど不良ブロック(セクタ・クラスタ)を増やすリスクを大きくする。

もちろん復元できなかったファイルも存在するが、満足のいくデータ復元に成功した。 復元されたファイルで二点気になるところがある。ひとつはファイル名に含まれる空白が(多分)すべてアンダーバーに変更されていたこと。もうひとつはファイル名を復元できてもファイルの作成・更新日付を復元できてないファイルが多かったこと。

このソフトには分かりにくい部分もあるので、スキャンする前にメニューからヘルプを表示し通読し、またオプションの設定を確認するのがいいだろう。

とりあえずは九死に一生を得た。

さよなら nifty

ちょっと前の話。

@nifty を口座振替払いで利用していたが、2014年1月分の利用料金から口座振替決済管理費200円がかかるようになった。2012年にメインのプロバイダを変更して @nifty はメールアドレスの維持のために残していたが、これを機に解約することにした。

メインのプロバイダのメールアドレスを基礎にして、すべてのメールアドレスを以前から使っていたさくらのメールボックスを利用したアドレスに変更した。@nifty を解約して節約できるのは年間5400円だが、これでさくらのメールボックス二つ(ドメインも取得)の料金がほぼまかなえる。いい決断だったと思う。

ただ多少の感傷もある。MS-DOS の上でパソコン通信ソフト CCT を走らせ、Nifty-Serve, PC-VAN, 技術評論社の Jupiter Net にアクセスしたころが思い出される。調べてみるとNIFTY-Serve の ID の発効日は1992年6月12日だった。約22年の長きにわたる付き合いが終わった。 

さよなら nifty 

2014年1月23日木曜日

YQL と jsonpost で、POST メソッドを使うクロスドメイン JSON データを取得する

http の post メソッドを使ってクロスドメインの json を取得する必要が生じた。
yql に直接 post メソッドでリクエストすることはできないが、 Open Data Tables にある jsonpost を使えば可能である(このテーブルには htmlpost もあるようだ)。もちろん yql には get メソッドでリクエストするので長大なデータは送れない。
ちなみに yql が生成する http リクエストの Content-Type は application/x-www-form-urlencoded になっていた(ま、テーブルの定義に書いてあるとおりなんだけれど)。
以下コード断片。

var url = "http://foo.com/post.json";
var postdata = "post_data=" + encodeURIComponent("post_data value");
$.ajax({
    url: yql_make_url(url, "jsonpost", "json", postdata),
    dataType: "json",
    type: "GET",
    success: function(data){
        var json = data.query.results.postresult.json;
    }
});

function yql_make_url(url, from, to, postdata)
{
    if (! from)
        from = "html";
    if (! to)
        to = "xml";
    var q = 'select * from ' + from + ' where url="' + url + '"';
    var env;
    if (from == "jsonpost"){
        q += ' and postdata="' + postdata + '"';
        env = "store://datatables.org/alltableswithkeys";
    }
    var yql = "http://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent(q);
    yql += "&format=" + to;
    if (from == "json" || from == "jsonpost")
        yql += "&jsonCompat=new";
    if (env)
        yql += "&env=" + encodeURIComponent(env);
    return yql;
}