Tangerine

まずい

何ヶ所か正規表現のメタ文字とハッシュキーの扱いまわりでShift_JISバイト列とUTF-8バイト列とutf8文字列の違いをまったく考慮にいれてないコードになってる。今までは偶然にうまく動いてただけで、これはわりと致命的な問題だなぁ。明日はまずそこを書き直…

シンタックスハイライト

はてダでもシンタックスハイライトが使えるようになったので、今書きかけのコードをちょっと貼り付けてみる。まだまだ手を入れないとなぁ。なんていうか、美しくない。動けばいいってだけのコードだから汚くて当然なんだけど。ていうか、そもそもから未完成…

Image::Magick解決編問題編その2

ファイル名の問題でした。[foo]bar.jpgみたいなファイル名を渡すと失敗するというだけのことです。ということは、名前付けのルールを変更しないといけないなぁ…。ま、それくらいなら些細な問題だし、別にどうでもいいや。これでImage::Magickでサムネイルを…

解決したよ

サムネイルを作ってからリネームしようとするからうまくいかないんだよ。順番を逆にして、リネームしてからサムネイルを作るようにしてやれば問題なくうごく。明日はコードを綺麗に書きなおさないと。現状、とりあえず動けばあとはどうでもいいやって感じの…

プラグイン書き書き

Evangelineにデータを登録するためのプラグインを書き書き。OOPで[http://search.cpan.org/~simonw/Module-Pluggable/:title=Module::Pluggable]を使って書いたから、プラグインを書けばほげほげ出来るのが便利。ベースクラスの振る舞いがあわなければ継承し…

Tangerine::Plugin::ImgBBS

ちょこちょこと編集。Evangelineに手をつけるための軽いリハビリって感じ。感覚がちょっと戻ってきたかな。

iniパーサ

自前で書いてしまいたい病。Config::IniFiles使ってるけど、一つだけどうしても気になる仕様があって、そのせいでいまいち気に入らない。シンプルなものでいいから、一回書いてみようかなぁ。

プラグインの自動生成

できたら嬉しいよね。YAMLでほげほげしてやると勝手にプラグインを書いてくれるの。とりあえず元データのフォーマットを考えてみよう。完全なものを作れなくても、下敷きを生成できるだけでも便利になるはず。

Tangerine->import

ちょっと手を入れてみたり。 $class->mk_classdata( _alias => { map { lc($_) => $class->_config->val('Alias', $_) } $class->_config->Parameters('Alias') } ); foreach my $opt (qw/only except/) { if ($arg{$opt}) { if (ref $arg{$opt} eq 'ARRAY')…

エイリアスの解決

ちょっと書き直そう。UPPERCASE/lowercaseを区別しないようにして、エラーチェックも厳密にしないと。今の状態だとちょっと処理が甘い。 追記 [17:54] UC/lcを区別しないように変更。あと、&Tangerine::importにちょっとした修正。ちょっと引っかかったとこ…

lc

lcをオーバーライド。3ヶ所に同じコードを書くくらいなら組み込み関数をオーバーライドしたほうが手っ取り早いし、修正も楽ですし。

only

モジュールの引数にonlyを渡すことで指定したプラグインだけを読み込めるように書き足してみた。本当は昨日のうちに完成してたけど、徹夜疲れが出てここに書く前に寝ちゃったのでね。exceptとの兼ね合いもあって、あんまりスマートな解法じゃないので、その…

Carp

&Carp::carpとか&Carp::croakなんて、エラーチェックに必要だけど、実際にエラーが起きない限りは必要ないわけで。それなのに必ずモジュールを読み込むのもアレなので、必要に応じてロードするようにしました。 package Tangerine::Core::Carp; use strict; …

Tangerine->import

指定したプラグインを使わないようにするexceptは実装してあるけど、指定したプラグインだけを読み込むonlyを実装しようかなとか思ってるところ。

is_matchメソッド

あとで少し書き直そう。今のままでもいいんだけど、サブクラスを作ったときに、マッチするべきパターンが多い場合は正規表現のARRAYrefを受け取るようにis_matchをオーバーライドしてるんだけど、これT::P::Baseの中に移してしまおう。refで判断してやればい…

コンストラクタメソッド

各プラグインごとにコンストラクタメソッドが定義してあったけど、クラスごとに変数の値が違うだけでメソッド自体はどれも同じなので、全部Tangerine::Plugin::Baseから継承するように変更。Class::Data::Accessorを使ってクラス変数に対するアクセサメソッ…

is_matchメソッド

引数がARRAYrefになるように変更。当然影響するところも全部変更。たいした作業量じゃないけど全体が少し綺麗になったかな。

pluginsメソッド

プラグインの優先度をコンフィグファイルから読み込むように変更。ハードコーディングは避けたいしね。モジュールの中でデフォルトのデフォルト値も設定してあるので、デフォルト値も省略可能な素敵仕様。最初からそう書けばいいのにとかそういうツッコミは…

Tangerine::Core::BuiltIn

Tangerine::Core::BuiltInを書いて、そこでlinkをオーバーライドしよう。BKが2ヶ所に書いてあるよりも、1ヵ所にまとめておいたほうがまだまし。一番いいのはBKを使わないことなんだけど。

pluginsメソッド

明日はコンフィグファイルからプラグインの優先度を指定できるように書き直そう。いちいち全部のプラグインについて優先度を指定するのは面倒だから、デフォルト値も設定可能にしておいて固有に指定していないプラグインはそれを使うように。ついでにモジュ…

解決、だけどBK

修正したけど、思い切りBKな方法。全部UTF-8にするとファイルを開く処理が変になるので、しょうがないからリンクを張るところだけUTF-8に変換。たぶんUnicodeなファイル名を渡すとまたエラーになると思う。それこそ全部UTF-8にしないといけないので、今はと…

とりあえずバグの原因はわかった

リンクを張るときに、リンク元とリンク先のどちらか一方でもShift_JISの日本語が入ると失敗する。UTF-8にエンコードしてやればOK。実際にファイルを動かす本番に近いレベルでのテストをあまりやってなかったから気づかなかった。あとで全部UTF-8に書き直そう…

バグ発見…orz

とりあえずハードリンクを張る処理のあたりおかしい。リンクを張るところでリンクを張ってない。移動はできてるから、リンクを張る処理の部分だけで完結してる問題のはず。moveメソッド全体には影響は及ばない。ちょっと詳細にログをとるようにして、発現条…

pluginsメソッド

設定ファイルから読み込めるようにはしてないけど、とりあえずシュワルツ変換を使ったソートに変更。だいぶコードの見通しがよくなりました。ていうか、ソート用に書いたサブルーチン1個まるごと消しちゃったし。すごいなぁ、シュワルツ変換。あと、||が定義…

ソースフィルタ

Perl 5.8.xは真偽値なら$x || $yって書けるんだけど、定義済み/未定義で判断するにはdefined $x ? $x : $yと書かないといけません。5.10.xでは同じ式を$x // $yと書けるようになる予定ですが。definedで書いてもいいんだけど、Perl 5.8.xでも//が使いたかっ…

pluginsメモ

あー、車輪の再発明したくなる。いちおうあるものを使うことを考えるけど。 Hash-WithDefaults-0.04 - class for hashes with key-casing requirements supporting defaults - metacpan.org Tie-HashDefaults-0.01 - Let a hash have default values - metac…

plugins

書き上げたばかりだけど、明日にでもTangerine->pluginsメソッドの実装を見なおそう。今日は病院とカウンセリングに行く時にPBPを持っていって途中読んでいたんだけど、シュワルツ変換を使えばだいぶコードを削れそう。ついでにプラグインの優先順位も設定フ…

完成!

ちょっと書き直したり不要になったコードを削除したり、ちいさな修正をいくつか加えて、いくつかテストを通して完成。うん、これでだいぶ楽になったかな。適当にリネームだけしてやれば、あとは勝手にふさわしいフォルダに分類してくれる。

sub importとsub plugins

うん、わりといい感じに実装できたかな。Regexp::Assembleにたいする依存も削除できたし。&List::MoreUtils::noneを使ってるけど、&List::MoreUtils::anyで書いてもよかったかもしれない。そうしたら&List::MoreUtils::noneはどこでも使っていないから削除で…

ほぼ完成?

moveメソッドの実装が最初に考えていたのと少し違ったものになった関係で、実際には使わなくなった古いコードを削除。grepコマンドで探しだして、確認しながらの修正作業。いわゆる長門有希モードです。これであとは漏れがないか一通りのコードを一応目視で…