Project Flower ブログ

Project Flowerのブログです。

設計書

ソフトウェアというものは、通常、SEが設計書を書いて、PGが実装する。

ところが今の現場では設計書を書くのも実装するのもテストを作るのも全部同じ人。

そうなるとどうなるかと言えば、設計書がその人しか読めないものになる。
(酷い時は、「プログラムだけは書いといたから設計書作って」なんて言われた事もある。なんだそりゃ)

先日スケジュールの都合で、珍しく設計と実装を分担することになった。

あまりシステムに馴染みのない自分が実装で、長年システムに携わってきた人が設計書を書いた。

渡された設計書を読んでも、どう実装すればいいのか読み取れない。

設計者に確認すると、

「それは、ExcelでXXXというファイルを開いて、XXXという仕様書に沿ってテーブルにデータを入れて、XXXというマクロを実行して、出力されたファイルをXXXに置いて…」

って、そんな事どこにも書いてない…。行間読むにも程があるだろ。

単体テストをよく理解している人は、設計するのも実装するのも、テストされやすい事を意識する。

必ずしもそれがベストプラクティスとは限らないけれど、直交性が高いモジュールを設計しようとすると、自然にプログラムも綺麗になってくる。

設計書も“プログラムを実装するために読む”という理解があれば、他人が読み取れない設計書を作ってしまうようなことはないはずだ。

そもそもここの客が設計書の納品を要求しているのは“ちゃんと作った証拠”を見ておきたいだけであって、それを逆手に取って“それっぽい物を納品しさえすればいい”と考えてる体質はどうにかならないものだろうか。

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ライブラリは図や画像の掲載が極端に少ないのだろう?)、マンガとして噛み砕く事でわかりにくい知識も比較的すんなり受け入れる事ができた。

Windows 10 Creators Update

エクスプローラからコマンド プロンプトを起動させることができなくなり、標準がPowerShellに変わりました。

一向に構いません。でも、

desktop.ini

このファイル何とかなりませんか?

そもそもINIファイルってもはや非推奨なのでは?