2012年7月アーカイブ

Xorshiftのライセンス

| コメント(0) | トラックバック(0)
歴史が新しい擬似乱数アルゴリズムとしてXorshiftというものがあります。偏りもあるという話ですが、何しろ速い。シードに注意しつつ、乱数パディングぐらいには適任と思います。

さて、これがGPLだという噂があります。そもそもアルゴリズムに著作権は発生しませんが、サンプルコード流用の場合にどうなるか。

発表されたのは"Journal of Statistical Software"という雑誌で、この雑誌自体がCreative Commons Attribution 3.0 UnportedとGPLv2を明言しています。論文自体が前者、ソースコードが後者です。

他の論文ではソースコードがSupplementsとして別途ダウンロードできるのですが、Xorshiftの論文は記事自体しかありません。ソースコードは別途ASCIIファイルで提出せよ、と手順のところにありますので、記事中のソースコードは記事扱いと見るのが自然です。

また論文中のソースコードはとても短く、計算部分はわずか1行。元々GNUは短いソースコードへのGPL適用は「やめとけ」というスタンスですし、これだけ短いと同じアルゴリズムなら誰が書いても同じようなコードになるでしょう。

以上のことから、XorshiftがGPLというのは迷信だと考えます。ただCreative Commonsではあるので、文章として引用した際に原著作者を明記する必要はあります。
どうもThinkPad X61t (Vista x64)でのビデオキャプチャで次第にドロップフレームによる失敗が増えている気がしたので、デフラグしてみました。見事に細切れでした。

一方MacBook Pro (Win7 x64)は性能が高いから平気なのかと思ってみたら、HDDが至って綺麗なことが判明。こちらの方が常用環境ですから、小さなファイルの増減が大量にあるにもかかわらず、です。

こんな綺麗なHDDを見たの初めて、というぐらい綺麗でした。「NTFSはデフラグ不要」というのがWin7に至って初めて本当に実現したか、Vistaでは効果が皆無だった標準デフラグがちゃんと働くようになったか。

いずれにせよ地味ですが嬉しい改良でした。

HDDクンすっとばす!!

| コメント(0) | トラックバック(0)
木曜に夜にサーバーのHDDランプが点灯しっぱなしでした。しかし見逃しました。というのはWindows Updateの頃合いだったからです。

翌朝、まだ点灯していました。変かもしれないとログオンして様子を見てみると、2TBのデータドライブ(WD20EADS)にアクセスできませんでした。異音はありませんでしたが、シャットダウンできず電源ボタン長押しOFF。BIOSからは認識されるも起動が進まず。とりあえず電源を落として出勤。

夜、HDDを取り出して外付けケースに入れ、MacBook Pro (Boot CampのWin7 x64)、ThinkPad X61t (Vista x64)と接続するも同様にアクセスできず。この時点でサーバーのハード不調の線は消えました。

回転音は聞こえ、アクセス音すら聞こえているので、中身は物理的には大丈夫なんじゃなかろうか。BIOSから認識されるのだから、コントローラもATA側は生きているんじゃなかろうか。ヘッドかコントローラ間に異常があるんだろうか。だとしたら基板交換だろうか、しかしそのためには同一ロットを探さなければならないはず...。

ちなみにデータ復旧業者はテラバイト級のものを依頼すると、費用が6桁コースです。しかも悪徳業者が横行しているとか何とか。それなら諦めるべきなのか...幸いパソ通その他の貴重なデータは他のHDDにも残っていることですし。

というところまで考えたあたりで、別のOSを試す価値があるだろうと思い当たり、MacBook ProのSnow Leopardで読んでみたところ、正常にマウントしました。内蔵HDDと余ったHDDを集めて容量を確保し、コピー開始。

翌日つまり3連休の初日、交換とバックアップRAID構築の買い出しをし、作業続行。ファイルの破損は1つのみで救出に成功しました。NTFSなのにWindowsでなくMacからしか読めない状態って何なのでしょうね。

さて、MacからNTFSのデータを吸い出したとなると、Unicodeファイル名の正規化の違いが出てきます。濁点や半濁点をMacでは独立して扱っているのです。若干の違いがありますが、Macの正規化はUnicodeの正規化形式Dにほぼ相当します。Windowsは形式C。

Macはファイル名を内部でDに変換して扱います。形式CをコピーするとDになるのです。Windowsは原則Cですが変換はしないため、Dのファイル名はDのままです。非Unicodeアプリから見ると、濁点半濁点が"?"に化けて見えます。

というわけで、一括修正するアプリをC#で作ってみました。フォルダ・ファイルの再帰検索をして、名前が正規化前後で不一致なら、リネームをかけるというものです。Directory.Moveメソッドが正規化の違いを無視するため、フォルダ名は一度乱数を追加した別名を経由しています。
Mac2WinFN01.zip

それにしても、2年で壊れましたねWestern Digital。元々個人的な印象があまり良くないメーカーですから、こんな事態には備えるべきだったのですが、背伸びはすべきじゃないとも思いました。つまり、普及価格帯でない容量に手を出すと、経済的にバックアップをしにくくなるということです。

バックアップを用意せずにデータだけ増やすのが無謀なのはもちろんですが、大事であればあるほど、手頃なところで回すようにしないと後が大変。それが今回の教訓でした。
Vistaのデスクトップアイコンにチェックボックスを表示できますが、似たような操作性のものを作ってみました。

つまり、チェックボックスでも、Ctrlクリックでも複数選択ができるというものです。

Ctrlキーの状態によってチェックボックスへの反映を止めているのがポイントで、これをしないとCtrl+スペースが押された時に選択できなくなります。

WM_NOTIFY処理の抜粋
case LVN_ITEMCHANGED:
  pnmlist = (LPNMLISTVIEW)lParam;
  if ( ( pnmlist->uNewState & LVIS_STATEIMAGEMASK ) == 0 ) {
    SHORT ctrlState = GetKeyState( VK_CONTROL );
    if ( ListView_GetItemState( hList, pnmlist->iItem, LVIS_SELECTED ) ) {
      if ( ( ctrlState >= 0 ) ||
        ( ( ctrlState < 0 ) && ( !ListView_GetItemState( hList, pnmlist->iItem, LVIS_FOCUSED ) ) ) ) {
        ListView_SetCheckState( hList, pnmlist->iItem, TRUE );
      }
    }
    else {
      if ( ( ctrlState >= 0 ) ||
        ( ( ctrlState < 0 ) && ( !ListView_GetItemState( hList, pnmlist->iItem, LVIS_FOCUSED ) ) ) ) {
        ListView_SetCheckState( hList, pnmlist->iItem, FALSE );
      }
    }
  }
  else {
    if ( ( pnmlist->uNewState & LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK(2) ) {
      ListView_SetItemState( hList, pnmlist->iItem, LVIS_SELECTED, LVIS_SELECTED );
    }
    else {
      ListView_SetItemState( hList, pnmlist->iItem, 0, LVIS_SELECTED );
    }
  }
  break;

SHA-2とCryptAPI

| コメント(0) | トラックバック(0)
CryptAPIでハッシュを計算させようとすると、巷に多いサンプルコードではCryptAcquireContextでPROV_RSA_FULLを渡していますが、これだとSHA-2に対応していません。

MSDNのブログにも書かれていますが、PROV_RSA_AESを渡せばCALG_SHA_256等が通るようになります。XP SP3以降に限定されますが。

エラーチェック無しでこんな感じです。
CryptAcquireContext( &hProv, NULL, NULL, PROV_RSA_AES, 0 );
CryptCreateHash( hProv, CALG_SHA_256, 0, 0, &hHash );
CryptHashData( hHash, src, 1024, 0 );
len = 32;
CryptGetHashParam( hHash, HP_HASHVAL, hash, &len, 0 );
CryptDestroyHash( hHash );
CryptReleaseContext( hProv, 0 );

Adobeの保護モード

| コメント(0) | トラックバック(0)
Flash Player 11.3にしたところ、固まるとか当初の致命的な問題は有名なのでさておいて、Firefoxがフォーカスを失う現象が起こるようなりました。

これも他の現象と同様、mms.cfgに下記の行を追加して、保護モードを無効にすることで回避できます。
ProtectedMode=0
もちろんセキュリティレベルが落ちます。

Reader Xにも、PDFをダブルクリックで開くと、新しいウィンドウが前面に来ない現象があります。これもまた環境設定の「一般」で保護モードを無効にすると回避できます。もちろん(以下略)。

どうやらAdobeのフレームワークに問題があるようです。

カラビナ

| コメント(0) | トラックバック(0)
bag.jpgキーホルダーでも時々見るフック状のもの、カラビナと呼ぶのだそうで(覚え書き的な繰り返し)。

さてショッピングバッグです。マイバッグとかエコバッグとか言いますが、畳めるものは少数派、ぶら下げられるものはほとんどありません。

ぶら下げられると小さなショルダーでも買い物に行けるのですが、普通はある程度の大きさのカバンの中に放り込むでしょう。

しかしまともなカバンをあまり持っていないため、アクセサリー側で対応できるに越したことはなく、見つけたのがマータイさんの「もったいない」賛同キャンペーングッズでした。

東京出張の折に竹橋の公式ショップで購入したのですが、カラビナがちょっと痛かったのでした。これに限らずですが、安物のカラビナは開閉する軸の両端の処理が甘いのです。

そこで東急ハンズでKOHLAのカラビナを購入し、付け替えてみたというのが写真です。取り外しも楽になりました。
linetrans.jpgICZ-R50で録音したラジオ番組をさてどうするか。SDカードをPCに持って行くか、或いはさらにそこからiPhoneに転送するか。USBで接続しっぱなしの方は定期的にPCに移動させているらしいですが。

一番楽な方法はICZ-R50自身で再生することに決まっているわけですが、ミニコンポで聞きたいのす。しかしヘッドフォン端子からライン入力への接続では、最大音量でも他の機器の半分程度になってしまいます。

八方塞がりなのです。些細な「壁」の存在も、自然な流れを阻害してしまいます。性格にもよるのでしょうが、「どうにかしたいなあ」と感じている限りは、いつか止めてしまうのです。

というわけで、「壁」の一つを壊してみました。入力レベルを上げるため、インピーダンスの整合を取るトランスを仕込んだ箱を作ったのです。

この用途のトランスはサンスイST-32なのですが、NS工房様こちらによれば、少し用途が違うST-12の方が良いとのことでした。

ライン入力側に100kΩを並列で入れることなど、回路図は木村哲様こちらのMCヘッドトランスと全く同じに。ちなみに接続先FR-X7Aのライン入力は50kΩ。

ヘッドフォンアンプでは電源が必要ですが、トランスなら電源不要です。これで他の機器とレベルを揃えることができました。

人間の感覚は相対的なものなので、便利にものに漬っていると、ちょっとでも不便さがあるとそれが目立って感じられます。時々こうして揃えてやると、滑らかに回ってくれるようになります。
1

アーカイブ

ウェブページ

Powered by Movable Type 5.2.13

ホームページ