iso tank

危機は脱した

今日のみつを

いいことは、おかげさま

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

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

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

「ねぇ、HPつくってよ」

今日のみつを

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

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

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

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

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

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

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

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

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

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

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

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

マンパン

今日のみつを

おかげさん

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

後方参照のおべんきょう

実験その1:


  do {
      while (my $line = shift(@hairetsu)) {
        $line =~ /(PATTERN2)-(PATTERN3)/;
        $tmp = "$1, $2\n";
      }
    }
  } while ($p =~ s/(PATTERN1)//);
  print $tmp;

Whileの条件文内でパターンマッチ、doブロック内でもパターンマッチをして、 両方ともに()をつけてグループ化(後方参照)してみた。簡単にいうと。

結果:


PATTERN1,
PATTERN2,PATTERN3,
PATTERN2,
PATTERN1,
PATTERN1,
PATTERN2,
PATTERN1,
PATTERN1,
PATTERN2,
PATTERN1,
PATTERN1,
PATTERN2,
PATTERN1,
PATTERN1,

深層のwhileブロック内でマッチするパターンがあった場合は、正しくPATTERN2とPATTERN3を 出力してくれたが、PATTERN2もPATTERN3もマッチしなかった時はwhileの条件文でマッチした PATTERN1がどこからともなく呼び出されていた。ような。

深層のwhileブロックがループ開始戻った段階で$n(数字)の値は、毎回毎回最上層の while条件文でマッチした値に初期化されているとゆうか。

つまりこうすると、


  do {
      while (my $line = shift(@hairetsu)) {
        $tmp = "$1, $2\n";
        $line =~ /(PATTERN2)-(PATTERN3)/;
      }
    }
  } while ($p =~ s/(PATTERN1)//);
  print $tmp;

PATTERN1,しか出力しなくなるわけなんですよ。

こういった動作について言及してるサイトってないかなー?

#元のflavourdirの"while ($p =~ s/(\/*[^\/]*)$// and $1);" の意味がいまだによくわからない・・・これ別に後方参照しなくてもいいんじゃね?

flavourdir+themeと後方参照の罠

先々週の日曜から恩師に頼まれて高校生ドモにスキー教えてたら、最終日に熱出した。 なんとかスキー教習終えて家に帰って熱測ったら38度2分とかでてんの。ふざけてる。 オイラは恩師の頼みで仕方なく(会社にナイショで)無償奉仕で高校生にスキー教えた。 仕方なくである! キャホホーイ! その見返りが38度2分とはコレどういうことか。 キャホホーイ! 納得いかん。キャホホーイ! まあそんなわけで死んでました。今は生きてます。

さて本題に入ろうか。このブログのメインプログラムは言うまでもなく blosxom(ブロッサム)です。blosxomには Movable Type(以下"MT") と似たような「テンプレート機能」があります。ただし「テンプレート」と呼ばずに 「フレーバー」と呼びます。風味とか味つけとかいう意味らしいです。MTのテンプレートや 「テーマ」などのシステムがどういうものかは正直知らないですが、blosxomの場合は、 整形されたHTMLファイルとCSSとそれらに関連づけられた画像等を一セット用意すれば HTMLファイルを分割するだけでそれがフレーバーになる感じです。

で、ここに長所とも短所ともとれる特徴がある。blosxomの「フレーバー」システムは、 テンプレートといえるHTMLデータを、「content_type」「head」「date」「story」「foot」 の5つに分割して管理・保存しなければならないのです。例えば「cupy」というフレーバー (フレーバーの名前は自由につけることができる)を作成したとして、cupyフレーバーは 「content_type.cupy」「head.cupy」〜「foot.cupy」と、最低でも5つのファイルを作る 必要があるのです。つまりフレーバーの数が増えればそれに×5倍してファイル数の増える増える。 CSSや画像を別に用意する必要も(場合によっては)あるわけで。さらにその上、 フレーバーを設置するディレクトリは基本的に記事を設置するディレクトリと同じなの。 つまり記事データとフレーバーファイルがゴッチャ混ぜになってアララ大変なことにもなりかねぬ。

と、いうわけで例によってプラグインでこれを解決するのです。幸い、既に考案されてる プラグインに「flavourdir」という、記事を設置するディレクトリとフレーバーを設置する ディレクトリを分割してしまえるプラグインがあるのです。さらにその上、「theme」という わざわざ5分割して保存することなくフレーバーをひとまとめのファイルにして管理する プラグインもあったのです。ここにきてようやく表題に追いついた。

ようはこの二つのプラグインを合体さして「別ディレクトリに追いやりつつ見やすく、 管理しやすくしてしまおう」という魂胆。ソースを眺めて大体アタリをつけてれっつら ガチャン。プラグイン、バグった。当たり前やがな。そんなポン付けで動いたら誰も苦労せん。 それはさておきなんで動かないのだろうか。いつもここから俺のPerlのおべんきょうがはじまる。 ポン付けでも文法的にはさして問題なかった気はするのだが。む、む。 content_typeのフレーバーだけがなぜか適用されている事に気づいた。ということはアレか、 いやコレか。

色々考えてるうちに「後方参照」という単語に行きついた。

だれかまじめに教えてほしいんですけど、

do {
    処理
} while (条件文);

という処理があったときさー、

do {
    $q =~ /(foo)(bar)/;
    $a = $1;
    $b = $2;
} while ($p =~ s/(PATTERN)// and $1);

みたいなふうなコードがあったとしてさー、whileの条件文内でマッチした場合、 do内の処理の$a=$1にはPATTERNが入っちゃうわけでしょうか? とすると$2はfoo?  とりあえずなんとかはしたしうまいとこ動いてるようだけど、なんかしっくりしない。

とりあえず改造版flavourdir

1/30追記。ちゃんと使い方ぐらい書いておこうかと思った。

フレーバーを入れておきたいディレクトリを$flavour_dirに、フレーバーファイル の拡張子を$extに(フレーバー名でなくファイルの拡張子。)設定して、フォールバック の有無(もし$flavour_dirに希望のフレーバーが無かった場合、元のテンプレート機能、 つまり$blosxom::datadir内を漁ってフレーバーを探すかどうか)を指定したら、 $flavour_dirで指定したディレクトリにフレーバーを入れるだけ。フレーバーファイルの 書式は<!-- blosxom content_type text/html; charset=UTF-8 -->とか <!-- blosxom head --><!-- blosxom date --><!-- blosxom story --> <!-- blosxom foot -->を、それぞれのブロックの先頭に書いておけばOK。 というか本当に単純にflavourdir+themeしただけなのでここまで書いておきながら やっぱ別に説明とかいらなかったなーとか後悔。