備忘録とか日常とか

学んだこととかを書きます。

Visual Studio Codeの拡張とか初期設定とか

約一年半の沈黙を破り更新。
いや沈黙というか普通にサボってただけなんだが・・・

社会人になってもコンスタントに更新できるだけの気力があるかどうかはわからない。
でもできるだけ勉強したこととかを更新していきたい


エディタの話。最近Visual Studio Codeに乗り換え、いい感じなので初期設定などをメモしておく。


自分は最初Sublime textを使ってたが、拡張の設定などが煩雑であまり好きになれなかった。
あと「これ無料版やで!気に入ったら買ってや!」っていうポップアップも地味に鬱陶しかった。。
なのでAtomに切り替えたのだが、拡張を入れていくとかなり重くなってしまい、ついにイライラがピークに達したのでリストラした。


VSCode

  • 拡張を入れても十分軽い
  • gitやターミナルにデフォルトで対応
  • デバッグ機能も最初から搭載

と、かなり使い勝手が良い。
というか最初からある程度の機能が備わっているので、拡張を入れずともそこそこ使えるのである。
それがVSCodeの魅力とも言える。

逆に不便に感じたことは

  • 複数プロジェクトを同時に開けない
  • たまにauto formatが効かない(OS依存?)

などがある。
異なる場所にあるディレクトリをサイドバーで同時に開く機能がVSCodeにはないらしい。
シンボリックリンクを使う方法もあるようだが、まあデフォで対応してくれたらその方が嬉しい。
あとubuntuで使用してる時にpythonのauto formatが効かない時がある。
これに関してはよくわからん。誰か直してくれ(他力本願)


とまあ色々あるがいい感じなので初期設定をメモしておく。
当方現在はpythonがメインなのでpython系の拡張が多いです。

拡張

Atom Keymap

その名の通り、Atomキーバインドをそのまま持ち込める。
もちろんVSCode内でキーバインドをカスタムすることもできるが、他のエディタに慣れた人ならそのまま使えるのが良い。
Sublime Text Keymapもありますよ。

Shortcuts

画面下のステータスバーにターミナルなどのショートカットを追加する。
あんま使わないけどあったら便利か?

Linux Themes for VSCode

テーマが追加される。
デフォルトではなんとなく好きじゃない配色ばかりだったので、これは気に入っている。

file-icons

サイドバーのアイコンが変わる。
いっぱい種類があるので調べて見ると楽しいかも。

LaTeX Workshop

latexがビルドできるようになり、pdfファイルをvscode内のtabで表示できる。
pdfはブラウザでも表示できる。
シンタックスハイライトやオートフォーマットも追加される。便利。
詳しくは以下
qiita.com
VSCode でLatexの日本語環境を作る · GitHub

Project Manager

プロジェクトを切り替えるコマンドを追加できる。
上述の通り、VSCodeではサイドバーで異なる場所にあるディレクトリを同時に開くことができない。
代案としてこの拡張を使えば、同時には開けないが切り替えはスムーズにできる。

Python

とりあえず入れた。シンタックスハイライトやらスニペットやらが追加される。
この中でも`Python`はpythonでコーディングするなら必ず入れる。lintとCode formatが使えるので便利

Setting Sync

非常に便利。gistを使って複数の端末で設定を共有できる。
利用するにはGithubアカウントが必要になる。利用方法は以下を見ればわかりやすい
marketplace.visualstudio.com

設定

Macなら設定ファイルは`/Users/ユーザー名/Library/Application Support/Code/User/settings.json`に書かれているが、
VSCode⌘ + ,GUI的に設定できる。windowslinuxならctl+,だと思う

ここに設定を書き込むわけだが、検索して変えたい設定をクリックするだけで設定ファイルに自動で記述される。
例えばエディタ内のルーラの位置を変えたければ、検索窓にrulersとか入れて出てきた設定を選択すればよい。
拡張の設定もここで変えられる。

以下に自分の設定をのせとく
【18/2/1 更新】

{
    "editor.multiCursorModifier": "ctrlCmd",
    "editor.formatOnPaste": true,
    "editor.renderWhitespace": "all",
    "python.linting.pylintEnabled": false,
    "python.linting.pep8Enabled": true,
    "editor.wordWrap": "on",
    "editor.rulers": [
        80
    ],
    "[python]": {
        "editor.rulers": [
            79
        ]
    },
    "editor.formatOnSave": true,
    "[latex]": {
        "editor.formatOnSave": false
    },
    "latex-workshop.latex.toolchain": [
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "pbibtex",
            "args": [
                "%DOCFILE%",
                "-kanji=utf8"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        }
    ],
    "latex-workshop.latex.autoBuild.onSave.enabled": false,
    "editor.renderControlCharacters": true,
    "workbench.startupEditor": "newUntitledFile",
    "workbench.activityBar.visible": true,
    "python.linting.mypyArgs": [
        "--errors-only"
    ],
    "python.formatting.autopep8Args": [
        "--errors-only"
    ],
    "workbench.colorTheme": "Adapta Nokto",
    "window.title": "${activeEditorLong}",
    "sync.gist": "2adb76066f632f1f22a2798c7d57e1c2",
    "sync.lastUpload": "2018-02-01T03:57:43.855Z",
    "sync.autoDownload": false,
    "sync.autoUpload": false,
    "sync.lastDownload": "",
    "sync.forceDownload": false,
    "sync.anonymousGist": false,
    "sync.host": "",
    "sync.pathPrefix": "",
    "sync.quietSync": false,
    "sync.askGistName": false,
    "editor.minimap.showSlider": "always",
    "workbench.iconTheme": "file-icons",
}

メモしておくと、

  • `Python`拡張はデフォルトでpylintを使うが、自分はpep8派なので以下の記述を加える
"python.linting.pylintEnabled": false,
"python.linting.pep8Enabled": true,
  • pep8でwarningとerrorの箇所を示してくれるが、warning山ほど出すぎてしんどいのでとりあえずerrorだけ表示するように設定
"python.linting.mypyArgs": [
        "--errors-only"
    ],
    "python.formatting.autopep8Args": [
        "--errors-only"
    ],
  • latex関係を導入。
    "latex-workshop.latex.toolchain": [
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "pbibtex",
            "args": [
                "%DOCFILE%",
                "-kanji=utf8"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        }
    ],
    "latex-workshop.latex.autoBuild.onSave.enabled": false,

toolchainを指定することでbibtexファイルとかを一発でビルドしてくれる。詳しくは上述のサイト。

ついでにlatex-workshop.latex.autoBuild.onSave.enabledをtrueにすると保存時に自動ビルドされる。デフォルトでtrueになっているが煩わしいのでfalseにした

  • 保存時にオートフォーマットする。この機能がAtomの拡張より格段に軽くて使いやすい。
"editor.formatOnSave": true,
  • ウィンドウのタイトルバーにカレントディレクトリのパスを表示。
"window.title": "${activeEditorLong}"
  • 言語ごとに設定を変えることができる。pep8は79文字制限があるので、pythonの時はルーラを79文字の位置にする
 "[python]": {
        "editor.rulers": [
            79
        ]
    },

また自分のlatexファイルはぐっちゃぐちゃなのでもはや我流で行きたい。latexでは切る。

"[latex]": {
        "editor.formatOnSave": false
},

latexでオートフォーマットするにはlatexindentというツールを導入する必要がある。
以下のサイトでなにかわかるかもしれない。
tex.stackexchange.com



Setting Sync使えばこれも自動でバックアップされるのでメモする意味もないかもしれないが一応。
今後VSCodeがもっと栄えてくれると嬉しい。

Windowsノート グラフィック設定を電源接続時と同じにする

所持していた古いノートPCにWindows10をクリーンインストールしたところ,
グラフィック設定が変わってしまったのでメモしておく.
具体的には

  • 電源に接続すると,一瞬画面が暗転して元の画面に戻る
  • 電源接続時はぬるぬる動くのに,バッテリー駆動時はなんかカクカクする(リフレッシュレートが変わっている)
  • 背景が暗いページを表示すると画面輝度が暗くなる.明るいページだとまた明るくなる

のような症状が現れた.
一応直し方をメモしておく.


環境
TOSHIBA dynabook R731(古い)
windows10 pro をクリーンインストールしたところ,
Intel(R) HD Graphics 3000 が自動で取得された.


リフレッシュレートを設定

インテルのグラフィックプロパティを立ち上げ,
「電源」-> 「バッテリー駆動」から
「ディスプレイ リフレッシュレートの切替」のチェックを外す.

「ディスプレイ」-> 「一般設定」の
リフレッシュレートを 60Hz に設定する

これで電源を抜き差しするたびに画面が暗転することはなくなり,
かつバッテリー駆動時でもぬるぬる動くようになる.


画面の輝度調整を無効

同じくインテルのグラフィックプロパティから,
「電源」-> 「バッテリー駆動」から
「ディスプレイ省電力テクノロジー」のチェックを外す.

かつ「バッテリー駆動」「電源接続」の両方の電源プランを
「最長バッテリー駆動時間」に設定する.


これで画面輝度が一定になる.
ならない場合はコントロールパネル -> 電源オプション -> プラン設定の変更から
「詳細な電源の変更」を開き,「ディスプレイ」->「自動輝度調整を有効にする」をオフにする
これでたぶんいける

バッテリー駆動時と電源接続時で画面輝度を変えたくないなら
「ディスプレイの明るさ」からそれぞれ同じ輝度に設定しておく



とりあえず電源回りは解決したけど
根本的にスペック足りてないしなこれ

新しいPC欲しいなぁ...新型macbook air早く出ないかなぁ...

Deeplearningライブラリ「Keras」でつまずいたこと

DeeplearningライブラリのKerasを使っているときにはまったことをいくつかメモ。
ほぼ自分用かもしれない


今までTheanoを使ってアルゴリズムの勉強かついろいろ実験していたのだが、
勉強にはなるものの一から新しいアルゴリズムを実装するのはなかなかしんどいので
Theanoのラッパーとして使えるKerasを使ってみた

他にも色々あるっぽいけど評判良さそうなので。。
そのうち浮気するかもしれん


ちょっと使って見たところ、何個か細かい点でつまずいたのでメモしておく。
バックエンドはTheanoしか使っていないのでTensorflowについてはわかりません

ラベルはバイナリベクトルで扱う

まずこれ。
keras.datasetsからmnistなどのデータセットを取ってこれる。
mnistの場合だと以下

import keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()

mnist.load_data()の戻り値はタプル*2

Xは(n_samples, row, column)という形のnp.arrayで、
yは0~9のint型の数値を持つ(n_samples,)という形のnp.arrayとなっている
Kerasはラベルを数値ではなく、0or1を要素に持つベクトルで扱うらしい
つまりあるサンプルに対するターゲットを「3」だとすると

[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

みたいな感じにしなければならない。

これは以下のように解決できる。

from keras.utils import np_utils
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)

(n_samples, n_classes)というnp.arrayがそれぞれのyに代入される。

入力データは[0,1]の範囲に正規化しなければならない

これが一番わかりにくかった
mnistの場合だと,まず入力データはint型になっているので変換する
その後画素値の最大である255で割り算しておく

X_train = X_train.reshape(X_train.shape[0], 28, 28).astype("float32")
X_train /= 255.0

こうしないと一向に学習が進まない。
Theano使ってるときは特にこういった処理はしなくても学習できたので
判明するまで丸二日くらいかかった

ドキュメントのわかりやすいとこに書いといてほしいです。。

poolingのフィルタがはみ出る場合は端っこのピクセルを無視する

細かい点だけど。
Theanoでプーリングを行う場合はtheano.tensor.signal.poolを使うのだが
フィルタサイズやストライドに加えてignore_borderという引数をとる。
これは例えばフィルタサイズ(3,3)、ストライド(2,2)みたいな設定にしたときに、
特徴マップの端でフィルタがはみ出した場合の扱いを決定する引数である。
図の例↓

f:id:may46onez:20151221223401p:plain

ignore_border=Trueとすると、はみ出た分のプーリングは行わない
つまり上図の例だと出力の特徴マップは(2,2)となる

この引数が、TheanoのデフォルトではFalseになっているのが
KerasだとTrueになっている

あまり性能に影響は出ないと思われるが、特徴マップのサイズがあまりにも小さくなりすぎると
認識率が落ちることが(自分の経験では)多々あったので
自分でネットワーク構造を考える場合は気に留めといたほうがいいかもしれない。

シークバー処理中にValueErrorを吐かれる

Kerasのいいところの一つに、学習状況などをシークバーでお知らせしてくれる機能がある
こんなの↓

Epoch 1/20
60816/60816 [==============================] - 19s - loss: 0.1665 - acc: 0.9597 
Epoch 2/20
31200/60816 [==============>...............] - ETA: 8s - loss: 0.1583 - acc: 0.9612

あとどれぐらいで学習が終わるか、lossがどれぐらい減少しているか、
学習データに対する認識率はどうか、
validationセットを指定した場合はそれに対する認識率もリアルタイムで表示される。

非常に便利な機能なのだが、
たまに以下のようなエラーを吐くことがある

ValueError: I/O operation on closed file

これはipythonでのバグらしいのだが、
今のところこれを根本的に解決する方法がないらしい・・・
丸一日かけて学習していたモデルが途中で止まったらかなりげんなりするだろう。
現に自分はした。

とりあえずの解決策としては、model.fit()の引数にverbose=0とする
これでシークバーが表示されなくなるのでエラーは回避できるが、
せっかくの便利機能が使えなくなる。。


公式の対応に期待か。

半角/全角の変換をmac風にする(windows10, Linux)

先日のWWDC2016は個人的には残念な結果でした。。
ハードに関する情報は一切なく、iOSやらSiriやら開発者向けの内容が多かったです。
まあ「初めからそういう発表会だから!」と言われればその通りだけど・・・


以前からmacbook airを買おうと画策していたのですが
いよいよ買い時がわからなくなってきたので、
気分だけでもmac使ってる風になろう!
ということでタイトルの通り。


macではスペースキーの左右に英数/かなキーが用意されており、
半角/全角キー(キーボードの左上)まで手を伸ばす必要がありません。
windows/Linuxでは変換/無変換をそれらに割り当てることでmac風な入力が可能となります。
要はIMEのオンオフをそれらに割り当てるということ

慣れればそこそこ作業スピードが上がりそうです。
以下その方法↓


Linux

ubuntu14.04で確認。多分それ以外でも可能

Mozcのインストール

Linuxには標準で日本語入力機能が搭載されていないので、IMEをインストールします。
(ubuntu14.04には初めから入っていたので必要なし)

$ sudo apt-get install ibus-mozc

Mozcの設定

superキー(windowsキー)を押して「mozc」と打ち込み、"Mozcの設定"を選択。
「キー設定の選択」の欄の編集ボタンをクリック。

するとMozcキー設定というウィンドウが開くので、以下のように設定する。

  • モード「直接入力」、入力キー「Henkan」のコマンドを「IMEを有効化」にする
  • モード「入力文字なし」、入力キー「Muhenkan」のコマンドを「IMEを無効化」にする


設定後に新しくウィンドウを立ち上げて確認。
変換キーで全角、無変換キーで半角入力が可能となる。

何かの拍子に設定が狂って変換/無変換キーが使えなくなった時のために
全角/半角キーの設定は変更しないことをおすすめします。。

設定を戻したいときは「キー設定の選択」欄で「MS-IME」を選択すると元に戻ります。

Windows10

windowsキーを押してCortanaに「IME」と打つ。(ちょー便利!)
Microsoft IMEの設定」というのが出るのでEnter


開いたウィンドウで「詳細設定」ボタンを押す。


全般タブの編集操作の欄で、キー設定 -> 変更を押す。
するとキー割り当てのウィンドウが出てくる
こんなの↓

f:id:may46onez:20160623212321p:plain


あとは

  • 「キー」列が「変換」の行で、「入力/変換済み文字なし」列のところを「IME-オン」にする
  • 「キー」列が「無変換」の行で、「入力/変換済み文字なし」列のところを「IME-オフ」にする

これで完了。
windows10以外でもIME設定のところをいじればできるはず。


余談だがCortanaはすごい便利。(音声入力は知らん)
何か設定を変えたいときにキーワードを打って検索すると大体出てくる。
新スタートメニューもなかなかいい感じ。あんま使わないけど。


あとは仮想デスクトップ回りとかをもう少し洗練された感じにしてくれると使いやすくなるんだけどなー。
デスクトップ切り替えながらアクティブウィンドウ移動とか。
キー割り当てを変えられるとなお良いんだけどさすがに無理かな・・・

公式の対応に期待です。

BUMP OF CHICKENの初スタジアムツアー”BFLY” in 大阪 物販のコツ・ちょっとだけ感想

タイトルの通り!

BUMP OF CHICKENは今年20周年を迎えて,4月から初のスタジアムツアーを開始してます
大阪→愛知→福岡→神奈川という行ったり来たりのスケジュール(笑)

大阪・京セラドームでの初日ライブに行ってきたので記念に。


多少ネタバレ(?)を含む可能性があるので
今後のツアー参加予定の方はご注意ください。
演出については言及しません。

続きを読む