物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Windows10 + Visual Studio 2019でCERN ROOT6 32bit版を動かす

64bit版の最新記事

phst.hateblo.jp

最終更新: 2021/10/24

仮想環境やリモート環境を使わずに、Windows 10 で直接ROOTバージョン6を使いたい・動かしたい奇特な人のためのドキュメントです。

ROOT6を取り巻く状況

WindowsではROOTの32bit版しか動きません。bellenotが何度も何度も念押ししてるので間違いないです。64bit版が必要な方は、Windows Subsystem for Linux (WSL) でCERN ROOTバージョン6を動かすへ。

https://root.cern.ch/downloading-root の一番上の方に書いている最新版(執筆時はRelease 62406 - ROOT)の中の preview Windows Visual Studio 2019 =ビルド済みバイナリのexeかzipをダウンロードしてください。exeはインストーラー付きで環境変数の設定もしてくれます。お好みで。最新版ではVisual Studio 2019でライブラリとして使用可能になっています。

ROOT6のビルド済みバイナリをライブラリとして使う

  • Visual Studio 2019 Community (ProfessionalでもEnterpriseでも可)を用意
  • C++の空のプロジェクトを作成
  • プロパティページのVC++ディレクトリのインクルードディレクトリにC:\root_v6.24.06.win32.vc16\root\includeを追加。ディレクトリは各自がzipやexeを展開した場所で変更せよ(以下同)
  • リンカーの入力の追加の依存ファイルにC:\root_v6.24.06.win32.vc16\root\lib\*.libを追加
  • PATHにC:\root_v6.24.06.win32.vc16\root\binを追加
  • ソースファイルからC++ファイルを追加
  • サンプルコードを C++ と ROOT6版 ガウス分布をフィッティング ($2194393) · Snippets · GitLab からコピペ

このサンプルコードは、過去のROOT5を使ったブログ記事のFitting結果と比較することを目的としている。

Python scipyのcurve_fit で導出したパラメータと標準誤差をCERN ROOTの結果と比較 - 物理の駅 Physics station by 現役研究者

最後に、ビルドして実行する。ROOT.pdfが以下のように生成されたら成功。SetBinContentで各binにエントリー数を詰めているため、Entriesは100になってしまっている。

ソースからビルドする必要がなくなったため、以下の作業は必要ない

(restricted) ビルドに必要なツール

  • Visual Studio 2019 Community (ProfessionalでもEnterpriseでも可)。インストール時、C++によるデスクトップ開発 にチェックを入れる。
  • Python 32bitバージョン。 当方の環境ではPython 3.7.7Windows x86 web-based installerを使った。
    • ビルド内でPythonコマンドを使うので、PythonへPathを通しておく。
    • ROOTはPyRootのためPython37.lib(Python37.dll)を使ってビルドするので、Pythonも32bitでなければならない(がPyRootは使えない)。
    • Anacondaに含まれる標準ライブラリ(Anaconda3/Library/lib/ 内に含まれる複数の*.lib)はROOTと一部干渉するため使わない(=Anacondaを使わない)。
      Anacondaを使わない場合、ROOTは勝手にROOT内のビルトインライブラリを使ってビルドするので、気にしなくても良い。

(restricted) ビルドの方法

  • ROOTのソースファイルをスペース文字を含まないディレクトリ下に展開する。
    例: C:\root-6.20.04.source
  • ソースファイルをBOM付きUTF-8に変換する(後述)
  • x86 Native Tools Command Prompt for VS 2019 を開く。
  • build用ディレクトリを作り、移動する。
    例: C:\root_v6.20.04
  • cmakeでビルド用のプロジェクトファイルを生成する。
    cmake -G "Visual Studio 16 2019" -A Win32 -Thost=x64 -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_CXX_STANDARD=14 [ソースを展開したフォルダ]
    出力例は後述
  • ビルドする。
    リリース版なら cmake --build . --config Release
    デバッグ版ならcmake --build . --config Debug
    出力例は後述

(restricted) ソースファイルをBOM付きUTF-8に変換するPythonスクリプト

日本語版のVisual Studioは、UTF-8 BOM無しを勝手にShift-JISと解釈してコンパイルしようとする。ROOTのソースファイルには、一部UTF-8で書かれた部分があり、これを無理やりShift-JISで解釈しようとしたときにコンパイルエラーが発生する。幸いなことに、ROOTのソースコードはすべてasciiかUTF-8で書かれているので、全ファイルをUTF-8と解釈して、UTF-8 BOM付きに変換する。

以前執筆した変換スクリプトを、ROOT用に書き直した。

pythonでShift-JISやasciiのファイルを一括でUTF-8 with BOMへ変換する - 物理の駅 Physics station by 現役研究者

import chardet
import glob

# 探索する拡張子リスト
extensions = ["cpp", "hpp", "c", "h", "cxx", "hxx"]


def check(filename):
    # バイナリで開く
    with open(filename, 'rb') as f:
        b = f.read()
    # 文字コードを検出(Shift-JISへの精度は高くない)
    det_chardet = chardet.detect(b)

    # UTF-8 with BOM以外の場合はprint
    if det_chardet["encoding"] != "UTF-8-SIG" and det_chardet["encoding"] != None:
        print(det_chardet, filename)

    # ascii100%のコードをUTF-8 with BOMへ変換
    if det_chardet["encoding"] == "ascii" and det_chardet["confidence"] == 1.0:
        with open(filename) as f:
            contents = f.read()
        with open(filename, "w", encoding="utf_8_sig") as f:
            f.write(contents)
        print("ascii -> UTF-8-SIG")
    elif det_chardet["encoding"] != "UTF-8-SIG" and det_chardet["encoding"] != None:
        with open(filename, "r", encoding="utf_8") as f:
            contents = f.read()
        with open(filename, "w", encoding="utf_8_sig") as f:
            f.write(contents)
        print("UTF-8 -> UTF-8-SIG")

    return det_chardet["encoding"]


# エンコードリスト
encodings = {}

for extension in extensions:
    # cd以下全部を再帰的に探索
    files = glob.glob(f"**/*.{extension}", recursive=True)
    for filename in files:
        # パッケージフォルダ内は無視する
        if "\\packages\\" in filename:
            continue
        det_encoding = check(filename)
        # 検出したエンコードリストを辞書型で集計する
        if det_encoding not in encodings:
            encodings[det_encoding] = 1
        else:
            encodings[det_encoding] += 1
    print()

# 集計結果
print(encodings)

root-6.20.04 の場合、上記スクリプトの標準出力の最後の行は以下のようになるはず

{'ascii': 13010, 'utf-8': 34, 'Windows-1252': 18, 'TIS-620': 1, None: 133, 'ISO-8859-1': 15}

(restricted) cmakeの出力例

Enabled support for のくだりが完全に一致していることを確認してほしい。

-- The C compiler identification is MSVC 19.26.28806.0
-- The CXX compiler identification is MSVC 19.26.28806.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.26.28801/bin/Hostx64/x86/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.26.28801/bin/Hostx64/x86/cl.exe - works

中略

-- Enabled support for:  asimage builtin_afterimage builtin_clang builtin_freetype builtin_ftgl builtin_gl2ps builtin_glew builtin_llvm builtin_lz4 builtin_lzma builtin_pcre builtin_xxhash builtin_zlib builtin_zstd clad exceptions gdml http mlp opengl pyroot webgui root7 shared spectrum
-- Configuring done
-- Generating done
-- Build files have been written to: PATH/root_build

(restricted) cmake --buildの出力例

マルチスレッドでビルドするものの、8コア16スレッドのパソコンで42分かかった。0 エラー でなければどこかで失敗している。警告の数はReleaseかDebugかで若干変化する。

.NET Framework 向け Microsoft (R) Build Engine バージョン 16.6.0+5ff7b0c9e
Copyright (C) Microsoft Corporation.All rights reserved.

2020/06/10 10:37:19 にビルドを開始しました。

中略

    228 個の警告
    0 エラー

経過時間 00:42:06.39

参考文献

ビルドオプション一覧
Building ROOT from source - ROOT

bellenotによるWindows10でコンパイルする方法
Run ROOT 6.19.02 on Windows 10 - #14 by bellenot - ROOT - ROOT Forum

ROOTコミュニティでの報告
Building and Executing ROOT6 on Windows with VS2019 - ROOT - ROOT Forum

これまでの経緯

最終更新: 2020/06/09 bellenot氏曰く、ビルド済みバイナリはそれぞれの環境で動かない場合は、ソースからコンパイルすれば動くとのことだったが、当環境で頑張ってコンパイルすることには成功したが、Visual Studio 2019からライブラリとして使うことはできなかった。

最終更新: 2019/04/10

bellenot氏曰く、Windows (Visual Studio 2019のcl.exe)でROOT6が動く(コンパイルできる)らしい。だが私の環境では動かなかった。

最終更新: 2018/10/29

Windows用のROOT6はプレビュー版がリリースされています。これは、Visual Studio 2017が必須です。無料のCommunity版でも良い。しかし、Visual StudioのC++コンパイラーのバグにより、現状プレビュー版ROOT6用は正常に動きません。

https://root-forum.cern.ch/t/assertion-failed-occurred-when-executing-compiled-exe-with-visual-studio-2017/31013

ROOTのインストール方法の日本語訳

書いておくけど、全く役に立たないので無視でいいよ。

Installing ROOT - ROOT

僕の流儀はZIPからインストールなのでそちらだけ。

伝統的な変種(筆者注: 変種ってどう訳すの?)。7zip(筆者注: おすすめなので入れておくべし)などで解凍する。ROOTはMicrosoft Visual Studioのコマンドプロンプト(スタートメニューのプログラムのVisual Studio 2017 VS 2017 用)から始める。ROOTを C:\root にインストールしたとき、ROOTを使う前に必要な環境変数をセットアップするために C:\root\bin\thisroot.bat を実行せよ。

重要なインストール手法

  • システムにインストールされたのと完全に同じバージョンのVisual Studioでビルドされた(筆者注: 今回はVS2017)バイナリをダウンロードする必要がある。
  • ブランク文字を含む(筆者注: 日本語のパスを含む)ディレクトリにZIPを解凍してはならない。
  • パフォーマンスが重要な場合(筆者注: 基本的に必要である)は、リリース版を入手せよ。
  • コードをデバッグ(筆者注: ここでのデバッグは、ROOTそのもののデバッグを意味する。コードがコンパイルできないなどの問題の多くは、ROOTではなく君が書いたコードにバグがある)する場合、ROOTのデバッグ用ビルドが必要。マイクロソフトの制限のため、リリース版とデバッグ版を混在はできない。

WindowsでMackerelのプラグインを動かすときのメモ

公式が提供するプラグインはGo(Go言語)で書かれているので、まずはGoの環境を整備する。

qiita.com

go version

go version go1.14.3 windows/amd64

などと出ればOK。

Go言語でビルドする方法は以下を参照にしつつ、

ビルド・実行する - はじめてのGo言語

Gitからプラグインをcloneして、今回はNVIDIAの情報を取得するプラグインをビルドする

git clone https://github.com/mackerelio/mackerel-agent-plugins
cd mackerel-agent-plugins\mackerel-plugin-nvidia-smi
go build main.go

これで出来たmain.exeファイルをmackerel-plugin-nvidia-smi.exeと名前を変え、管理者権限でC:\Program Files\Mackerel\mackerel-agentにコピーする。

mackerel-plugin-nvidia-smi.exe内で nvidia-smi.exe が呼ばれているので、PATHが通っているかどうかを確認しておく。Go言語はプラグインのビルドにしか使わないので、必要ないなら削除してしまっても構わない。

次に、設定ファイルにnvidia-smiのプラグインの設定をを書き換える。

"C:\Program Files\Mackerel\mackerel-agent\mackerel-agent.conf"

を管理者権限で開き、末尾に

[plugin.metrics.nvidia-smi]
command = "mackerel-plugin-nvidia-smi"

を追記する。

サービスからmackerel-agentを サービスの再起動をする。

以上。

docomoからIIJmioに乗り換えていくら安くなったのかメモ

結論を先に書いておくと、docomoからIIJmioに乗り換えて、毎月6842円、年間8万2000円安くなった!

乗り換え前のdocomo

基本使用料

  • カケホーダイプラン 2700円

パケット定額

  • XiデータMパック(標準) 5000円

その他の利用料金

  • spモード利用料 300円
  • あんしんセキュリティ利用料 200円
  • ケータイ補償サービス利用料 500円
  • あんしん遠隔サポート利用料 400円
  • ドコモWi-Fi利用料 300円

割引

(800+380+300)=1480円分

まとめ

  • 税抜7620円
  • 税込8382円

乗り換え後のIIJmio

  • 音声通話付帯料 700円
  • 追加SIM利用料 (SIMカードが4枚以上になるため) 400円
  • Xi通話料とXi・SMS通信量 (完全従量制・月によって変わる) 約300円

まとめ

  • 税抜1400円
  • 税込1540円

乗り換え手数料

IIJmioのファミリーシェアプランに組み込むために、契約者の名義を統一する必要があったため、docomo店舗での手続きに時間を要した。名義変更に係る手数料はなかったどころか、なぜか100ポイント分もらった。解約されることも知らずに...

税込 2633円

結論

細かいところは省いたが、当方の設定では毎月6842円安くなった。 乗り換え手数料は半月でお釣りが来る。

docomoからIIJmioに乗り換えて、
毎月6842円、年間8万2000円安くなった!

浮いた8万円で良いスマホでも買ってあげようかな。

Windows 10でWordPressを動かす

https://korochan.info/2019/07/22/iiswordpress/

Windowsの機能の有効化または無効化

インターネットインフォメーションサービス

Web管理ツール内
IIS管理コンソール
IIS管理サービス
IIS管理スクリプトおよびツール

HTTP共通機能内
HTTPエラー
HTTPリダイレクト
ディレクトリの参照
既定のドキュメント
静的なコンテンツ

アプリケーション開発機能内
CGI

インターネットインフォメーションサービスのホスト可能なWebコア

を選択

Web Platform Installer 5.1 をインストール

https://www.microsoft.com/web/downloads/platform.aspx

の下の方 English: x64 installer から。5.0と書いてあるが、リンク先は5.1のexe。