NEW <- : 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 : -> OLD

2007/02/07

スコープとマッチの罠

以前、後方参照やらの動作で悩んでいた問題 について、一定以上の理解を得た。

なんか長くなった気がするので気になる人は続きを読むで読んでください。

これは「スコープ」と呼ばれる動作が原因らしい。スコープとは?  もちろん望遠鏡のことである。が、この場合「見える範囲」といった意訳がしっくりくるかもしれない。 プログラミングにおいてはとても重要な概念である。プログラミングに重要、ということは、 ソフトやOS、ひいてはパソコンにとって重要ということである。俺見落としてた。

では具体的にどういうものなのか。スコープには「動的スコープ」と「静的スコープ」があるが、 動的スコープは説明が難しいし今回はあまり関係ないようなので、 静的スコープ(レキシカルスコープ・lexical scope)だけ説明する。勘のいい読者なら 「動く望遠鏡と動かない望遠鏡がある、つまり見える範囲が動くものとそうでないものがある」 というところまで気づいていると思う。そのとおり。 レキシカルスコープとは、見える範囲が常に一定であることを指す。

例えば、大きく複雑なプログラムAがあるとして、その中にさらに小さくかつ単純なプログラム A年1組~A年10組がある。1組のプログラムは、さらに小さくかつ単純な1班~10班で 構成されている。プログラムとは往々にしてこのような階層構造(ツリー構造)になっている。

で、例えばA年5組が「5組の平均点は500点」という情報を持っていたとする。 A年5組のテストの平均点が500点であることは、1班~10班の誰もが知ることである。 しかし例えばここで8班の内部情報として「8班の吉田さんのバストはCカップ」という 情報を持っていたとする。8班の人間は、5組のテストの平均点が500点であることも、 吉田さんがCカップであることも知っている。しかし「8班の吉田さんはCカップ」 という情報は、他の班の班員は知り得ない。また5組全体としても知り得ない。

これがプログラミングにおけるレキシカルスコープ(の範囲)である。 これをコードにするとおおむねこういうことになる。


program A年生:
  5組 {
    my $平均点 = 500;
      8班 {
        my $吉田さんのバスト = Cカップ;
      }
  }

ちょっとめんどくさいだろうか。つまり5組プログラムの中における8班プログラムの 情報値は、それより外部のプログラムは取得できないようになっている。これは絶対である。 逆に、5組プログラムの情報値を、その下位プログラムは何の問題もなく取得できる。 このように、プログラムを階層構造にするだけでそのルール付けを決定できることから、 「構文スコープ」という呼ばれ方もする。らしい。

さて、次は「マッチ」についてである。まず先に言っておくと、近藤真彦のことではない。 マッチ違う。ここだけはおさえておかなくてはならない。 マッチとは、ある値が一定の条件内において一致するかどうか、という条件分岐を行う式である。 例えば「近藤マチャ彦」という単語があるとして、この単語の中に「マッチ」という語句が含まれているか、 そういった判定を行ったり、あるいは語句を置き換えることができる。


$A = "近藤マチャ彦";    #変数Aに「近藤マチャ彦」を代入
if ($A =~ /マッチ/) {   #この括弧内の式が「マッチ式」と呼ばれる
  print "あります!";   #あれば、「あります!」と出力
} else {
  print "ありません!"; #なければ「ありません!」と出力
}                       #結果は「ありません!」

特にPerlは文字に強いプログラミング言語である(と思っている)。 例えば「近藤真彦」の「真」の字を探し出して「真」を「マチャ」に置き換えることなど造作もない。


$A = "近藤真彦";
$A =~ s/真/マチャ/;  #ここがマッチ式。「真」を「マチャ」に置き換える
print $A;            #結果は「近藤マチャ彦」

「正規表現」と呼ばれる、特殊な記号を用いた表現を利用することで、さらに広範な利用が可能だ。 この「正規表現」には様々な機能があるが、以下は無駄な単語の連続を削除することができる。


$コメント = "あらしだよーんああああああああああああしねしねしねしねしねしねしね";
# 荒らし書き込みがあったとする
$コメント =~ s/あ{5,}//g;      #「あ」が5回以上連続で書かれていたら消去
$コメント =~ s/(しね){2,}//g;  #「しね」が2回以上連続で書かれていたら消去
print $コメント;               #結果は「あらしだよーん」

実際にはこんなピンポイントな荒らし対策がとれるわけないが、こういった用途に使うことも出来る。

で、正規表現には「マッチした単語を覚えておく」という機能がある。これが 以前に書いた「後方参照」あるいは「グループ化」と呼ばれるものだ。 マッチ式の中でカッコ書きされた内側のマッチ式に一致した単語は、特殊な変数域に記憶され、任意に呼び出すことができる。


$A = "近藤マチャ彦";
$A =~ /近藤(.*?)彦/;  #「近藤」と「彦」の間の語句が記憶される。
$B = "$1$1";          #$1という特殊な変数に記憶されている。
print "$Bで~す!";   #結果は「マチャマチャで~す!」

マチャ彦も早変わりである。

で、

簡単に言うとこの「後方参照」の機能に俺の予期しない動作があった。 マッチを2回以上行ったとき、例えば1回目のマッチで一致し$1に単語が記憶されていて、 2回目のマッチで一致する語句がなかった場合、$1は空にならず1回目のマッチの結果が残っている。


$A = "近藤真彦";
$B = "新田純一";
$A = ~/近藤(*.?)彦/;          #$1に「真」が入る
print "\$1の中身は「$1」\n";  #結果は「$1の中身は「真」」
$B = ~/近藤(*.?)彦/;          #マッチしない
print "\$1の中身は「$1」\n";  #結果は「$1の中身は「真」」

そんなこんなでようやく俺は理解したのだった。以上終わり

2007/02/05

ティン・ホイッスル

新しくTin whistleに関するカテゴリを作った。今度からここに書きしたためます。

ティン・ホイッスル(Tin whistle)
あるいはペニー・ホイッスル(Penny whistle)。ティンとは真鍮・ブリキのことを指し、 つまり「おもちゃ(ブリキ)の笛」という意味。ペニーとはイギリスで流通する通貨の単位。 100ペニー=1ポンドで、日本で100円玉に対する1円玉のような扱いとなっている。 つまりそれだけ安い(ペニー通貨で買える)笛、という意味でこう呼ばれていたのが始まり。 ちなみに1ポンドは日本円にしておおむね230〜240円。なおwhistleをホイッスルと読むか ウィスルと読むかは人によってだいぶ意見が分かれる模様。

ティンホイッスルを買ったきっかけは去年の10月の、後輩の結婚式の引き出物。 なんか楽器載ってたので買ってみました。笛なら気軽に吹けるし面白いかなーと。 以前から横笛(篠笛)はお祭りで吹いてたので、元々笛に興味があったのかもしれない。

12月に入る頃、ふと結婚式の引き出物に買った笛があったのを思い出して吹いてみた。 いくつか知ってる曲を吹こうとしたらなかなかうまくいかなかくて練習を重ねる。 で、気がついたらハマってた。

平日は仕事終わってから約1時間ほど車の中で、休日は家で、ほぼ毎日練習中。

使っているホイッスル:

Walton's Standard (Soprano D)
結婚式の引き出物で入手したウォルトン社のホイッスル。 吹きまくっていたら内部が錆び、コーティングのようなものが剥がれてしまった。
Clarke Sweetone (Soprano D)
上のWalton's Standardが非常に吹きづらくなった(錆びたり剥がれたり)ので、 通販で購入したクラーク社の名品。吹きやすい反面、息の加減が難しい(ような)。

ちなみに"Soprano D"とは、ソプラノ(高音域)のD調の音階のこと。 D調(正確にはDメジャー?)は、いわゆるニ長調という音階で、簡単に言うとD(レのこと) からはじまる、レ・ミ・ファ#・ソ・ラ・シ・ド#…という音階を持つ。 ほとんどのティン・ホイッスルがSoprano Dに合わせて作られてある (ただし、大抵のホイッスルはピッチ=音の間隔、にばらつきがあるらしい)。

なんとか吹ける曲/練習に使っている曲:

  • The Blarney Pilgrim
  • Eleanor Plunkett
  • The Rights of Man
  • The Britches
  • Rolling in the Rye Grass
  • The Butterfly
  • Crested Hens
  • The Concertina
  • The Kesh
  • Haste to The Wedding
  • An Ghaoth Aneas
  • Katie Moloney's
  • The Lisdoonvarna
  • The Sally Gardens
  • Drowsy Maggie
  • The Flogging Reel
  • Ojos Azules
  • El Condor Pasa
  • Scarborough Fair
  • Country Road (John Denver/Olivia Newton John)
  • Lough Erin Shore (ザ・コアーズ)
  • Tin Waltz (ZABADAK)
  • Stones (ウルティマ オンライン)

なんとか「同じ音を出せる」というだけで、いわゆる装飾をつけて吹けるほど余裕ないです。 しかもブラーニー・ピルグリム(The Blarney Pilgrim)とドロシー・マギー(Drowsy Maggie) に至ってはテンポが早い上に複雑で、普通に演奏することすら難しい・・・気がする。

まあ、そんなこんなで楽しくやってます。

危機は脱した

今日のみつを

いいことは、おかげさま

わるいことは 身から出たさび

確かに「HP作ってよビーム」を受けておきながら半年以上放っておいたのはまずかった。 先方カンカンであった。皮肉を連発されたが全部パリィしておいた。よけい怒ってた気がする。 「画像とかあげるからTOPだけでも作ってもらわないと」何、まだ俺に作らせるつもりか。 というか俺はHTML書けるけどデザインなどさっぱりわからんと何度言ったら。 俺は先方にこのサイト(iso tank)を見せたことはない。

仕方ないから画像もらい次第スキャンしまくって画像結合しまくって「完成」とする所存。

2007/02/02

「ねぇ、HPつくってよ」

今日のみつを

つまづいたっていいじゃないか 人間だもの

と、いうわけで実はとてもピンチなわたし。半年ほど前からHP作ってよと某団体の方々から 依頼されているのですが、俺はウェブデザイナーでもデザイナーでも絵心のある人間でもない。 というかたたき台くらいほしいデス。どんなことを伝えるサイトなのか? 目的、目標は? 趣味 特技?

はい、そこを含めて作れってことですか。こ、困ったな。ていうか正直、やる気が全然 出ないんですよ・・・。なんせそうそう無いジャンルだし、例えばテンプレートだとか、 参考になるサイトだとか、そういうのないんすよ。うあ、どうしよ。そもそも俺、HPを作るための イロハすら知らないんすよ。何から始めればいいの? 宇宙はどこから始まったの?

OK。ときに落ち着け俺。俺はやればできる子、俺はやればできる子、 俺はやればできる子・・・。そう心に言い聞かせ、落ち着いてフローを立ててみる。

まず第一に必要なのはサイトの目的とか目標とか、方向性とか。じゃないかな。至上にして 最終の目的は「自分たちの団体の存在を世に広く知っていただき、支援者ひいては加入者を 増加させることによる利益の向上とか人気の向上」、こんなところだろうか。

次はコンセプト、いわゆる概念というやつだ。この場合、この某団体のコンセプトではなく いわゆるサイトコンセプトのことであろう。多分。思考。思考。このサイトは某団体が運営する、 某団体の某活動を広く知ってもらう為のサイトとなる。つまり広告塔的な役割を果たす。

となるとコンテンツの内容は基本的に某団体の活動紹介のみになるんじゃないか?  と思ったら、某団体によると動画配信も予定しているらしい。それならキラーコンテンツは コレ(動画配信)になる。

  • お知らせ(更新情報や活動案内?)
  • 某団体の紹介
  • 年間スケジュール
  • 活動時動画・画像の配信(ここがメインになると予想)

コンテンツはこんな感じか。面倒そうなものは排除。排除。日記とかリンクとかBBSとか いらんだろ。

あとはデザイン・レイアウトだな。ここが一番ひどい。 なにせ俺にはそんなスキルもなければ、某団体の素材が少なすぎるのだ。HTMLの構造化うにゃらら とかなら胸のホクロに毛が生えた程度に自信はあるしできないことはないけど、このサイトは そういうことはどうでもいいわけで。

というか俺がつまづいているのがまさにココ。さてどうしたものか。というか正直に言う。 これ明日まで何某かを出さなきゃならないんすよ。業務じゃないのに追われてる。 まじボスケテ。俺はじけそう。

なお俺の通称はキョンではないし某団体の略称がSOSうんたらとかいうのではないということは ここに明言しておく。俺はキョンじゃない。

2007/01/31

マンパン

今日のみつを

おかげさん

いっぱいになることを表す単語「満タン」または「満杯」ですが、ウチのところでは 「満パン」でも普通に通じたりする。これを方言というべきかどうなのかはわからないが、 「マンパイ」も大概と思っていたのだけど、「マンパン」もよくよくエロスだと気づいた。 危機である。

NEW <- : 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 : -> OLD

Search

Option

Document

Comment

アイテム詐欺で「再」逮捕
04/14 : Lela Guzman
カテゴリ名変更&新しい楽器がふえたよ
02/14 : そうこ
06/26 : 室井
08/20 : そうこ
09/22 : そうこ
春よ、来い
05/08 : simuzy
05/08 : simuzy
05/12 : そうこ

Tackback

リタリンの処方が打ち切られた
03/27 : ノビじいの鬱々日記
foreshortenedプラグイン改造
01/23 : ISO TANK!

Log

2016年
11月
2014年
2月 1月
2013年
1月
2012年
7月 2月
2011年
6月 3月 2月
2010年
12月 11月 6月 4月 3月 1月
2009年
12月 11月 10月 9月 8月 6月 2月 1月
2008年
12月 11月 10月 9月 8月 6月 5月 4月 3月 2月 1月
2007年
12月 11月 10月 9月 8月 7月 6月 5月 4月 3月 2月 1月
2006年
12月 11月 10月 9月 8月 7月 6月 5月 4月 3月 2月 1月
2005年
12月 11月 10月 9月 8月 7月

Link