2008年12月31日水曜日

大晦日

あと数時間で2008年が終わる。今年はものすごく一年過ぎるのが早かった。ここ数年一年が過ぎるのが早い。たぶん出張が多い&研究のスパンが数か月とか半年単位だからなんだろうなぁ。

今年の漢字は「変」らしい。自分的今年の漢字は「転」かなぁ。いろいろ超展開が多かった。公募の書類の経験値上がるしまぁ無理とは思うが出して見るかーと応募した賞が予想外にもらえてしまったりまぁそのほかにも年末ギリギリまで超展開がいろいろある一年で面白かった。そういや去年ぐらいからわりと日々面白く過ごしてる気がする。ありがたや。

今年も各地を転々としたなぁ。遠出では東京4回、アムステルダム、岩手、松江。合間に京都行ったり奈良行ったり。自分ではひきこもってる傾向ある気がするけどなんだかんだいって結構出歩いているかも知れん。来年はどこ行けるんだろう?とりあえず春学会は東京らしい。また東京か。

研究も結構展開が進んだ。ちょうど一年前はNRGの計算コード作り出してて一不純物問題のテストケースがなかなかうまくいかずに四苦八苦してたんだなぁと見返して思い出した。去年も今年も大晦日似たようなことしてるなぁ。今から思えばプログラミング経験ほぼ0で一からNRG自作とかよくやる気になったもんだ。無謀というか今から思えば半分自棄だったんだな。かなり苦しかったが、選択してよかったと思う。他の人に役立つイノベーションを創出したわけではないが、自力で何か知らんことを把握して使えるようになったという経験はすこしは自信の元になるだろう。

さて学年的にも、流れ的にも今年は起承転結の転だったわけで、来年は今年いろいろいじったり拡張したものをまとめる「結」の一年となりそうだ。D論も書かないといけないし。気は抜かないけどまぁ楽しく面白く一年やっていけますように。来年もよろしく。

2008年12月28日日曜日

年賀状とか

今年は年越しの準備もぼちぼちすすめ、割合順当にすべてが進んでいるはずだったんだがここにきて親戚が入院とかアクシデントかい、ということで今年もなんだか順当ではない年末年始になりそうな気配だったりする。年末年始は通常業務+恒例行事な仕事+たいていなんかハプニングですごいドタバタすることが多いので正直「年末年始だからって特別に構えず普通の日々として過ごせばええがな…」と思う。酢の物ぎらいとしては、おせちの具は正直苦手なもののオンパレードだしな。酢蓮根とか酢牛蒡まじ勘弁。

でもなんか大掃除はしなくてはならない気がして玄関を水で流すとかしててとうとう足にしもやけが発生する。痒くて発狂もの。大掃除は日本的しきたりなのかして研究室の大掃除のときは、留学生に「みんなやたら掃除してるけど査察がはいるのか?」って聞かれた。査察っていう発想もすごいと思うけど。むしろ向こうの国には大学にも査察があるってことか?

年賀状を作る。新PCはメーカー製じゃないので、年賀状作成ソフトとかが入っていない。年一回のことに専用ソフトを買うのもなんか嫌なので、WordとExcelでなんとか凌ごうとする。
参考サイト
http://kokoro.kir.jp/know/nenga.html

Wordの機能に「差し込み文章」というのがあって、その「作成」っていうボタンから、はがき文面印刷ウィザードなるものが立ち上がる。宛名の作成のときに、Excelで作った住所録を読み込むことができる。なのでWordとExcelで年賀状も何とかなるわけだ。まぁいろいろ使いにくいところも多々あって(Word側でウィザード使ってる間Excelの元ファイルを開けないとか、なぜかウィザード使ってる間は互換バージョンなのでしょっちゅうバグるとか)専用ソフトのほうがそりゃ使いやすいわ。まぁ試行錯誤のすえなんとか刷ることはできて問題は添える一言だったりする。こういうん本気で苦手やわぁ。気の利いた短文なんてなかなか思いつかんよなぁ。

2008年12月26日金曜日

仕事納め

仕事納めしてきた。まぁ研究そのものは計算機も動いてるし年末年始かんけーなくたぶん家でぼちぼちやってるんだろうが。事務が今日で年内終りなので大学行く必要は明日以降来年5日までだいぶ薄れる。企業は29日締めなのかなぁ。大学エリアは小雪舞うほど寒くて電車から出た瞬間「やべ…さむっ」って感じで家帰りたくなる。寒いのとなんか眠いのやその他もろもろで締めなのに大半ぼけーっとしてなんもせんと終わってしまった。

いい加減26日なので年末を実感してもいい気がするんだが、あんまり年の瀬な気分しない。研究室の人間も結構ぎりぎりまで実家帰らない人多い。大学はむしろ3月が年末な感じだからなぁ。そして本業が一部現在進行中なせいもある。年内の目標は完了したけど、じゃー次の段階に進めるかって結局進行中。あと5日でキリいいところまですすむんかー??掃除もせにゃならんしなんか忙しいのぅ。

2008年12月23日火曜日

そうだ休みだった

今日が祭日で休みであることに昨日の夜に気がついた。やばい、普通に大学行くところだった。月曜に普通の生活して、また休みってなんか勘が狂うのでやだな。まぁ実際はあまり休みじゃなくて、掃除と年末恒例家内手工業的家業で暮れていったので普通に大学に行ったほうが楽だったかも知れん。大学の机は昨日大掃除で片付けたのですごいきれいで快適な状態だし。

自宅の大掃除を一日でするのは死亡確定だなぁと思ったので、分割統治方式でいくことにした。プロジェクト管理ツールを無駄に使ってみるテスト。だって本当に掃除が苦手なんだもん。管理しないと、手付けてない部分と無駄にすげー頑張った部分とができて全体としてあまりきれいじゃない状態で終わりそうだ。とりあえず今日はベランダとかサッシとかの水洗いと机の周辺=腐海をなんとかしようとする。机の上は一応表面が出るようにはしてるんだが、その周辺のファイル入れとかに紙類をろくに考えずにほりこんでるのでわけがわからない。いちおー研究してるもんで紙類は異様にたまる。文科系だと溜まるのは本らしいが理科系の場合オンラインでPDFのファイル落としてくるのが大半なのでめんどくさがってファイリングとかしないと使えない紙類がたまりにたまる。PDFなんだから画面でみりゃいいようなもんだが書き込みとか目の疲れを考えるとやっぱ印刷してから見たくなるな。なんとなくプログラムも印刷してからチェックしたくなる。数年前にプリントアウトして未読のいつか読むかもな論文コレクションとか結構思い切っていろいろ捨てたワリにはすっきりしないなぁ。寒い中水仕事したのと腐海の毒で風邪ひいたわ…。
あしたはクリスマスイブらしいが、B4がゼミするらしいので大学に行かねば。まぁ異教徒の祭りだからいいんだけどさ…。今年の4年生まじめやなぁー。自分が4年のころってクリスマスはもちろん、ものすごい長い冬休み取ってた気がする。あのころ勉強してりゃいまごろ楽できたやろな…。工学部自体は空気読めるのか22日で授業は終わりらしい。大学すげー人口密度低そうだぁ。しゃーない粛々と研究すっか。

2008年12月19日金曜日

SYNC

朝の4時に胃がモーレツに痛くて目が覚める。揚げ物の威力恐るべし。それとも風邪なのか。なんでよりによって早朝に腹痛が来るかね。そういえばこないだもこんなことがあった。

まぁそれで思い出したのが体内時計の話だったりする。内臓機能や睡眠周期は体温の上下と同期しているそうな。で、通常の生活をしていると体温の最下点が朝3時とか5時にくるらしくこのときに一番人間の認知能力が下がるらしい。(私の場合、腹痛が朝来るのも体温下がるからか?)

てな話が最近読んだ「SYNC」つー本に出てた。SYNCは別に睡眠周期についての本というわけでなく、いろんなところに出てくる同期現象についてのレビューみたいな内容になっている。こないだ読んだ蔵本先生の本で非線形科学なんかおもしろそーやんとおもってその流れで読んでみた。ホタルの点滅も睡眠周期も同じような数理モデルで扱えるそうな。物性系でもモデル扱うけど、数理工学系のモデルはいろんな要素をばさばさ切りまくっててなんか感触が違うなぁと思う。でもこの同期現象についてウィーナーって人が模式的に提案したピークが妙に近藤ピークの傾向に似てて気になる。超伝導は同期現象らしいが近藤効果も同期現象の一種とみなせるんか?

ホタルの話等もおもしろかったんだが、なんか一番興味引かれたのは「スモールワールドネットワーク」。ランダムなコネクションが入ることで、近隣に影響されるクラスターな性質を持ちつつすごい離れた部分と相互作用するようになり、系が一気に同期しやすくなるそうな。実社会の人間関係とかとよく対応してそう。近場とも遠くとも相互作用することで、「スケールフリー」になって、ってな話は相転移ともなんか共通するものを感じる。スケールフリーとかべき乗則はなんかいろんなとこに出てくるキーワードだな。そういうものをいかに扱うかっていう方法論がいろんなところで必要になるんだろう。覚えとこ。

2008年12月17日水曜日

ボトルネック

使う対称性を変えて計算するバージョンも出来上がった。保存量として全スピンを採用するほうが基底数が減るし保持する基底が少なくても精度がでて断然よいだろうから計算効率としてQS対称性>>QSz対称性だと勝手に思っていたが、QSzのバージョンは比較にならんほど速度がでてびっくりする。5時間かかってた計算が20分弱に短縮される。なんかすごいミスしてるんじゃないかと逆に焦るな…してるんかもしれんが…。そら短時間ですめば済むほどいいんだが、何が結局前のバージョンのボトルネックだったのか探らんと気持ち悪い。

fortranで実行時間の計測は
system_clock(integer型)
という組み込み手続きを使える。たとえばcall system_clock(t1)のようにすると、t1に呼び出された時点での「処理系の時間=1970 年 1 月 1 日の 00:00 からの経過秒数?」なる壮大な数字が返ってくる。ほんとは引数は3つあってsystem_clock(count,count_rate,count_max)らしいけど。二個目は一秒に何回時計が刻むかとか3つ目は最大値がいくらかとかなのでまぁ省略してもよかろうと。何回か呼び出してその差をとればどのサブルーチンがどんだけ時間くってるかわかるわけで、さてこれでボトルネックをちまちま探そう…

今日は忘年会で、串揚げ自分で揚げ放題で食べ放題のところに行った。揚げ物普段あんまし食べないのでまずまずおいしかったけどこたえまくり。あー忘年会終わったとはいえまだ忘年できないなぁ。とりあえず予算関連を年内に片付けないと…

2008年12月15日月曜日

フォック空間(チラシの裏レベル)

参考論文の式は導出さっさとできたぜちょろいぜとナメてかかってたらそんなに甘い話じゃなかった。第二量子化された形式の式変形は数学とゆーより記号の規則に沿ってがちゃがちゃ並べ替えるだけなので慣れてしまえば追うのはそんなに難しくない。やばいのはその意味の把握。そもそも完備なフォック空間云々とかいう以前にFock空間がなにかはっきり分かってないのがよろしくない。
量子論というと、あーシュレディンガー方程式でしょ?ってイメージだが、実際使うときにはあの微分方程式の形式をそのままごりごり解くわけでは無かったりする。だって大抵の微分方程式ってそのままではうまく解けないし。演習でやるようにポテンシャル障壁が無限で閉じ込められてますよみたく極端な境界条件とかじゃないと解析的な解は出ない。ひとつの方法として微分方程式解く代わりに、例の波動関数をベクトルとみなして、固有値問題とか変分の問題に読み替えたりする。実際使う段になると量子論=ほとんど線形代数。(微分方程式の形状で攻めていくにしろ数値的に扱うときにはほとんど差分方程式とかに落として線形代数の問題にしてしまうし)このベクトルが張る空間がヒルベルト空間に相当するらしい。

一粒子の系ならベクトルとみなすだけでええかんじになるんだけど、粒子が何個もあると、波動関数の形を決めるのに反対称性だのなんだのの規約が入ってきて波動関数ひとつ書くのもとにかくめんどくさい。粒子の入れ替えに対して波動関数の符号がどうなるか+どの粒子が何個あるかだけで状態を書けばええやんってのが第二量子化の発想(だと思われる)。なので第二量子化された場合の基底ベクトルは各粒子の個数の情報で決まるベクトル(アップスピンのが一個とか二個とか)の直積(テンソル積?)の形状になっている。|n1>|n2>…|nN>みたいなイメージかね。そんなベクトルで張られる空間をフォック空間というらしい。なーんか裏にいろいろ数学的構造があって対称性・反対称性の性質をうまく使って縮約してるんだよとか聞くけどよくわからん。

とにかくフォック空間は生成消滅演算子を作用させたベクトルの直積で張られるっぽいので今使ってる基底(全スピンの固有状態になるようにいろいろひねっててシンプルな直積になってない)でフォック空間を定義していくのはまずい気がしてきて、結構最初からコード組み直しかよって感じだ。基底が直積で書けるようにQ,Szの対称性でするもんなんかなぁ。教えて偉い人。まぁそれだと磁場の影響とか異方性の影響も見れるからいいんだけど、一からまたかんがえるのめんどくせー。

2008年12月14日日曜日

TA関連2

大学が停電してなんも作業できなくなってチョー暇暇になる。まず研究がらみのこと以外基本することないんかい…てのがとても問題なんだけど。暇なんで掃除したりうだうだしたりついでにTAで面倒見ている課題の完成形を作ってみる。
前で一応「点滅」まではなんとかなったわけで、クリスマスツリーらしきものにするためには、背景画像を読み込んで、その上に描画する+描画する色を選択可能、点滅は色の系統ごとにばらばらに点滅する+点滅の開始、停止、クリアができるようにするという仕様にする。gif読み込んで表示するほうが速そうなので、電球とかも全部画像で保存しておく。

javaにおいてはインターフェースってのが多用されてるみたいだ。イベント処理とかにはそれに応じたインターフェースをimplement(なにそれ)してつかうっぽい。インターフェースってそもそもなんやねんって感じだが、こういう部品をつかいますよってのだけが定義されてて実際の動作は使う側で記述しなあかんものらしい。んーメソッドを直に書いたらだめなんかいな。なにが嬉しいんかちと分かりにくいぞ。(f90にもinterface文はあるけど形状引継ぎ配列使うときとかに要る、サブルーチンとかの引用時の仕様定義ってだけでどっちかというとめんどくさーって感じかなぁ。)

背景画像をアプレットの表示サイズが変えられてもリサイズして表示するようにするためには、インターフェースComponentListenerをimplementして必要なメソッドを記述&特にcomponentResizedにリサイズ処理を書けばよいらしい。
ボタン関連のイベント処理はActionListenerていうインターフェース+ボタンにActionListenerを追加+actionPerformedにボタンごとに処理をちまちま書いていけばいいぽい。
画像の読み込み待ちにMediaTrackerなるものをつかうといいらしい。
ボタンの配置をいじりたいときはPanel上にボタンを配置するようにする模様。
↓とりあえずできた物。たぶん効率悪い処理しまくり


import java.awt.*;

import java.applet.Applet;

import java.awt.Graphics;

import java.awt.event.*;

import java.net.URL;


public class test2 extends Applet
implements Runnable,MouseListener,ActionListener,ComponentListener{
private static final long serialVersionUID = 1L;

String status,msg;
int change=0;
int posX;
int posY;
int radius=20;
public int col=-1;
int radiuspink,radiusgreen,radiusblue;
int BUTTON_NUM=6;
Image off=null,img;
Image pink,blue,green;
int w,h;
boolean flag=false;
Graphics g;
public final int MAX=100; //かける最大数
private Button[] buttons ;
public int nump=0, numb=0,numg=0; //個数
public Point[] pinkoval=new Point[MAX];// 座標
public Point[] blueoval=new Point[MAX];
public Point[] greenoval=new Point[MAX];
Thread th;
boolean start=false;//点滅の制御
Color c0,c1,c2; //色の設定用

//イベント処理用のメソッド
//マウス関連(MouseListener)
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e) {
if ( col != -1){
if (col==0){//pink
if(nump<MAX){ // for Max number
pinkoval[nump]=new Point(e.getX(),e.getY()); // get coodinate¸
nump++; //
repaint(); //
}
}
if (col==1){//blue
if(numb<MAX){ // for Max number
blueoval[numb]=new Point(e.getX(),e.getY()); // get coodinate¸
numb++; //
repaint(); //
}
}
if (col==2){//green
if(numg<MAX){ // for Max number
greenoval[numg]=new Point(e.getX(),e.getY()); // get coodinate¸
numg++; //
repaint(); //
}
}
}
}

public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}


//ボタンのイベント処理(ActionListener)
public void actionPerformed (ActionEvent e){
if (e.getSource()==buttons[0]){
col=0;
}
if (e.getSource()==buttons[1]){
col=1;
}
if (e.getSource()==buttons[2]){
col=2;
}
if (e.getSource()==buttons[3]){
start=true;
}
if (e.getSource()==buttons[4]){
start=false;
}//startボタン
if (e.getSource()==buttons[5]){
nump=0;numb=0;numg=0;
}//clearボタン
}

//リサイズ処理(ComponentListener)
public void componentResized(ComponentEvent e){
Dimension dim = getSize();
if( img != null)
/* サイズを変更した画像を作成する */
img = img.getScaledInstance(dim.width, dim.height, Image.SCALE_SMOOTH);
}

public void componentMoved(ComponentEvent e){}
public void componentShown(ComponentEvent e){}
public void componentHidden(ComponentEvent e){}


public void init(){
buttons = new Button[BUTTON_NUM] ;
setBackground(Color.white);
setForeground(Color.gray);
setFont(new Font("Serif", Font.BOLD, 20));
setLayout(new BorderLayout());
posX=0;
posY=0;

status="out";
Panel Panel1 = new Panel();
Panel1.setLayout(new GridLayout(2,3));
Panel1.setBackground(Color.WHITE);
this.addMouseListener(this);
this.addComponentListener(this);
//画像のリサイズ
this.componentResized(null);
//ボタン設定
buttons[0] = new Button("pink");
buttons[1] = new Button("blue");
buttons[2] = new Button("green");
buttons[3] = new Button("start");
buttons[4] = new Button("stop");
buttons[5] = new Button("clear");
for ( int i = 0 ; i < BUTTON_NUM ; ++i ){
//ボタンに処理を追加
buttons[i].addActionListener(this);
//パネルにボタンを追加
Panel1.add(buttons[i]);

}
//色の設定
c1=new Color(180,210,255);
c2=new Color(180,255,180);
buttons[0].setBackground(Color.PINK);
buttons[1].setBackground(c1);
buttons[2].setBackground(c2);
//下に配置
add ("South",Panel1);

}


public void start(){
//画像読み込み

pink=getImage(getCodeBase(),"pink.png");
green=getImage(getCodeBase(),"green.png");
blue=getImage(getCodeBase(),"blue.png");

String param0 = "tree.png";
if(param0 != null)
{
img = getImage(getCodeBase(), param0);
URL urlCode = getCodeBase();
System.out.println("Code : " + urlCode.getPath());

if(img == null)
{
String msg = "fail to read file";
System.out.print("fail to read file");

repaint();
return;
}
}
th = new Thread(this);
th.start();
}

private void loadBackground(Image back)
{
msg = "loading";
repaint();
// 画像が読み込み終わるのを待つ (Media Tracker)
MediaTracker mt = new MediaTracker(this);
mt.addImage(img, 0);
mt.addImage(pink, 1);
mt.addImage(green, 2);
mt.addImage(blue, 3);
while((img.getWidth(this)) == -1 || pink.getWidth(this)==-1
|| green.getWidth(this)==-1 || blue.getWidth(this)==-1)
{
try
{
mt.waitForID(0);
mt.waitForID(1);
mt.waitForID(2);
mt.waitForID(3);
if(mt.isErrorID(0) && mt.isErrorID(1)&& mt.isErrorID(2) && mt.isErrorID(3))
throw new NullPointerException();
}catch(Exception e)
{
msg="finish";
repaint();
return;
}
}

System.out.println("img.getWidth="+img.getWidth(this));
Graphics gg = back.getGraphics();
gg.drawImage(img, 0,0,this);
gg.dispose();
radiuspink=pink.getWidth(this);
radiusblue=blue.getWidth(this);
radiusgreen=green.getWidth(this);
// check for loading
System.out.println("pink"+radiuspink+"blue"+radiusblue);


}

public void run(){

Image back = null;
Dimension dim = getSize();
w = dim.width;
h = dim.height;
if(w <= 0 || h <= 0)
{
w = 500;
h = 500;
}
off = createImage(w, h);
back = createImage(w, h);
g = off.getGraphics();
loadBackground(back);

if (start=false){
repaint();
}
else{
for(;;){
repaint();
if (change< 300){
change=change+1;
}
else {change=0;}

try{
Thread.sleep(500);
}
catch(InterruptedException e){
}

}
}
}

public void update(Graphics g)
{
paint(g);
}

public void paint (Graphics g){

g.drawImage(img, 0, 0, this);

if (start==false){
for (int i=0;i<nump ;i++){
g.drawImage(pink,pinkoval[i].x-radiuspink/2,pinkoval[i].y-radiuspink/2,this);
}
for (int i=0;i<numb ;i++){
g.drawImage(blue,blueoval[i].x-radiusblue/2,blueoval[i].y-radiusblue/2,this);
}
for (int i=0;i<numg ;i++){
g.drawImage(green,greenoval[i].x-radiusgreen/2,greenoval[i].y-radiusgreen/2,this);
}

}

else{
if ((change%3)==0 ||(change%3)==1){
for (int i=0;i<nump ;i++){
g.drawImage(pink,pinkoval[i].x-radiuspink/2,pinkoval[i].y-radiuspink/2,this);
}}
if ((change%3)==1 || (change%3)==2){
for (int i=0;i<numb ;i++){
g.drawImage(blue,blueoval[i].x-radiusblue/2,blueoval[i].y-radiusblue/2,this);
}}
if ((change%3)==2||(change%3)==0 ){
for (int i=0;i<numg ;i++){
g.drawImage(green,greenoval[i].x-radiusgreen/2,greenoval[i].y-radiusgreen/2,this);
}}
}

}

public void stop(){}

public void destroy(){}

}

さて学生さんになんて説明したらええんやら。300行ぐらいのサンプルで「え、長い(読むのやだなぁ)」って言われるしなぁ。輪講とかでも思うけどダイレクトに答え言わずほのめかして、考えさせて、正解に持っていかせるのって超むずかしい…

2008年12月11日木曜日

新規作成

新しい数値計算用のコードを作り始めた。Complete Fock Spaceを用いる方法で、これを把握すれば磁場下もOK,時間発展もOKっていうなかなか強力な手法らしい。時間発展とかいわれるとなんか手を出してみてたくなるよなぁ。ダイナミクスだもん。

NRGは「くりこみ群」なので本来、あるエネルギースケールでの固有値を順に求めていく+各段階で次のスケールにかかわってこないであろう高エネルギーの状態を捨てていくことで計算機のメモリがかなり少なくても計算できるスキームになっている、スバラシイ、個人的にこの辺も気に入っている。通常の不純物問題ならば、このエネルギースケールでの階層分け&どう考えても低エネルギー状態に寄与してこない状態をばしばし切るのは賢いやりかたなんだけど、磁場がある場合みたいにそんな階層をぶちぎったべつのエネルギースケールがある場合には切っている部分の効果が無視できるのかという問題が出てくる。

そこでreduced density matrixですよ。このreduced density matrixをつかえば、系が環境とシステム(注目する部分系)からなっているときに、システムの部分だけにかかわってくる物理量の計算に使う密度行列に環境の影響を含ませることができ、部分系を扱うことによって生じる「端の効果」みたいなもんを抑えることができる模様。DMRGでもつかわれているっぽいな。計算の流れとしては、トータル2回NRGの計算を行って、2回目のときに捨てている部分の寄与を合成してしまうようなイメージになっているようだ。なんだかアルゴリズム考えるの難しそーだが面白そう。最初の計算のときにでてくるものすごい大量のデータを保持する必要がある。まぁ最近のメモリ容量なら余裕なんだろうが。

で、データを格納していく部分をつくってたら、久しぶりに意味フなエラーをくらった。
*** glibc detected *** double free or corruption (out): 0x000000002f5a0270 ***
forrtl: error (76): IOT trap signal
Aborted

データ入出力関係でエラーが出て、強制終了したらしい。不気味なことに、結果はちゃんとそれらしいことが返ってきているという。

*** glibc detected *** double free or corruption はRedHat系ではデータの破損を検出したときに出るっぽい。
forrtl: error (76): IOT trap signal
入出力関係で異常終了。(通常coreダンプ出るらしいが、今回なんもでなかったんだけど。)

ちなみに原因は4列で宣言した配列に5列あるデータを代入しようとしていたから。IOT trap signalくらったら配列を疑ってかかるのがいいのかもしれない。

2008年12月8日月曜日

Texメモ

学会で岩手行った時に帰りに中尊寺によったら、そこの神社から新年のご祈祷しませんかっていうDMが来た。最近は宗教関係も営業をしっかりしてるんだなぁと妙に感心する。顧客というか定期的にきはる人々にはご案内だしたりするけど、一見さんのデータまで把握して発送するとは気合い入っているなぁ。たしかにわざわざ封筒まで付けて送ってきてもらったのをスルーするのもなんだしやってみるかねぇとか思ってしまうな。普通の会社よりDMの効果は大だと思う。

論文の苦行続く…こんどは短めのletterの形式で書こうということになったんだが、letterの場合、大抵スタイルシートが配布されてないのでReferenceの形式とかを自分でいじらないといけない。アブストでもなんでもTexのスタイルシート落としてきて、ってのに慣れきっているのでTexのあれこれを忘れまくっている。ので調べたことをメモ

日本語対応のplatexとかだと、「参考文献」とか「図」とかが出てきてしまって困る
→プリアンプル部分に
\newcommand\refname{References}
\newcommand\figurename{Fig.}
\newcommand\tablename{Table}
\newcommand\appendixname{Appendix}

デフォルトの参考文献の行間でかすぎ対策
JPSJのスタイルファイルを凝視した結果プリアンプル部分にこういう感じのマクロ書いとくといいぽいのがわかった( これは 1) A.AAA et.al. みたいに番号)で出力されるタイプになってる模様)

\def\thebibliography#1{%
%改ページする仕様
\clearpage
%参考文献はボールドで出力される
\par\noindent\textbf{\refname}\par\vskip -4pt %\vskipで行間を設定
\small
\list{\arabic{enumi})}{\settowidth\labelwidth{[#1]}
%↑で出力の形式を番号)にしているぽい
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\usecounter{enumi}}
\sloppy
\sfcode`\.=500\relax}
\let\endthebibliography=\endlist

Tex奥が深すぎ。やばい

2008年12月7日日曜日

筋違え

どんな寝方したんだか、起きたら肩甲骨近傍の筋肉が攣ってかなり痛い。あんまり動けないのでひたすら寝る。親にそれは40肩っていわれた。いやまだありえんから。

学部時代に所属してた部活の発表会に行った。受付とかめずらしく働いてみる。研究室じゃかなり年長の部類なんで基本働かんもので。営業スマイル&お辞儀とか普段せん活動してみるのもいいかと。めっちゃ久し振りに会った同期に「OBがなにやってるん??」て驚かれる。なれんことやったから肩がつったのかね。手品見に行ってメーカー研究職の後輩となぜか専門分野トーク。やはりミクロスコピックとマクロスコピックの中間をつなぐ理論がねーのが問題だなぁという結論。あぁーやっぱりそこだよなぁ。

発表会はリハーサル等を全く見ていなかったので純粋にお客さんとして楽しんだ。見て「おぉ、なんかおもしれえ」と思うのはどこがツボなんだろうかとかをちょっと考える。研究発表とかでもそうなんだろうけど、まずわかりやすさじゃないかと。それに加えてとても独創的なことをするか、もしくはある程度定型っぽいんだけど美しく仕上げているものに持っていくのがウケる王道なんだろうかなぁと。いいなと思ったのが3つほどあって、ひとつは前者、2つは後者だと思う。そして独創性の追求は両刃だと思う。独創性を生み出そうとしてわけわからんくなってしまうと見ている間中ひたすら「これはなにをしたいんだ???」になる。って分析してんと普通に楽しめよって感じですな。職業病ですわ。

さて今日は一日寝てマンガよんで終わってしまったので明日からまた働かんとなぁ。イムリおもしれ~。なんとなく砂の惑星ちっくなSFっぽさ漂ってていい。SFっぽいの結構好きなんだが、たまに厨ぽいのひいちゃってあちゃーになる。けどこれは面白そうな予感。続き一気買いしたいけど新幹線代のせいで限度額越えでカードがしばらくAmazonで使えない罠。CDも買えないし不便でしょうがない。

2008年12月5日金曜日

TA関連

プログラミングの授業をTAでしていて、今週から最終のグループ課題が始まった。ワタシらは言語がJavaに切り替わった最初の代だったので、方針とか固まってなかったせいか、個人でする課題だけで、アプレットに適当に図形出して終わりとかだったんだが、今のグループ課題ってのは班ごとに描画ソフトウェアつくってこいとか結構いかつい課題が出るみたいだ。最近の子はたいへんやねぇ~とか思ってたら、各班に一人TAがついて面倒見るってことなので、他人事じゃなくなった。

課題は選択なので、なんとかして楽勝なのを選んでもらおうと誘導を試みる。非線形微分方程式の数値計算のが一番楽だしGUIも大していらんし超お勧めだったんだが、学部生は数値計算を避けたがるぽい。全然凝ってない差分方程式とかアルゴリズムも課題文に書いてあるようなもんだし一番楽やのに。カオスとかにも絡んできて結構面白いと思うんやけどなぁ。結局クリスマスツリー+イルミネーションを表示するていう課題になったらしい。

Fortranの人なのでJavaで描画とか全然わかんねぇよと思いながら、片手間にちょろっと調べてみる。聞かれてわかんねーとかDの面目がね・・・(専門外だけど)。まぁそれにDMRGやらサイトパーコレーションのJavaアプレット作成例とかもあるし、物理屋も可視化の方法を知っておくのは悪くなかろうと。

まず必須の機能である「・マウスで選択した部分に・電球を示すブツを配置して・点滅させる」をどう実現するかを考える。Swingはなんかしんどそーなのでとりあえずアプレットを作る。
いちおうそれっぽいのが実現したのでメモ

import java.awt.*;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.*;

public class Myapplet extends Applet implements Runnable{
    String status;
    int radius=20;
    boolean flag=true;
    private final int MAX=100;        // 描ける丸の最大数
    private int num=0;            // 描かれている丸の数
    private Point[] oval=new Point[MAX];    // 座標を保持するための配列
    public static final Color[] pal = new Color[256];//色の情報を保持
    Thread th;
   
    static
    {
        for(int c=0;c<256;c++)
        {
            pal[c]=new Color(c,c,0);
        }
    }
    public void init(){
        //初期化
       
        setBackground(Color.black);
        setForeground(Color.black);
        setFont(new Font("Serif", Font.BOLD, 20));
        //リスナークラスのインスタンス化
        EventHandler eh = new EventHandler(this);
        //フィールドの初期化
        status="out";
        //リスナーの追加
        this.addMouseListener(eh);
       
    }


    public void start(){
        //開始
        th = new Thread(this);
        th.start();
    }
   
    public void run(){

      for(;;){
          repaint();
            flag=! flag;
            try{
                   Thread.sleep(300);//スレッドの停止(点滅させる)
                }
                catch(InterruptedException e){
                }

        }
    }
   
    public void paint (Graphics g){
        if (flag==true){
             for (int i=0;i<num ;i++){
                 g.clearRect(oval[i].x-radius/2,oval[i].y-radius/2,radius,radius);
                 //描画した円がある部分をクリアする
                 }
        }
       
        else{
     for (int i=0;i<num ;i++){
        for(int j=radius;j>0;j-=2)
            {
                int c=255-255*j/25;
                g.setColor(pal[c]);//重ねて描画すると電球ぽく
                g.fillOval(oval[i].x-j/2,oval[i].y-j/2,j,j);
            }
        }
        }
           
    }

    public void stop(){}
    public void destroy(){}
   
    class EventHandler implements MouseListener {
        Myapplet apl;
        EventHandler(Myapplet obj){
            apl = obj;
          }
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}

        public void mouseClicked(MouseEvent e) {
             if(num<MAX){        // 最大数を超えていなければ、
                 oval[num]=new Point(e.getX(),e.getY());    // 座標を保存
                 num++;            // 円の数を1つ増やす
                 repaint();        // 再描画する
               }
                               
        }
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
    }
}

まぁ最低限、点滅する電球的なものを作れることはわかった。あとは背景に画像を入れたり、描画した部分のクリアのしかたをもうちょっと何とかしたり、ボタン作って色選択したりとかかねー。それにしてもJavaって長い名前多いな。ややこしい。イベントハンドラをインスタンス化とか言われても宇宙語?って感じっす。あー学生になんて説明したらいいんだ?


2008年12月3日水曜日

バイナリ

もしかしたら近々Fortran90のバイナリの入出力がいるかもしれないのでメモ

program main
integer :: i
real(8) :: a,b

open(12,file="test_unformat.dat",access="direct",&
form="unformatted",recl=64)
do i=1,10
a=dble(i)
write(12,rec=i) a
end do
close (12)

open(13,file="test_unformat.dat",access="direct",&
form="unformatted",recl=64)
do i=1,10
read(13,rec=i) b
print*,b
end do
close(13)

end

バイナリを扱うときには
openでaccess="direct"が便利(直接探査、recl=で決めたデータ長のデータを扱い、データ番号で指定して自由に読み書きできる)ていうかdirectにした時点でバイナリで書かれてしまうぽいけど。
recl指定しとかないとコンパイルエラー来た。
form="unformatted"もしくはform="binary"
データに互換性を持たせたいときはform="binary"がよいらしい
write,readでどのデータ番号に入出力するかはrec=で決定

2008年12月1日月曜日

手帳

手帳買うか迷ってる。
なんちゅーか大半を家と研究室で過ごし、その大半PCの前にいるために、スケジュール管理はgoogleカレンダーに記入で間に合ってしまっている。手帳かったらそこにまたその予定を書き写すとか二度手間やんけとか思うわけで。Moleskinかっけーとか思ったけど、サイズの割に高い+ペンさすところない+あんまり結局使わんよなぁと思って買ってない。電車の中で思いついたことなり計算なりをすべくノートの類は鞄に入ってるけど、手帳ってそういう用途には使いにくいしなぁ。そんなわけでgoogleカレンダーのプリントアウトをいつも持ち歩いてるノートに貼っとくでいいかってのがファイナルアンサーになりそうだ。あーでもMoleskinええよなぁ。

Wordの数式エディタは使いにくさ最強だったんだがOffice2007になってめちゃめちゃ改造されたみたいだ。Tex記法が効くようになった。とういうわけで使ってみる。\sumとか打ってスペースキー打つと∑でてくるやん、すげー。\cdotもちゃんとドットに変換されるし、_で下付きに認識される。\sum_(i)でちゃんとiで総和をとるの形に変換されるとは、MSは腕をあげたな。基本的にマウスで選んで押して・・・って作業が嫌いであぁもうTexでいいよとかTex派だったんだが、これならWordでTexより早く論文かけるかも知れん。あとは参考文献引用関連をTex並みにしてくれればWordに文句がなくなってしまう。
PowerPointの数式エディタはまだ旧バージョンみたいだが、旧でも一応キーボードショートカットはいくつかあるんだな。知らんかった。うーん、もうOffice主流でいいかも。さてD論どっちで書くかね。