Windowsのバッチファイルで日付取得するたった一つの冴えたやり方

みなさんCMDつかってますかー!
日本のエンタープライズで働いている限り使わざるを得ないCMDいやいや使うよりかっこよく使いこなしましょう。

CMDで日付(今日だったら20160926)のファイル名を作りたいときとき
Windows環境変数「DATE」の中には日付が入っていますが、スラッシュ含みの形式になっています。2016/09/26といった形式。(環境で異なることがあります)
しかしスラッシュはWindowsのファイルやフォルダ名に使用できないため、スラッシュを取り除く必要があります。

そんなときは

%DATE:/=%

をつかいましょう。

ログに吐くならこんな感じですね。

echo aa >> %DATE:/=%.log

これは日付文字列の「2016/09/26」に対して「/」を「」空文字に置換するという命令です。


ネットで検索すると以下のやり方が主流なようなのだけど、ぱっとみの可読性が低く僕はすきじゃない。

echo %date:~0,4%%date:~5,2%%date:~8,2%

これは「2016/09/26」から0-4文字と5-7文字目と必要な文字を抜き出して知れらを結合しています。
ぜひ上記の文字抜き出しで書いていて可読性を下げているバッチスクリプトがあったら「%DATE:/=%」で書き直してみてはいかがだろうか

ちなみにどちらもちゃんと同じ結果です。もちろん

C:\Users\garapon>echo %DATE:/=%
20160926

C:\Users\garapon>echo %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
20160926

TIME部分も必要な場合TIMEはミリ秒の区切り文字が異なる為、切り出しをしないといけないのでそれはわるくないとおもいますよ。

游ゴシックはフォントサイズや拡大縮小で見た目が変化し別の文字に見える

まず、この文字を見てください
f:id:GARAPON:20160921121356p:plain

何に見えます?
数字の8の下にアンダーバーがあるような文字にみえてなんじゃこりゃってなる。
そこから考えてみるとあ、「一旦」?ってなってそうおもってみればみえなくないですが、
感じなのに角が丸まって見えるのが非常に違和感があります。
漢数字の1も留めが着いてない単なる棒なので余計わかりにくい。

拡大してみると
f:id:GARAPON:20160921121407p:plain
こんな感じで角が薄く表示されている。

比較

游ゴシック、MeiryoUI、MSゴシックでフォントサイズで比較してみるとこんな感じ。
f:id:GARAPON:20160921121451p:plain
サイズ8、11、14で丸くなっていることがわかる。比べてみるとMeiryoも縦線が太くなったりしている。
MSゴシックはちゃんときれい。

フォントデザインの仕組みは良くわかりませんがこれは気持ち悪い。
Windowsの問題なのかもしらんけども、解像度が低くてもきれいに見えるようなフォントがいいなぁ、、、、、

Opencv3.1で顔検出

かおかおかおーかおかおかーおーかおかおかおー by たくみ

ということで顔検出してみる。

Opencvインストール

http://opencv.org/downloads.html
からDLした3.1を適当に解凍。以後の例では「C:\tool\opencv-3.1.0」に解凍したとしてすすめます。
3系と2系でAPIが結構変わっているので古いサンプルを動かしたい人は2系のほうがいいかもしれませんが、私は最新版で行きます。

Javaから使う準備

Javaから呼び出すには2つ作業が必要です
1、「C:\tool\opencv-3.1.0\build\java\opencv-310.jar」をクラスパスに通す
2、「C:\tool\opencv-3.1.0\build\java\x64\opencv_java310.dll」にパスを通す
2はめんどくさいので、手抜きするなら該当のDLLをプロジェクトフォルダ直下にコピーしましょう。

カスケード分類の用意

C:\tool\opencv-3.1.0\sources\data\haarcascades にあるhaarcascade_frontalface_default.xml を同じくプロジェクトフォルダ直下におきましょう。

動かしてみる

こんなソースを書きます。
http://opencv.blog.jp/java/face_detect
が2系のソースなので「org.opencv.highgui.Highgui」ではなく「org.opencv.imgcodecs.Imgcodecs」で読み書きをするように書き換えました。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;
import org.opencv.core.MatOfRect;
import org.opencv.core.Rect;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.objdetect.CascadeClassifier;

public class 顔検出 {

    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        // 入力画像の取得	
        Mat im = Imgcodecs.imread("input.jpg");
        // カスケード分類器で顔探索
        CascadeClassifier faceDetector = new CascadeClassifier("haarcascade_frontalface_default.xml");
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(im, faceDetections);
        // 見つかった顔を矩形で囲む
        for (Rect rect : faceDetections.toArray()) {
            Imgproc.rectangle(im, new Point(rect.x, rect.y),
                    new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 0, 255), 5);
        }
        // 結果を保存
        Imgcodecs.imwrite("ouput.png", im);
    }
}

んで実行すると、、、

f:id:GARAPON:20160913175405p:plain
5名中4名は見えました。さすがに横顔は無理ですね。しかしすげー世界だなーいろいろらくだなー


顔写真はココから借用 http://www.photo-ac.com/

TensorFlowをセットアップしてみる

ほんとはGPUとかつかいたいのでそれっぽいマシンが必要ですが、
とりあえずてじかにあったUbuntu 16.04にセットアップ。
以下はCPUのみ版の手順なので、GPUをちゃんと積んでるマシン等の場合は以下サイトでちゃんと手順を確認しましょう。
https://www.tensorflow.org/versions/master/get_started/os_setup.html

pip インストール

$ sudo apt-get install python-pip python-dev
$ python --version
Python 2.7.10

ぱいそん2.7がはいったので、それにあわせたバイナリをおとす

# Ubuntu/Linux 64-bit, CPU only, Python 2.7
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
# Python 2
$ sudo pip install --upgrade $TF_BINARY_URL

Porxy環境の人は pip のうしろに「--proxy=user@proxy.hoge.jp:port」を忘れずに。

Virtualenv インストール

# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev python-virtualenv
$ virtualenv --system-site-packages ~/tensorflow
$ source ~/tensorflow/bin/activate

# Ubuntu/Linux 64-bit, CPU only, Python 2.7
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
# Python 2
(tensorflow)$ pip install --upgrade $TF_BINARY_URL
(tensorflow)$ deactivate
$  # Your prompt should change back

Anaconda インストール

Download Anaconda Now! | Continuum

から該当のインストーラをDLする。わざわざインストーラ落とさないといけないって珍しいね。
DLしたらDLディレクトリまで行って

$ bash Anaconda2-4.1.1-Linux-x86_64.sh 

フォルダ等を聞かれるので任意に答える。
インストール終わったら、新しいターミナルで

# Python 2.7
$ conda create -n tensorflow python=2.7

Proxy環境下の場合「~/.condarc」に

proxy_servers:
    http: http://your.proxy.server:8080
    https: http://your.proxy.server:8080

を書いておかないと「Fetching package metadata .」の文字がでてずーーととまっているので気をつけましょう。

tensorflow インストール

$ source activate tensorflow
(tensorflow)$  # Your prompt should change

# Linux/Mac OS X, Python 2.7/3.4/3.5, CPU only:
(tensorflow)$ conda install -c conda-forge tensorflow

こんにちわ世界

http://dev.classmethod.jp/machine-learning/tensorflow-hello-world/

ここのハローわーるどを実行してみます

import tensorflow as tf
import multiprocessing as mp
 
core_num = mp.cpu_count()
config = tf.ConfigProto(
    inter_op_parallelism_threads=core_num,
    intra_op_parallelism_threads=core_num )
sess = tf.Session(config=config)
 
hello = tf.constant('hello, tensorflow!')
print sess.run(hello)
 
a = tf.constant(10)
b = tf.constant(32)
print sess.run(a+b)
$ python  test.py
hello, tensorflow!
42

うごいてますね!!
わーい。

hyperledger/fabricの最新版でDockerバージョンがあわずChainCodeのデプロイに失敗する

Fabricの最新版で環境を作っていたらChainCodeがデプロイしても動かない。
エラーを見てみたら「 Launch -> ERRO bf9 launchAndWaitForRegister failed Error starting container: API error (400): {"message":"starting container with HostConfig was drecated since v1.10 and removed in v1.12"}」てな感じでChainCode用のDockerを起動できていない

07:40:27.360 [rest] ProcessChaincode -> INFO a9d REST successfully deploy chaincode: {"jsonrpc":"2.0","result":{"status":"OK","message":"c8a656473ab6e760a6f65c6811f3883f76a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e"},"id":1}
07:40:28.062 [chaincode] getArgsAndEnv -> DEBU aee Executable is /opt/gopath/bin/c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff94eff501b7cb73a271c3d00070e11c856a20e
07:40:28.062 [chaincode] Deploy -> DEBU aef deploying chaincode c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a2c3d00070e11c856a20e(networkid:dev,peerid:vp0)
07:41:06.666 [chaincode] getArgsAndEnv -> DEBU beb Executable is /opt/gopath/bin/c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff94eff501b7cb73a271c3d00070e11c856a20e
07:41:06.666 [chaincode] launchAndWaitForRegister -> DEBU bec start container: c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9adff501b7cb73a271c3d00070e11c856a20e(networkid:dev,peerid:vp0)
07:41:06.764 [chaincode] Launch -> ERRO bf9 launchAndWaitForRegister failed Error starting container: API error (400): {"message":"starting container with HostConfig was drecated since v1.10 and removed in v1.12"}

みてみるとイメージは出来ているが起動できない

$ docker images
REPOSITORY                                                                                                                                 TAG                 IMAGE ID          CREATED             SIZE
dev-vp0-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              559dd9b2d826      42 seconds ago      1.726 GB
dev-vp2-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              64c3aff795ac      42 seconds ago      1.726 GB
dev-vp3-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              505226730e4e      42 seconds ago      1.726 GB
dev-vp1-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              20c182276ea1      43 seconds ago      1.726 GB

Docker1.12の変更に対応できていないようですね。
HostConfig will be deprecated since Docker 1.12 · Issue #2044 · hyperledger/fabric · GitHub
一部対応されているようなのだけどMasterにまだはいっていないもよう

1.11.2にダウングレードを試みる。

$ sudo apt-cache showpkg docker-engine
$ sudo apt-get install docker-engine=1.11.2-0~trusty

$ docker -v
Docker version 1.11.2, build b9f10c9

ダウングレードできたので、最初から上げなおし。とおもったら
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
となったので起動しない。色々やっても起動しない。
すでに色々イメージがある状態でダウングレードするとだめみたいね。まあそりゃそうか。

なんでしょうがないので、Vagrantでイメージ作るところからやり直す。
まっさらなVMを用意して、
github.com\hyperledger\fabric\devenv\setup.sh
を書き換える。

L69 の
# Install docker
apt-get install -y linux-image-extra-$(uname -r) apparmor docker-engine
⇒
# Install docker
apt-get install -y linux-image-extra-$(uname -r) apparmor
apt-get install -y  docker-engine=1.11.2-0~trusty

と書き換えてdockerをバージョン指定でインストールさせる。

これでOK。VMから作り直しましょう。

VirtualBoxから「hyperledger」イメージを削除してきれいな体にしてから

vagrant up
vagrant up --provision

でOK.その他の手順は以下と同じ。これでDockerを1.11.2固定の環境が出来た。

garapon.hatenablog.com

やれやれ

Office2016のデフォルトフォントを変更する。

Office2016いれたらデフォルトが游ゴシックになってめっちゃみずらい。せめてMSゴシックにしてほしい。
WordとPowerPointはテンプレートを使うことが多いのであまり被害がありませんがExcelOutLookは被害甚大。そうそうに直しましょう。
はやいところMS様は修正パッチをだすといいよw

Excel

ファイルメニューから「オプション」を選び、基本設定の新しいブックの作成時のフォントを変更する。
Excelを再起動しろ言われるので、再起動しましょう。

OutLook

ファイルメニューから「オプション」を選び、、「メール」タブの「ひな形およびフォント」を選択。
「ひな形」のテキスト形式のメッセージのところの「書式設定」をえらんでフォントを変更しましょう。
ちなみにOutLookとかは2013までは「MS P ゴシック」がデフォだったので今までと同じ見た目がいい人はMSPゴシックを選びましょう。


やれやれ。