dynamicsoar's log

主に研究関係のメモ

Jupyter notebook (IPython notebook 4.x) で Notebook Extensions を使う(Anaconda利用)

まえがき

Jupyter notebook で、各セル内のコードがだらーっと縦長になってしまった。 include のやりかたがよくわからんので(できるのかも含め)、とりあえず folding でごまかせないかな?と思ってググったところ、 Notebook Extensions というのを導入すればできそうだった。本当はセルごと hide (fold) して欲しいんだけど、これはそうではなく code 内の一部ということのようだ。まぁとりあえず試そうかなと。

前提(環境)

  • Jupyter notebook
  • Anaconda 3

を利用。Mac OS X Mavericks だけど別に Win でも関係ないかも。わからん。

手順

github のページの wiki にあるとおりやるだけ*1

リポジトリのクローン

まず適当なディレクトリ(でいいと思うが…)にて、github のリポジトリをクローン。具体的には、HTTPSの右の方にあるボタンを押してURLをクリップボードにコピーして、SourceTree を立ち上げて、+New Repository > Clone from URL で Source URL のとこに貼り付ける。そしたらなんかガーッとDLされるので、BRANCHES で master 選んだ状態で、メイン画面のツールバー右上にある Show in Finder を押すと実際にどこに保存されたかわかる。

インストール

次にターミナルを立ち上げてそこのひとつ上のディレクトリに移動し($ ls したときに IPython-notebook-extensions ていうディレクトリが見える状態で)、さっきのページにあるとおり

$ conda build IPython-notebook-extensions

する。終わったら、これも書いてあるとおりに下から四行目の .tar.bz2 を使う。(ここ訂正。Mac OS なのでこんな感じのはず)

$ conda install ~/anaconda/conda-bld/osx-64/nbextensions-master-py34_0.tar.bz2

設定

まずいつものように $ jupyter notebook で起動する。それから別のタブを開いて
http://localhost:8888/nbextensions へ行くと設定画面が起動するはず。あとはうまいことやってください。

その他

ショートカットで fold/unfold が作動しない…

…で、僕の場合 Codefolding というやつを Activate したら確かに folding 自体はでてきて、クリックでの開閉はできるようになった。だけど、デフォルトで設定されてるショートカットの option+F で fold/unfold されない。適当なものに変えてみてもダメ。ちょっとこれは困るな…。ブラウザのキャッシュをクリアしろとかあるしやってみるか。

マニュアルインストール?

config extension · ipython-contrib/IPython-notebook-extensions Wiki · GitHub ←このページも結局 githubwiki の一部なんだけど、下の方にゴチャゴチャと「設定ファイルがあるディレクトリを確認して…」とか書いてあるが、その前に

You only need the instructions below to perform a manual installation.

とあるとおりで、自分の場合は一切やる必要なかった。場合によっては必要なのだろうけれど。

他の extension

Keyboard shortcut editor がある!どうやらこれを activate するとヘルプのショートカット一覧 (h で起動) から編集できるようになるようだ。が…実際に active するとなぜかショートカット一覧が開かなくなった…なんでだ…。キャッシュなどクリアしても駄目。普段使いの chrome だけでなく、デフォルトから設定を全くいじってない safari でもだめだった。

UPDATE 2016-06-12

久々に extension 使ってみたのでメモ。

まず何はともあれ NbExtensions menu item を enable するのをオススメ。これで今度からはアドレスバーにコマンド打ち込まなくても、notebook 画面で Edit メニューの一番下にコンフィグ画面を開くためのリンクが追加される。

それから上でうまく作動しないと書いていた keyboard shortcut editor が問題なく作動していた。今回はショートカットで「セルを上に移動」「セルを下に移動」がしたかった。実は extension のエントリに Move selected cells というのがあるのだが、自分の環境 (Chrome on Mac OS X Mavericks) ではこれを enable してもうまく動かなかった。そもそも複数セルを一度選択してから移動、というのが意図された動作のようだが、もっと単純に単にセルを移動したかった。で、これは結局新しくショートカットを追加してアッサリできた。手順は以下:

  1. extension で keyboard shortcut editor を enable する
  2. 適当な notebook を開く。おそらくこの時に自動的にショートカットの一覧が開くはず(開かなかった場合は、メニューバーの Help > Keyboard Shortcuts から開く)
  3. セル移動は Command Mode での作業なので、Command Mode の一番下あたりにある「+ : Add a new command-mode shortcut」をクリック
  4. 上の行に Bind [select action] to: とあるので、[select action] の部分のドロップダウンリストをクリックして、下に行ったところにある jupyter-notebook:move-cell-down を選択する。
  5. 下の行にある というところの右をカーソルでクリックし、好みのショートカットを入力する。自分は Ctrl + J にしてみた。OK で確定。
  6. 同じことを jupyter-notebook:move-cell-up についても行う(Ctrl + K にしてみた)。

以上。

なお、ググってるときに知ったけど、どうやら昔はこの Ctrl + K, Ctrl + J がセル移動に割り当てられていたらしいが、特定のブラウザ自体のショートカットとコンフリクトするというのであるときに無効化されたらしい。そこでの議論では「は?使いたかったら custom.js をいじれや」みたいになってたけど、こうして extension を使って javascript わからない素人でも設定できるのはありがたいことです…

*1:Anaconda 使わない場合も、このページの周辺や同じ wiki 内にある情報でなんとかなるはず($python setup.py install とかするっぽい?)。

TeXstudioで toggle comment/uncomment したい→マクロを使う

イントロ

TeXstudio は、デフォルトではコメントアウトは cmd+T, アンコメントは cmd+U になっている*1。しかし多くのプログラミング用エディタでは1つのショートカット*2コメントアウト・アンコメントを実現する。このようなものは toggle(トグル)と呼ばれ*3、たとえば Notepad++ では ctrl+Q*4 だし、mac のアプリでは一般的に cmd+/ がそれのようだ。というわけで TeXstudio でもこのような toggle comment/uncoment をしたい。

具体的な手順

Macro の登録

Macro を使う。User Manual の section 4.5 に詳しく書いてあるが、いまはどうせコピペするだけなので読まなくても良い。

メニューバーの右の方にある Macros > Edit Macros... を選択。ダイアログが開いたら左下の Add でエントリを追加し、Down を押して一番下に持っていく(後でショートカットを自分で設定するため)。右上の Name に適当な名前(toggle comment とか)を入れる。右下の空欄にスクリプトを書くのだが、偉大なる先人が既に書いてくれている ↓

http://sourceforge.net/p/texstudio/wiki/Scripts/#advanced-comment-toggle

User Manual によると Javascript らしい。これをコピペする。すると自動的に Type は Script になるはず(おそらく %SCRIPT で判別してる?)。Abbreviation と Trigger のところは空欄のままで良い(ショートカットはここではなく別に設定する。後述する)。OKを押して閉じる。

Shortcut の設定

cmd+, で*5 Preferences を開き、Shortcuts > Menus > Macros を見ると、いま登録したマクロが表示されている。そのエントリの Current Shortcut のところをダブルクリックして、自分の好きなキーコンビネーションを登録する。自分は cmd+Q にした。もし既存のショートカットとかぶっていると、ちゃんと警告してくれる。cmd+Q の場合、もちろん quit(このアプリでは Exit と言ってるが)なので、警告が出る。それから、その右の列に Additional Shortcut というところがあり、たとえばここに cmd+/ を追加で登録することもできる。残念ながら追加できるのは1パタンだけのようだ。

UPDATE 2016-01-01: 問題点

いま使ってて気づいたけど、これ

  1. カーソルが置いてあるブロックに対して実行
  2. 複数の文(ブロック)を選択して実行

の両方できるんだけど、1. の方は文中に \% あったら uncomment はできるが comment out ができない。ダメじゃん… Javascript 解読するしかないか。2. の方は問題ない。

さらに UPDATE

正規表現よくわからんので、自分専用の応急処置だが、

hasComment = line.match(/\s*%/)

の部分を

hasComment = line.match(/^%/)

に変えたところ、「カーソルが置いてあるブロックに対して実行」については望みの挙動になった。しかし「複数の文(ブロック)を選択して実行」については変な挙動に…まぁ自分はこっち使わないからいいか…。あとで正規表現勉強したらちゃんと直そう。あるいは分かる人がいれば教えて下さい(or 直接 wiki 編集しちゃって下さい)。

*1:Preferences > Shortcuts > Menus > Idefix から確認可能。ただ、今見たら Default は ctrl+T, ctrl+U になっていて、Current に cmd+T, cmd+U が書かれている。もしかしたら自分で変えたのかもしれない。いずれにせよ今の主題は toggle したいということなので、まぁどっちでもいい。

*2:ホットキー、キーバインド、キーコンビネーション…厳密には何かが違うのだろうがよくわからないので検索用に全部書いとく。

*3:ピンとこなければ toggle switch で google image 検索せよ。toggle という英単語はこのイメージ。ただアプリ的には「おなじコマンドで」コメントアウト・アンコメントをするので、メカニカルレバーの切替よりは押しボタンの方がより近い気はする(でももう toggle って言葉があまりにもよく使われてるし英語の意味的にもそういうのを包含してるんだろう、たぶん)。

*4:Notepad++ ではさらに ctrl+K で「コメントアウトあろうがなかろうがさらにコメント記号を左からかぶせる」ができて超便利。…というか TeXstudio の comment out はまさにこの動作だな。

*5:あるいはメニューのTeXstudio>Preferences...でもいいが。

Rodeo Desktop (v1.1.23) のインストール (on OS X Mavericks) でつまづいた

まえがき

$ pip install rodeo で入って $ rodeo . で実行するやつは Rodeo Python というやつ(v0.4.4とかなんか)で、これはブラウザを使う Jupyter Notebook みたいなもののようだが、これと Rodeo Desktop は別物。

わかりづらいかもだが github 参照:yhat/rodeo · GitHub

本題

Rodeo Desktop のインストール (on OS X Mavericks) で詰まったのでメモしとく。

既に Jupyter notebook で matplotlib, pandas ともに問題ないのになぜか Rodeo Desktop を Applications フォルダにコピーして起動しようとすると、(a) 正しい Jupyter が(Python が?)みつからんみたいなことを言われるか、(b) 延々とローディングになるか、のいずれかになった。(b) の場合はたまに歯車の絵が止まってフリーズしてるようにも見えるが、これは少し待てばまた回り出すこともある(止まったままのこともある)。

(a) になった場合は実はアプリ自体は起動しているので、でかいバナー以外の場所をクリックするとバナーが消える。で、メニューバーまたは画面右の方にある Preferences で、 Default Python Command が空欄になってると思うので、まずはこれが問題。どうも Mac にデフォで入ってる python *1を見に行ってるとかそういうことのようだ。Anaconda の利用が推奨らしいし、実際すでに Anaconda 利用してるので、ここには /Users/[username]/anaconda/bin/python と入力。[username]のとこはもちろん自分のユーザ名。$(whoami) でもいいのかも。

参照:install Rodeo on OS X El Captain | Liyun's Blog

しかしこれで再起動するとなぜか (b) のエンドレスローディングになった。ここから、Anaconda 再インストール*2してみたり、その上で $ conda update jupyter, $ conda update matplotlib, $ conda update pandas などするも全然ダメ。

なお、anaconda を初めて入れた時(少なくとも anaconda のサイトから GUI インストーラで入れた時)は、まず $ conda update conda してから $ conda update anaconda するといいっぽい。よくわからんが。いきなり $ conda update anaconda すると一部失敗した。しかもその後で $ conda update --all すると matplotlib, pandas などいくつかが互換性のために downgrade される。けど、これはしないほうがいいっぽい?ここもよくわからんけど…

参照:Stuck on "Python is still starting up" for a while on Windows 7 · Issue #134 · yhat/rodeo · GitHub ← ここにある $ pip install --upgrade --force-reinstall もしてみたが効果なし。むしろなんかよくない気もしたので、この後で Anaconda 再インストールした。

じゃあ、と Rodeo Desktop 自体を消して再インストールしたら、今度はローディングが終わらないので Preferences にすら入れなくなった。やばい。

そこでやけくそで $ conda uninstall matplotlib してみると、今度は「matplotlib がないよ」という警告バナーがでてきた。なのでまたバナーの外をクリックすると… Preferences をやっと触れた… ふー。で、再度 /Users/[username]/anaconda/bin/python と入力して、ついでに Default Working Directory にもなんかしら指定してから*3 Rodeo Desktop を閉じて、$ conda install matplotlib し、再度 Rodeo Desktop を開くと…なぜか不思議な事に起動に成功した。なんだこれ…たぶん再現性ないしもう嫌ですわ…

疲れたので触るのはまた今度かな…(Jupyter Notebookで良かったじゃん、とならないことを祈る…)

*1:2系列。/usr/bin に入ってる。

*2:消すのは単に $ rm -rf ~/anaconda でよい、と公式にもある

*3:たぶん関係ないとは思うが。

amazon cloud drive デスクトップアプリ (Win 7) で co.jp 以外のアカウントでサインインしたい→コンパネ>地域と言語>形式を日本以外にする

サマリ

amazon cloud drive, com の方だと定額で容量無制限があると知り合いに聞いたので試してみようとしたが、デスクトップアプリを開くとなぜか「co.jp にサインインします」みたいな余計なことを勝手にされるし、com を選べなかった。その解決法。

タイトルの通り、Win 7 の場合、amazon cloud drive デスクトップアプリで amazon.co.jp のアカウントでサインインするには、コントロールパネルの「地域と言語 > 形式(英語版なら Region and Language > Formats)」を日本以外にすればよかった。

環境

  • Win 7 Enterprise SP1, English
  • 日本国外(欧州)からのアクセス
  • amazon.co.jp, amazon.com 両方にアカウントあり。メールアドレスは違う
  • co.jp, com 両方で cloud drive 申し込み済み(たぶんこれがよくない… co.jp 申し込まなければよかったんじゃないかと思う)

ただ、自分も最初は amazon.co.jp にしかサインインできなかったので。1つずつ設定を変えていった結果の絞り込みで「形式」が判別要因とわかった。したがって OS バージョンやアクセス元位置はとくに関係ないはず。

その他

  • amazon cloud drive アプリ自体はおそらく co.jp で落としても com で落としても同じものっぽい(不確実)。一応 com から落とした方を使ってる。
  • アカウントの判別はアプリインストール時ではない。つまりコンパネの設定変更ごとに毎回アプリをアンインストール→再インストールする必要はない。
  • 「形式」は日本でなければなんでもいいっぽい。が、例えば co.uk でも cloud drive 申し込み済みで形式に US, US どちらでもないところを選んだ場合…どうなるのかは不明
  • co.jp のフォーラムかどこかで、「場所 (Location)」や「管理 > システム ロケールの変更 (Administrative > Change system locale)」も変えろというアドバイスを見たが、実際に試した結果、これらは日本のままでも問題なかった。
  • Mac はもともと英語で使ってるからか、最初から com アカウントにサインインできた
  • com の cloud drive のウェブページは、ずっと下の方にスクロールするとアプリの download リンクがある。サインインする必要はない
  • しかしこうしてようやく使えるようになったデスクトップアプリ、アップロードはいいとしてダウンロードは個別のファイルを選べず、「全部ダウンロード」しかない。ダメすぎる…。したがって現状はウェブアプリを使えということなのだろう。2016年10月現在、個別のフォルダは選べるようになっているはず。ファイルまで個別に選べるかは確認してない。違う話だけど、Kindle でも cloud reader だと真の全画面表示(バーなど一切なし)ができるのに Kindle for Mac だと必ず邪魔なバーが残る問題と似たものを感じる。要はデスクトップアプリが手抜きっていうかね…

Excel の Conditional Formatting(条件付き書式?)でキーワードにマッチした自動色塗り

まえがき

たぶんエクセルの基本機能なんだろうけど、最近まで気づいてなかった割になかなか便利なのでメモしておく。

計算格子のリージョン管理

最初に使いたかったのは、計算 (CFD) に使ったグリッドを5つのリージョンに分けて、それぞれのリージョン番号ごとにドット絵みたいな感じで色を塗りたいなぁ、というリージョン管理に使いたかった。どの格子をどのリージョンにするかは手作業で決めたくて、エクセルのシート上で「セルに1と打ったら、いちいち塗らなくても青にならないか?」と思っていた。するとまさにそういう機能があった。

こうやって数字を打って色が塗られるので…*1
f:id:dynamicsoar:20151129093344p:plain

遠くに引いてみるとなんとなくリージョンの感じがわかる*2
f:id:dynamicsoar:20151129093435p:plain

計算機のジョブ管理

いまは計算機のジョブ管理にも使ってみている。

f:id:dynamicsoar:20151129092343p:plain

f:id:dynamicsoar:20151129092354p:plain

f:id:dynamicsoar:20151129092400p:plain

こうすると、計算が発散したら status 列(D列)のセルに div と書くだけでいい感じの赤にしてくれる*3。上の図では、同様に run で黄色、 fin(計算終了)で緑にしている。

もちろん単なる「同一」以外に条件式も使えるので、いろいろ応用はありそう。

*1:この図だと、グリッドのiかjを示すヘッダ行まで色が塗られてしまっている。これはシート全体を対象としてしまったから。範囲指定をすれば避けられる。

*2:もちろん計算するときには可視化ソフトでも確認するが。

*3:発散してるからいい感じではないが…

pythonはじめました(今度こそ)

背景

どうもいつまでたっても python を覚える時間が取れない(取る気がない)なぁと思っていたが、ふと「そうだ、論文用の図を描くのに使ってみよう」と思い立った。グラフの作図、今まではずっと ExcelPowerpoint だった。一度だけ ExcelAdobe Illustrator にしたことがあるが、きれいにはなるのだがさらに作業的な意味でのしんどさが増すばかりだった。まぁ、最終的な論文や学会ポスタ用に一回だけ描くなら超美麗にしていいんだけど、普段からやるのはつらすぎる。自動でそこそこ整形、ってのがいいに決まってる。

候補は

といったところか。で、ちょうどいいので python にしよう、と。

パッケージの種類とインストール

一応前提として僕は Mac OS X 10.9 Mavericks.

ちょっと調べたところ、

  • matplotlibというのがよさそうだ→seabornていうwrapperがもっとよさそうだ→(ちょっと試してみた)おおーたしかにきれいだ
  • homebrew使ってiTerm 2でpython 2.7を使って(お試しで)いたが、どうやら IPython てのがよさそうだ→名前がJupyterに変わっていた。あと別に複雑なことしないし、もう時期的にもいいかげん python 3 でいいだろう、とも思った
  • パッケージ管理ソフトは、homebrewのおかげかpipてのが入っていた(pip3てのではなさげ)→condaてのがよさそうだ

どうやら IPython という python 専用の統合開発環境的なやつ(ちがうかも)だったのが、他の言語にも対応してるよってのが Jupyter みたいだ。が、肝心の Fortran まだか…*1

というわけで、まず Jupyter のインストールのとこにいくと、初めてなら Anaconda を入れるのを highly recommend というので入れた。この anaconda と conda の違いがよくわからんけど(コマンド名が conda?)、まぁとにかく pip と同様のパッケージ管理ソフトみたいで、後発な分ちょっと上等みたいだ。そうすると、あとは iTerm をひらいて、

$ conda install jupyter

してから、

$ conda install seaborn

すると、matlibplot やら numpy やら pandas やらの必要なパッケージは全部自動で入れてくれるっぽい。楽ちん(これは pip でも同じだったが)。自分の場合、Linux (CentOS) で yum に慣れてたので、こういうパッケージ管理ソフトには抵抗感がないのは助かる。

と、いってる間にインストール終わったみたいだ。さて…とりあえず寝るか(駄目パタン)

*1:まだっていうか…ね…うん…わかってる…いいんだ別に…sublimetextでendsubroutineみたいにスペース空けずにつなげて書いたらシンタックスハイライトに認識されないとかね、うん。わかってる。

連番ファイルを個別に xz で圧縮/解凍

natures flyers: コマンドライン (linux, cygwin) での個別ファイルのバッチ圧縮解凍 → xargs使う に書いたんだけどゴチャゴチャしてるので、必要な部分のみメモ。

前提

  • ファイル名は 00001.xyz, 00002.xyz, ... だったとする。 00001.q の場合は下記の .xyz を .q に変えれば良い。
  • ファイルはそれぞれがでかいため個別に圧縮することにする。まとめて一つのアーカイブにしたい場合は tar を使ってください

圧縮

元ファイルを消す場合

$ ls *.xyz | xargs -n1 -I{} xz {} &

元ファイルを残す場合

$ ls *.xyz | xargs -n1 -I{} xz -k {} &

解凍

アーカイブファイルを消す場合

$ ls *.xz | xargs -n1 -I{} xz -d {} &

アーカイブファイルを残す場合

$ ls *.xz | xargs -n1 -I{} xz -dk {} &

応用

上では簡単のため、ファイルのあるディレクトリに移動した後にコマンド実行するケースを想定した。しかし、いちいち cd するのは面倒なので、もっと上層から ls ./foo/bar/output/*.xyz のようにやってもよい。さらにいうと、たとえば計算結果が複数のケースにわたって

  • ./case1/output/00001.xyz , ./case1/output/00002.xyz , ...
  • ./case2/output/00001.xyz , ./case2/output/00002.xyz , ...

のようにあって、ディレクトリ構造が同じであれば、

$ ls ./case*/output/*.xyz | xargs -n1 -I{} xz {} &

で一気に圧縮できる。

このように、アステリスクでのワイルドカードはかなり便利なので、なるべくディレクトリ(フォルダ)名は連番とか構造を保つような名前にしておくとよい。

ただし、マルチスレッドで同時に(並行に)圧縮したい場合はわざとバラバラにジョブを投入するべき。計算機じゃなくて普段使いのPCの場合1スレッドは残しとかないと動作がかなり重くなるで注意。