読者です 読者をやめる 読者になる 読者になる

かざんぶろぐ

だらだらと備忘録とってます

pipのコマンドのメモ

Pythonのパッケージ管理の際に使いまくるpipだが、コマンドをすぐ忘れてしまうのでここにメモしておく。

pipのバージョンを確認

pip -V



パッケージの検索

pip search <パッケージ名>



インストー

pip install <パッケージ名>


バージョンを指定してインストー

pip install <パッケージ名> == 1.2.3.
pip install <パッケージ名> >= 1.2.3
pip install <パッケージ名> < 1.2.3
||< 
<br>

アンインストール
>||
pip uninstall <パッケージ名>



再インストー

まずはパッケージをアンインストール。その後再インストールということをしたい場合、
前回インストール(ビルド)した時のキャッシュが使われてしまうため、それを無効にするため、--no-cache-dirオプションをつける

pip --no-cache-dir install -I pillow <パッケージ名>


パッケージのアップデート

pip install -U <パッケージ名>


インストールされているパーケージを表示(-oまたは--outdatedオプションをつけるとアップデート可能なパッケージを表示してくれる)

pip list



インストールされているパッケージの情報を表示

pip show <パッケージ名>


Pythonでフレームワークを使わずにニューラルネットワークを実装

Chainerや、TensorFlowといった、深層学習のフレームワークを使用せず、NumpyとMatplotlibのみでニューラルネットワークを実装した。

全てのコードなどが公開されたリポジトリはこちら

やったこと

3クラス分類を行うニューラルネットワークPythonで実装した。
(ついでに2クラス分類を行ったり、XORを解いたりしたのでリポジトリに公開しておく)

データの準備

先ほどドヤ顔で深層学習のフレームワークを使用しないと宣言した手前情けないのだが、データの作成に関しては、自分で1から作成せず、scikit-learnmake_classificationという機能を使って作成した。

import sklearn.datasets
x , label = sklearn.datasets.make_classification(
n_features=2, n_samples=300, n_redundant=0, 
n_informative=2,n_clusters_per_class=1, n_classes=3)

これでxに入力データが、labelに教師データが格納される。
make_classification関数の引数は(3)の方の記事に詳しく書いてある。

import matplotlib.pyplot as plt
plt.scatter(x[:, 0], x[:, 1],c=label,cmap=plt.cm.jet)
plt.show()

f:id:okuya-KAZAN:20170523164550p:plain
このような感じでデータが生成された。
xは2つの入力値(座標)を持つサンプルを300個含んだ配列であり、
labelは各サンプルのクラス(0,1,2)を含んだ配列である。

print x[:10]
array([[ 0.52358787, -1.15423424],
       [-0.52633513, -1.76794057],
       [ 0.55418671, -0.46817551],
       [-1.17471257, -0.44251872],
       [-1.34866206, -0.54916791],
       [ 0.67537883, -0.53149583],
       [ 1.61055345,  0.0481599 ],
       [-0.09616488, -1.51676462],
       [ 0.22409607,  1.40511859],
       [ 2.24986887,  1.18862095]])
print label[:10]
array([2, 0, 0, 0, 0, 2, 1, 0, 1, 1])

ニューラルネットワークの構造

以下のようにニューラルネットワークを設計した。


f:id:okuya-KAZAN:20170523173356p:plain


層は入力層、隠れ層、出力層の3つで、各層のユニット数は(2,3,3)とし、
隠れ層の活性化関数にはTanh関数、
出力層の活性化関数にはSoftmax関数を使用した。

class Function(object):
    def tanh(self, x):
        return np.tanh(x)

    def dtanh(self, x):
        return 1. - x * x

    def softmax(self, x):
        e = np.exp(x - np.max(x))  # オーバーフローを防ぐ
        if e.ndim == 1:
            return e / np.sum(e, axis=0)
        else:
            return e / np.array([np.sum(e, axis=1)]).T # サンプル数が1の時

実装

※これ以降定義する関数は全てNewral_Networkクラスの中のメソッドである。

コンストラクタ

コンストラクタとは、新たにオブジェクトが生成される際に呼び出されて内容の初期化などを行なうメソッドのことであり、メッソド名は__init__とする。
ここでニューラルネットワークの構築を行う。

class Newral_Network(object):
    def __init__(self, unit):
        print "Number of layer = ",len(unit)
        print unit
        print "-------------------------"
        self.F = Function()
        self.unit = unit
        self.W = []
        self.B = []
        self.dW = []
        for i in range(len(self.unit) - 1):
            w = np.random.rand(self.unit[i], self.unit[i + 1])
            self.W.append(w)
            dw = np.random.rand(self.unit[i], self.unit[i + 1])
            self.dW.append(dw)
            b = np.random.rand(self.unit[i + 1])
            self.B.append(b)

unitは各層のユニット数が格納された配列である(今回の場合、unit=[2,3,3])。
unitの情報をもとに、学習するパラメータ(W, B)をランダムに初期化している。
dwは重みの修正量を保持する配列であり、モメンタムでの計算に使う。

順伝搬

構築したネットワークに入力値を与え、出力を得るforwardメソッドを定義する。
配列Zを用意し、そこに各層の出力値を加えていく。

# 順伝搬
def forward(self, _inputs):
    self.Z = []
    self.Z.append(_inputs)
    for i in range(len(self.unit) - 1):
        u = self.U(self.Z[i], self.W[i], self.B[i])
        if(i != len(self.unit) - 2):
            z = np.tanh(u)
        else:
            z = self.F.softmax(u)
        self.Z.append(z)
    return np.argmax(z, axis=1)

# ユニットへの総入力を返す関数
def U(self, x, w, b):
        return np.dot(x, w) + b

forwardメソッドの返り値だが、
出力層の各ユニットの出力値の中で最も高い値を出力したユニットの番号、つまり入力値の属するクラスの予測値である。
f:id:okuya-KAZAN:20170523184335p:plain

誤差の算出

ニューラルネットワークの出力値と目標出力値(label)から誤差を算出する。
誤差関数には交差エントロピーを用いている。
※出力値はforwardメソッド内で算出された配列Zの中の1番末尾にある配列であり、forwardメソッドの返り値ではない。

# 誤差の計算
def calc_loss(self, label):
    error = np.sum(label * np.log(self.Z[-1]), axis=1)
    return -np.mean(error)

誤差逆伝搬

今回のプログラムの肝となる誤差逆伝搬法によるパラメータの学習を行う部分。

# 誤差逆伝搬
def backPropagate(self, _label, eta, M):
    # calculate output_delta and error terms
    W_grad = []
    B_grad = []
    for i in range(len(self.W)):
        w_grad = np.zeros_like(self.W[i])
        W_grad.append(w_grad)
        b_grad = np.zeros_like(self.W[i])
        B_grad.append(b_grad)

    output = True

    delta = np.zeros_like(self.Z[-1])
    for i in range(len(self.W)):
        delta = self.calc_delta(
            delta, self.W[-(i)], self.Z[-(i + 1)], _label, output)
        W_grad[-(i + 1)], B_grad[-(i + 1)] = self.calc_grad(self.W[-(i + 1)], self.B[-(i + 1)], self.Z[-(i + 2)], delta)

        output = False

    # パラメータのチューニング
    for i in range(len(self.W)):
        self.W[i] = self.W[i] - eta * W_grad[i] + M * self.dW[i]
        self.B[i] = self.B[i] - eta * B_grad[i]
        # モメンタムの計算
        self.dW[i] = -eta * W_grad[i] + M * self.dW[i]

# デルタの計算
def calc_delta(self, delta_dash, w, z, label, output):
    # delta_dash : 1つ先の層のデルタ
    # w : pre_deltaとdeltaを繋ぐネットの重み
    # z : wへ向かう出力
    if(output):
        delta = z - label
    else:
        delta = np.dot(delta_dash, w.T) * self.F.dtanh(z)
    return delta

デルタの計算方法は出力層とそれ以外の層では異なるため、bool変数であるoutputを定義し、その値によってデルタの算出方法を変えている。
変数Mはモメンタムでの加算の割合を制御するハイパーパラメータ。

学習

これまでに定義したメソッドを駆使し、ニューラルネットワークの出力が目標出力(label)に近づいていくようパラメータをチューニングしていく。

def train(self, dataset, N, iterations=1000, minibatch=4, eta=0.5, M=0.1):
    print "-----Train-----"
    # 入力データ
    inputs = dataset[:, :self.unit[0]]
    # 訓練データ
    label = dataset[:, self.unit[0]:]

    errors = []

    for val in range(iterations):
        minibatch_errors = []
        for index in range(0, N, minibatch):
            _inputs = inputs[index: index + minibatch]
            _label = label[index: index + minibatch]
            self.forward(_inputs)
            self.backPropagate(_label, eta, M)

            loss = self.calc_loss(_label)
            minibatch_errors.append(loss)
        En = sum(minibatch_errors) / len(minibatch_errors)
        print "epoch", val + 1, " : Loss = ", En
        errors.append(En)
    print "\n"
    errors = np.asarray(errors)
    plt.plot(errors)

うーん...なんかコードが汚い...


実際に3000回学習させた時の誤差の変動を示したグラフがこちら
f:id:okuya-KAZAN:20170523190031p:plain

結果

学習させたパラメータを引数に取るdraw_testメソッドを定義

def draw_test(self, x, label, W, B):
    self.W = W
    self.B = B
    x1_max = max(x[:, 0]) + 0.5
    x2_max = max(x[:, 1]) + 0.5
    x1_min = min(x[:, 0]) - 0.5
    x2_min = min(x[:, 1]) - 0.5
    xx, yy = np.meshgrid(np.arange(x1_min, x1_max, 0.01),
                         np.arange(x2_min, x2_max, 0.01))
    Z = self.forward(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    plt.contourf(xx, yy, Z, cmap=plt.cm.jet)
    plt.scatter(x[:, 0], x[:, 1], c=label, cmap=plt.cm.jet)
    plt.show()

f:id:okuya-KAZAN:20170523164550p:plain
f:id:okuya-KAZAN:20170523190637p:plain
認識できてる...!!

2クラス分類

scikit-learnmake_moonsという機能を使って2クラスのデータも作成し、
クラスの分類を行うニューラルネットワークを構築し学習させた。
層は入力層、隠れ層、出力層の3つで、各層のユニット数は(2,3,2)とした。
f:id:okuya-KAZAN:20170523191231p:plain
f:id:okuya-KAZAN:20170523191243p:plain


ちなみに、隠れ層のユニット数を20にした場合
f:id:okuya-KAZAN:20170523191511p:plain
多少オーバーフィットを起こしている恐れがある。

Gitのコマンドのメモ

ずいぶん更新が遅れてしまった...
GitをCUIで操作する際のコマンドの備忘録をとっておく。

設定系

名前の設定

git config --global user.name <名前>


メールアドレスの設定

git config --global user.email <メアド>


設定の確認

git config -l 




Gitを使うという宣言

git init 




コマンドの省略名(エイリアスの指定)

git config --global alias.<省略名> <コマンド> 


共同リポジトリでのGit宣言

git init --bare 


設定情報一覧

git config -l 



※ .ignoreファイルに書き込まれたファイルはGitにあがらない


Upload系

ワークディレクトリからステージエリアへ

git add  <ファイル名>




カレントディレクトリのファイル全てをadd

git add . 




ステージエリアからリポリジへ

git commit <ファイル名> 




vimを立ち上げずにコミットメッセージを書ける

git commit -m <コミットメッセージ>


確認

差分があるか確認

git status 




差分を確認(赤字)

git diff 


差分を確認(緑字)

git diff --cached 




リポリジのlogを見る

git log 


簡潔にリポリジのlogを見る

git log --oneline 


詳しくリポリジのlogを見る

git log -p 


コミットによってどのファイルが何箇所変わったか確認

git log --stat 


commitの内容を知ることができる

git show <commitID> 


管理から削除

※間違えてコミットしてしまった時などに使う


管理対象から外す(ファイル自体はディレクトリに残る)

git rm —-cached <ファイル名> 




ファイルをディレクトリからも削除

git rm <ファイル名> 


ディレクトリを削除

git rm -r <ディレクトリ名> 



修正

直前のコミットの変更

git commit --amend -m<修正したコミットメッセージ>


IDのバージョンに戻る( logの1番上のcommitのIDはHEAD上から2番目はHEAD^)

git reset --hard <commitID> 



ブランチ

現在いるブランチを確認

git branch 


新しいブランチを作成

git branch <ブランチ名> 




ブランチを変える

git checkout <ブランチ名> 




ブランチを作成した上で作成したブランチに変える

git branch -d <ブランチ名> 


ブランチを混ぜる

git marge <ブランチ名> 


タグ

commitIDに名前をつける(commitIDを書かなかった場合HEADのcommitにタグが付く)

git tag <tagname> <commitID> 


使用してるtagの確認

git tag 


タグの削除

git tag -d <tagname> 


Remote

※共同リポジトリのフォルダは.gitをつける

共同リポジトリへの道を作成(アクセス名の通例はorigin)

git remote add <アクセス名> <共同リポジトリのパス> 


共同リポジトリにpush

git push origin <ブランチ名>


Aの内容をBにコピー

git clone <フォルダA> <フォルダB> 


共同リポジトリのブランチをいただく

git pull origin <ブランチ名>


Atomの設定をMacからWindowsへ共有

macOSで構築したAtomの環境設定をWindowsOSでも使えるようにしたのでその備忘録。

MacBook Air(バージョン10.11.6)で作成した環境設定を、
Windows10 Exterpriseに引き継ぐ。

なお、GItHunアカウントは作成している前提で話を進める。

やったこと

共有の方法としては、シンボリックリンクや「apt star」コマンドを用いる方法などもあるらしいが、
今回は、Atomプラグインである、「sync-settings」をインストールした。
このプラグインは、Atomの設定をGitHub経由で他のコンピュータと同期させることができるらしい。

環境構築

sync-settingsインストールからWindowsOSへの同期までの流れを書いていく。

インストール

Atomの設定画面を開き、「Install」からsync-settingsをインストール

f:id:okuya-KAZAN:20170428174543p:plain


Gist IDとGitHub personal access tokenを設定しろと怒られたので、早速設定する。

f:id:okuya-KAZAN:20170428174843p:plain

GitHubの設定

GitHubにログイン -> 「settings」 -> 「Personal access tokens」 -> 「Generate new token」
という感じで進む。
この、Personal access tokensというのは、Atom側がGistへアクセスする権限のようなものらしい。

f:id:okuya-KAZAN:20170428180741p:plain
f:id:okuya-KAZAN:20170428180750p:plain
f:id:okuya-KAZAN:20170428184144p:plain

「Token description」に、適当な文章を入れ、
「Select scopes」は「gist」のみチェックを入れ、
「Generate token」を選択。
作成されると、英語で「パーソナルアクセストークンをすぐにコピーしろ!これは2度と表示されないぞ!」的な警告が出てきたので、急いでトークンをコピー。
そして、先ほどインストールしたsync-settingsの設定画面の「Personal Access Token」にペーストする。
f:id:okuya-KAZAN:20170428184552p:plain

続いて、GistIDの設定。
GitHubにログイン -> 「Gist」
と進む。
Gist descriptionには何も入力せず、
「Name this file」とテキストには適当な文字を入れ、Create secret Gistボタンを押す。

f:id:okuya-KAZAN:20170428185109p:plain


遷移した画面のURLからgistのID("ユーザー名/"の後に続く英数字部分)をコピーし、
Atomのsync-settings設定画面のGist idにペースト。
f:id:okuya-KAZAN:20170428185200p:plain

同期

共有される側の準備

共有先のOSのAtomでもsync-settingsをインストールし、settingsを開き、先ほど手に入れた、パーソナルアクセストークンとGistIDをペーストする。

設定のアップロード
  • [Ctrl]+[Alt]+[u]
  • コマンドパレットにて「Sync Settings: Backup」を実行
  • 上のメニュバーから、[Packages] -> [Synchronize Settings] -> [Backup]

上記のいずれかをすると、設定をアップロードすることができる。
アップロード完了後、
このようなメッセージが出てきた。

f:id:okuya-KAZAN:20170428191023p:plain


Gistを開き、アップロードされた設定を確認
f:id:okuya-KAZAN:20170428191201p:plain

設定のダウンロード

Gistにバックアップしてる環境設定を、別環境に共有する。
※ダウンロード中はAtomが固まるので他のプロセスが行われていない時にダウンロードすると良いとのこと

  • [Ctrl]+[Alt]+[d]
  • コマンドパレットにて「Sync Settings: Restore」を実行
  • 上のメニュバーから、[Packages] -> [Synchronize Settings] -> [Restore]

上記のいずれかをすると、設定をダウンロードすることができる。

しばらくするとAtom上に通知が来た。
f:id:okuya-KAZAN:20170428191656p:plain

通知が来てからAtomを再起動すると、設定やパッケージが同期されている!素晴らしい!!

WindowsのAtomでC++

最近C++のコードを書くことが増えてきたので、開発環境を整備した。

やったこと

Windows上でC++を使うためにコンパイラをインストールした
Atom上でC++で開発できるようにした

環境

Windows10 Enterprise

C++の環境整備

手順としては、
1.MingGWをインストー
2.インストールしたMingGWを開く
3.そこからコンパイラー(gcc)をインストー

MingGWをインストー

ダウンロードサイトに進み、右にある
「Download Installer」をクリック。
すると、「sourceforge」というサイトにサイトに飛び、インストーラーがダウンロードできる。
あとは、ダウンロードされたexeファイルを起動してポチポチ進める。

コンパイラー(gcc)をインストー

インストールしたMingGWを使ってgccをインストールする。
まずはMingGWを起動。
f:id:okuya-KAZAN:20170427162836p:plain
「BasicSetup」を選択し、画像のようにチェックを入れる。
選択が終われば「Installation」「Apply Changes」と進む。
これでコンパイラーであるgccがインストールされた。

インストールされたかをチェックするには、コマンドプロンプトで、

gcc --help

と入力。

f:id:okuya-KAZAN:20170427163434p:plain
こんな感じで出力されたらインストールできている。

f:id:okuya-KAZAN:20170427163839p:plain
無事動いた!


Atom上でC++で開発

インストールしたAtomのパッケージは以下
•gpp-compiler -> Atom上でC++コードのコンパイル、実行を行ってくれる
•linter-cpplint -> C++の文法をチェックしてくれる

そして作成していたC++コード上で[F5]を押すと...

f:id:okuya-KAZAN:20170427164336p:plain
 良い感じ!!

追記

[F5]で、
Compile and Run
[F6]で、
Compile and Debug.
らしい

※language-cpp14について
今回、C++コードの補完を行ってくれるlanguage-cpp14というプラグインもインストールしたところ、
f:id:okuya-KAZAN:20170427164547p:plain

こんな感じで、gpp-compilerが使えなくなった...
ググってみると、

f:id:okuya-KAZAN:20170427164655p:plain
とのことだ(https://github.com/kriscross07/atom-gpp-compiler/issues/46より)
そこで、このlanguage-cpp14をアンインストールすると、
再びコンパイルできるようになった。

Bash on Ubuntu on Windows + Anaconda + Atom

Bash on Ubuntu on WindowsにAnacondaを入れてPython環境を構築した上で、
Atom上で使えるようにした。

環境はWindows10 Enterprise 64ビット

参考にさせていただいたサイトはこちら
Bash on Ubuntu on Windows(BoW)のインストール
Bash on Ubuntu on Windowsが楽しい! - Qiita
Bash on Ubuntu on Windowsの設定 - Qiita

Bash on Ubuntu on WindowsにAnacondaを入れる
Bash on Ubuntu on WindowsでTensorFlowを使うためのメモ - Qiita
Bash on Ubuntu on Windowsをインストールしてみよう! - Qiita

作り上げたBashAtom上で使う
Bash on Ubuntu on Windows+Atomで開発環境を整えてみる | Linuxとかプログラミングとか。


Bash on Ubuntu on Windows(BoW)のインストール

まずはBoWのインストール、環境構築を行う。 

開発モード有効化

「スタート」メニュー -> 「設定」 -> 「更新とセキュリティ」
って感じで進み、左側にある、開発者向けタブを選択。

開発者モードのラジオボタンを選択。パスワード認証を行い有効化完了。

f:id:okuya-KAZAN:20170426164711p:plain


WSL(Windows Subsystem for Linux)のインストール

「コントロールパネル」→「プログラム」→「プログラムと機能」→「Windowsの機能の有効化または無効化」→Windows Subsystem for Linux (Beta)にチェック

f:id:okuya-KAZAN:20170426165050p:plain
再起動が要求されるのでそれに従って再起動。

bashの実行

スタートメニューから「bash」実行するか、
管理者コマンドプロンプトbashと打つことによって実行開始。

「ベータ機能がなんたら」「 ライセンス条件がなんたら」
みたいな表示が出た後に、

続行するには、”y”を入力してください

と出るので、[ y ]を押し続行。
すると、Ubuntuのダウンロードが開始される。

ダウンロードが終了すると、

UbuntuロケールWindowsロケール(ja-JP)と一致するようにせってしますか?  既定のロケールは en US です。 続行するには、”y”を入力してください

と出た。
もちろん日本語で使用したいので、[ y ]を入力し、続行。

その後、BoW独自のユーザ名、パスワードを要求されるので入力。
必ずしもWindowsのものと一緒にする必要はないらしい。 これで準備完了。
次回以降は、「スタート」メニューにある、 「Bash on Ubuntu on Windows」から起動することができた。

初期環境設定

ホスト名の明記

これをしないと、sudoで実行する度に、
f:id:okuya-KAZAN:20170426165626p:plain
と出て、以降の作業が名前解決の関係上すごく時間がかかる。
Bash on Ubuntu on Windows上で、

sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'

と打つことで解決した。

リポジトリの変更

初期設定では海外サーバーにリポジトリのデータを取りに行ってしまい、通信速度が遅くなってしまうらしいので、リポジトリの取得先を日本のサーバーに切り替える。
以下のコードを入力すればOK。

sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.lis
Ansibleのインストール
Playbookを作成
Ansible実行
ホームディレクトリの変更

デフォルトのホームディレクトリは、
C:\Users\(Widowsユーザー名)\AppData\Local\lxss\home\(Ubuntsユーザー名)
なのだが、アクセスしにくいので変更した。

sudo vi /etc/passwd 

で、viを開いて、

username:x:1000:1000:"",,,:/home/username:/bin/bash 

username:x:1000:1000:"",,,:/mnt/c/Users/username:/bin/bash 

などに変更。
(この「mnt」がわからずなかなか、Windowsの中に入り込めなかった...)

ここですぐにbashを閉じない方が良い。
.bashrcなどの設定ファイルを変更後のホームディレクトリにコピーしておく必要がある。
>||
cd ~ cp -p .* /mnt/h/home/
|

のようにして、「.bash_logout」、「.bashrc」、「.profile」などを新しいホームディレクトリの配下にコピー。

bashをexitで終了させて、再度スタートメニューから「Bash on Ubuntu on Windows」を起動すれば、ホームディレクトリが変更されているはず。

f:id:okuya-KAZAN:20170426170915p:plain


メンテナンス

適宜アップデート
sudo apt update
sudo apt upgrade 
適宜bashの再インストール

環境がぐちゃぐちゃになったら、さくっと消して作り直すのが良いらしい。
管理者コマンドプロンプトで、

lxrun /uninstall /full

を実行し、続いて

lxrun /install 

を実行する。

パッケージのインストール

どんどんパッケージを入れていくぞ!と意気込んで、

sudo apt install git

と入力するも、

f:id:okuya-KAZAN:20170426171625p:plain
と、エラーが出た...
パッケージリストが古いことが考えられるので、

sudo apt-get update

でパッケージリストを更新すればOK。

Git
sudo apt install git 
gcc
sudo apt install gcc 

早速実行。
f:id:okuya-KAZAN:20170427165857p:plain

vim
sudo apt install vim-nox
||< 

***LaTex 
>||
sudo apt install texlive-full

Bash on Ubuntu on WindowsにAnacondaを入れる

Bash on Ubuntu on WindowsにAnacondaを入れた。
まず、pyenvを入れて、そこからAnacondaを入れるという方法をとる。

pyenvのインストール

Gitは入っている前提。

git clone https://github.com/yyuu/pyenv ~/.pyenv

pyenvのパスを通す

vim ~/.bashrc

で.bashrcを開き、1番下に

echo 'export PYENV_ROOT="$HOME/.pyenv"'
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' 
echo 'eval "$(pyenv init -)"' 

を追加。
最後に

source ~/.bashrc

と打つか、bash再起動。

Anacondaのインストール

pyenv install --list

で、最新版のAnacondaをチェックし

pyenv install anaconda2-4.3.1

などでインストール(今回は諸事情でAnaconda2とした)。

ちゃんとインストールされたかは、

pyenv versions

で、確認。

f:id:okuya-KAZAN:20170426184130p:plain
うん、ちゃんと入っているようだ。
しかし、このままだと、使用するPythonがsystem(システムにデフォルトでインストールされているもの)になってしまうので、
インストールしたanaconda2-4.3.1に環境を変更する。

pyenv global anaconda2-4.3.1

これでまた、

pyenv versions

で確認してみると、

f:id:okuya-KAZAN:20170426184452p:plain
環境が変わったことがわかる。

環境変更後は必ず、

pyenv rehash

これを実行。
1回これを忘れて、Anaconda内のPythonが使えない事態になったので要注意。

あとは、このAnacondaの環境にpipやcondaを使って必要なライブラリを入れていけばOK!!!


作り上げたBashAtom上で使う

Anacondaを入れたBoWをAtomで使えるようにした。
まずは、Atomプラグインである「platformio-ide-terminal」をインストール
詳細はこちら
インストールが完了したら、
「packages」 -> 「platformio-ide-terminal」 -> 「設定」と進み、
「Shell Override」を

C:\Windows\System32\bash.exe

に変更。
このbashのパスはパソコンによって変わる可能性があるので注意。



結果

f:id:okuya-KAZAN:20170426190821p:plain
とりあえず完成...

ここで注意が必要なのだが、
Atom上で開いたbashは、矢印キーによる操作ができない...
代替コマンドはこちらなのだが身に着けるのが面倒だな...

↑:[Ctrl]+[ p ]
→:[Ctrl]+[ f ]
↓:[Ctrl]+[ n ]
←:[Ctrl]+[ b ]

Atomのショートカットキー

 

okuya-kazan.hatenablog.com

⇧これの続き。

今回は自分のよく使うショートカットをメモしておく。 

 

なお、環境はMacBook Air(バージョン10.11.6)なので、Windowsには当てはまらない。

デフォルトのショートカットキー

これらは、特にパッケージをインストールしなくても最初から使えるショートカットキー

キー 動作
[Command]+[ t ] フォルダ内のファイルの検索
[Command]+[ w ] タブを閉じる
[Command]+[ , ] Settingsを開く
[Command]+[ \ ] ToggleTreeの表示、非表示
[Command]+[ { ] or [ } ] インデント
[Command]+[Shift]+[ p ] コマンドパレッドを開く
[Command]+[Shift]+[Alt]+[ [ ] 折りたたみ(]で展開)
[Command]押しながらクリック マルチカーソル
[Ctrl]+[ g ] 行の移動
[Ctrl]+[ m ] 対応するかっこへ移動
[Ctrl]+[Command]+[ m ] 対応するブロック全選択
[Ctrl]+[Shift]+[ k ] カーソル行の削除
[Ctrl]+[Shift]+[ d ] カーソル行の複製



単語を選択した状態で
キー 動作
[Command]+[ d ] ファイル内にある、選択した単語と同じ単語を選択
[Command]+[ u ] ファイル内にある、選択した単語と同じ単語の選択を解除
[Command]+[ u ] 同じ単語の選択をスキップしする
[Command]+[Ctrl]+[ g ] ファイル内にある、選択した単語と同じ単語を全て選択

 

プラグインのショートカットキー

これらは、プラグインを使う時のショートカットキーとなるため、必要なプラグインをインストールする必要がある。

プラグインの詳細については、こちらに記述している。

 

キー 動作 必要なプラグイン
[Ctrl]+[Alt]+[ b ] コードの整形 atom-beaty
[Ctrl]+[Alt]+[ o ] Atom内でブラウザの起動 blowser-plus
[Ctrl]+[Shift]+[ h ] HTMLドキュメントのプレビューを表示 atom-html-preview
[Alt]+[ ↓ ] or[ ↑ ] 一度に移動 line-jumper
[Alt]+[Shift]+[ ↓ ] or[ ↑ ] 一度に数行選択 line-jumper
[Ctrl]+[ r ] Scriptの実行([Ctrl]+[Shift]+[c]でkill) atom-runner
[Ctrl]+[Alt]+[ b ] コードの整形 atom-beauty
[Ctrl]+[Command]+[ p ] project-managerで登録しているプロジェクトを表示 project-manager
[Ctrl]+[ ` ] ターミナルを表示 platformio-ide-terminal
[Command]+[Shift]+[ t ] 新しくbashを作成 platformio-ide-terminal
[Command]+[Shift]+[ j ] アクティブにするbashを変更 platformio-ide-terminal
[Command]+[Shift]+[ x ] アクティブなbashを閉じる platformio-ide-terminal
[Command]+[Shift]+[ c ] カラーパレッド起動 color-picker
[Command]+[Enter] 選択行の実行 Hydrogen
F5 C++コードのコンパイル、実行 gpp-compiler