Thought about system by Hiroyasu Ishikawa

We are uncovering better ways of developing system.

TensorFlowをAnaconda環境にインストール

これは何か

TensorFlowをWindowsのAnaconda環境にインストールする方法のメモです。

何でメモしておくのか

公式のドキュメント通りに進めるとウマくいかなかったのでメモしておく。

インストール方法

Python 3.5を指定して環境を作成

conda create -n {name of env} python=3.5
activate {name of env}

tensorflowのインストール

pip install tensorflow

Vimのvisualbellを無効化

visualbellを無効化とは何か

Vimの機能であるエラー時の画面フラッシュを無効にする。

なぜ無効化するのか

Vimを操作する場合、エラーはよくあることである。例えば、画面最下部で"j"(次の行へ移動)を操作することがある。
この強く認識しなくても良いエラーの度に、画面がフラッシュするのを避けたい。

どうやって無効化するか

.vimrcでvisualbellを無効化する。

set visualbell t_vb=

TensorFlowをインストールできない

何が問題か

TensorFlowをWindows環境にインストールしようとしたらエラーとなって入れられない。

どうやって解決するの

64bit Pythonをインストールすれば以下のコマンドでインストールできる。

pip3 install tensorflow

sedで1文字以上を示す正規表現を使う

これは何か

sed正規表現の'+'(1文字以上)を使う.

何のためか

sed正規表現'+'を使おうとしたが使えずに困った.

$ echo 'ab' | sed -e 's/(ab+)//g'
ab
# aと1文字以上のbがあるのに置換されない

どうやるの

sed -e ではなく sed -E とする.

echo 'ab' | sed -E 's/(ab+)//g'

# 置換されて空文字が出力される

拡張正規表現を使うには-Eオプションを使う必要があるらしい.

内骨格からGitを実行する

これは何か

内骨格(ファイラ)からコマンドプロンプトを開いて,CUIのGitを実行する.

何のためか

TortoiseGitの動作がコマンドのGitに比べて重たくて,頻繁にコマンドを実行していた.
ただ,毎回コマンドプロンプト開いて実行するのも無駄なので内骨格から実行できるようにした.

どうやるの

環境

内骨格

現在使っている内骨格は2.43.他のバージョンでも使えると思う.

パス

"C:\Program Files\Git\cmd" にパスを通しておくか,スクリプト中のgit.exeにフルパスを指定する.

config.py

内骨格のconfig.py(設定スクリプト)に以下を追加する.

# コマンドランチャにコマンドを登録する
window.launcher.command_list += [
    # 略
    ( "Git",               command_Git ),
    # 略
]

# "git" コマンド 
#   コマンドプロンプト開いてGitを実行します
def command_Git(info):
    command = "/k git.exe "
    if len(info.args)>=1:
        command = command + ' '.join(info.args)
    else:
        command = command + "fetch -v"
    print( command )
    shellExecute( None, r"cmd.exe", command, window.activeFileList().getLocation() )

実行

内骨格のコマンド入力で実行する.以下はサンプル.
Git;push
Git;fetch;-v

補足

何も指定せずに実行した場合はfetch -vを実行するようにした.

LogicoolのボタンにWindowsキーとの組み合わせショートカットキーを割り当てる

Logicool*1のマウスにWindowsキーを割り当てることができたので記録しておく。

Logicoolのマウスやキーボードの設定はSetPointというソフトウェアで設定する。このSetPointの「ボタンの割り当て」に「キーストロークの割り当て」という機能がある。しかし、Windowsキーを割り当てようとしても割り当てることができない。このクソ仕様を回避する手順を以下に示す。

(1)SetPointを使ってキーストロークを割り当てる。割り当てるキーは任意で良い。(以下の例ではTabキー)
(2)OKボタンをクリックするなどして、設定を保存する。
(3)SetPointを終了する。タスクバーにあるSetPointのアイコンを右クリックすると終了できる。
(4)SetPointの設定ファイルをテキストエディタで編集する。設定ファイルは私の環境で「C:\Users\{ユーザー名}\AppData\Roaming\Logitech\SetPoint\user.xml」にあった。編集する箇所は後に述べる。
(5)SetPointを起動する。スタートメニューから「Logicool」、「マウスおよびキーボードの設定」の順に選択すれば良い。

編集する箇所は、割り当てたキーストローク(下記例ではTabキー)で検索するとそれらしい場所が見つかる。
このHandler*2を置換する。「*{組み合わせたいキー}」でWindowsキーと任意のキーを組み合わせることができるらしい。
「*{Tab}」としておけば、Windowsのタスクビューのショートカットキーを割り当てることができ、大変便利である。

置換前

<Handler Class="KeystrokeAssignment">
   <Param DisplayName="Tab" LParam="983041" Modifier="0" VirtualKey="9"/>
</Handler>

置換後

<Handler class="KeyStroke">
  <Param KeyName="*{TAB}"/>
</Handler>

*1:海外ではLogitech

*2:XML要素

JavaScriptのスコープ

JavaScriptでは、varを付けないで変数を宣言するとグローバルと見なされる。

例:2が2個出力される。varを付けていれば2と1が出力される。

count = 1;

function getCount() {
  count = 2;
  return count;
}

document.writeln(getCount());
document.writeln(count);

ここで1つ疑問。そもそも一般的にvarを付けない形式で実装する習慣なのかどうか。
全てにvarを付けるようなスタイルが一般的になっていないのだろうか。今度調べてみよう。