忍者ブログ
おかげさまでspamコメントが増えてきましたので、一応コメントを承認制にしました。基本的には承認します。
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

北大ローカルの話題ですが,調達課を経由した物品発注の方法を忘れそうなのでメモしておきます.マニュアルは分厚い(44p)わりにわかりにくいので.

  • 北大SSOサインインシステムにログイン→(ネーミングセンスには目をつぶって)(なんで「くん」をつけてしまったんだろう)学校会計くんに入る
  • 左カラム,「購入依頼申請・照会」をクリック→フレームが切り替わる
  • 1:購入依頼のままで,新規申請をクリック
以下,ピンク色の枠は入力必須,黄色の枠は(北大で管理している?)コードが入るところで,わかれば(あれば)入れる,わからなければ(なければ)入れなくてよい.白色の枠は任意入力.
  • "件名"は適当に入力して良いようだ.購入したい物の名前とかで良さそう(XXX購入).
  • 相手先は,取引先が確定している場合はその名前で検索してみて("相手先"をクリックして検索できる),入れる.今回はあったのでそうしたが,ない場合は空欄で良いようだ.(ここのこの商品,と決まっている場合は入れたほうが親切?).
  • 契約期間の終了日,摘要は空欄で良い.連絡先は,内線番号を入れておけば良さそう.
  • 総価契約の部分は変更不要(たぶん).
  • →明細を追加する をクリック.
  • ★購入依頼明細登録★ウインドウが出てくる.所管~予備,予算残高までは,各項目名をクリックして,[検索]ボタンを押せば,(おそらく)予算科目リストが出てくるので(学振の場合は,一択),それを粛々とクリックしていく.予備は入れなくて良い.
  • なぜかどこかの段階で「形態別科目」欄はクリアされてしまうので,そこだけ最後に入れる.
  • 品名については,ティッシュとかガソリンしかないので,それ以外のものを購入する場合は,黄色の枠には何も書かずにピンク枠に商品名を入れる.ティッシュとかガソリンを買う場合は,渡辺は,ピンク枠に商品名,規格欄に型番を入れたが,この辺は流動性があるようだ.(商品名のところに全部書いて,規格欄は空欄でも良さそう).
  • 数量は必ず半角で入れ,カンマ等は入れない.単位はなんでも( 常識外れでなければ)良い.
  • 単価はなくても良いらしい.単価を入れれば,税込み金額欄は勝手に出てくる.もともと税込みの金額だった場合は,その右側(税区分)を適切なものに変更する.でもこのへんはわりと適当で良いらしい.
  • 希望納期はなくても良いけどいれた方が良いらしい.程よいところを入れる.
  • [予備],[備考]については記載不要(本当に備考があれば書く).[資産管理]は適切なものを選ぶが,これは本当に大きい物を買うとき,あるいはリースのときだけなので,多分当分使うことはない(0.対象外で良い)かな
  • おもむろに上に戻って,「形態別科目」を入れる.画面下部,「追加」ボタンを押してから閉じる.追加ボタンを押さないとこれまでの作業はなかったことになる.
  • ★購入依頼申請・照会★ウインドウの画面下部に,ひそやかに「確認」ボタンがあるので,それを押す.ちなみに,もしさっきまでの入力内容に誤りを発見した場合は,黄色枠で明細が出現しているはずなので,それをクリックして修正できる.
  • [購入依頼書を出力する]にチェックを入れてから,再度確認ボタンを押し.終了.
  • pdfで購入申請書が出てくるので,それと,購入に際して打ち合わせなどのメールのやりとりがあればそれを添付して会計に持っていく.
これでokのはずです.A4一枚くらいでわかりやすく収まるんじゃないの….マニュアルの何がアレかって,例えば「備考」の説明に,「備考を入力します」としか書いてないんですよね.それは…わかるんだよ….そうじゃなくて,「どういうときに」「何を書く欄なのか」が知りたいのです.まあ,会計の方に聞けば多分いっぱつだと思うんですが(実際聞いた),今後忘れないようにということでメモでした.おつかれさまでした.明日は謝金の話を聞いてきます.

拍手[1回]

とりあえずサンプルLISP-average.lspを解読してみましょう.

&key
M.Hiroi's Home Page/ xyzzy Lisp Programmingの,&keyをご参照ください.ようするに,&key以降に出現した引数(でいいんですかね)の順番や存在を気にせずに扱うことができるよ,ということですね.define-batch-processに与えられる引数としては,少なくともfile, args, そしてoutputがあります.fileはinput file, outputはoutput fileで,argsは,batch-processorのGUI上でAdd filesを選択したときに出てくるウインドウで指定しておくことができます.
if
Lisp一夜漬けの,制御と述語をご参照ください.
(if p THEN ELSE)
で表され,pが評価式です.サンプルでは,
(if (> (length args) 2) (warn ...) (modification))
となっています.これは,argsの個数が2以上であったとき--(length args)を,"args(inputの時に入力した引数リスト)の個数"と読み替えますと,(> argsリストの個数 2)と見ることができ,lispでは左端のシンボル(car)が関数として機能するよ,ということを考えると,argsリストの個数 > 2 のとき,と読み替えることができます--に,(warn ...)の処理を行い,そうでなければ,(warn ...)以降の処理をしますよ,ということを意味しています.
常識の人には常識のことを長々と書いていますが,たとえば,ファイルをinput (add) するときに,ある条件のファイルには1,別の条件のファイルには2という引数を与えて,
(if (= (car args) 1) (then-modification) (else-modification))
などとすると,1の引数を与えられたファイルと,それ以外のファイルで別の処理をひとつのbatch-processで行うことができたりするわけです.ここで,statesを呼び出せれば便利そうなんですが,ちょっと弄ってみましたがやり方は良くわかりませんでした.

続きます.

拍手[0回]

何がしたいのかというと、Neuromag付属(?)の解析ソフトGraphの、batch-processorの使い方がよくわからないので、使えるようになりたいということだったわけです。結局、cdrとかは使いませんが、ちょっとわかってきました。ちなみに、(require X)というのは、ようするにロードということですね。

さて、batch-processorをrequire(load)すると、commandにbatcn...というボタンが出てきますので、それを押してみますと、batch-processorのUIが出てきます。

  • File list:バッチ処理したいファイルのリストで、これはAdd fileで追加、clear fileで除去できます。
  • Output directoryは、そのまま出力先で、直接書き込んでもよいし、output directoryボタンで指定してやってもよいし、output to source dir.で、inputファイルのあるディレクトリにしても良いです(なお、これを押すと:sourceと出てきまして、これを直接入力してやってもよいと思います。この、:(コロン)からはじまるシンボルは、「キーワード」と呼ばれるものらしいんですが、よくわかってません。まあ、この場合はもともとのファイルがあるところに出力されるおまじないで良いですかね。誰かわかりやすく教えてください)。
ここまでは良いんですが、問題は次とその次です。

Process definitionsの項には、statesとprocessがあって、その左側のselectボタンでどうやらファイルを呼び出せるようですが、stateは/neuro/lisp/examples/batch-state/stim1-2.lsp、processは/neuro/lisp/examples/batch-process/echo.lspくらいしか呼び出せないんですよね。新しく作ろうとおもって、NewとかEditを押しても、アラートが出るばかりで何もできないので、困り果てていたわけですが、ようするにstim1-2.lspとか、echo.lspというのは、lisp fileなわけなので、この中身とマニュアルをみればわかるんじゃないかな、ということで、とりあえず今回はbatch-stateの話を書きます。

マニュアルと総合して考えると、以下のようなことのようです。

とにかく、
(define-batch-states <name> <path> (<string> (setu <state for process> '(<state setting>))(<string2> ...))
という文字列をテキストエディタで書いて、これを<name>.lspという名前で保存し、<path>のところに置けば良い。
これだけ!非常に簡単なことでした。以下で多少詳解します。

define-batch-states
これは、こういう名前の関数ですよ、ということでしょう。libあたりに、define-batch-states.lspというファイルがあるものと思われますが、別によまなくても良いです。
<name>
stateの名前をつけます。何でも良いですが、このファイルを保存するときには、この名前.lspという形式で保存する必要があります。たとえば、sta-dev-averagerとか。最終的にsta-dev-average.lspとして保存します。
<path>
このファイルがあるところまでのフルパスをダブルクオーテーションで括って指定します。たとえば、"/home/neuromag/D/hayato/lisp/sta-dev-averager.lsp"とか。.setupで保存している場合のみ、拡張子は不要のようです。また、/neuro/lisp下にファイルを作っている場合は、そこからの相対パスで良いようです。余談ですが、パスについてはパスを通すということという記事が地味に人気です。文系はこういうところでつまづくんですよね。
<string>
これから、batch-processで処理を行うための条件設定をするわけですが、その条件に名前をつけます。このstringが、元ファイル名の末尾につきます。たとえば、ここに"sta"(文字列はだぶるクオーテーションで括ってくださいね)という名前をいれて、元ファイルがrawdata.fifという名前だったとすると、rawdatasta.fifというファイルが出力されます。可読性を高めるためには、"_sta"とかにしておいた方が良いかもしれません。
setu
GNU Emacs Lisp Reference Manualによれば,(set X Y)でXにYの評価後の値を代入する,(setq X Y)だと,Yそのものを代入する,ということのようですが,setuがないので良くわかりません.でもまあ,以後のリストにアポストロフィ(これがquote(setqのqはこれ)の証)がついているので,setよりなのでしょう.ようするに,次に指定する変更したい設定に,その設定内容をいれますよ,ということになります.完全に余談ですが,非公式広島大学病院脳磁図室ホームページによれば,Graphで使われているlispは,MjkLispというもののようですが,MjkLispで検索しても広島大学のページしかでてこないので,どうしようもありません.…
<state for process>
ここで,以後のprocessのために設定したい項目を記入しておきます.たとえば,トリガ1と2で加算したいよ,とかいう場合,良くあるのはuniaryでthresholdを設定しておいて,そのuniaryの名前をaverage-triggerにいれるということかと思いますが,この場合だと,とりあえずここでaverage-triggerを呼び出しておきます.特定のG-widgetから呼び出すこともできて,この場合は,
resource (G-widget "widgetname") :keyword
などとします.ここで説明すると冗長になるのですが,たとえばpick widgetにMEGという名前をつけていて,このマグネトメータを除去したいという場合は,おそらくここで
resource (G-widget "MEG") :ignore
などとすると良いでしょう(実際の値は,次の項で指定します).
keywordの部分は,コントロールパネルで各widgetをクリックしたときに出てくる多数の枠があると思いますが,その左側に書いているものに該当します.すごい迂遠な説明で申し訳ありません.
'(state setting)
ここでは,さっきの<state for process>で指定した変更したい条件の,具体的な値を書きます.これも胡乱な説明ですが,ようするに,たとえばaverage-triggerであれば,'("trigger1" 0)とか'("threshold" 0)とかですね.文字列はダブルクオーテーションで囲みます.アポストロフィは何かというと,括弧内の式を評価しないということで,これがないと,多分上記の式の場合だと,average-triggerは0と評価されてしまうんじゃないかと思われます.
resource (G-widget "MEG") :ignore
の場合は,ここに(MEG*)とかですかね…?ちょっとやってみたわけではないのでなんとも言えませんが.

具体的には,たとえばこのようにします.

(define-batch-states sta-dev-averager
"/home/neuromag/D/hayato/lisp/sta-dev-averager.lsp"
("_sta" (setu average-trigger '("trigger1" 0))
("_dev" (setu average-trigger '("trigger2" 0))
)
これで,バッチ処理をするファイルがfile1.fif, file2.fif, file3.fif...だとすると,file1_sta.fif, file2_sta.fif, file3_sta.fif...に対しては"trigger1"(uniaryで,thresholdをfeql(1)にしているもの)を使って処理をし,file1_dev.fif...に対しては,"trigger2"を使って処理をします,という状態を定義している,ということになるのだと思います.

なお,複数要素を組み合わせたいときは、combineという関数を使います.

(combine
(("A" (resource (G-widget "filter") :pass-band '(band-pass 8 12)))
(("B" (resource (G-widget "filter") :pass-band '(band-pass 15 25)))
(("S1" (setu trigger-source '("threshold" 0)))
)
このようにすれば、AS1, BS1ができるようです。これは完全にマニュアルのコピペ(ほぼ)なので,試してみてはおりません.おそらく単純な組み合わせしかできない(たぶん)ので、あまり多くすると大量にできすぎると思われますが,それこそバッチの意味があるところなので,このあたりは程よいところを見つけていく,ということになるでしょう.

拍手[1回]

あけましておめでとうございます。本年もよろしくお願いします。

さて、時代はLispということで、ちょっとだけ理解したことを書いて行きます。嘘です.Neuromagの分析ソフト,GraphなんかはLispで書かれているので,ちゃんと理解した方が良いかなという話です.今日は基本的なところ.

  • ( ではじまって、 ) で終わる。
  • 基本的には( )の中に入っているものは、半角スペースで区切られたリストである。
    • (1 2 3 4)というのはそのままのリスト。
    • (1 2 (3 4) )という形で二重のリストになったりする。
    • (+ 1 2 3)のように、特別な何か(関数)が左端にやってくると、単なるリストではなく、結果が返ってくる。でも、リストも結果らしいよ。この場合は、6(ようするに、1+2+3)。
  • ( )内の左端の要素と、それ以外には重大な違いがある(ようだ)。
    • ( )内の左端の要素をcar (カー)と呼ぶらしい。wikipedia(LISP)によれば、Contents of Address part of Registerの略称のようだ。レジスタ(記憶素子)のアドレスパートの要素。何を言っているのかわからない。Copy Address Register説もある?いずれにせよ、「左端の要素をcarと呼び、car関数はリストの左端を呼び出す」ということが分かればそれだけで良さそうな雰囲気を感じるけどどうかな
      • (car (1 2 3 4))は、1を返す
    • cdr(クダー)というのが,car以外のもの.
      • (cdr (1 2 3 4))は,(2 3 4)を返す.
      • carとcdrを組み合わせると,リストのどの要素にもアクセスできる(らしい).(car (cdr (cdr (1 2 3 4)))で,3とか.
    • なんかconsというものもあって,どうも箱が出てくる良く分からない説明が出てくる( GNU Emacs Lisp リファレンスマニュアル; Lispデータの型参照)が,動作としては基本的にはlistの先頭に新たな要素を加える関数のようだ{(cons 0 (1 2 3 4))は,(0 1 2 3 4)を返す}.
これだけを武器に,Graphの中身を解読してみようと思います.

拍手[0回]



忍者ブログ [PR]
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
メールはこちらから
プロフィール
HN:
渡辺隼人
性別:
男性
ブログ内検索
カウンター
コガネモチ