2010年2月13日土曜日

XP PC に UTC を表示

かずぼんのホームページに存在する「Tclock Light」はタスクバー右側の時計表示を自由なフォーマットにするソフトウェア。

インストールして、書式指定を次の文字列に換えることで、JSTとUTCを並列して表示することができるようになる。

JST yyyy/mm/dd ddd  hh:nn:ss\nUTC td-09:00yyyy/mm/dd dde hh:nn:ss

フォントは適当な等幅フォントに変更するとよい。

最終的に得られるのはこんなイメージ。

image

とりあえず雰囲気は大切。

参考

飛騨天文台NTP

plasma が NTP サーバーらしい。

2010年2月12日金曜日

SSW (Solar SoftWare) IDL Desktop Environment

SSWIDL でデスクトップ環境を立ち上げるためのメモ。

idlh も良いけど Desktop Environment は状況によっては便利。

飛騨とかの環境では、idlh で「環境設定→sswidl起動」のスクリプトが立ち上がるようになっている。

$ whereis idlh

で場所がわかる。飛騨の場合は /usr/local/bin/idlhにあった。このスクリプトをコピーして使いたい。ホームディレクトリ下に bin という名前でディレクトリを作成して、そこに /usr/local/bin/idlh を適当に名前を変えて(idlhde とか)コピーする。

該当するスクリプトファイルを開いて、一番下の行を書き換える。

sswidl $argv[*]

となっている。(ctshの方言で、sswidlというエイリアスで指定されたコマンドに、最初に呼び出されたidlhに指定されたコマンドをそのまま引き渡している)。これを

sswidlde

に書き換える。保存後は idlhde で起動するはず。

IDL Codestyle Guide?

ないのか?

NASAの “The IDL Astronomy User’s Library” を参考にしすつ、個人的にこうやって書いたらいいんじゃないか的なのをメモ。

一般的なこと

  • 長すぎる行は $ で分割して書く。
  • インデントは適切に行なう。

関数・プロシージャ定義

FUNCTION/PRO FUNCTIONNAME END は大文字で書く。引数は小文字で記入する。なるべくキーワード付き引数を使うと後の拡張が楽なんだろう。キーワードは大文字で、同名変数を右側に小文字で書く。なるべく同名にするように心がける。ちなみに IDL は配列を常に裏側で参照渡ししているらしい。気持ちわるー

定義内では必ずインデントする。関数の中身はすぐ次の行から書き始める。一般的には中身の前にコメントを入れる。関数の役割や引数に関してのコメントを関数定義の中に書くか、その前に書くかは流儀が分かれる。中に書くことにする。

関数名は全て大文字で書く。

制御構文

制御構文は必ず大文字で書く。明らかに使わない方が簡潔で美しい場合を除き、 BEGIN END ブロックを使用する。

制御構文の条件には単変数(フラグ)を使用する場合を除き必ず括弧を使用する。

ラベルは必ず大文字で書く。

変数

変数は小文字で書く。ただし、一文字だけの変数、フラグは大文字で書く。

変数は命名規則を元に命名しておくことにする。具体的には Camel 記法、Pascal記法、アンダーバーセパレーションのどれかを使う。自分はアンダーバーセパレーションを利用することにした。

ポインタとグローバル変数に関しては(のみ)ハンガリアン記法 p_ および g_ を使うことにする。配列に関しては a_ を使わない。そもそも組み込みの文字列型があるのと、配列になりそうなものは別途変数名にそう書いてある(***_image とか)なので問題はないだろう。

終わり

コメントはたくさん書いた方がよさげ。

2010年2月4日木曜日

計算機が応答しない時

計算機室の計算機が応答しない時、具体的には電源を入れても初期画面(BIOS)さえ表示されない時は、一度PC本体をコンセントから抜いてみると復旧することが!

なんでここの PC 起動がおかしいんだろう。

2010年1月29日金曜日

IDL でマルチコアを使い切る

方針的な物がわかりました。たぶん。

IDL では FORK は使えなくて、 Thread はユーザーが見えない範囲で一部の関数の計算に使用されています。

まぁでも特定関数に対する Thread の利用はそんなに効率があがらないっぽいので(少なくとも FFT の場合)、もうちょっと荒粒度でマルチコアを使う機能がないかなぁと思っていました。最悪IDLを二つ立ち上げてもいいんですが、ライセンスの問題をその分消費するはずです。

IDL_IDLBridge が Fork に一番近いんですが、FORKというよりは IDL を複数立ち上げるのに近くて、それぞれのプロセスに関して別途初期化が必要、とのことでした。しかもカレントディレクトリすら引き継がないし。

というわけでそれらを解決する方法。

  1. fork したい直前で SAVE, /all, FILENAME=’なんとか’
  2. p2 = OBJ_NEW(‘IDL_IDLBRIDGE’) で新しいプロセスを作成
  3. p2->Execute, ‘CD, “’ + GETENV(‘PWD’) + ‘”’ でカレントディレクトリに写る
  4. p2->Execute, ‘RESTORE, FILENAME=”なんたら”’ で子プロセスのメモリの内容をまとめる
  5. p2->Execute, ‘なんたら’, /NOWAIT で子プロセスに仕事をさせる。

うーん綺麗じゃないですね。子プロセスの生成コストとしては一般的なプログラミングにおける fork よりも相当悪い(copy on write じゃないし、というかそれ以前の問題で)ですが、新規 IDL(SSWIdl)を立ち上げるよりはよい、ぐらいです。

一応起動した後はパラメーター渡して色々みたいなこともできるので、まぁ使いようが無いわけではない、ぐらいで。

2010年1月24日日曜日

世界最大の太陽専用望遠鏡、ハワイに