ナンクル力学系

学んだ事を書き連ねていこう。

Posts Tagged ‘卒論

卒論についてとりあえず書いておくか

with 4 comments

ほとんど書く気なかったんだけど,自分の卒論がどんなんだったかを忘れてしまうのは 悲しい気もするので書いてみる.

卒論書いてた状況は(多分)すこし特殊だったと思うので説明すると,主に活動してい た場所は大学の研究室(以下,研究室)の外の研究所のラボ(以下,ラボ). 研究内容とか設備とかは最高だなと思うんだけど,曲者なのはその研究内容がうちの 学科ではあんまり理解してもらえないところ.研究室の同期も,「なんか難しいこと やってるね」くらいに思ってる感じ(…は言い過ぎかw).

だから,発表のための準備が大変で,何でそんな研究をやるかとか何でそれでうまく いくかとか,教科書の1ページ目から全部,説明しないといけない感じになる. まあ,そんなことはどんな研究でも程度の差はあれあり得ることなんだろうと思って, 研究の内容には関係ないからおもしろくはないけど頑張ったと思う. というか卒論にかけてた時間の8割くらいそんなんだった気がs(ry

それで理解してもらえたならよかったんだけど,まあほとんど理解はされなくて, がっかりする気持ちだけが残りましたとさ.

それで思うのは,

やっぱり,評価されないのは辛いので,評価されるような場所に居るということも研究の 戦略(というか生き方?)として重要だ,という結構あたりまえなこと. でも,これを実感できたのはプラスだったととらえることにしておく.

これから(研究内容,進路)どうするかとか,ボスとかと話し合うことになっているので その辺ふまえて動いていかないとな. ボケっとしているひまは無い.

Written by tkf

February 11, 2009 at 8:39 am

Posted in 研究日誌

Tagged with ,

AUCTeXで,sectionだけ画像でのプレビューをしない方法

with one comment

卒論でお世話になったAUCTeXだけど,なぜか今の環境(Ubuntuにaptで入れた) だと,日本語が化けてしまう.図のキャプションとかなら我慢できるんだけど,見出しはきつい. preview-default-option-list に “sections” がデフォルトで入ってるみたいなので,それを抜いた設定をすると,画像でのインラインプレビューを避けられる.

(setq preview-default-option-list
      (quote
       ("displaymath" "floats" "graphics" "textmath" "footnotes")
       ))

Written by tkf

February 11, 2009 at 12:33 am

Posted in 研究日誌, PC

Tagged with , ,

卒論の時に活躍した自作のジェネレータ

leave a comment »

gnuplotのファイルとか,TeXの表とか,繰り返しが多いテキストの生成をやらないと いけない場面が多かったので,作ってみた. jinja っていう python製テンプレートエンジンを使っていて, 自作した部分はコマンドの引数処理くらいだけど. gnuplotのジェネレータを何回も作るよりかなり効率が良くなったので公開. 他にもこういうツールあるんだろうか.

作ったプログラムはこんな感じ:

  • jinja で書いたテンプレートにデータを流し込む
  • 大きなデータは yaml に入れる
  • コマンドオプションからも,データ入れられる
  • コマンド引数にとったファイル名もデータとして使える
yaml_and_jinja_to_anything.py
import jinja
import os
import codecs
import yaml
import re

re_coding = re.compile('coding *: *(.+)[ \n]')
def guess_encoding(string, default='utf-8' ):
    _re_coding = re_coding
    import re
    try: # to estimate coding
        encoding = _re_coding.search(string).group(1)
    except AttributeError:
        encoding = default
    return encoding

from optparse import OptionParser
parser = OptionParser()
parser.add_option(
    "-y", "--yaml", dest="yfile",
    default=None, metavar="FILE", help="yaml file.")
parser.add_option(
    "-j", "--jinja", dest="jfile",
    help="jinja file.", metavar="FILE")
parser.add_option(
    "-f", "--flags", dest="flag",
    default=None, metavar="FLAG", help="ex) -f name1:flag1,name2:flag2")
parser.add_option(
    "-i", "--jinja_coding", dest="jcoding",
    default=None, metavar="CODING",
    help="coding of jinja file. try to estimate if not specified." )
parser.add_option(
    "-d", "--out_file", dest="ofile",
    default=None, metavar="CODING",
    help=("output file name. if yaml has more than one data, "
          "the file name has suffix.") )
parser.add_option(
    "-o", "--out_coding", dest="ocoding",
    default=None, metavar="CODING",
    help="coding of output file." )

(opts, args) = parser.parse_args()

jstr_unknown = open(opts.jfile, 'rb').read()
if opts.jcoding is not None:
    jcoding = opts.jcoding
else:
    jcoding = guess_encoding(jstr_unknown)
jstr = unicode( jstr_unknown, jcoding )

env = jinja.Environment()
tmp = env.from_string( jstr )

if opts.yfile is not None:
    yaml_data = yaml.load( file(opts.yfile) )
else:
    yaml_data = None

if opts.ofile is None:
    def write_out(string):
        import sys
        codecs.getwriter('utf-8')(sys.stdout).write(string)
else:
    def write_out(string):
        ## print "outfile: ", outfile
        if opts.ocoding is not None:
            ocoding = opts.ocoding
        else:
            ocoding = guess_encoding(string)
        ## print "  coding: ", ocoding
        codecs.open(opts.ofile, 'w', ocoding).write(string)

if opts.flag is not None:
    flag = dict( [ [i.strip() for i in nf.split(":")] 
                   for nf in opts.flag.split(",")
                   ] )
else:
    flag = None

data = dict(
    arg = args,
    flg = flag,
    yml = yaml_data
    )
write_out( tmp.render(data) )

if opts.ofile is None:
    print

このファイルを,”ln-s yaml_and_jinja_to_anything.py yj2a” と して,”yj2a”から実行出きるようにした.

gnuplotのファイルを生成してみる

sin.jin.gnuplot
{% if flg.out == "x11" -%}
  set term x11
{% else %}
  set term png
  set size {{ yml.xsize }}, {{ yml.ysize }}
{% endif %}
{{ yml.options }}

{% if flg.out == "x11" -%}
  set term x11 {{ loop.index0 }}
{% else %}
  set out '{{ yml.imgname }}.png'
{% endif -%}
set multiplot
set size {{ yml.xsize }}, {{ yml.ysize_each }}

{% for p in yml.plot -%}
  set origin {{ p.origin }}
  set xlabel '{{ p.xlabel }}'
  set ylabel '{{ p.ylabel }}'
  plot [-3:3][-1.1:1.1]\
    {%- for l in p.line %}
      {{ l }}
      {%- if not loop.last %},\{% endif -%}
    {% endfor %}
{% endfor -%}
unset multiplot
sin.yml
imgname: sin

xsize: 0.9
ysize: 0.9
ysize_each: 0.45

plot:
  - origin: 0,0
    xlabel: 'x'
    ylabel: 'Sin(n*x)'
    line:
      - 'sin(x)'
      - 'sin(2*x)'
      - 'sin(3*x)'
      - 'sin(3*x)'
      - 'sin(4*x)'
      - 'sin(5*x)'
      - 'sin(6*x)'
      - 'sin(7*x)'
  - origin: 0,0.45
    xlabel: 'x'
    ylabel: 'x**n'
    line:
      - 'x'
      - 'x**2'
      - 'x**3'
      - 'x**4'
      - 'x**5'
      - 'x**6'
      - 'x**7'
      - 'x**8'
実行結果(yj2a -f out:x11 -y sin.yml -j sin.jin.gnuplot)
set term x11

set term x11 
set multiplot
set size 0.9, 0.45

set origin 0,0
  set xlabel 'x'
  set ylabel 'Sin(n*x)'
  plot [-3:3][-1.1:1.1]\
      sin(x),\
      sin(2*x),\
      sin(3*x),\
      sin(3*x),\
      sin(4*x),\
      sin(5*x),\
      sin(6*x),\
      sin(7*x)
set origin 0,0.45
  set xlabel 'x'
  set ylabel 'x**n'
  plot [-3:3][-1.1:1.1]\
      x,\
      x**2,\
      x**3,\
      x**4,\
      x**5,\
      x**6,\
      x**7,\
      x**8
unset multiplot

gnuplotの中で “load ‘< yj2a -f out:x11 -y sin.yml -j sin.jin.gnuplot'” と実行すると,Xにグラフが出力されて, “load ‘< yj2a -y sin.yml -j sin.jin.gnuplot'” と実行すると,sin.pngが作られる:

データを変えて,別のyamlを作ってみる

sin2.yml
imgname: sin2

xsize: 0.9
ysize: 0.9
ysize_each: 0.45

plot:
  - origin: 0,0
    xlabel: 'x'
    ylabel: 'x*Sin(n*x)'
    line:
      - 'x*sin(x)'
      - 'x*sin(2*x)'
      - 'x*sin(3*x)'
      - 'x*sin(3*x)'
      - 'x*sin(4*x)'
      - 'x*sin(5*x)'
      - 'x*sin(6*x)'
      - 'x*sin(7*x)'
  - origin: 0,0.45
    xlabel: 'x'
    ylabel: 'Cos(x**n)'
    line:
      - 'cos(x)'
      - 'cos(x**2)'
      - 'cos(x**3)'
      - 'cos(x**4)'
実行結果

yamlを入れ変えるだけで色々なデータに対応できるし, コマンドオプションでXに出すかpngに出すかも切り替えられて便利!

Written by tkf

February 11, 2009 at 12:13 am

Posted in 研究日誌, PC

Tagged with , ,