ErgodoxでMomentキーを使っていて困った話

Ergodoxを使っていて悩まされていたことが解決したのでメモ.
ErgodoxのMomentキー(以後Moキー),便利ですよね.
Moキーを押している間だけ別のレイヤーにすることができるので,普段私は記号や矢印キーのレイヤーと文字入力のレイヤーの切り替えにMoキーを使っています.

そんな中以下の現象に遭遇して長らく困っていたのですが,本日解決したのでメモしておきます.

現象:長押しでSHIFTに切り替わるキーを押した状態でMoキーを押し,先にMoキーを離すとその後にSHIFTキーから指を離してもSHIFTキーが押しっぱなしになる.※切り替え後のレイヤーではSHIFTに位置する場所には別のキーが設定されている

キーの設定をコードで表すと以下.

[BASE] = KEYMAP(
    MO(SYMB),
    SFT_T(KC_BSPC), ...
),

[SYMB] = KEYMAP(
    KC_TRNS,
    KC_DELT, ...
)

この状態でMoキーを先に離すとSHIFTが押しっぱなしと判定され,解除するには長押しSHIFTキーを押した状態で何か他のキーを入力しなければなりませんでした.

解決策:SYMBレイヤーも同じように長押しSHIFTキーを設定してあげる

[BASE] = KEYMAP(
    MO(SYMB),
    SFT_T(KC_BSPC), ...
),

[SYMB] = KEYMAP(
    KC_TRNS,
    SFT_T(KC_DELT), ...
)

上記コードにすると現象は発生することがなくなり,解決することができました.
Moキーを離すと実際にキーが押されているかどうかに関係なくSHIFTが押されたままになるのはなかなか厄介なものです.ドキュメントなどを読んでも切り替え後のレイヤーのMoキーに位置する場所はTRNSでなければならない,ということしかわからなかったのでなかなか手強かったですね.

何かこのことについて知識をお持ちの方がいらっしゃったら教えてくださるとうれしいです.

nginxでtry_filesする際に=xxxがあるとrailsアプリにリダイレクトさ

nginxのサイト設定で以下のように書くと

location /zzz {
  alias ...;
  try_files $uri @rails_unicorn =404;
}

location @rails_unicorn {

}

@rails_unicornの設定が正しくても404ページの表示に移行してしまうようだ.
そういうものなのか,別の原因があるのかは不明.どうしてこういう挙動なのだろう?

後,同じサーバの場合はlocationは同じファイルに書いたほうが良いっぽい,
みたいな知見も得た.これも何かよくわかってない感じだ.
できればサイトごとにファイルを分けたい気分だけど,例えば

# a.setting
location /
{
}
# b.setting
location /foo
{
}

という2つのファイルがある時, /fooの方には一切入っていかずにa.settingの/以下のlocation設定ですべて処理されてしまう.
同じ階層のディレクトリ名同士なら別ファイルにすることは可能なのだろうか?(だとすれば ある階層下の設定は1つにまとめる,という方向がよさそうな気がする)

numpyのxor

numpyにはxorを計算する関数が用意されている

使い方は
logical_xor( condition1, condition2)
(condition1, condition2はTrueになる条件)
return valueは計算したあとのオブジェクト.下の例の場合は配列が返ってくる

import numpy as np

if __name__ == '__main__':
    data = np.random.randn(10, 2)

    # 排他的論理和作成
    xor = np.logical_xor(data[:, 0] > 0, data[:, 1] > 0)
    xor2 = ((data[:, 0] >= 0) & (data[:, 1] < 0)) | ((data[:, 0] < 0) & (data[:, 1] >= 0))
    print(xor)
    print(xor2)

# output
# [ True  True  True False  True False  True False False  True]
# [ True  True  True False  True False  True False False  True]

手書きで書いたxorともちろん結果は一致する.
他の論理演算も用意されているみたい.

Python機械学習プログラミング.メモ

2.4, 2.5 ADALINE, 2.6 確率的勾配降下法

  • ADALINEはコスト関数を用いることでパーセプトロンのステップ関数とは違い,連続値を出力.
  • classfyする時は連続値をある値で区切って量子化(0 or 1)する.
  • 連続値を出力すると微分できるので重みの更新する方向がわかるのがメリット
  • ADALINEはデータセットのサンプル全体からコストを計算して重みを更新.パーセプトロンはデータセットの1回1回のサンプルで重みを更新.

ADALINEはデータセットが大きいと計算コストが大きくなる→そこで,パーセプトロンと同様に1回1回のサンプルで更新しなおかつコスト関数を用いる確率的勾配降下法(Online学習)というものを用いる.確率的勾配降下法は更新頻度が多いため,遥かに高速に収束する.
→疑問:ADALINEの特徴はどちらかというとコスト関数? オンライン学習は出てくるサンプルの順番に影響されやすく,ADALINEの全体を使った更新はデータセット全体の影響を受けやすい?(ただし順番の影響を受けない)のだろうか?

pyenvでpythonをインストールする時にはまったのでメモ

Qiitaの記事を参考にpyenvを導入してみたものの変なところで
躓いたのでメモ.単にowner設定が間違っていただけの話.
pyenvインストール後は~/.pyenv下のフォルダのownerをrootからユーザに変えておきましょう
(pythonインストール時にmkdirなどが権限の問題で失敗する).

最近環境構築の機会が増えてきた.積み木楽しい:-)
github:
config_and_settings_etc/setup_pyenv at master · hitoyozake/config_and_settings_etc · GitHub

good night.

Bash on Ubuntu on Windowsを試したメモメモ

Windows 10 Redstone1がついに正式公開されました.
アップデートの目玉はやっぱりBash on Ubuntu on Windowsではないでしょうか.個人的に一番楽しみにしていたアップデートでしたのでいろいろと試してみたメモを書いておきます.

まず設定すること

tabキーの補完などを行う時に毎回Windowsが音を鳴らすので煩い
Windowsの音量ミキサーを開いてConsole Window HOstだけミュート設定にする

追記(@ 2016/10/29)
vim ~/.inputrc

#~/.inputrc内
set bell-style none

を書くことで設定読み直し後に音が消えるようになります(上のミキサーの設定は不要)

VNCServerでGUI

Qiitaの記事を参考に設定.
工夫したこと:日本語フォントが入ってなくて文字化けしたので以下をインストール
sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big


SSHクライアントとして使ってみる

ssh username@XXX.XXX.XXX.XXX [-p password] [-i keyname]
秘密鍵,パスワード認証ともに動きました.

SSHDを動かしてみる

sudo apt-get install openssh-server
した後,/etc/init.d/ssh start後
/etc/ssh/sshd_configの設定(privilege separationの設定やpassword authentication の設定がちゃんとできているかをお忘れなく)

どうやらbashを起動しないとサービスも立ち上がってくれないみたいなので地味に面倒.スタートアップ登録してバックグラウンドで動かしてみると良いかもしれない.

Tensorflowを入れてみる

入ります.
が,GPU版でGPUを使用して動かすのは私の技術力では無理でした.
カーネルのソースツリーが手に入らないためnVidiaGPUのドライバをインストールできませんでした.nvidia-currentなどのドライバでもGPUをdetectしてくれません.CPUでは動作します.
結局のところBash on Ubuntu on Windows自体がLinuxシステムコールなどをWindows用のシステムコールに変換しているそうなので,カーネル部分のソースが必要なドライバ関連は入れることはできないのではないか,と思っています.でも,入れられるようになってほしいですね.将来に期待です.

管理者権限でBashを起動する

pingなど一部機能は管理者権限でbashを起動してあげないと例えsudoでもdenyされてしまいます.

ifconfigが無い

無いみたいです.

Windowsのドライブにアクセスする

/mnt/c/...
/mtn/d/...
などでアクセス可能でした.

以上,メモでした.おおよそubuntuっぽく動いてくれるので,なかなかおもしろいですね,暇な時にいろいろと触ってみたいと思います.

VisualStudio2015とgitの連携を試してみる

VisualStudio2015がgitと連携できるので使ってみた(実は結構前から使えるようになっていたのだけれど,githubリポジトリを設定したら起動がめちゃくちゃ遅くなったので止めてた.今はそんなことは無いみたい).

やったこと

既にローカルにあるリポジトリをコミットしようとした

チームエクスプローラからgithubに接続.
既にローカルにある(cloneしてきた)リポジトリおよびその中にあるソリューションファイルを開いて編集し,チームエクスプローラーからコミットしようとしたらできなかった.

チームエクスプローラからcloneしてから,変更をコミットしてみる

VisualStudioを起動してチームエクスプローラからcloneし,続いてチームエクスプローラからcloneしてレポジトリに含まれるソリューションファイル(sln)を開いた.すると,変更をコミットできるようになった.

ここでトラブル

コミットしようとボタンを押すも

Could not opne '~.opendb': プロセスはファイルにアクセスできません.別のプロセスが使用中です,

とエラーが出てコミットできなかった.ちなみにリポジトリを開いているプロセスはVisualStudio2015のみであった.
そこで,チームエクスプローラより設定->リポジトリ設定->無視ふおよび属性ファイルの無視/.gitignoreの隣にあるボタンと属性ファイル.,gitattributesの隣にある"追加"ボタンを押した.これによりコミットが可能になった.

コミット後

コミット後は1コミットごとのdiffをVisualStudio内で見ることが可能.なかなか見やすい.

pushの方法

pushはチームエクスプローラ->同期
から行うことができる.同期では他にもfetch, pullなどの操作も可能.

コミットが変更,pushが同期の中にあるので若干ややこしい気がした.

※20160811追記.”変更と同期”を選択するとcommitとpushが可能になることが判明

最後に

なかなか便利で良いと思います.
まぁ,1つのウインドウですべてができるのはさすがIDEといったところだけれども,まだCUIでコマンドを直打ちしたりtortoise gitを使ったほうがやりやすい気がした.今後Ubuntu on Windows10が出てきたらどうなるのだろう.

以上,メモでした.