2012年12月29日土曜日

Octave で PsychToolbox を動かす

はじめに

PsychToolbox という、 MATLABで動く心理学実験用ツールボックスがあります。
http://psychtoolbox.org/wikka.php?wakka=HomePage
最新版はバージョン3 。

日本語解説はこちら。
https://sites.google.com/site/ptbganba/


で、この PsychToolbox はフリーのMATLAB互換ソフト Octave でも動くらしい
ということで動かしてみました。


Octave on Windows で動かす

どうやらバージョンに結構依存するらしいので、最新版ではうごかないっぽいです。
少なくとも、 Windows 7 で以下は動きました。

1. Octave のインストール

最新の Octave 3.6.x では動かないようです。
そこで、3.2.4 をインストール。
http://sourceforge.jp/projects/sfnet_octave/downloads/Octave%20Windows%20binaries/Octave%203.2.4%20for%20Windows%20MinGW32%20Installer/Octave-3.2.4_i686-pc-mingw32_gcc-4.4.0_setup.exe/
これをダウンロードして、とりあえず全部入れる感じで。

インストールパスは C:\Octave になりました。

2. GStreamer のインストール

PsychToolbox は全画面で色々表示したりするので、そのライブラリが必要でうs。
具体的には次のライブラリをインストールします。
http://code.google.com/p/ossbuild/downloads/detail?name=GStreamer-WinBuilds-GPL-x86-Beta04-0.10.7.msi

3. QuickTime のインストール

QuickTime をインストールします。

4. TortoiseSVN のインストール

最新版を入れます。これは PsychToolbox の最新版をダウンロードするためです。
http://tortoisesvn.net/downloads.html

5. PsychToolbox のダウンロード

PsychToolbox は svn で公開されているので、落とします。

C:\Octave\3.2.4_gcc-4.4.0 を開いて右クリックして、 SVN Checkout を選びます。
で、
URL of repository に
http://psychtoolbox-3.googlecode.com/svn/beta/Psychtoolbox/
を入力して、 OK をクリック。するとぶわーっとダウンロードされます。

6. PsychToolbox の設定

初期設定がいるので、 Octave を開いてそれを実行します。
初期ディレクトリは C:\Octave\3.2.4_gcc-4.4.0\bin なので、

cd ..
cd Psychtoolbox
SetupPsychtoolbox 
でなんか実行されます。

7. libusb2.0 をインストール

PsychHID という関数などは、 libusb が無いといわれる。
そこで、
C:\Octave\3.2.4_gcc-4.4.0\Psychtoolbox\PsychContributed\
以下にある、
libusb-1.0.dll
を 
C:\Windows\system32 
にコピーしてあげるとうごく。

8. Demo とか動かしてみる

Octave を再起動するとパスが通っているので、
DotDemo
とか実行してみて、全画面で PsychToolbox とか表示されていればインストール終了。

plot 出来ない問題

このままだと、 Octave で
plot([1, 2, 3])
とかを実行してもグラフが表示されません。isstr が obsolete だとか言われます。

そこで、以下を実行してplot周りの問題を解決します。
pkg rebuild -noauto oct2mat

参考 URL:
http://octave.1599824.n4.nabble.com/warning-message-in-Octave-3-2-4-td3311391.html


2012年12月28日金曜日

Brython ことはじめ

概要

Python でブラウザ上で動くプログラムを書く javascript ライブラリ。
@qwerty__ に教えてもらった。
記事はこれかな。 http://www.moongift.jp/2012/12/20121227/


で、という感じで python をインタプリトしてくれる javascript が
brython らしい。

ざっと見た感じ

オフィシャルサイトはここ。
http://www.brython.info/index_en.html

tgz を解凍すると色々出てくる。
カレントディレクトリに brython ディレクトリを作って、その直下に全ファイルがあるとする。

カレントディレクトリで動く最小構成の HTML はこれ。




brython test








最初の script で brython.js を読み込んで、 bodyの onLoad で brython() を実行することで
初期化してるっぽい。
alert の中身をフォーマット文字列にしてちょっと python ぽくしてみた。

brython.js を読んでみたところ、標準で呼べるモジュールはこれらしい。

'time','datetime','dis','math','random','sys'


他にも、 DOM 触ったり、local strage 触ったり、できるみたい。
トップページの時計は、 canvas に draw しまくることで実現しているようだ。

今度なんか作ってみよう。




Sublime Text 2 設定覚え書き

最近はやりの Sublime Text 2 いいですね。

最初に、これでリポジトリからパッケージをインストール出来るようにします。
http://ready-study-go.blogspot.jp/2011/09/sublime-text-2.html

パッケージ

Ctrl + Shift + P,  install とタイプすると、
パッケージリストが出ます。

1. Python Pep8 Lint 文法・様式チェッカ
2. jslint javascript チェッカ

とりあえず入れてみたけどまだわからん。
html5, jquery, jquery snippet pack, Bracket highlighter, sidebarenhancement, sublimelinter


設定

Preferences Settings Default
1. use_tab_stop を false に --> 全部スペース
2. spell_check を true に

2012年12月24日月曜日

年収150万円で僕らは自由に生きていく

一言でまとめると、
「年収は下がってもいいから、やりがいのある仕事しようぜ!」
という話。たぶん20-30代向け。

まず、現状分析
これから先には (1) 経済成長と (2) 賃金の向上
はあんまり見込めない。
それなら、生活コストを下げて楽しく生きようぜという主張になる。


この主張を聞いて出てくる疑問としては次の2つぐらいがあって、本書ではそれらに答えている。

  1. ほんとに年収下がっても生きていけるの?
  2. やりがいのある仕事ってどうやって見つけるの?

1. ほんとに年収下がっても生きていけるの?

Yes. 実は年収は150万円でも一人ならやっていけると主張している。
一回エクセルとかで計算してみるといいと薦めている。
ここで重要なのは、実際に150万円になるかというよりも、
「最低何万円稼げば生きていけるのか?」
という感覚を持つことだと思う。

ここのポイントは以下の引用にまとまっている:
本来200万円もあれば余裕で生きていけるのに、年収400万円を稼ぐために
毎日心身を削りながら、鬱病になりかけてまで会社につとめる、なんて働き方は
望ましくないと思います。
さらに、
生きていくのに必要な金を減らすために、本書ではシェアハウス自炊を推奨している。
後者はともかく、前者は抵抗あるよなーとは思った。
でも世界的には結構流行ってるし、抵抗がない人が増えていくのかもしれない。

あとは、ネット不労所得 (= アフィブログとか) 得ようぜとかもある。
これは ウェブ進化論 本当の大変化はこれから始まる (ちくま新書) と同じ主張。

2. やりがいのある仕事ってどうやって見つけるの?

質問は4つ。
  1. その仕事は金のためにやっているか?
  2. その仕事はスキル向上のためにやっているか?
  3. 年収半分でもその仕事をするか?
  4. 一生低収入でもその仕事をするか?

結局、金やスキル以外の、「何か楽しいこと」とか「何か解決したい問題」のために
やっているかが重要なんだと言っていた。

で、そのためにボランティアしようぜと言っている。主にNPOの手伝い。
プロボノ推しまくり。初めて聞いた。
http://www.servicegrant.or.jp/

で、今時政治家に任せてうまくいくなんて甘くて、
自分で社会の解決したい問題を解決しようぜ!楽しいならそれはボランティアでいいじゃん。


あと気になった文:
お金の保証が無くなる怖さという、自分の『弱い部分』を会社に預けてしまうと
辞められなくなる
これは非常に同意できる。いつでも会社は辞めらる準備をすべきだと思う。



結局まとめると、
「金やスキル以外の評価軸を生きる上で作ろう」という良くある話になる。
確かに金をもらわなくてもやってて楽しいことはあって、
じゃあそれやればいいやんか。という主張はよく分かるし、同意できる。
週末にオープンソースプロジェクトのコード書くのと一緒。

こういうを日本の古い系企業とかは嫌がるんだろうか。


同意するにせよしないにせよ、一読をおすすめする。


2012年12月14日金曜日

long spectrogram visualizer

python + matplotlib で、
スライダーで表示部分を動かせるコードを書いてみた。
ポイントはスライダーにコールバックを入れて、 set_data するところ。
以下が動作例で、


以下がコード。


import sys
import numpy
import matplotlib.pyplot
import matplotlib.widgets
import matplotlib.mlab
import scikits.audiolab


# parameter
filename = sys.argv[1]
width = 100
NFFT = 512
noverlap = 256

# open wav and calculate spectrogram
wav, fs, fmt = scikits.audiolab.wavread(sys.argv[1])
spec = matplotlib.mlab.specgram(wav, NFFT=NFFT, noverlap=noverlap, Fs=fs)[0]
spec = numpy.log10(numpy.flipud(spec))

# make figure
fig = matplotlib.pyplot.figure()
ax_spec = fig.add_subplot(1, 1, 1)
pl_spec = ax_spec.imshow(spec[:, 0:width], interpolation="nearest")

# make slider
axtime = matplotlib.pyplot.axes([0.1, 0.03, 0.80, 0.03])
stime = matplotlib.widgets.Slider(
    axtime, 'Time', 0, spec.shape[1] - width, valinit=0, valfmt="%d")


# update callback and registor it.
class updater:
    def __init__(self):
        self.prevtime = 0

    def update(self, val):
        time = int(stime.val)
        if time == self.prevtime:
            return
        pl_spec.set_data(spec[:, (time):(time + width - 1)])
        ax_spec.set_xticks(range(0, width, 20))
        ax_spec.set_xticklabels(range(time, (time + width + 20), 20))
        matplotlib.pyplot.draw()
        self.prevtime = time
u = updater()
stime.on_changed(u.update)

# start main loop
matplotlib.pyplot.show()