Hatena::ブログ(Diary)

もうカツ丼でいいよな このページをアンテナに追加 RSSフィード Twitter

2009 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 12 |
2012 | 02 | 03 | 04 | 05 | 06 | 10 | 11 | 12 |
2013 | 01 | 02 | 04 |

2013-04-14

[][] WordVBAでのマクロショートカット割り当て(Emacsキーバインド暫定版) 23:49  WordVBAでのマクロのショートカット割り当て(Emacs風キーバインド暫定版)を含むブックマーク  WordVBAでのマクロのショートカット割り当て(Emacs風キーバインド暫定版)のブックマークコメント

Wordの場合はApplication.KeyBindings.Addメソッドを使ってショートカットキーの割り当てができる。

Application.Keybindings.Add _
    KeyCategory:=wdKeyCategoryCommand, _
    Command:="Command", _
    KeyCode:="KeyCode"

あまり良く読んでないのでKeyCategory引数の意味とかしっかり理解していないが、"Command"には割り当てたいマクロの名前を文字列として、"KeyCode"には割り当てたいキーのーキーコードを数値として与える。キーコードはwdKeyAやwdKeyControlなどの名前の定数が用意されているので、それを足しあわせて作る。

割り当てたショートカットを解除するには次のようにする。

With Application.FindKey("KeyCode")
    .Disable
    .Clear
End With

解除したいショートカットキーのキーコードを"KeyCode"に指定する。

これを利用すると、Wordで比較的簡単にEmacsキーバインドを再現できる。

ちょっとだけやってみた。

'' ----- Emacsモードの有効化と無効化 ---------------------
Sub EnableEmacsMode()
    Call AddKeyBindings("ForwardChar", wdKeyControl + wdKeyF)
    Call AddKeyBindings("BackwardChar", wdKeyControl + wdKeyB)
    Call AddKeyBindings("NextLine", wdKeyControl + wdKeyN)
    Call AddKeyBindings("PreviousLine", wdKeyControl + wdKeyP)
    Call AddKeyBindings("BeginningOfLine", wdKeyControl + wdKeyA)
    Call AddKeyBindings("EndOfLine", wdKeyControl + wdKeyE)
End Sub

Sub DisableEmacsMode()
    Call DeleteKeyBindings(wdKeyControl + wdKeyF)
    Call DeleteKeyBindings(wdKeyControl + wdKeyB)
    Call DeleteKeyBindings(wdKeyControl + wdKeyN)
    Call DeleteKeyBindings(wdKeyControl + wdKeyP)
    Call DeleteKeyBindings(wdKeyControl + wdKeyA)
    Call DeleteKeyBindings(wdKeyControl + wdKeyE)
End Sub

Sub AddKeyBindings(Command As String, KeyCode As Long)
    '' キーバインド登録
    Application.KeyBindings.Add _
        KeyCategory:=wdKeyCategoryCommand, _
        Command:=Command, KeyCode:=KeyCode
End Sub

Sub DeleteKeyBindings(KeyCode As Long)
    '' キーバインド登録解除
    With Application.FindKey(KeyCode)
        .Disable: .Clear
    End With
End Sub


'' ------ キーバインドマクロ定義 ------------------------
Sub ForwardChar() '' カーソル前移動
    Selection.MoveRight unit:=wdCharacter, Count:=1
End Sub
Sub BackwardChar() '' カーソル後ろ移動
    Selection.MoveLeft unit:=wdCharacter, Count:=1
End Sub
Sub NextLine() '' カーソル下移動
    Selection.MoveDown unit:=wdLine, Count:=1
End Sub
Sub PreviousLine() '' カーソル上移動
    Selection.MoveUp unit:=wdLine, Count:=1
End Sub
Sub BeginningOfLine() '' 行頭へ
    Selection.HomeKey unit:=wdLine
End Sub
Sub EndOfLine() '' 行末へ
    Selection.EndKey unit:=wdLine
End Sub

https://gist.github.com/nozma/5383099

現在のファイルなりNormal.dotmなりにインポートしてEnableEmacsModeを実行すればEmacs風のキーバインドに(カーソル移動だけだが)なり、DisableEmacsModeを実行すれば通常の状態に戻る。

2ストロークについては ExcelでEmacsライクなキーバインドを使う - もうカツ丼でいいよなでやったようにC-xでショートカットが切り替わるようにすれば良いと思う。

とりあえず今日は眠いので残りはいずれ。もしくは誰かやっといて。

2013-02-09

[][] 7. 正規表現の世界 21:56  7. 正規表現の世界を含むブックマーク  7. 正規表現の世界のブックマークコメント

初めてのPerl 第6版メモ。

7.1 正規表現とは

  • regular expression:Perlではパターンと呼ぶことがある。文字列に対してマッチさせると成功または失敗のいずれかになる。

7.2 単純なパターンを使う

  • パターンを//で囲って指定すると、$_に対するマッチとなる。
  • パターン中では全ての逆スラッシュエスケープを利用できる。
7.2.1 Unicode属性
  • Unicode文字には属性という情報がある。
  • 正規表現では特定の文字だけでなく文字の種類にもマッチさせられる。属性名を\p{}で指定する。特定のUnicode属性をもたない文字にマッチさせることもできる。\P{}はその属性の否定となる。
    • 空白文字:Space
    • 数字:Digit
    • 16進数:AHex
7.2.2 メタキャラクタについて
  • メタキャラクタは\でエスケープできる。
  • .:改行文字を除くあらゆる1文字にマッチする。
7.2.3 単純な量指定子
  • *:直前のものに0回以上マッチする。
  • +:直前のものに1回以上マッチする。
  • ?:直前のものが0回か1回マッチする。
7.2.4 パターンをグループにまとめる
  • ()を使ってパターンをグループにまとめられる。
    • (hoge)+はhogeやhogehogeにマッチする。
  • 後方参照によってマッチしたものを再利用出来る。これをキャプチャグループと呼ぶ。
  • 後方参照では\の後ろに数字でカッコのグループを指定する。
    • (.)\1:aaやbbにマッチ。
  • 数字は開きカッコを頭から数えた時の順番に対応する。
  • Perl5.10以降では\と数値の代わりに\g{}が使える。
7.2.5 選択肢
  • |:|を挟んで左側か右側のいずれか一方の文字列にマッチする。
    • a or b|a and b:a or bかa and bにマッチ。

7.3 文字クラス

  • character class:[]の間に文字を並べたもの。いずれか1文字にマッチする。マッチは1文字だけ。
  • ハイフンを使って範囲を指定できる。
    • [a-zA-Z]:アルファベット
    • [\000-\177]:7ビットASCII文字全て。
    • [0-9]:数字
  • 文字クラスの内側ではハイフンはエスケープが必要。
  • ^は否定を表す。
    • [^a]:a以外の1文字。
7.3.1 文字クラスのショートカット
  • \d:すべての数字を表す。ASCIIの0から9まで以外の全ての言語での数字に対応する。
  • \s:全ての空白文字。\p{Space}と概ね同じ。
  • \h:水平方向空白文字(Perl5.10)
  • \v:垂直方向の空白文字(Perl5.10)
  • \R:行末(linebreak、Perl5.10)
  • \w:ワードにマッチ。
  • マッチ演算子の後ろに/a修飾子をつけるとASCIIコードのみの指定となる。
    • /[\d]+/a
7.3.2 ショートカットの否定
  • ショートカットのアルファベットを大文字にすると否定となる。
  • [\d\D]:改行文字も含めた全ての文字にマッチする。

[][] 6. ハッシュ 20:31  6. ハッシュを含むブックマーク  6. ハッシュのブックマークコメント

初めてのPerl 第6版メモ。

6.1 ハッシュとは?

  • hash:配列と同様に任意個の値を格納できるが、個々の値の指定に名前(key)を使う。
  • ハッシュのキーはどんな文字列でも使えるが、ユニークでなければならない。値は同じものがいくつあっても構わない。
  • データが一定の順番で並んでいるわけではない。
  • キーは常に文字列に変換される。

6.2 ハッシュの要素にアクセスする

  • 要素にアクセスするにはキーをブラケットで囲んで指定する。
$hash{$some_key}
  • キーには文字列になる式を用いる。
  • その他の代入やアクセスの動作は配列やスカラーの場合とほぼ同じ。
6.2.1 ハッシュ全体を扱う
  • %hash
  • ハッシュへの代入はリストコンテキストになる。
  • 代入されるリストは(キー, 値, キー, 値, ...)となる。
  • 逆に、リストコンテキストにおけるハッシュの値はキーと値のペアを並べたものになるが、その順序は保証されない。
6.2.2 ハッシュの代入
  • ハッシュをハッシュへ代入した場合ハッシュがコピーされる。
  • reverseは逆引きのハッシュを生成する。重複する値がある場合、後のものが優先されるがハッシュの順序は保証されないためどれが採用されるかは不明となる。
6.2.3 太い矢印
  • コンマが必要な場所では常にコンマを太い矢印(=>)で書き換える事ができる。別名太ったコンマ。
  • 太ったコンマの左側に置かれた値は自動的にクォートされる(左側の値がPerl演算子のように見える場合を除く)。
my %last_name (
    fred => 'flintstone',
    ...
    betty => 'rubble',
);
  • リストの最後に置かれた余分なコンマは単に無視される。
  • クォートなしの書き方を裸のワード(bareword)と呼ぶ。barewordはハッシュへのアクセス時にも使える。ただし、bareword以外のものが入っていればそれは式として解釈される。

6.3 ハッシュ関数

6.3.1 keys関数とvalues関数
  • keys:全てのキーからなるリストを返す。
  • values:全ての値からなるリストを返す。
  • keys関数とvalues関数の値の順序は保証されないが、keysとvaluesの各々の順序は互いに対応するような順序となる。ただし、keysとvaluesの間でハッシュの内容を変更した場合はこの限りではない。
  • スカラーコンテキストではこれらの関数はキー/値のペア数を返す。
6.3.2 each関数
  • キー/値のペアを2要素リストとして返す。
  • 使用する度に次のペアを返す。
while ( ($key, $value) = each %hash) {
    ...
}

6.4 ハッシュの利用例

6.4.1 exists関数
  • exists関数はkeyが存在すれば真、存在しなければ偽を返す。
6.4.2 delete関数
  • delete関数は指定されたキー及び対応する値を削除する。
6.4.3 ハッシュの要素を変数展開する
  • ハッシュ個別の要素を変数展開することはできるが、ハッシュ全体を変数展開する要素は用意されていない。

6.5 %ENVハッシュ

  • Perlプログラムは他のプログラムと同様、ある環境(environment)のもとで実効される。
  • %ENVには環境の情報が入っている。
  • %ENVにはおそらくPATHキーが存在し、パスが入っている。
  • 環境変数を外部でセットしておけば、%ENVハッシュの一部としてプログラムからアクセスできる。

[][] 5. 入出力 18:25  5. 入出力を含むブックマーク  5. 入出力のブックマークコメント

初めてのPerl 第6版メモ。

5.1 標準入力からの入力

  • <STDIN>演算子をスカラーコンテキストで評価すると次の一行を読み込んで返す。
chomp($line = <STDIN>);
  • 行入力演算子をwhileループの条件分に使用した場合、読み込んだ行は$_に代入される。forループ条件分でも同様。
while (<STDIN>) {
    print  "I saw $_";
}
  • foreachループを使っても同じようなことができるが、foreachではリストコンテキストで行入力演算子が評価されるため、ループ実行前に入力をすべて読み込むという違いがある。
foreach (<STDIN) {
    print "I saw $_";
}

5.2 ダイアモンド演算子からの入力

  • ダイアモンド演算子<>は行入力演算子の一種で、入力をユーザーが指定した場所(起動引数で指定する)から読み込む。

5.3 起動引数

  • ダイアモンド演算子は起動引数そのものではなく、配列@ARGVの内容を見る。
  • @ARGVには起動引数のリストがセットされる。プログラム内部で変更してもかまわない。
  • ダイアモンド演算子は、起動引数が空のとき標準入力ストリームを利用し、そうでなければ@ARGVに入っているファイル名リストを用いる。

5.4 標準出力への出力

  • print演算子は値のリストを受け取り、要素を標準出力に順番に送る。

5.5 printfによるフォーマット付き出力

  • Cのprintf関数のようなフォーマット出力ができる。
    • %g...General numeric conversion. 整数、浮動小数点数、指数形式を状況に応じて適当に選んで出力
    • %d...整数。フィールド幅指定で負の数を指定すると左寄せ(他の変換も)。
    • %s...文字列
    • %f...浮動小数点数
    • %%...%文字そのもの
  • printf演算子は文字列および表示すべき値のリストを受け取る。

5.6 ファイルハンドル

  • ファイルハンドル:Perlプロセスと外部の間のI/Oコネクションに対して付けられた名前。
  • Perl自身が使用するファイルハンドルとしてSTDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUTがある。これらの名前は通常は使用すべきではない。

5.7 ファイルハンドルをオープンする

  • STDIN, STDOUT, STDERRのファイルハンドルは自動的にファイルやデバイスに対してオープンされている。
  • 新たなファイルハンドルが必要な場合、open演算子によってコネクションをオープンする。
    • 入力用のオープン:open HOGE, 'hoge';またはopen HOGE, '<hoge';</li>
    • 出力用のオープン(上書き):open HOGE, '>hoge';
    • 出力用のオープン(追記):open HOGE, '>>hoge';
  • Perl5.6以降では入出力のモードを引数で指定できる。さらにエンコーディグ指定も可能。
    • open HOGE, '>:encoding(UTF-8)', 'hoge';
5.7.3 ファイルハンドルをクローズする
  • close HOGE;
  • オープン済みのファイルハンドルを再びオープンするとオープン前に自動的にクローズされる。
  • プログラムが終了する際も自動的にクローズされる。

5.8 dieによって致命的エラーを発生させる

  • Unixその他多くのOSで実行されるプログラムは、成功したか否かを示す終了ステータスを返す。
    • 成功:0、失敗:0以外 である場合が普通。
  • die関数はエラーメッセージを標準エラーストリーム(STDERR)に渡してから0以外の終了ステータスでプログラムを終了させる。
  • システムが要求を拒否した場合に通知されるメッセージは変数$!に入っている。
if (! open LOG, '>>', 'logfile' ) {
    die "Cannot create logfile:$!";
}
  • メッセージの末尾に改行文字が含まれない場合、メッセージにはファイル名と行番号が含まれる。
5.8.1 warnによって警告メッセージを表示する
  • warnはdieと概ね同じ動作をするが、プログラムを終了させない。
5.8.2 自動的にdieする
  • autodieプラグマを書いておけばopen失敗時に自動的にdieする。(Perl 5.10以降)

5.9 ファイルハンドルを使う

  • 入力用にオープンしたファイルハンドルからは行入力演算子を用いてファイルの中身を読むことが出来る。
open HOGE, 'hoge';
while(<HOGE>){
    chomp;
    ...
}
  • printやprintfの出力を出力用に開いたファイルハンドルに送るには引数リストとprintの間にファイルハンドルを置く。
5.9.1 デフォルトの出力ファイルハンドルを変える
  • select演算子を使ってデフォルトの出力ファイルハンドルをSTDOUTから変えることが出来る。
    • select HOGE;
  • デフォルトでは各ファイルハンドルに対する出力はバッファリングされるが、変数$|に1をセットすると現在選択されているファイルハンドルは出力の度にフラッシュされるようになる。

5.10 標準ファイルハンドルを再オープンする

  • 新しいコネクションのオープンが成功した場合に限り、元のファイルハンドルはクローズされる。

5.11 sayを使って出力する

  • Perl5.10はPerl6からsay組み込み関数を借用してている。
  • sayはprintと似たようなものだが末尾に改行文字を付け加える。

5.12 ファイルハンドルをスカラー変数に入れる

  • Perl5.6からはファイルハンドルをスカラー変数に入れられる。
  • openで裸のワードの代わりに値を持たないスカラー変数を使うことで、ファイルハンドルはその変数にセットされる
open my $hoge_fh, '<', 'hoge.txt'
    or die "Could not open hoge.txt: $!";
print $hoge "...";
close $hoge;
  • ファイルハンドルの直後にコンマが無いことによってファイルハンドルであることが認識される。
  • ファイルハンドルとして扱うべきものを明示的に示すためにはブレースで囲む
print { $hoge }; # $_の中身を表示

2013-02-05

[][] 4. サブルーチン 23:20  4. サブルーチンを含むブックマーク  4. サブルーチンのブックマークコメント

初めてのPerl 第6版メモ。割と練習問題躓く。

  • subroutine:ユーザーが定義した関数。
  • サブルーチンの名前:Perl識別子の頭に&。省略できる場合とできない場合がある。名前空間は独立している。

4.1 サブルーチンを定義する

sub hoge {
    ...
}
  • 定義はどこにおいても構わない。
  • 後ろにあるものは前にあるものを上書きする。
  • サブルーチン本体の中では全てのグローバル変数を扱える。

4.2 サブルーチンを起動する

&hoge;
  • 起動する(invoke)ことを呼び出す(call)と呼ぶ場合が多い。

4.3 戻り値

  • サブルーチンの中で最後に評価された計算の結果は自動的に戻り値になる。
  • 計算の結果が返り値として使われず捨てられる場合、無効コンテキスト(void context)警告メッセージが出る。

4.4 引数

&hoge(fuga, piyo);
  • 引数はリストとして渡され、@_に格納される。
  • サブルーチン内部の@_はプライベートなものである。
  • 余ったパラメータは単に無視される。

4.5 サブルーチン内でプライベートな変数

  • my演算子はレキシカル変数(lexical variable)を作り出す。
  • レキシカル変数はそれを取り囲むブロックにスコープを持つ。

4.7 レキシカル変数(my変数)についての注意事項

  • レキシカル変数はあらゆるブロックの中で使える。
  • レキシカル変数の名前のスコープはそれを取り囲むもっとも小さいブロックまたはファイルに限定される。
  • my演算子は代入のコンテキストを変えない。
  • 括弧を伴わないmy演算子はレキシカル変数を1個しか宣言できない。括弧があれば複数同時に宣言できる。
  • 新しい変数はundefまたは空リストとなる。
  • 制御変数をレキシカル変数にすることもできる。
foreach my $hoge {
    ...
}

4.8 use strictプラグマ

  • pragma:コンパイラに与えるコードの扱いに関するヒント。
  • use strictプラグマは良いコーディングルールを強制する。
  • Perl 5.12以降ではプラグマでバージョン指定をするとuse strictプラグマも指定される。
  • use strictプラグマを宣言するとすべての変数はmy演算子などを使って宣言することが強制される。

4.9 return演算子

  • return演算子はサブルーチンから即座に値を返す。
4.9.1 アンパーサンドを省略する
  • 次の場合にはアンパーサンドを省略できる。
    • コンパイラがサブルーチン呼び出しの前に定義を見ている。
    • 構文からサブルーチン呼び出しであることが分かる。
      • 括弧で囲んでパラメータリストを指定した場合
  • アンパーサンドなしでサブルーチンを呼び出した場合に、同名の組み込み関数があればそちらが優先される。

4.10 スカラー以外の返り値

  • リストコンテキストで呼び出したサブルーチンは値のリストを返すこともできる。
  • 引数なしのreturnはスカラーコンテキストではundef、リストコンテキストでは空リストを返す。

4.11 永続的なプライベート変数

  • stateで宣言した変数はサブルーチンをスコープに持ち、さらに値を保持し続ける。
sub hoge {
    state $fuga = 0;
    ...
}
  • stateによる宣言文は2回目以降の呼び出しでは無視される。
  • 配列とハッシュをリストコンテキストで初期化することはできない(少なくともPerl 5.14の時点では)。

2013-02-03

[][] 3. リストと配列 23:49  3. リストと配列を含むブックマーク  3. リストと配列のブックマークコメント

初めてのPerl 第6版メモ。5版を(中途半端に)読んだの大分昔だけど思ったより覚えてる。

  • リスト(list):スカラーの集合に順序を付けて並べたもの。
  • 配列(array):リストを格納する変数。
  • 配列のindexは0オリジン。

3.1 配列の要素にアクセスする

  • $hoge[0]
  • ここで$hogeというスカラー変数があっても全く問題ない。
  • 添字は切り捨てにより丸められる。
  • 末尾より後ろの要素を指すとundefになる。

3.2 配列の特殊なインデクス

  • 末尾より後ろの要素に値を入れると自動的に拡張される。
  • 最後の要素のインデクスは$#hoge
  • 負のインデクスは末尾から先頭へ数える。-1で最後の要素。要素数を超える範囲を負のインデクスで指定するとエラー。

3.3 リストリテラル

  • ("括弧で", "くくって", "コンマで", "区切る")
  • 範囲演算子:(1..3)→(1, 2, 3)。小数は切り捨て後に評価。増加のみ。
  • 要素が式の場合、リテラルが使われる度に評価される。
3.3.1 qwショートカット
  • qw( 単語の リストを 作る場合に クォートが 不要 )
  • デリミタは任意の文字記号や括弧っぽいもの((), {}, [], <>)が使える。

3.4 リスト代入

  • ($hoge, $huga) = qw(リストへ まとめて代入できる)
  • 右辺リストは先に評価される。
  • 右辺が多すぎる場合は切り捨て、少なすぎる場合はundefで穴埋め。
  • 「配列全て」は@マークをつけて表す。(@rray)
  • 配列を配列の要素にすると要素になった配列は展開される。
  • undefを値として持つ変数はundefの要素にはならず単に無視される。undefはundef演算子で明示的に入れることができる。

3.5 pop演算子とpush演算子

  • pop:配列の最後の要素を取り除き、値としてそれを返す。配列が空の時はundefが返る。
  • push:配列の末尾に要素または配列を追加する。
3.5.1 shift演算子とunshitf演算子
  • shift:配列の先頭の要素を取り除き、値としてそれを返す。配列が空の時はundefが返る。
  • unshift:配列の先頭に要素または配列を追加する。

3.6 splice演算子

  • 指定の範囲を取り除き、取り除いた範囲を返す
    • 添字3以降の要素全て:splice @array, 3;
    • 添字3から2つの範囲:splice @array, 3, 2;
    • 取り除いた後を指定の要素で置き換え:splice @array, 3, 2, 1..3;
      • 置き換えリストの長さは一致してなくてもよい。
      • 範囲として0を指定すると指定位置に挿入する。

3.7 配列を文字列の中に展開する

  • 要素はスペースで区切って展開される。
  • Emailアドレスを記述した場合は注意!

3.8 foreach制御構造

foreach $hoge (@fuga){
    print $hoge;
}
  • 制御変数の値はループの度に変わる。
  • 制御変数はリストの要素そのものであり、制御変数への変更はリスト要素への変更である。
  • ループが終わると制御変数の値はループ開始前の値に戻る。
3.8.1 Perlお気に入りのデフォルト:$_
  • 制御変数を省略すると制御変数として$_が採用される。
    • その他の多くの場面でも変数を省略すると$_が使われる。(e.g. print;)
3.8.2 reverse演算子
  • 逆順にしたリストを返す。リストそのものは変更しない。
3.8.3 sort演算子
  • リストを文字としてソートする。リストそのものは変更しない。
  • 順序はコードポイントに従う。
3.8.4 each演算子
  • Perl 5.12以降
  • eachを配列に適用する度に次の要素のインデクスと要素を返す。

3.9 スカラーコンテキストとリストコンテキスト

  • Perlでは式は常にコンテキストに応じた値を返す。
    • @list = @people # @peopleというリストが代入される
    • $n = @people # @peopleというリストの要素数が代入される
3.9.1 リストを生成する式をスカラーコンテキストで使う
  • 式により異なる。
    • sort:undef
    • reverse:逆転した文字列
3.9.2 スカラーを生成する式をリストコンテキストで使う
  • リスト値を持たない式であれば、1要素のリストになる。
3.9.3 スカラーコンテキストを強制する
  • 擬似関数scalarを用いる。

3.10 リストコンテキストで<STDIN>を使う

  • 残りすべての行を読み込み、各行を要素として持つリストを返す。
  • キーボードからの入力の場合、Unixの類はCtrl+dをファイルの終わりとみなす。WindowsではCtrl+Z。
  • chompは配列に対しても作用し、各要素から最後の改行を取り除く。

[][] 2. スカラーデータ 22:13  2. スカラーデータを含むブックマーク  2. スカラーデータのブックマークコメント

初めてのPerl 第6版メモ。後で思い出せる程度に。

2.1 数値

2.1.1 すべての数値は同じ内部形式で表現される

Perlでは整数値は存在せず(内部的には使う場合があるが)、計算は倍精度浮動小数点数として行われる。

2.1.2 浮動小数点リテラル 2.1.3 整数リテラル
  • 小数点の有無は関係ない。
  • 指数記法が使える。eは大文字でも小文字でもよい。
  • 可読性のためにアンダーバーを挟むことができる。10進数以外の整数リテラルでも同様。(e.g. 123_456.789_012)
2.1.4 10進数以外の整数リテラル
  • 8進数:0から始める
  • 16進数:0xから始める
  • 2進数:0bから始める
2.1.5 数値演算子
  • 四則演算:+, -, *, /
  • べき:**
  • 剰余:%

2.2 文字列

  • unicodeを使いたい:use utf8
2.2.1 シングルクォート文字列リテラル
  • バックスラッシュとシングルクォート自体はバックスラッシュでエスケープして表示する。
  • "\n"は改行記号とみなされない。
2.2.2 ダブルクォート文字列リテラル
  • 各種のバックスラッシュエスケープが使用可能
  • \n \r \t \f \b \a \e
  • ASCIIコードやUnicodeコードポイントを指定して表示できる
  • コントロール文字(C-Cは\cC)が使用可能
  • 後の1文字を小文字(\l)、大文字(\u)にできる
  • \Eまでの間のすべての文字に対し、大文字(\U)、小文字(\L)、エスケープの挿入(\Q)ができる。
2.2.3 文字列演算子
  • .:結合
  • x:繰り返し(e.g. "hello" x 3 → "hellohellohello")
    • 繰り返し回数は切り捨てによって整数に変換されてから評価される。
2.2.4 数値と文字列の自動変換
  • 演算子の種類により自動的に判断される。
  • 文字列同士に*が使われた場合、先頭から連続する数字が数値として使われる。
  • 空白文字は切り捨てられる。
  • 先頭に0があっても8進数リテラルとは判断されない。
    • e.g. "012hoge34" * " 3" → 36

2.3 Perlに組み込まれている警告メッセージ

  • 警告をさせる:use warnings;
  • コマンドラインで-wオプションでも可。
  • より詳しい警告:use diagnostics;

2.4 スカラー変数

  • $の後ろにPerl識別子を付けたもの
    • Perl識別子:英文字または下線で始まり、その後ろに英文字、数字、下線を並べたもの。大文字と小文字は区別される。
    • utf8プラグマを有効にすれば広範囲の文字を識別子に使える。
2.4.2 スカラーの代入
  • 代入は=で行う。
2.4.3 二項代入演算子
  • Perlではほとんどすべての二項演算子が二項代入演算子として使える。
    • e.g. $str .= " ";

2.5 printによる出力

  • コンマで区切って複数の値を渡せる(実際にはリストである)。
2.5.1 スカラー変数を文字列の中に展開する
  • ダブルクォート文字列リテラルの中では変数展開が行われる。
  • 変数をそのままprintに渡した場合も展開される。(e.g. print $hoge, $fuga;)
  • 変数展開をしたくない場合は$をバックスラッシュでエスケープする。
  • $以降の文字列は可能な限り長い範囲が変数名として判断される。制限するにはブレースで括る。(e.g. $(hoge))
2.5.2 コードポイントで文字を生成する
  • コードポイント→文字:chr( 0x05D0 );
  • 文字→コードポイント:ord( 'א' );
  • 文字列中で直接指定:\x{03B1}
2.5.4 比較演算子
  • 文字列と数値では演算子が異なる。
  • 文字列はASCIIまたはUnicodeのソート順に従う。
数値 文字列 意味
== eq equal
!= ne net equal
< lt less than
> gt greater than
<= le less than or equal to
>= ge greater than or equal to

2.6 if制御構造

if( hoge ){
    ...
} else {
    ...
}
  • コードブロックは必ずブレースで囲むこと。

2.6.1 ブール値

  • ブール型は存在しない。
  • 数値は0のみ偽。
  • 文字列は空文字列のみ偽。
  • 否定演算子!は重ねられる。

2.7 ユーザからの入力を受け取る

  • <STDIN>:標準入力から次の一行を読み込んで<STDIN>の値として返す。
  • 通常はキーボードからの入力となり、改行を入力するまでプログラムは停止する。
  • 通常、一行は改行で終わるので改行文字を最後に含む。

2.8 chomp演算子

  • chomp():末尾の改行記号を1つ削除する。
    • 文字列そのものが変化する。
    • chomp($hoge);またはchomp $hoge;
      • 括弧は意味が変わってしまう場合以外は常に省略できる。
    • 返り値もあり、削除した改行記号の個数を返す。
  • 代入→chompは一行で書ける
    • chomp($hoge = <STDIN>);

2.9 while制御機構

$count = 0;
while ($count < 10) {
      $count += 2;
      ...
}

2.10 未定義値

  • undef:値が代入されるまでのスカラー変数に入っている値。
  • 数値としては0扱い。
  • 文字列としては空文字列扱い。

2.11 defined関数

  • <STDIN>はファイルの終わりまで読むとundefを返す。
  • defined関数:undefのとき偽、それ以外で真。
  • undef演算子:undefを返す。

2013-01-26

][Meteorology] 高層観測、レーダー観測、気象衛星観測の知識 18:52 ][Meteorology] 高層観測、レーダー観測、気象衛星観測の知識を含むブックマーク ][Meteorology] 高層観測、レーダー観測、気象衛星観測の知識のブックマークコメント

レーウィンゾンデ(ラジオゾンデ)観測

レーウィンゾンデ観測の方法
  • レーウィンゾンデ(ラジオゾンデ):ヘリウムを充填したゴム製気球に観測機器を取り付けたもの。上空の気温、湿度、気圧、風向、風速などを観測する。午前9時と午後9時の2回観測する。気球を放つのは観測時刻の30分前である。気球は6m/s程度の速度で上昇する。高度30km程度で気球は破裂し、パラシュートで落下する。風に流されるが、データは観測所真上のものとして取り扱う。
レーウィンゾンデ観測の気象要素
  • 気温:太陽放射の影響を考え、日射補正を行なって観測値とする。補正幅は上空ほど、また上昇速度が遅いほど大きい。夜間は補正を行わない。
  • 湿度:気温-40度以下になった場合は観測しない。報告は湿数。
  • 気圧:気圧から層厚の式を用いて高度を計算する。GPSゾンデの場合は人工衛星からの情報により位置を3次元的に解析できる。
  • 風向・風速:高度と角度から水平面上の位置を計算し割り出す。GPSゾンデの場合は気球の位置を解析し、水平移動距離から速度を計算する。
ラジオゾンデ観測の場所

2012.4.1時点では、気象庁は全国16箇所の気象官署や昭和基地、海洋気象観測船でラジオゾンデを用いた高層気象観測を行なっている(気象庁 | ラジオゾンデによる高層気象観測について)。

気象レーダー観測

気象レーダー観測の基本原理
  • レーダー観測:電波を目標物に発射し、反射してくる電波の強度と経過時間から目標物の像や距離を求めるもの。
  • ドップラーレーダー:移動する物体に電波があたって反射する場合に周波数が変化する性質を利用して目標物の移動速度を求めるもの。
  • 気象レーダー:気象レーダーアンテナからパルス状に発射された3cm〜10cm程度の波長の電波が降水粒子にあたり、散乱(後方散乱)してアンテナに戻ってきたときの強度や時間を解析して降水粒子の範囲や強度を求める。パルス幅は長いほど目標降水粒子までの距離の解析精度が低下する。気象庁のレーダーでは2.5μsのパルスを使用。
レーダー方程式の意味

以下のレーダー方程式により求められう電波強度が大きいほど降水強度が強いことを意味する。

  • :平均受信電力。後方散乱を受けてアンテナに戻ってくる平均電波強度。
  • :レーダー反射因子。後方散乱しやすい物質ほど大きくなる。水と氷では水のほうが5倍電波を後方散乱しやすい。
  • :大気ガスによる減衰。
  • :レーダーからの距離。平均電波強度は距離の2乗に反比例する。
  • :電波の波長。平均電波強度は波長の2乗に反比例する。波長が短いと後方散乱は強い。
  • :パルス幅。パルス幅は長いほど平均電波強度が強くなるが、前述のように距離精度が悪化する。

レーダー方程式では大気ガスによる減衰は考慮されているが、途中に別の降水があった場合の減衰は考慮されていない。

電波の後方散乱と降水粒子の関係

後方散乱と降水粒子の関係は次式で求められる。

  • :後方散乱強度
  • :降水粒子の直径

後方散乱強度が降水粒子の直径の6乗に比例するために、同じ降水量でも細かい粒子が多くある場合より大きな粒子が少ない方が後方散乱強度は強くなる。

また、この近似式は降水粒子がレーダーの波長よりも十分に小さい場合に成立する。ひょうや大型の雪片などは観測できない。

気象レーダーの性質と特徴
  • 設置場所:高いほど探知距離が大きくなる
  • 波長:長いほど大気ガスによる減衰が小さく遠くまで観測できる
  • 地球の曲率の影響:大気の密度は下層ほど大きいので電波はわずかに下方向へ曲がりながら進むが、地球の曲率の方が大きいため、上方向へ逸れるように進行する。
  • 高さの影響:レーダーは高度2km付近を目標に射出される。2km付近の降水粒子は地表に届く前に蒸発する可能性があり、実際の降水強度よりも強い値を観測する場合がある。地表面が乾燥していると特に顕著である。
レーダーの使用上の注意
  • グランドエコー:山岳や地形による後方散乱から生ずるレーダーエコーをグランドエコーと呼ぶ。概ね除去できるが完全ではない場合もある。
  • シークラッター:波浪による波しぶきがレーダーエコーとして観測されたもの。これは除去することができない。
  • エンゼルエコー:大気の屈折列の乱れによるエコー。晴天エコーとも。これも除去できない。
  • ブライトバンド:雪の表面が溶けると、通常の降水より表面積の大きな状態となる。このようにして生じたエコーの強い部分をブライトバンドと呼ぶ。
  • 降水が雪か雨かはレーダーでは判別できない。
  • レーダー反射因子Zと降水強度Rの関係をZ-R関係と呼ぶ。値は降水の性状により異なる。
  • シャドウ域:障害物などによって不自然にエコーの弱くなっている部分。現実の降水強度を表さない。

気象ドップラーレーダー観測

ドップラーレーダー観測の原理
  • 発散場:発散の奥側では周波数が負、手前側では周波数が正方向へ変化する。
  • 収束場:収束の奥側では周波数が正、手前側では周波数が負方向へ変化する。
  • 低気圧性循環:低気圧の左側で正、右側で負。
ウインドプロファイラ観測
  • ウインドプロファイラ観測:地上からドップラーレーダを用いることで高層風の観測を3次元的に行うもの。10分間隔で観測できる。
  • WINDAS:ウィンドプロファイラの観測網を使った局地的気象監視システム
  • 電波の波長と観測:ウィンドプロファイラでは22cmというかなり大きな波長を用いる。波長の1/2程度の大気の不均衡が存在するため観測ができる。
  • 降水がある場合:降水がある場合はレイリー散乱が起こるためウインドプロファイラの観測データは降水粒子の動向を観測することになる。水平方向の移動はほぼ風速と等しいが、鉛直方向の動きは鉛直流とは異なる。
  • 観測高度:ウインドプロファイラ観測は大気の乱れ、水蒸気密度の不均衡を利用して観測する。そのため、大気の水蒸気量が少ない冬季には観測高度が低くなってしまう。

海上気象観測と特殊観測

波浪の知識
  • 波浪:風によって直接生じる波。風向と卓越波向が概ね一致し、卓越周期が短い。
  • うねり:台風や発達した低気圧によって生じた遠方から伝わる波浪。波浪よりも波長が長く卓越周期も長いので減衰が起きにくい。卓越波向と風向きは必ずしも一致しない。
  • 波高:波の谷から峰までの高さ。
  • 有義波高:100以上の連続して観測した波の波高のうち上位から1/3の平均値を言う。天気予報で利用する波浪情報。浅瀬で波高が高くなる影響の考慮はしていない。また、1/1000程度の頻度で有義波高の2倍程度の波が生ずることにも注意する。
  • 波高の発達:風向の変化が小さく風走距離が長いと波高が発達しやすい。
高潮の知識
  • 高潮:波ではなく、潮位そのものが上昇する現象。気圧低下による吸い上げ効果や、海岸に強い風が吹き付けることによる吹き寄せ効果による。
  • 地形:風上側に開いたV字、U字の湾や、遠浅の海岸は顕著な高潮が起こりやすい。
  • 天文潮:1日ほぼ2かいずつ満潮と干潮がある。それぞれの潮位は一定ではなく、月の引力の関係で大潮と小潮がある。大潮の満潮時に台風が接近しているような場合は特に注意が必要である。
オゾンの知識
  • オゾンホール:南極海では例年10月に成層圏のオゾン密度が著しく減少する。南極では大規模山岳がなく偏西風の蛇行が少ないため、極渦という現象が発生してオゾンの輸送が少なくなる。オゾンホールは南極ほどではないが北極でも3月頃に出現している。
  • 観測にはドブソン分光光度計を用いる。世界の約100地点で観測が行われている。
    • 太陽の直射日光を利用した観測:高精度。
    • 天頂光観測:直射日光が少ない場合は散乱光を利用。
    • 月光観測:極夜の場合は月光を利用。

気象衛星観測

代表的な気象衛星の種類
  • 静止気象衛星(ひまわり):2005年6月28日から運輸多目的衛星MTSAT-1Rによる気象衛星観測の運用が開始されている。俗称としてひまわり6号と呼ばれている。ひまわり6号は東経140度の赤道上空3万6000kmにある。
  • 極軌道衛星(NOAA:アメリカ):両極地方の上空約840kmを結ぶ軌道を周回する衛星。周回するのに必要な時間は約100分で、同じ地点は1日にほぼ2回通過する。よって同じ地点では12時間おきにデータが取得できる。水平観測範囲は2500km程度である。
気象衛星観測で用いる波長帯
  • 赤外画像:テレビの天気予報で見る気象衛星画像はほとんどが赤外画像。低温部ほど相対的に白く写る。
  • 可視画像:可視画像では厚い雲ほど白く写る。また、雪氷域も白く写る。ただし、太陽光が斜めから射す朝夕は暗く写りやすい。日中しか利用できない。
  • 水蒸気画像:水蒸気が吸収しやすい6.5〜7.0μmの波長帯。この領域の赤外放射が少ない(=水蒸気が多い)と白く写りやすい。上層の水蒸気量解析に用いられる。白いほど上層の水蒸気量が多いと判断する。
  • 3.7μm画像:ひまわり6号から新しく観測されている。赤外画像と可視画像の中間的な性質をもつ。夜間の極めて地表付近の雲(霧含む)の解析ができる。地表面付近に雲が存在する場合、地表面温度に対応する輝度よりも白く見える。
各画像の輝度と雲域の判断要素
  • 可視画像(雲の厚みを判断)
    • 非常に白い:非常に厚い雲
    • 白い:厚い
    • 明灰色:やや厚い
    • 暗灰色:薄い(単層)
  • 赤外画像(雲頂高度を判断)
    • 非常に白い:圏界面付近
    • 白い:上層
    • 明灰色:中層
    • 暗灰色:下層
    • 写っていない:極めて低いか地表面
  • 水蒸気画像(上層の水蒸気量を判断)
    • 明域:湿潤
    • 暗域:乾燥
雲の種類による画像の特徴
  • 層雲や霧:高度が低く赤外画像ではほとんど映らない。可視画像では一様に滑らかで比較的白い。
  • テーパリングクラウドなど発達した対流性の雲:上層まで及ぶ対流性の雲であるため、赤外画像ではっきりとした輪郭で非常に白く写る。
  • ジェット巻雲:雲頂高度は高く赤外画像で白く写る。
  • バルジ:中上層の層状性の雲からなり、赤外画像で温帯低気圧の北側から北東側に膨らむ形で白くなめらかに写る。温帯低気圧は発達中と判断できる。
  • 水蒸気画像からのジェット気流の判断:明域と暗域の境界(バウンダリー)から極側に50〜100kmの位置にジェット気流はは存在する。
  • 水蒸気画像からの上層過冷渦の解析:低気圧性の循環を持つ暗域として存在する。500hPa天気図では寒気核と低気圧性循環の風が判断できる。

アメダスと観測東経

アメダス(地域気象観測システム)の利用法
  • アメダス:Automated Meteorological Data Acquisition Systemの略。「降水量」「風向・風速」「気温」「日照時間」の4つの気象要素を児童観測している。平均21km間隔で設置されており、全国に約850カ所ある。「降水量」のみの観測では全国で約1300カ所(17km間隔)である。また、280カ所では積雪の観測も行う。観測は10分間隔で自動的に行われ、公衆電話回線により5分以内にアメダスセンターに集められてチェックを受け、気象資料統合処理システムに通報され、毎正時から6分以内にユーザーへ配信される。アメダスの観測データには気象官署での観測データも含まれる。
  • 気象官署:気象庁、気象研究所、気象衛星センター、高層気象台、地磁気観測所、気象大学校、海洋気象台、管区気象台、地方気象台、航空気象台、測候所などを言い、ほとんどの気象官署で観測業務が行われている。
観測統計・対象期間表記・雨風の表現
  • 代表的な観測統計の手法
    • 気圧(日平均):気象官署では毎正時の平均値。アメダスでは観測なし。
    • 気温(日平均):気象官署、アメダスともに毎正時の平均値。
    • 風速(日平均):気象官署では1日の風程(大気の流れた距離)を86400秒(1日)で割る。アメダスでは毎正時の平均値。
    • 降水量(日降水量):気象官署、アメダスともに毎正時の観測値の合計。
    • 降水量(最大1時間雨量):気象官署では前日23:30から翌日00:30までの間の任意の連続する1時間の最大値。アメダスでは00:10から24:00までの10分毎の観測値の任意の連続する1時間の合計値の最大値。
  • 3時間毎の対象期間表記
    • 未明:0〜3時(旧称:午前3時頃まで)
    • 明け方:3〜6時
    • 朝:6〜9時(旧称:朝のうち)
    • 昼前:9〜12時
    • 昼過ぎ:12〜15時
    • 夕方:15〜18時
    • 夜の初め頃:18〜21時(旧称:宵のうち)
    • 夜遅く:21〜24時
  • 雨量の表現
    • やや強い雨:10-20mm
    • 強い雨:20-30mm
    • 激しい雨:30-50mm
    • 非常に激しい雨:50-80mm
    • 猛烈な雨:80mm以上
  • 風速の表現
    • やや強い風:10-15m/s
    • 強い風:15-20m/s
    • 非常に強い風:20-30m/s
    • 猛烈な風:30m/s以上
気象観測統計
  • 平年値:2013年時点では1981年から2010年の間の30年間の平均値として求めている。10年毎に更新されている。次回は2021年に更新。平均を求める際、極めて高いデータや極めて低いデータは除外する場合がある。
  • 寒候期:10月から3月(寒候期予報では10月から2月を用いる)
  • 暖候期:4月から9月(暖候期予報では3月から8月を用いる)
  • 積雪・降雪の深さ:冬季の季節を暦の中心とし、8月1日から翌年の7月末までの期間を年統計の期間とする。
  • 日界:深夜00:00は前日の24:00として扱う。