変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

パソコン

【NAS】Virtualization か それともDocker か?

NASに普通のOSを積めたら楽なんだけどなぁと思ってたら
NASのメーカーのQNAPがVirtualization Station、SynologyがDockerを載せてきた。
Virtualization StationはLinuxのQEMUを使ったものらしい、Dockerも for Windowsを入れっぱなしにしているので馴染みがある。
一概にどっちがいいとは云えない技術だ。QEMUは仮想化を実現する設定をアレコレ設定が必要だが、出来上がってしまえばコピーしておけばいいし、スナップショットを取っていつでも巻き戻しできるようにしておけば開発環境としてはベター。一方Dockerはそんな面倒な設定をシェアしあうものでありお手軽ではあるが、一方でライセンスが必要なOSやパッケージを使うのには適していない、なぜなら必要なライセンスのみ購入してもそれにピッタリあった面倒な設定をシェアしてくれる人がいなければ『自腹でライセンスを購入したパッケージの面倒な設定を世界初でやる』ハメになるので全くお手軽では無くなるからだ。
つまり、自分の好き勝手な環境を作りたい人には玄人志向なQEMUが向いており、シェアされた沢山の設定を遊び倒す人にはコピペフリーなDockerが向いている。
Virtualization StationにしてもDockerにしても、どのNASでも使える訳ではないので、対応しているかどうか要チェックだ。
いづれにしても社内のみで使う様な業務専用のWEBサイトのサーバーをNASダケで構築できる様になったのはとても助かる。一般的なデータセンターにサーバーを配置しようものなら世界中のクラッカーの目の前に餌をぶら下げる様なもので1日24時間年中無休のメンテナンス体制が必定なのだから。
 
 
 



Mini-STX ベアボーンキット

Mini-STX規格のマザボとACアダプターとケースのセット。
1.ASRock DeskMini 110
実は3種類あるらしい

  • DeskMini 110
    • 基本セット
  • DeskMini 110W
    • 基本セット+WiFiアンテナ
  • DeskMini 110/COM
    • 基本セットからマザボがASRock H110M-STX/COMに変わりCOM ポートケーブルが付属する

マザボはASRock H110M-STX はUSBは3.0が2個で2.0が1個、COMポートソケット付きのASRock H110M-STX/COMもある。
またベアボーンキットには使われていないがチップセットをQ170に変えUSBが全て3.0でLANもvPro、TPM2.0対応のものになっているQ170-STXというモデルもあるようだ。
2.GIGABYTE GA-H110MSTX-HD3-ZK
マザボはGA-H110MSTX-HD3
Wifiは付いてないけどミニPCIスロットに搭載できるらしいし、USB-TypeCも付いている。
 
Mini-STXの良さは、Mini-ITxより小さく、モニターのVESAマウンタに付けてもよさそうなサイズなので、NUCの様にケースが小さすぎてCPUの熱が内部に籠りCPUファンが回りっぱなしということが少なさそうなところだ。実際にモニターのVESAマウントに取りつけるならPCケースに取り付けるケース専用のVESAマウンターが付いているもの選ぶ必要があるし、またそのPCケースの厚みが気になるので、スリムなサーマルファンと専用のPCケースの付いたベアボーンキットがあったらそっちの方がいいと思うので、必要なものが揃っているかアクセサリー等を一通りチェックが必要だ。



【MSI】 GeForce GTX-1060 ARMOR 6G OCV1

やっと購入。
店頭には
GeForce GTX-1060 ARMOR 6G OCV1

GeForce GTX-1060 ARMOR 6G OC
があった。
見た感じ同じに見えたけど、裏面スロットの一番上のコネクタがOCV1ではHDMI、OCではDisplayPortなんだそうだ。
価格はOCの方が少し高かったのでOCV1の方をチョイスした。
FF14のベンチや普通にゲームを起動すると、グラボのファンが登坂路線を登り始めるトラックのような音を立てていたRADEON HD7950-DC2T-3GD5-V2からの換装は特に支障なく、電源やCPUのファンの音に隠れグラボのファンの尾とはほとんど聞こえなくなった。
ただ、うっかりDVIとHDMIの両方に繋いで起動したら、両方の画面が真っ暗になってしまった。ちゃんと正式ドライバーのインストを終えるまでは今でもモニターは1つダケ繋いだ方がいいらしい。そこで安全のためにUEFIの設定を初期値に戻したら、SATAがIDEモードになり、水色のinvalid boot drive(自動的に再起動します) 画面になり余計悪くなってしまったがAHCIモードに戻してOK。


記録を見ると、スコアはHD7950の2倍くらいかな?


 
ベンチだけならメモリ3GBのバージョンでもスコアがほとんど変わらないそうで、コスパ優先なら3GBの方がいいだろう。
しかし、よくプレイするFF-XIVは2~3か月に1度のアップデートに何某かの新装備(有料のオプションアイテムを含む)が入ってくるMMORPG風の着せ替えゲーである。
※画像の中のキャラの装備は特殊なものではない。一般的には今では普段着未満である。
パーティーを組むと面子が全員・・・半透明の回転パーツやキラキラなど描画処理の重いエフェクト満載の装備てんこ盛りな場合が多々あるので、グラボのメモリは1GBでも多い方がいいのだ。というか普通に自分のキャラで何かアクションを繰り出すと何らかのエフェクトが付いているので、自分の目の前で・・・画面いっぱいにエフェクトが広がる訳で、とても描画処理が重いのだ。それなのにパーティを組んでダンジョンに入れば、ひたすらアクションを繰り出す×面子の人数+でかいボスのアレなので、もっと処理が重い。
そのせいか、FF-XIVのSNSサイトLoadstoneに載っている日記には「さっきXXでパーティをご一緒した皆さんへ・・・ゴメンナサイ。パソが壊れたんですorz」の書き込みをよく見かける。
※本当にパソが壊れたのかは不明だが、何某かの支障をきたしたのは間違いないだろう。
久々にGeForceにしたせいだろうか?ベンチマークは最高品質の画面のハズなんだけど「普通の品質」に見えた。
FF-XIVクライアントのfps制限を解除すると、fpsの表示数値は100前後になり、ちょっと嬉しかったが・・・モニターが古いせい?慣れていない?せいなのかカメラを左右に回すとブレているような感じがするので戻した。GeForceの画風に慣れていないせいなのだろうけど、RADEONの標準品質=GeForceの最高品質な気がする。ザックリした言い方をすればマテリアの質感はRADEONの方がいいような気がする。それでもGeForceの最高品質の画面にすると家の床にうっすらと反射が見えるようになったのはやはりうれしい。性能は1060:1080=1:4っぽいので、1080なら質感も向上するのかもしれない。
白魔導士のホーリーのSEがRADEONではドガーンとヽ(`Д´)ノウルサイゾ!が、GeForceではボワーンとすこしまろやかな感じになってた。
ついでに、エアージェイ製の「スマーとフォン対応5000mAhポータブルバッテリー」機種:MB-S5000を購入。
SONYのSO-04Eとほぼ同じサイズで厚さ9mmの薄型。この類で「急速充電2A対応」と書いてあったのはコレだけだった。バッテリーとケーブルが分離しているので少し厚めだが、手元のcheero Power Plus 3 と比べると断然薄い。バッテリーとケーブルが一体化のものよりは長持ちしそうだし、iPadTouchにも使える。※別売りのLightningケーブルが必要。但し、使用方法はちょっと面倒。
電源ボタンを長押し⇒LED点灯⇒ケーブルをつなぐ⇒スマホにも繋ぐ。という手順になっていて、うっかり電源ボタンを押した場合を考慮し、電源ONからそのまま45秒放置すると電源OFFモードになるので、LEDが点灯したらUSBケーブルを手早くそして確実に繋がないといけない。
このバッテリーがヘタった頃にはAndroidも8が出ているだろうから・・・新しいスマホを買った方がいいんだろうなぁ。

GeForce GTX-1060の発売から半年後にやっと買った訳だけど、※待ってても・・・さっぱり値下がりしないからね(大笑
今度はAMDから次期グラボの新しいアーキテクチャのVegaが今年中にでるのかもしれない。どうやらビデオメモリをキャッシュとして扱うアーキテクシャーになるようで、データの保管場所はSSDでもNASでも構わないらしいからトンデモない規模のマップのMMORPGなんかも作れるのかもしれないし特に新装備が増殖し続けるFF-XIVとの相性は良さそうである。そうなるとCPUの出番はゲームクライアントのインストや起動、クライアントのオンライン・アップデートぐらいなのでCPUはAtom級で十分になってしまうのかな?
CPUやグラボを買い換えてもモニター(Acer製 24インチモニター:AL2423W)はそのまま だが、バックライトが冷陰極管なので消費電力88Wと大きく触ると暖かい液晶モニターは今時分存在しないだろう。2006年発売だから10年になるのかな?



【Visual Studio Community 2015】ClickOnce: signtool.exe not found

VisualStudio 2015 では、作ったアプリの配布方法には3通りの方法があるらしい。
1.XCOPY

Windowsのバージョンやサービスパックの入り具合でプレインストされるMFCや.Netのランタイムがバラバラなので、EXEだけコピーしただけではまず動けないのでEXEを起動するとマズ・・・ランタイムのダウンロードが始まるハズ。成功したらやっとEXEの画面が見える。

2.Windows Installer

VS2015の製品版のみ「その他のプロジェクトの種類」に「セットアップ/配置プロジェクト」 があり「Visual Studio インストーラー」が使用可能、VS2015 Comunityには勿論入っていない。

3.Click Once
VS-CommunityのVBプロジェクトは1個のEXEしか配置できないようなので、発行先をファイルサーバーにしてアプリの更新機能を使いたい場合ぐらい。そのせいか、普通にDLしてインストしたVS2015 Comunityでは署名ツールがインストされていない。うかつにClick Onceするとビルドの度に「署名ツールが見つからないエラー」に遭遇するハメに遭う。別途Windows SDKを入手しインストールするのも手だが環境変数のPATHに追加しておく必要があるので、コントロールパネルからVS2015 Comunityをクリックしてインストーラーを起動し、ClickOncePublishing Toolsにチェックを入れ追加すれば、何事も無かったかのようにビルドできるし、【今すぐ発行(N)】ボタンも成功する。


できあがり・・・

そのままSetup.exeを実行するとインストできたらしい。

起動してみると


難点を云えば、Click Once の設定をチョット変えるだけで、2度目以降のインストールに成功しない可能性が高い。例えば、バージョンの発行のチェックボックスを外してもう1度【今すぐ発行】ボタンを押すと、アンインストール後も「インストール済みと判定」されもう二度とインストできない。その場合は、バージョンをカウントアップしたりテスト用の証明書を作り直したり成功するまで試行錯誤を繰り返すことになるので、ClickOnceはうかつに触らないほうがいい。
 
ま、そんな感じなので、EXE+設定ファイル+CSVとかMDBと諸々のファイルがいくつも必要なアプリの場合は、小さな解凍EXEを作りこれにZIPファイルをくっ付けて、解凍EXEを起動したらくっ付けたZIPファイルを剥がしてファイルに分離し読み込ませて解凍させてもいいのかもしれないが、今どきは何かのウイルス監視ソフトが誤作動しかねないのでそんなことはせず、フリーのセットアップ・アプリやZIPツールの自己解凍EXEなどの方が安心でき使い勝手もよさそうだ。
 
もっとも、今では

見知らぬ人が作った見知らぬアプリをインストールするのはとても危険なこと

なので、インストーラ自体不要なのだろう。



【ARM版Windows 10】Win32アプリが動くかも?

ARM版Windows 10にx86エミュュレータを積んでWin32アプリを動く様に・・・
という噂が目についた。
本当にピュアなx86エミュレータだったら、昔のWindows-NTのx86エミュレータの再来ということになる。その当時はx86より他社のRISC系CPUの方がクロックが高かったから何とかなったのだろうが、INTELのCPUが急ピッチで進化した結果、x86エミュレータは鬼の様に遅いシロモノになってしまい他のCPU版のWindows-NTは実用的な選択肢では無くなりNTの次バージョンであるWindows-2000ではx86バージョンのみ販売されx86エミュレータはお蔵入りした経緯がある。
しかしエミュレータとは云え、今ではAndroidでもJavaのJITコンパイラが吐き出したバイナリーコードになったアプリが動いていると聞いているので、JITコンパイラ付きのx86エミュレータなら、意外とサクサク動くのかもしれない。但し、今のx86アプリはメモリやCPUパワーに対して無節操なので、メモリやSDカードなどの容量や読み書き速度は普通のPC並みのスペックが必要で、中途半端な構成のARM版Windows 10でX86アプリ(例えばMS-OFFICE)を動かすよりも1万円程度のスティックPCの方がマシであることは当然の帰結だが、スティックPCのGPU機能は廃スペックなスマホには遠く及ばないので、GPU負荷が著しく大きいゲームのベンチマークではARM版Windows 10のx86エミュレータの方が実用的なスコアを表示しかねず、そうなれば『出張先に大きなPS4を持ち込むほどの廃なゲーマーなら廃スペックWindowsスマホを欲しくなる可能性』は著しく高いだろう。
しかし、それでは『X-BOXの未来が全く見えなくなる』と思えるので、ガンガンとPCゲームが遊べるような意気なx86エミュレーターを載せるのかどうかは技術的な問題以前にやはり疑問符が付いてしまう。
なので、実装されても、MS-OFFICE365がそのままスマホでも使えるWindowsフォンになるのだろう。
そうなれば、Androidで無料のMS-OFFICEのモバイル版を使っている人が、Windowsフォンに切り替え、有償のMS-OFFICEに移行する人も出てくるだろうから、2粒美味しいハズ。
という感じなのだろうか?
もしそうなら、
MS Surfaceって意外と売れてないんだろうなぁ・・・
何といっても高すぎ・・・だから。(笑
 
 
 
 
 
 
 
 
 



【TortoiseSvn】インストしっぱなしでも・・・PCが異常に重くならない様な設定

ダウンロードはココからすると日本語の翻訳モジュールやマニュアルもあるので便利。
デスクトップのドコかで右クリックして「TortoiseSvn」 > 設定(S)
全般を選択し、全般のTortoiseSvnの言語(L)を「日本語(日本)」に変えて【適用】。
再び、デスクトップのドコかで右クリックして「TortoiseSvn」 > 設定(S)
アイコンオーバーレを選択し、監視するフォルダから大雑把に「除外するパス(X):」の中に

C:

D:

E:

・・・

とSSDやHDDの全ドライブを指定し、svnのリポジトリィからチェックアウトするフォルダだけを「含めるパス(N)」の中に

E:\workspace

な感じで指定し、Windowsを再起動する。含めるパス(N)の内容を変更した場合は再起動が必要。但し、パスを削除した場合のみ、再起動不要。
これでTortoiseSvnを入れっぱなしでも、PCが重たくなりにくくなりそうな気がする。
ps.
チェックアウトしてもファイルが1つも出来なかったり、全部✖マークが付く異常な現象に遭遇。
タバコ一服をした後、ログの赤い文字を順に追っていく・・・消失の長いリストの後に、削除の文字。
どうやら、チェックアウトしたフォルダの下で TortoiseSvn > 削除 し、その後にその上のフォルダを普通に削除したらしい。
以前のバージョンなら.svnが直下のフォルダの修正内容を把握していたため、TortoiseSvn > 削除 しても、その上のフォルダも削除してしまえば、修正内容は全て無かったことにできた。しかし、今ではチェックアウトしたフォルダにだけ.svnが出来、配下の修正情報が一極集中するので、 どこかのサブフォルダを TortoiseSvn > 削除 した後は、その上位のフォルダをしても覚えていることが多い。
このため、TortoiseSvn > 削除 などの操作を含め、チェックアウトしたフォルダの一部をやり直す場合には、『TortoiseSvn > 編集の取り消し』で 『コミットしていない内容を全て水に流す』のが最良の手段になっている。
な訳で古いsvnのクセのまま、まめにチェックアウトすると、.svnよりもネストが深いパスのフォルダにいつのまにか、.svnができると、ハマる訳だ。
リポジトリィを最初にチェックアウトする場合はtrunkを指定するのが今風らしい。
 



【Windows10】 Docker for Windows インスト

https://docs.docker.com/docker-for-windows/の下の
WindowsのシンボルのDOWNLOADボタンを押しインストーラをGET。
dl

これをインストする。
instrer
手順で特に注意が必要なとこはない。
DockerToolboxもあるがこっちはOracleのVirtualBox専用らしい。
toolbox
VirtualBoxとHyper-VはCPUの仮想化機能を使うサービスなので、いづれか一方しか使えないので不要。
Docker for Windowsをインストすると、MobyLinuxVM ができる。
これがDockerのサーバーらしい。
vm
起動を完了すると、クジラのヘルプがPOPするようだ。
help
NVIDIA Docker にはディープラーニングの定食なVMイメージもあるらしいけど・・・
試しにubuntuのVMでbashを実行してみよう。
Windowsのコマンドラインからubuntuを動かしてみる。

docker run -it ubuntu bash
Unable to find image ‘ubuntu:latest’ locally
latest: Pulling from library/ubuntu
6bbedd9b76a4: Pull complete
fc19d60a83f1: Pull complete
de413bb911fd: Pull complete
2879a7ad3144: Pull complete
668604fde02e: Pull complete
Digest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315
Status: Downloaded newer image for ubuntu:latest

という感じで自動的にダウンロードなどをやってくれるのでとても手軽。
では先日インストに失敗したCaffeのイメージを探してみよう。

> docker search caffe

NAME                                DESCRIPTION                                    
tleyden5iwx/caffe-cpu-master                                                      
tleyden5iwx/caffe-gpu-master                                                      
kaixhin/caffe                     Ubuntu Core 14.04 + Caffe.                     
kaixhin/cuda-caffe           Ubuntu Core 14.04 + CUDA + Caffe.

・・・

と沢山でてくる。 kaixhin/caffeがいいかな?docker pull kaixhin/caffeでダウンロードできるけど。
Cafferのホームページのインストページに、

がある。この先の https://github.com/BVLC/caffe/tree/master/docker/standalone/cpu にCPU用のDockerファイルがあるのでこれを使う。

とあるので、適当な場所に standalone/cpuなフォルダを作り、上のurlのDockerfileをコピる。

dockerのbuildコマンドを使ってコンテナで使うイメージを作成する。

>docker build --help
Usage:  docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile
Options:
      --build-arg value         Set build-time variables (default [])
      --cgroup-parent string    Optional parent cgroup for the container
      --cpu-period int          Limit the CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int           Limit the CPU CFS (Completely Fair Scheduler) quota
  -c, --cpu-shares int          CPU shares (relative weight)
      --cpuset-cpus string      CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string      MEMs in which to allow execution (0-3, 0,1)
      --disable-content-trust   Skip image verification (default true)
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --force-rm                Always remove intermediate containers
      --help                    Print usage
      --isolation string        Container isolation technology
      --label value             Set metadata for an image (default [])
  -m, --memory string           Memory limit
      --memory-swap string      Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --no-cache                Do not use cache when building the image
      --pull                    Always attempt to pull a newer version of the image
  -q, --quiet                   Suppress the build output and print image ID on success
      --rm                      Remove intermediate containers after a successful build (default true)
      --shm-size string         Size of /dev/shm, default value is 64MB
  -t, --tag value               Name and optionally a tag in the 'name:tag' format (default [])
      --ulimit value            Ulimit options (default [])

と長い説明から・・・Dockerfileはurlでもいいので、ダウンロードしなくても良いことが判るが、ここではローカルのDockerfileのパスを指定する。(笑

> docker build -t caffe:cpu standalone/cpu

caffe はリポジトリィ名、cpuはタグ、standalone/cpuはDockerfileを置いてあるフォルダという感じ。

今まで作ったり、実行したりしたものは

> docker images で見れる。

REPOSITORY TAG IMAGE ID CREATED SIZE
caffe cpu ad7eaf33fd93 13 hours ago 1.332 GB
ubuntu latest f753707788c5 2 weeks ago 127.2 MB
ubuntu 14.04 1e0c3dd64ccd 2 weeks ago 187.9 MB

imageディスクは先のMobyLinuxVMの中にできるらしい。Hyper-VにあるMobyLinuxVMの「設定」を見れば、MobyLinuxVM.vhdxの居場所が判るけど、右クリックして「マウント」は不可。

キャッシュされている内容でおかしくなる場合には–no-cacheを指定すればよさそうだ。

Dockerfileの内容のせいでまだまだ処理中。

今の状況は

docker ps で見れる。

CONTAINER   ID IMAGE     COMMAND                CREATED        STATUS        PORTS NAMES
ec6ac6533bc6 01c4d46d8ed5 "/bin/sh -c 'apt-get " 44 minutes ago Up 44 minutes zen_shaw

かなり時間がたったようだ。 Dockerfileを読んでみると

RUN git clone -b ${CLONE_TAG} --depth 1 https://github.com/BVLC/caffe.git . && \
    for req in $(cat python/requirements.txt) pydot; do pip install $req; done && \
    mkdir build && cd build && \
    cmake -DCPU_ONLY=1 .. && \
    make -j"$(nproc)"

とmake test やmake runtest が含まれていない。あ、cmakeだ!(汗
(・・・待機中・・・)
やっと終わったらしい。

Windowsのコマンドラインから

> docker run -i -t caffe:cpu //bin/bash
$ cd /opt/caffe/build
$ make test
$ make runtest
[  1%] Built target proto
 [ 60%] Built target caffe
 Scanning dependencies of target gtest
 [ 60%] Building CXX object src/gtest/CMakeFiles/gtest.dir/gtest-all.cpp.o
 Linking CXX static library ../../lib/libgtest.a
 [ 60%] Built target gtest
 Scanning dependencies of target test.testbin
 [ 61%] Building CXX object src/caffe/test/CMakeFiles/test.testbin.dir/test_split_layer.cpp.o
 [ 61%] Building CXX object src/caffe/test/CMakeFiles/test.testbin.dir/test_internal_thread.cpp.o
・・・中略・・・
[100%] Building CXX object src/caffe/test/CMakeFiles/test.testbin.dir/test_layer_factory.cpp.o
 Linking CXX executable ../../../test/test.testbin
 [100%] Built target test.testbin
 Scanning dependencies of target runtest
 libdc1394 error: Failed to initialize libdc1394
 Note: Google Test filter = -*GPU*
 Note: Randomizing tests' orders with a seed of 3012 .
 [==========] Running 1096 tests from 150 test cases.
 [----------] Global test environment set-up.
 [----------] 7 tests from CPUMathFunctionsTest/1, where TypeParam = double
 [ RUN      ] CPUMathFunctionsTest/1.TestFabs
 [       OK ] CPUMathFunctionsTest/1.TestFabs (16 ms)
 [ RUN      ] CPUMathFunctionsTest/1.TestScale
 [       OK ] CPUMathFunctionsTest/1.TestScale (16 ms)
・・・中略・・・
[----------] Global test environment tear-down
 [==========] 1096 tests from 150 test cases ran. (53662 ms total)
 [  PASSED  ] 1096 tests.
 [100%] Built target runtest
 root@12f9e48c546e:/opt/caffe/build# exit

>

よかった無事完走した。(笑
exitしたら、make runtest 分のコンパイルした結果はRollbackされました。(笑
MobyLinuxVMを終了しPCをシャットダウンしたら、PCを起動するとDocker for Windows でエラー表示。
MobyLinuxVMが止まっていたので、起動しようとしたけど、起動失敗。
MobyLinuxVMを自動起動に変えて、再起動したらOKだった。

また同じイメージを作ってみる。イメージの名前は変える。

>docker build -t caffe:cpu2 standalone/cpu
 Sending build context to Docker daemon 3.072 kB
 Step 1 : FROM ubuntu:14.04
  ---> 1e0c3dd64ccd
 Step 2 : MAINTAINER caffe-maint@googlegroups.com
  ---> Using cache
  ---> 01c4d46d8ed5
 Step 3 : RUN apt-get update && apt-get install -y --no-install-recommends         build-essential         cmake         git         wget         libatlas-base-dev         libboost-all-dev         libgflags-dev         libgoogle-glog-dev         libhdf5-serial-dev         libleveldb-dev         liblmdb-dev         libopencv-dev         libprotobuf-dev         libsnappy-dev         protobuf-compiler         python-dev         python-numpy         python-pip         python-scipy &&     rm -rf /var/lib/apt/lists/*
  ---> Using cache
  ---> 890a4a41fda2
 Step 4 : ENV CAFFE_ROOT /opt/caffe
  ---> Using cache
  ---> e1ba92b55d31
 Step 5 : WORKDIR $CAFFE_ROOT
  ---> Using cache
  ---> 6b73698ab96f
 Step 6 : ENV CLONE_TAG master
  ---> Using cache
  ---> 31c37107dd1f
 Step 7 : RUN git clone -b ${CLONE_TAG} --depth 1 https://github.com/BVLC/caffe.git . &&     for req in $(cat python/requirements.txt) pydot; do pip install $req; done &&     mkdir build && cd build &&     cmake -DCPU_ONLY=1 .. &&     make -j"$(nproc)"
  ---> Using cache
  ---> 60860beb44fc
 Step 8 : ENV PYCAFFE_ROOT $CAFFE_ROOT/python
  ---> Using cache
  ---> 79fa9e5c0809
 Step 9 : ENV PYTHONPATH $PYCAFFE_ROOT:$PYTHONPATH
  ---> Using cache
  ---> fef2e3296e15
 Step 10 : ENV PATH $CAFFE_ROOT/build/tools:$PYCAFFE_ROOT:$PATH
  ---> Using cache
  ---> de009e192069
 Step 11 : RUN echo "$CAFFE_ROOT/build/lib" >> /etc/ld.so.conf.d/caffe.conf && ldconfig
  ---> Using cache
  ---> afb970a41ff9
 Step 12 : WORKDIR /workspace
  ---> Using cache
  ---> ad7eaf33fd93
 Successfully built ad7eaf33fd93
 SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

と警告が出る。キャッシュを使っているのか?すぐ出来上がるので便利だ。
しかも、docker images で前に作ったイメージと見比べるとIMAGE IDが同じ。
つまり、同じ内容のDockerfileを何度実行しても、リポジトリィ上ではタグを貼っただけの扱い。
動作中のコンテナはdocker ps で、停止中のモノも含める場合は docker ps -a でコンテナをリストアップできる。

> docker ps --help
Usage:  docker ps [OPTIONS]
List containers
Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter value    Filter output based on conditions provided (default [])
      --format string   Pretty-print containers using a Go template
      --help            Print usage
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display numeric IDs
  -s, --size            Display total file sizes

docker ps -aすると結構ゴミが溜まってしまっていることが判る。
まめにdocker rm で消した方が良さそう。

> docker rm --help
Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]
Remove one or more containers
Options:
  -f, --force     Force the removal of a running container (uses SIGKILL)
      --help      Print usage
  -l, --link      Remove the specified link
  -v, --volumes   Remove the volumes associated with the container

ググってみると、Linuxならこんな風に使えるらしい。

  • 1週間も過ぎたコンテナは消す ※1ヵ月以上も放置したものは別腹
    • $ docker ps -a | grep ‘weeks ago’ | awk ‘{print $1}’ | xargs docker rm
  • 停止中のコンテナを一気に削除する
    • $ docker rm `docker ps -aq`
  • コンテナをすべて強制的に削除する
    • $ docker rm -f `docker ps -aq`

Windowsでは無理かと思ったら、for /f %a in (‘コマンド’) do  **** というのがあった。
またUnix系っぽく、for /f “usebackq” %a in (`コマンド`) do  **** と書ける。
これって・・・もしかして( ^ω^)・・・

> echo `docker ps`
`docker ps`  ⊂⌒~⊃。Д。)⊃ ドテッ

それではWindowsの場合

  • 1週間も過ぎたコンテナは消す (多分これでいいはず、動作未確認)
    • > for /f “tokens=1 usebackq” %a in (`docker -a | find “weeks ago”`) do docker rm %a
      • ※期待通り!
      •  『| の使い方が誤っています。』が返ってくるので、
      • 下の2行になる。
    • > docker -a | find “weeks ago”  > aaa.txt
      for /f “tokens=1” %a in (aaa.txt) do docker rm %a

      • tokens=1:ファイルの1列目だけ%aに入る。
  • 停止中のコンテナを一気に削除する
    • > for /f “usebackq” %a in (`docker ps -aq`) do docker rm %a
  • コンテナをすべて強制的に削除する
    • > for /f “usebackq” %a in (`docker ps -aq`) do docker rm -f %a

さて、ゴミの処分方法は判ったけど、run してコンテナでチョコっと遊んで消すならこのままがいいけど、『続きは別の場所で・・・』となる場合は困ってしまう。

イメージをPCに保存する方法

>docker save --help
Usage:  docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
      --help            Print usage
  -o, --output string   Write to a file, instead of STDOUT

IMAGEにはdocker imagesのIMAGE IDかREPOSITORY:TAGを指定する。
この指定の差で、tarファイルの中のmanifest.jsonの中身が若干変わり、IMAGE IDの場合は、”RepoTags”:nullになるので、これをloadすると、

> docker save -o caffe5.tar ad7eaf33fd93
> docker load -i caffe5.tar
Loaded image ID: sha256:ad7eaf33fd93e5b82e4f803351c19b4d00f20d583c7853426bb9ef3e93a94811
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> ad7eaf33fd93 18 hours ago 1.332 GB
ubuntu latest f753707788c5 2 weeks ago 127.2 MB
ubuntu 14.04 1e0c3dd64ccd 2 weeks ago 187.9 MB

となるので、REPOSITORY:TAGの形式でIMAGEを指定した方が良さそう。
標準出力のリダイレクトを使ってtarファイルに書き出したり

docker save ad7eaf33fd93 > caffe2.tar

パラメータ(-o)でtarファイル名を指定したりできる

docker save -o caffe3.tar ad7eaf33fd93

※この場合、存在しないファイル名を指定する.docker_temp_999999999な作業ファイルを作る。
ファイル名は何でもいいはずだけど普通はtar拡張子を付ける。
Windows10の癖だと思われるが・・・caffe:cpu.tar を指定すると、 0バイトのcaffe ファイルができるので妙な記号は避ける。
展開したらcafferフォルダができ、manifest.json、repositories、ad7ea・・・11.jsonと沢山のフォルダ。
tar%e5%b1%95%e9%96%8b
repositoriesは{“caffe”:{“cpu”:”395b・・・b2195″}}な感じ。
中のフォルダはjson、layer.tar、VERSIONファイルで、layer.tarには作成したフォルダやファイルが入っている。

PCのイメージをdockerに取り込む方法

>docker load --help
Usage:  docker load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
      --help           Print usage
  -i, --input string   Read from tar archive file, instead of STDIN
  -q, --quiet          Suppress the load output

標準入力のリダイレクトを使ってSAVEしたtarファイルを読んだり

> docker load  < caffe.tar
Loaded image: caffe:cpu

パラメータ(-i)でtarファイル名を指定したりできる

> docker load  -i caffe.tar
Loaded image: caffe:cpu

タグの無いtarファイルの場合は、docker importの方がいいかもしれない。

>docker import --help
Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Import the contents from a tarball to create a filesystem image
Options:
 -c, --change value Apply Dockerfile instruction to the created image (default [])
 --help Print usage
 -m, --message string Set commit message for imported image

imageを消す方法

>docker rmi --help
Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
  -f, --force      Force removal of the image
      --help       Print usage
      --no-prune   Do not delete untagged parents

IMAGEは docker images で出てくるIMAGE ID(REPOSITORY:TAGでも可)を指定するので、同じIMAGE ID(先のCPU2)は一緒に消えてしまうが、–no-pruneを指定すればlatestだけ残りそう。

>docker rmi -f ad7eaf33fd93
Untagged: caffe:cpu
Untagged: caffe:cpu2
Deleted: sha256:ad7eaf33fd93e5b82e4f803351c19b4d00f20d583c7853426bb9ef3e93a94811
Deleted: sha256:afb970a41ff9f943b00493028f08c8309d1fc5a95b6f0a75f70cc532188fa89f
Deleted: sha256:de009e192069e27bd8867bf379e3d958f33be805088e929b748ca5d516f8fb42
Deleted: sha256:fef2e3296e15c5c643298fd7a9b6f7e857d2ea48a4921ad1edc436708022cc40
Deleted: sha256:79fa9e5c0809c841137ce2bb123ec1ae4a4078b89268825a2876ef68c5a3a81c
Deleted: sha256:60860beb44fc0a01b1207cfa417b5c7d338c100c7da6775661526cba17d089f0
Deleted: sha256:31c37107dd1fde8a16bf90b4a75385fd7fabbdef85cb73a056ef8bf021056628
Deleted: sha256:6b73698ab96f4211c9f025cb8544542f8918d98d6411bb2fabfd8fab635ac704
Deleted: sha256:e1ba92b55d31a27052e275501d7aca2485ebbbc04d4f3269870f0aab08df8073
Deleted: sha256:890a4a41fda2c623eee699e1d2d642b1ae3988f82f47e18078973cb6825f6553
Deleted: sha256:01c4d46d8ed54f2b3c24058ead1ef3e896e2b5ef6604ddbabd3c2a6cf3424ff7

実装はBUILDするとリポジトリィを作成し、Dockerfileでそこに差分をどんどん保存していく、出来上がったものはリポジトリィのタグを指定してrunしてみる。な感じなのだろう。
インストールが面倒すぎるパッケージをちょっと遊ぶには、Hyper-Vでゲストを作り、OS込みで一式にインスト-ルしなくてもいいので便利だ。
ただdocker run した後は、元に戻ってしまう。

> docker run -it ubuntu //bin/bash
root@7b39b74c7be6:/# adduser aaa
# ls /home
aaa

ここで、別のコマンドラインから

> docker diff 7b39b74c7be6
C /etc
C /etc/group
A /etc/group-
C /etc/gshadow
A /etc/gshadow-
C /etc/passwd
A /etc/passwd-
C /etc/shadow
A /etc/shadow-
C /etc/subgid
A /etc/subgid-
C /etc/subuid
A /etc/subuid-
C /home
A /home/aaa
A /home/aaa/.bash_logout
A /home/aaa/.bashrc
A /home/aaa/.profile
C /var
C /var/log
C /var/log/faillog
C /var/log/lastlog

とファイルの差分が判ります。これを再利用するつもりなら、タグ(aaa/bbb等)付けしてリポジトリィに保存。

> docker commit 7b39b74c7be6  aaa/bbb
sha256:3bd6d902e023c540eaec3dcd3efeb4c4078d547aeba30d2bc82be796a6a49129

ちゃんとリストにも出るので、不要になったら docker rmi で消せます。

> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
aaa/bbb             latest              3bd6d902e023        27 seconds ago      127.5 MB

勿論ファイルに保存もできますが、大元のイメージ(この場合はububtu:lastest)が無い環境ではrunできなさそうと思いきや、Dockerfileのfrom 以降全ての差分が入ってる様で結構でかいです。

> docker save aaa/bbb > aaa-bbb.tar

それにちょっと使うにはいいけど、いきなり停電したりすると全ては泡と消えてしまいます。
docker run の -v オプションで dockerのホストのどこかをコンテナにマウントできます。

> docker run -d -v /var/host_lib/mysql:/var/lib/mysql me/mysql_x_x  ubuntu
※ホストの/var/host_lib/mysqlがコンテナの/var/lib/mysql me/mysql_x_xにマウントされるので、コンテナを終了してもデータは残る。

でもホストのファイルシステムにベタに置くのはちょっとアレです。※ログ収集ならこれが一番なんだろうなぁ~。
それよりデータ格納用のコンテナの方が運用は楽そうです。そして不要になったら削除すればいい。
Dockerfileで永続性(VOLUME指定)付きでデータ格納用のイメージを作り、

FROM 適当なのでいいハズ
VOLUME /opt
CMD /bin/sh

docker run –name {ユニークな名前}でコンテナを作ります。
もう一度、docker run –name  {ユニークな名前} を指定して何かをすると、コンフリクトとエラーになるので保持されていることが判ります。
そこで、docker run –volume-from  {先のユニークな名前} を指定して何かを実行すれば、{先のユニークな名前}の中だけ永続性が保たれるわけです。
ただ、イメージとしてではなく、コンテナとして保持される点が要注意。
dockerを再起動したら、やはり消えるのかな?



Windows Subystem for Linux (beta)の再インスト

最初は自動的にユーザ作成などをしてくれるけど、アンスコしてもファイルは残る。
lxrunコマンドでその辺を調整できるようだ。
C:\Users\{ユーザ名}>lxrun -?
LX サブシステムの管理操作を実行します
使用法:
/install – サブシステムをインストールします
オプションの引数:
/y – ユーザーに許可を求めません
/uninstall – サブシステムをアンインストールします
オプションの引数:
/full – 完全アンインストールを実行します
/y – ユーザーに許可を求めません
/setdefaultuser – bash を起動するサブシステム ユーザーを構成します。ユーザーが存在しない場合は作成されます。
オプションの引数:
username – ユーザー名を指定します
/y – ユーザー名が指定された場合、パスワードの作成を求めません
/update – サブシステムのパッケージのインデックスを更新します
だから、

  • 完全にアンスコしたい場合:
    • lxrun /uninstall /y
  • 再インストしたい場合:
    • lxrun /install
  • 起動時のユーザを変えたい場合:
    • lxrun /setdefaultuser  {ユーザ名}

Bashの窓を開いて何かやってる最中に実行すると閉じるので、ユーザを作るだけなら adduserコマンドの方が安心。
かな。
sudo apt-get update  ≒ lxrun /update
なので、どっちでもいいかも。
 
 
 
 



BATをCScriptとして実行するためのブートストラップ

紛れ込んで見つかりにくくなっているので再掲載。

使い方

フォルダ上のBATをクリックするダケ

効果

普通はCScriptのjsを作り、このjsファイルを起動するBATを作らないといけないけど、1ファイルで済む。

作り方

@if (1==1) /*
@ECHO off
echo パラメータ付きでこのファイルをJScriptで実行する。

%~d0
cd %~dp0

CScript //Nologo //E:JScript “%~f0” %*
REM ファイルの最後まで読み飛ばす
GOTO :EOF
rem */
@end

をjsファイルの先頭に挿入し、拡張子をBATに変える。
jsファイル部分の最初もパラメータを指定して使える様に

// 主処理の呼び出し
WScript.quit(main(WScript.arguments.length, WScript.arguments));

// 主処理
function main( argc, argv ) {
WScript.echo(“今はJScriptらしい”);
}

な形にいつもしておくといいかもしれない。
main( ) 以下は、どうでもOK。
CScriptで実行できるものは大きくはWSH(Windows Script Host)と云うものだけど、
どのようにコードするのかといえば、JScriptやVBSriptがある。
上の例は//E:JScript なのでJScriptで書かないといけないけど、//E:VBScript に変えればVBSriptで書ける。
手元にWORDかEXCELしかなく何かプログラムを書かないと困る場合は、EXCELのVBAを使うといいけど、そのVBAの入ったEXCELはそれより古いバージョンのEXCELがインストされた他のPCでは読めないことがある。※EXCELが入ってないPCも同じ。
そんな時は、BATするのだけど、かなり可読性は悪いシロモノで、ちょっとIF文をいれるだけでも、変数の遅延処理の効果で、すぐバグってしまうし、CScriptをデバックは勘に頼るしかない。
なので、

  1. EXCELのVBAのソースのmsgboxをWScript.echoに置換して済むように作る。
  2. しっかりデバッグ。
  3. エクスポートしてvbsファイルを作る。
  4. 先のブートストラップを付ける。//E:VBScript に変えておく。
  5. msgboxをWScript.echoに置換。

で、多少古いEXCELが入っているPCでも動くものが出来上がる。
また、ブラウザで動くJavaScriptも、JScriptでも動く様にコードすれば、ブラウザに載っているWEB開発ツールでデバッグして、同様にBATが作れる。
そんなことはβακα…_φ(゚∀゚ )アヒャバカバカしいと思えるかもしれない。
でもね。
えーと、EXCELのファイルに入っている会社名が古いままなんで、直して!いっぱいあるけど!
などの馬鹿馬鹿しい力作業には非常に効果が出る。
コードとデバッグに1日かかっても、直すファイルが100個もあれば、十分おつりがくる。
修正の確認も、修正前後のEXCELファイルをXML形式に出力して、WinMergeでテキストの差分でチェックすると可視化ということもあり漏れも見つけやすいし、修正漏れの再検証も楽だ。
※あ、ヘッダーはセルじゃなかったか!等
もっとも、アジャイルとかスクラムな開発技法を取れば、そもそも書類なんて無いだろうし、あっても書式がバラバラどころか中身もボロボロであっても問題は無いだろう。



【Windows10】 ベンチマーク

コントロールパネルからエクスペリエンスインデックスは無くなっているがベンチマークするプログラム自体のはまだ残っている。
コマンドプロンプトで

winsat formal

と入力すると、WinSAT.exeが実行するので、WinSAT.exeの窓が消えるのを待つ。
※管理者モードのコマンドプロンプトなら同じ窓の中で実行してくれる。
結果は、C:\Windows\Performance\WinSAT\DataStore のフォルダに日付の付いたXMLファイルで保存されている。
これをブラウザで開くと中身を見やすい書式で表示してくれるハズ。
このなかの<WinSPR>のところに

<WinSPR>
<SystemScore>7.7</SystemScore>
<MemoryScore>8</MemoryScore>
<CpuScore>8</CpuScore>
<CPUSubAggScore>8.1</CPUSubAggScore>
<VideoEncodeScore>7.9</VideoEncodeScore>
<GraphicsScore>8.6</GraphicsScore>
<Dx9SubScore>9.9</Dx9SubScore>
<Dx10SubScore>9.9</Dx10SubScore>
<GamingScore>9.9</GamingScore>
<StdDefPlaybackScore>TRUE</StdDefPlaybackScore>
<HighDefPlaybackScore>TRUE</HighDefPlaybackScore>
<DiskScore>7.7</DiskScore>
・・・
</WinSPR>

とあるので大体は判るけど、WinSATをググると、見やすくしてくれるサイトが見つかった。
https://webmarks.info/ja/
また、このページではゲーム用のベンチは実行されないとなっているが、
上のXMLにはDx9とDx10のSubScoreやGamingScoreが載っている。
管理者モードのコマンドプロンプトで WinSAT /? からオプションを観ると
Winsat graphicsformal3d
Winsat graphicsformalmedia
他にもDX9、DX10バージョンもある。
上のGamingScoreは9.9とほぼ満点?状態。RADEON HD7950でこの数字だからだろうか?
Windows10的にはもうゲーム向けのベンチマークの結果とは云えない軽いベンチ内容らしい。
 




top