2015年11月11日水曜日

iutest v1.14.0 をリリースしました

C++ テスティングフレームワーク iutest v1.14.0 をリリースしました。
変更点は以下の通りです。

  • 追加
    • 大幅なリファクタリング
  • 修正
    • ::iutest::Range を Enum に対応
    • tools の python 3.x 系対応


今回は細かいバグ修正をして、v1.13.1 としてリリースするつもりでしたが cpplint などの対応をしていたら、影響の大きな変更が入ったため v1.14.0 としてリリースしました。
ですので、今回は新しい機能はありません。

cpplint はまたブログにします。それでは。

2015年11月9日月曜日

Circle CI 始めました

Circle CI については省略。
OSS なら 4 コンテナ無料で使えるようでしたので、iutest でも使ってみました。



したいこと
iutest では既に以下の CI サービスをそれぞれ目的別に使用しています。
CI目的
Travis CIgcc/clang でのテスト
ShippableWandbox で gcc/clang の各バージョンごとの syntax チェック
WerckerWandbox で gcc/clang の各バージョンごとの syntax チェック
Drone.ioコンパイル時間の指標
AppveyorVisual Studio でのテスト、Nuget デプロイ

今回は iutest 付属の python ツールのテスト用として Circle CI を使います。
テスト内容としては、様々なバージョンの python で実行して問題がないかをテストします。

circle.yml
Circle CI も Travis CI などと同じように YAML で設定をします。
今回の利用目的は、様々なバージョンでのテストということで、各バージョンごとにマトリックスを組もうと思ったのですが……そういったことは Circle CI ではできないようです。

rvm - Circle CIで複数Rubyバージョンを平行してテストする - Qiita

ただ、こちらに書かれているようにコンテナをパラレルで起動することで並列にテストすることができます。
それか、単純にバージョンを変更しながら直列に実行するかですね。

幸い github の public プロジェクトならば、4つまで無料でコンテナを使えるので、今回はパラレルで実行してみました。


prallel
まず、使用するコンテナの設定をします。
「Project Settings」 を開き、「Tweaks」 にある 「Adjust Parallelism」を開きます。

下のようにコンテナ設定画面になるので、4x まで選択します。

コンテナの設定は完了です。

次に、circle.yml の test の各処理に対して並列実行であることを追記します。
test:
  - python --version:
    parallel: true
コマンドの末尾に ':' を書いて「parallel: true」を記述します。
これでこのコマンドは各コンテナごとに実行されます。

pyenv
Python のバージョンを変えるのは pyenv で行います。
どのコンテナかどうかは、CIRCLE_NODE_INDEX でわかるのでこれで分岐します。

dependencies:
  pre:
    - |
      case $CIRCLE_NODE_INDEX in
        0) pyenv install -ks 2.7.10; pyenv global 2.7.10; $(pyenv which pip) install requests twilio; ;;
        1) pyenv install -ks 3.5.0;  pyenv global 3.5.0;  $(pyenv which pip) install requests twilio; ;;
        2) pyenv install -ks 3.4.3;  pyenv global 3.4.3;  $(pyenv which pip) install requests twilio; ;;
        3) pyenv install -ks 3.3.3;  pyenv global 3.3.3;  $(pyenv which pip) install requests twilio; ;;
      esac

コマンドの先頭の | は複数行に書くためのものです。

さて、ここでちょっと躓きました。
最初のころは以下のように machine で python version 指定していました。
machine:
  python:
    version: 3.5.0

そうすると、dependencies で pyenv global しても、test に入ったときには machine で指定したバージョンに戻ってしまっていました。
(理由はよくわからないけど、そういうもんだと思って) machine の記述は削除しました。


あとは、test で普通に python を使えば任意のバージョンで実行されます。
https://circleci.com/gh/srz-zumix/iutest

※ コマンドの末尾にコンテナ番号が {} つきで表示されます

まとめ
途中少し(いや割りと…)躓きましたが、複数バージョンでのテストができるようになりました!
Travis CI ほどではありませんが、分かってしまえば簡単でした。

あ、最後に CI サービス定番のバッジですが、
プロジェクト設定の Notifications > Status Badges で取得できます。
いやー Circle CI も便利ですなー

2015年11月2日月曜日

[TortoiseSVN] アイコンオーバーレイが表示されなくて困ったけど一応解決できたよ

TortoiseSVN のアイコンオーバーレイが表示されなくなってしまい、
非常に困っていたのですがなんとか解決できました。

この問題は検索したらたくさん解決方法がヒットします。例えば、

私の環境で起きていた問題も、ShellIconOverlayIdentifiers の数制限が原因でした。

対処方法
  • TortoiseSVN を新しいバージョンに更新する。
    新しいバージョンだと、ShellIconOverlayIdentifiers のプライオリティが上がって TortoiseSVN のアイコンが優先的に表示されるようになりました。
  • ShellIconOverlayIdentifiers レジストリから不要なものを消す。
    仕事のPCでは TortoiseSVN の更新ができない状況だったため、参考URL にもあるように
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
    から不要なものを削除しました。
    (64bit だと HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node にも同様のキーがある)
    削除したら explorer を再起動。

これでとりあえず、解決できたのですが、
仕事PCの方はいつの間にかまたアイコンが表示されなくなってしまいました。。。
なんでかな?ともう一度レジストリを見ると、消したはずの DropboxExt が元に戻ってるではありませんか!

なんだか勝手に修復するみたいです。なんてヤツだ全く。(いや、正しいと思います。でもいらないの。)

今度は、キーを削除しないでキーの既定の文字列を無効な文字列に書き換えてやりました。
ただし、デタラメな文字列にしてもダメで、また復元されてしまいました。
上記リンク先にも書いてあるように、GUID を残しつつ無効な文字列にする必要があるようです。
例)MANUALLY_EDITED_{00000000-0000-0000-0000-000000000000}


簡単に DropboxExt のレジストリを書き換えるバッチファイルを書いたので、ご自由にお使いください。
(ただし、使用は自己責任でお願いします。バックアップを取るなりしてください。)
https://gist.github.com/srz-zumix/42121dc8dbabc651dc81


訂正。DropboxExt を書き換えても復元されてしまうので、上記方法は×でした。
なので、TortoiseSVN の方のレジストリキー名を変更して、DropboxExt より優先される名前に(先頭にスペースを2つ追加)しました。



それにしてもアイコンオーバーレイの上限数が少ないですよね。
これってなんとかできないんですかねぇ。根本的な解決ができたらいいのですが…



ともあれ、これでなんとか解決できたので今は良しとしておきます。
それでは。