Project Flower ブログ

Project Flowerのブログです。

PF File search 2.12

2.12では以下の仕様変更を行っています。

サブフォルダがリパース ポイント(ジャンクション)であった場合でも、検索を実行する

Ver.2.9より不適切なリパース ポイントの構造によりサブフォルダ検索が無限ループに陥り、検索が中断してしまう問題があったため、リパース ポイントに設定されたサブフォルダの検索を行わないようにしていましたが、
根本的にリパース ポイントでそのような構造となっている状態が適切でないと考えられる事、又、工夫によりリパース ポイントを上手く使いこなしているユーザにとって不便となる事が考えられるため、リパース ポイントも通常のフォルダと同じように検索する事ができるようになりました。

但し、どうしてもスキップさせたい用途も考慮し、コマンドライン引数 /skipreparsepoint を指定する事で、スキップする事もできるようになっています。

終了ボタンでアプリケーションを終了しない

UIの応答停止や、操作タイミングにより、検索を中断させるために終了ボタンをクリックしたにも関わらず、アプリケーションが終了してしまう場合がありました。

終了ボタンにはアプリケーション終了の機能を持たせないようにしました。

これは、Windows 98と同様の動作です。

Escキーでアプリケーションを終了する

これもWindows 98と同様の動作です。

但し、Windows 98ではEscキーにより検索を中断させる事ができますが、PF File searchでは中断しません。前述の終了ボタン同様に、意図しないタイミングでアプリケーションが終了してしまう事を防ぐためです。

又、2.12.1.0では以下の改良を行っています。

続きを読む

フェイルセーフ

まだWindowsが98あたりが全盛期だった頃、ウェブサイト巡回ツールなるアプリケーションを利用していました。

巡回するサイトはアプリケーションが管理するファイルに記録されていました。まあ、普通ですね。

当時私は学生かアルバイトか派遣社員で貧乏だったので、HDDは大して良いものを使っておらず、すぐに空き領域はギリギリの環境でした。
(今でもSSDを使おうと思うほど気持ちは裕福ではありません…)

そうした苦労から考え出したのがDisk list makerだったのですが、

Windowsは、と言うかファイルAPIの仕様だと思うのですが、ファイルを上書きする時に、既存のファイルの大きさを超えるような場合で、更にその超過分をHDDの空き領域に割り当てる事ができない場合、どのような挙動をするのかと言うと、

“既存のファイルを0バイトのファイルで上書きする”

というものでした。

お陰で度々大事な設定を闇に消し去られました。まあ、大事なものはバックアップしておけってのは今も昔も変わらないのですが、「つい」「うっかり」をやってしまうのが人間です。

先日、WinMergeでGitで管理されたファイルの編集をしていた時、突然OSがプツンと落ちました。

オーバークロックとかはしていないのですが、何しろ自作PCなので、恐らくはハード関係に起因するハングアップや突然の再起動はたまにあります。

で、再起動した後に編集途中だったファイルをもう一度開こうとしたら、ファイルがありません。

修復ツールで修復を試みましたが、既に別のファイルでセクタは上書きされていたため、修復もできませんでした。

幸いバックアップは取っていたので大事には至りませんでしたが、Gitとかでローカルで作業をしていると忘れがちになるのは私だけではないと思うのですが。

改めてフェイルセーフとは何か。と考えました。

この場合ではWinMergeに原因があるのか特定できていませんが、HDD上のファイルは書込み待ち状態になっていたと思われます。ユーザーが“更新”を実行しない限り、アプリケーションはファイルに対しWrite権限を持つべきではないでしょう。

そして前述の巡回ツールの場合では、ファイル上書きのアルゴリズムの改善が必要だと思います。恐らく既存は以下のようなものだと思います。(フローチャート書くのが面倒なので失敗パターンのみ)

(ファイル上書き開始)

[ファイルの内容を消去]

[メモリからファイルへデータをコピー]

(空き領域不足により失敗)

(終了)

フェイルセーフを考慮すれば、これは以下のようにするべきではないでしょうか。フラグメント等も当然考慮して計算する前提です。

(ファイル上書き開始)

[既存ファイルの大きさと空き領域の和がメモリ上のデータを収めるに足るか計算]

(計算結果が条件を満足しない事により中断)

とは言ったもののIO周りの低級なAPIでここまで親切な実装をすることはないでしょうね。

自分で安全な上書きアルゴリズムを作るしかなさそうです。

Project Flowerのアプリケーションも親切ではないのでHDD空き領域には余裕を持って利用して下さい…。

I♥富士通

f:id:project_flower:20170921002348j:plain

小学生時代は公務員だった父が所有していたOASYSで遊び

中学生時代はFM TOWNSでF-BASIC386を遊び尽くし

実家の暖房機はホットマン

PC-9821を所有していた頃も何故かFMV-TOWNSのゲームパッドを使用(D-Sub25pinだった)

最近までキーボードはbuffaloの一番安いものを使っていた。

キー配置に癖がなく打ちやすく、ストロークも好みだった。

しかしプログラマーを本職として幾年、プロフェッショナルが安物を商売道具にしていいものか?と思い、キーボードくらいは贅沢してもいいかな、と、又、職場でサイレントマウスを使ってみたらなかなか良かったので、キーボードも静かなのがいいなと思って(職場のDELLのキーボードが実にうるさかった)、キーボード選びをしてみた。

最初に買ったのはLogicoolのK120

buffaloほどではないが、とにかく安い。使ってみると、確かに静かだった。

キーのタッチはペチペチといった感じ。お世辞にも心地良いとは言えない。

そして一番気に入らなかったのが、エスケープキーが普通のレイアウトから少し右側にオフセットしている事。ファンクションキーの位置も微妙にずれていて、ミスタイプ頻発。

タッチタイピングをしていてもエスケープキーとファンクションキーの位置は割と意識している。もしこの配置に慣れたら、一般的な配置のキーボードで違和感を感じる事になってしまう。このキーボードはすぐに使うのをやめた。

秋葉原FILCOや東プレ、Happy Hacking(HHKB)も触ってみたけどどれもしっくり来なかった。

HHKBの安い方(Lite)のタッチは好みだったけど、HHKBは大学の頃BSDのマシンに付いていたけど、こんな使いにくいキーボードはなるべく使いたくないと思った。

慣れれば快適というのはわかるけど…必ずしも現場でHHKBが使えるとは限らない事を考えたら、HHKBの習熟にコストをかけてまで使いたいとは思わなかった。あとちょっと、ミーハーぽい人も少なからずいるのが嫌(全然打つのが上手じゃない人とか)。極めつけに、今のロゴはかっこ悪い。昔のHappy Hackingロゴはカッコ良かった。それはそれでミーハーぽいけれど。

そんな中、ストロークとデザインがなかなか良いと思ったのがエレコムTK-DUX31(30)BK

タッチはいかにもラバースプリングという感じでクニャクニャしている。キートップも高めで長時間打っているとちょっと疲れる。

プリセットのボタンのLEDが隙間から漏れてて、安っぽいのがイマイチ。でも値段の割に打ちやすく特にキーの刻印がかっこいいキーボードだと思った(デザインはちょっと子供っぽい?)。

その後見つけたのが、画像のLibertouch秋葉原のヨドバシにかなりくたびれた見本があったので打ってみると、これだ!と思った。FILCOや東プレとも違うタッチ。しかも大好きな富士通。迷わず注文。置いてある店が少ないのが寂しい。

しばらく自宅で使ってみたけど、本当に打ち心地がいいので、職場の分までこれにした。

残念な点:

  • 清掃のため分解したら(※保証対象外になる)、分厚い鉄板の上に本当にメンブレンスイッチが付いていた。
    メンブレン自体は普通の安物キーボードと何ら違いはない。耐久性が不安。実際、某レビューとかによると割と壊れやすい模様。
    タッチは金属製のスプリングとラバーコーンで生み出しているので、何とかメンブレンじゃないスイッチにできなかったのかな?信頼性が上がるのであればもう少し高くても絶対買うけど。
    ちなみに構造が複雑なので元に戻すのは結構大変です。
  • 40%静音化という割に、打鍵音は結構うるさい。
  • テンキー無しバージョンも欲しい。
  • デザインが古臭い。
  • 刻印も耐久性が無さそう。

気に入っている点:

  • 打ち心地が格別。踊るように指が動く。
  • 東プレほど高くない。

キーボードは好みによって評価が左右されるので、“これが最高”とは言い切れないけど、このキーボードのタッチは実に侮れない。

約半年使用しているけど、タイピングが速く正確になった気がする。

落ちまくる

再び自作ネタ。

Dual Graphicsが使い物にならなかったので、改めてMSIGeForce GTX 1050Tiを購入。

Forza Horizon 3はSXGA 30FPSであれば"ハイ"設定でスムーズに遊べる。しかし、システムがフリーズする事が多くなった。

一度不具合を起こすとグラフィックボードを挿し直さないと電源が入らない。この時、PCの電源が入ってもグラボのファンは廻っていない。

初期不良かもしれないのでまずはグラフィックボードを疑ってみる。マザーボードのもう一つのPCI Expressスロットの方に挿してみる。やっぱり調子が悪い。

MSI Kombustorで負荷をかけてみると、一分ほどで60℃程になり、落ちる。

元のスロットに挿しても同じ。熱暴走か?でもGTX 1050Tiは65℃程度は正常範囲内のはず。耐えられないとすれば初期不良の可能性はある。それともファンの組み付け不良?尤もファンを外したら保証対象外になるのでその場合も不良だ。

或いは電力不足?でも電源はコルセアの650W 80PLUS Goldを奢っているし、補助電源のない1050Tiがそんなに電力食うとも思えない(後で調べたら1050Tiの推奨容量は300Wだった)。

ではマザーボードの不良では?購入以来PCI-Expressのスロットは使っていないので可能性は捨てきれないが…

昔使っていたマザーに戻してみようか?調子が悪いから買い替えたので、ちゃんと動くかもわからない。面倒臭いな~と思いつつふと見ると、ATX電源の24ピンコネクターに少し隙間があるのに気がついた。

この部分、マザー側が良くないのか電源側が良くないのかわからないが、どうも奥まで綺麗に入ってくれない(昔使っていたMSIのK9マザーとEverGreenの時はパチンと入っていた。それ以外も同様)。

もう一度グッと押し込み、Kombustorを試す。30分以上耐えた。

自作PCのハード的な不具合は原因が判断し辛い。原因の一つとして、参考になれば。

Radeon Dual Graphics

A10-7890KとRadeon R7 250、MSIマザーボードでDual Graphicsを構築した。

Web上で見つかる情報と異なる部分が多くありハマッたので覚書。

MSIのM/B(旬ではないが…)を使っている人には役に立つかもしれない。

グラフィックボードのディスプレイ出力を使用する場合

BIOS設定

Integrated Graphics Device Configuration
  • Initiate Graphics Adapter: PEG
  • Integrated Graphics Devices: Dual Graphics
  • Integrated Graphics Share Memory: (任意)
  1. ボード取り付け後、BIOS上で上記の設定にする。
    (※BIOSメニューはInitiate Graphics Adapterで設定した出力先にディスプレイを繋がないと表示されないので注意)
  2. Windows起動後、自動的にドライバがインストールされる。
  3. Radeon Softwareを開き、"ゲーム"→"グローバル設定"→"グローバルグラフィック (AMD Radeon R7 Graphics + R7 200 Dual Graphics)"→"AMD CrossFire"が"オン"になっている事を確認する。
    f:id:project_flower:20170818154321p:plain
  4. グローバルグラフィック (AMD Radeon R7 Graphics + R7 200 Dual Graphics)が表示されない場合、"ゲーム"→"グローバル設定"→"グローバルグラフィック (AMD Radeon 200 Series)"→"AMD CrossFire"をクリックすれば確認が表示され、オンにする事ができる。
    f:id:project_flower:20170818154527p:plain
  5. バイス マネージャでディスプレイ アダプタを見ると、"AMD Radeon R7 Graphics + R7 200 Dual Graphics"と"AMD Radeon(TM) R7 Graphics"の組み合わせとなっている。
  6. そうでない場合、AMDのサイトより、Radeon Softwareの最新版をダウンロードし、インストールし、2.からやり直してみる。

オンボードのディスプレイ出力を使用する場合

BIOS設定

Integrated Graphics Device Configuration
  • Initiate Graphics Adapter: IGD
  • Integrated Graphics Devices: Dual Graphics
  • Integrated Graphics Share Memory: (任意)
  1. ボード取り付け後、BIOS上で上記の設定にする。
  2. Windows起動後、自動的にドライバがインストールされる。
  3. バイス マネージャでディスプレイ アダプタを見ると、"AMD R7 200 Series"と"AMD Radeon(TM) R7 Graphics"の組み合わせとなっている。
    f:id:project_flower:20170817085855p:plain
  4. Radeon Softwareを開き、"ゲーム"→"グローバル設定"→"AMD Radeon Dual Grap..."が"オン"になっている事を確認する。
    そうでない場合、クリックすれば確認が表示され、オンにする事ができる。
    f:id:project_flower:20170818155039p:plain

ポイント

  • グラボからの出力を使用する場合、デバイス マネージャ上でDual Graphicsが有効である事が確認できる。又、Radeon Software上ではCrossFireと表記される。
  • オンボード出力を使用する場合、デバイス マネージャ上にDual Graphicsは表示されない。

Web上で見つかった情報

  • Radeon Softwareの"Radeon 追加設定"(従来のCatalyst Control Center)から設定するという情報があるが、現在のRadeon Softwareでは存在せず、設定はできない。
    (※Windows Updateによるドライバがインストールされている場合、"Radeon 追加設定"は存在したが、その先に"ゲーム"及びDual Graphicsの項目はなかった)

パフォーマンス

3DMark

  Clowd Gate Fire Strike
A10 7890K 6243 1468
Radeon R7 250 1GD5 OC 8523 2171
Dual Graphics (グラフィックボードのディスプレイ出力) 9853 2552
Dual Graphics (オンボードのディスプレイ出力) 9874 2566

Dual Graphicsの効果はあるようだが、Fire Strikeのデモ画面を見ている限りでは、オンボードでは紙芝居なのがグラボ出力では何とかアニメーションに見えるようになるので、グラボが特に頑張っているように感じる。

メイン メモリをDDR3-2400にするとどの位パフォーマンスが向上するか気になるところ。(M/BはDDR3-2133までしか対応していない)

ただ、元々ゲーム向きの構成は考えていないし、本当に快適にゲームをやりたいならA10は選ばないかな。

その他

  • Forza Horizon 3で試した結果、スペックは出力しているアダプタに依存する。
    グラボから出力すると、恐らくGDDR5のメモリ効率が良いためパフォーマンスは良いが、VRAMは(1GBとして認識され)不足と警告が出る。
    オンボードとグラボのVRAM容量を合計して3GB、という訳ではない様子。
    但しこれは、アプリケーション(ゲーム)によって異なるかもしれない。
    本来Forza Horizon 3はSLIに対応していないらしいので、CrossFireを応用したDual Graphicsは利用できないのだと思う。実際、オンボード出力を使用するとVRAM不足の警告は出なくなるが動きがおかしく、ゲームにならなかった。
    (ちなみにDual Graphicsを使わずに7890Kのオンボード出力を使用すれば、画質は最低限だがゲームはそれほど問題なく楽しめる)
  • MSIのR7 250はVRAMがGDDR5 1GBのもの(今回装着したもの)とDDR3(1800MHz) 2GBのものがある。
    GDDR5はバススピードが4.6GHzなのでパフォーマンスはこちらが上だと思う。但し、GDDR5版にはCrossFire(ボードどうしの方)への対応が書かれていない。
    尚、MSIのサイトを見るとR7 250は7種類もあり、GDDR5 2GBのものもあるが、アスクが販売しているのは前述の2種類のみの模様。
    R7 250は流通量も少なくなっており、スペックの割に高値となっている。
    A-Series最新版の7890Kとは言え、Dual Graphicsの現実的なメリットはかなり薄らいでいる感じがある。

所感

ソフトベンダーはアップデートで仕様を変え、その差異が詳細に公表されていない場合が多く、今までのチュートリアルが役に立たなくなる事が多い。今回はMSIのM/Bの設定方法は自力で調べたが、Web上で調べたRadeon Software(とCatalyst)の情報はほとんど役に立たなくなっていた。

例えばマイクロソフトによるWindows Creators Updateも顕著で、NEC富士通が自社PCユーザー向けに公開しているWindows 10のチュートリアルは既にUIが異なっており、役に立たない部分が少なくない。

ベンダーの立場とすればユーザーがUIに従えば目的に辿り着けるというスタンスなのかもしれないが、ユーザーは既に機能を知っており、知りたいのはその機能がどこからどこへ移動したのかでしかなく、それを知る術はベンダー側は用意していない事が多い。

手順書

とあるシステムへのインストーラの作り方。

  1. Subversionからソースコードをチェックアウトする。
  2. 仮想マシンソースコードをコピーする。
  3. ソースコードをビルドする。
  4. 仮想マシンのDドライブのXXXXXというフォルダに年・月・日とバージョンを記したフォルダを作成する。
  5. XXXXXというバッチファイルを実行する。
  6. チェックアウトしたフォルダを4.で作成したフォルダにコピーする。
  7. XXXXXというバッチファイルを実行する。
  8. XXXXXというフォルダの前回のバージョンのフォルダをコピーして新しいバージョンにリネームする。
  9. workというフォルダにXXXXXというファイルがあったら削除する。
  10. 6.でコピーしたフォルダをホストPCにコピーする。
  11. ホストPCでXXXXXというフォルダのExcelブックを開いてマクロを実行する。
  12. ダイアログが現れるので、7.のバッチで出力されたファイルを指定する。
  13. 新しいExcelのシートが作成されるので、8.でコピーしたフォルダにあるExcelのブックにシートを追加する。

一つでも失敗したらどうなるんでしょうね。気が狂いそうになるわ。

ちなみにバッチファイルは何らかのエラーが発生しても決して通知しません。素敵です。

一体誰が考えたんでしょう。

考えた時、“面倒臭い”とか“手順を間違えそう”とか思わなかったのかな。

プログラマーという人間は、面倒臭い事を減らしたくなる性分だと思うので、プログラマーではないよね、きっと。

C++を学習する

自分の知らないプログラム言語を習得しようとする時、社会に出てからは、一から手取り足取り教えてもらえる機会はなかなかない。

自分は新しい現場でC++Builderを使う事になったが、C++Builderの本はあまり見つからなかった。

神保町の三省堂で見つけたので購入してみたが、内容が多くリファレンスマニュアルのようなものだったので、どこから覚えるべきかわからずあまり役に立たなかった。

そもそも大学のFreeBSDでCでHello Worldを学んだ程度で、本格的にプログラムを書いたのはC#Javaしかなかった。(子供の頃にMSXFM TOWNSでBASICを書いてはいたが)

C++に拡げれば様々な本があるし、Webで学習する事もできなくもないが、選びきれない。そんな優柔不断で横着でせっかちな私が見つけた初心者にお勧めだと思ったのがこれ。

日経ソフトウエア 2010年 04月号付録の“C++まるごと学習ブック”。(絶版)

日経ソフトウエア 2010年 04月号 [雑誌]

日経ソフトウエア 2010年 04月号 [雑誌]

 

この冊子の何が良いかと言えば、“ページ数が少ない”という事。

C++でプログラミングをする上で最低限必要な知識を、実際にコーディングしてコンパイルして実行するという手順を示してシンプルにわかりやすく解説されている。

クラスの継承について重点的に説明しているのはもちろん、コピーコンストラクタや分割コンパイルについてもしっかりと解説されている。(現場ではこのあたりをよく理解せずプログラムを書いているコーダーは多いと感じている)

演算子の多重定義・例外・テンプレートまで解説されていて、それでいてボリュームも大きくないので、初心者にとって抵抗感は小さい。この冊子を一読する事でC++に対する不安は和らいだ。

なお3月号は“C/C++基礎から学習ブック”が付録となっている。プログラム言語を学習するのが全く初めての場合は、こちらから読み始めた方が良さそう。

日経ソフトウェアバックナンバーを電子化しているのだが、これらの付録は電子化されていないので、現在のところ、古本以外で手に入れる事ができないのが残念なところ。一部の付録は電子化されているので、この冊子の電子化も期待したい。

ちなみに日経ソフトウェアは2012年頃にインターン女子C#を学ぶという連載マンガがあったが、これも実に良かった。MSDNライブラリで難解な解説を読んでも理解するのに時間がかかるが(何故MSDNライブラリは図や画像の掲載が極端に少ないのだろう?)、マンガとして噛み砕く事でわかりにくい知識も比較的すんなり受け入れる事ができた。