Tangerine

うー

プラグインを少しずつ実装中。あとプラグインをロードするところで、同じプラグインを複数回ロードしようとしてるので、%INCをチェックして最初の1回のみrequireするように修正。requireはもともと%INCをチェックして読み込み済みだったらnoopだから、そのま…

config.yamlのvalidator

YAML::Syckで読み込んでる時点でyamlとしてvalidなのはわかってるんだけど、config.yamlとしてvalidかどうかって確認してないや。モジュールの読み込みとかレシピのパースとかする前に、config.yamlとしてvalidであることを確認しないといけないよね。あとで…

レシピ

とりあえず動くようにしてみました。次はプラグインの実装だね。今はまだスタブを書いてあるだけだから、実際にはなんの動作もしてないです。

レシピ

とりあえずループをどうしようかの件はどう実装するか決定したので、明日にでも。数値解析のレポートも書かないといけないのだけど。最近疲れが溜まってて、講義の途中少しうとうとしてたから、教科書参考に挑戦。あと先週のレポートで2の5乗を2進数の5と書…

今日の進捗

レシピに手を付けてみました。二重にループしなきゃいけないのだけど、外と内をどちらにしようかちょっと悩んでます。試行回数を最小にしたいから、明日テストスクリプトを書いてみる予定。

ログ

IO::Teeを使ってlogging。標準だとSTDOUTのみ、yamlでファイルを指定しておくとそのファイルにも同じ出力を追加書き込み。出力するだけの機能しかつけてないから、タイムスタンプつけるとか、実際にはもう少し手を入れないといけないかな。次はRecipeまわり…

プラグインの読み込み

ここまで書いてみた。Module::PluggableでPluginディレクトリに入ってるプラグインを全部まとめて読み込むのをやめて、レシピをパースして実際に使ってるものだけ読み込むようにしました。ちなみに、実装するに当たってコードを参考にほんの少しだけPlagger…

設定ファイル

とりあえずちょっとだけplaggerのconfig.yamlっぽい感じにしてみた。まだ手を入れないといけないなぁ。

うーん

いい感じのモジュール名が思いつかない。

ハッシュの配列のハッシュ ハッシュの配列の配列 どっちも一長一短あるんだけど、今のところ案1をもとに考えてます。 追記 んー、案2を採用したほうがいいかもしれないにゃー。

うーん

実際に実装してみると設計が腐ってるなぁ…。もう少しどうにかしないと。実装する前にわかれよー、って話なんだけどね。 追記 ダメっぽい。明日の空き時間で設計を練り直してきます。設計力とか脳内シミュレーションの正確さとかいろいろ足りてないなぁ。妄想…

設定

設定ファイルのフォーマットはこれでよさげ。次はえっと、テストを書いてみるにょー。

正規表現

完全性を期すと^foo(?:(?:[-_]\d|_)_?|bar)?になるけど、これはさすがにアレだなぁ。あんまりでてこないパターンを外して^foo(?:[-_]\d?|bar)?にしてしまってもいいかもしれないね。これで引っ掛からないパターンはああまりでてこないから、そのときぐらいは…

あー、だめか

今書いてるフォーマットだとGlobalって名前のプラグインが実装できなくなる。実際にそんな名前のプラグインを書くかどうかは別にしても、プラグインの名前空間に言語仕様以上の余計な制限をつけるのはちょっとアレだなぁ。それはちょっと趣味じゃない。 追記…

これは書き直そうかなぁ

どう考えてもconfigurableであるべきデータまでモジュールにハードコードしてるなぁ。ていうか、不要にモジュールも多い。プラグインはもっと減らせるはず。ちょっと手を入れてみよう。

コンフィグ

ファイルのフォーマットに悩む。Iniで書いてあるんだけど、今書き直すとしたらYAMLを使いたいところ。けどYAMLってIniに比べたらツリー構造だよね。ツリーの構造がどうしようかなぁ、とか。とりあえずいろいろ手を動かしてみようかなぁ。にょろ〜ん。

スクラッチから書き直したい

タイトルが物語ってるとおりなのだけど。書いたのが結構前だから、今見ると実装がどうこう言う前に、そもそもの設計の時点でアレなんだよね。組み込み関数のオーバーライドとかソースフィルタはいま書き直してもほぼ同じになるだろうけど、プラグインまわり…

トランザクション

my $txn = sub { my $img = $schema->resultset('Image')->find_or_create({ image_id => $image{image_id}, extension => $image{extension}, width => $image{width}, height => $image{height}, filesize => $image{filesize}, original_name => $image{o…

ふみゅー

んー、なんか微妙だなぁ。とりあえず今の方針で書いてみる。データ構造ならともかく実装ならあとからでも替えがきくし。あとトランザクション重要。

プラグイン書いたり

$self->say(scalar(localtime), " $src"); $self->say(" move $src => $dest"); my @tags = $self->getCategory($src); my %image; my $temp = (File::Spec->splitpath($dest))[2]; if ($self->_debug) { File::Copy::copy $src, $temp or croak $!; } else …

プラグイン書き書き

package Tangerine::Plugin::Evangeline::Image; use strict; use warnings; use version; our $VERSION = qv('0.1.0'); use Class::InsideOut qw/private register id/; use Image::Magick; use Tangerine::Core::Carp qw/croak/; private _im => my %_im; …

正規表現が

だいぶ複雑になってしまった。 $p =~ /Plugin::(?:(?:(?!Base)).(?

Tangerine::Plugin::Evangeline::Image

画像を扱うクラス…なんだけど、書いてみてどうもすっきりしない。インターフェースは決まってるんだけど、内部の実装ですっきりこないんだよね。ハッシュリファレンスに突っ込むと外から触れるし、Singleton Patternもなんか違う。ていうか、Singletonなんか…

Identifier

ファイルのIDはハッシュ値を使うから仮に投稿時刻がかぶっても大丈夫。だから&Time::HiRes::timeは必要なくて組み込みのtimeで十分足りる。

インターフェース

これが決まらないことにはコードが書けない。どうしよっかなぁ。いま妄想してるのをコードに落としてみる。 $img = Foo->new(file => 'bar.jpg'); # $img = Foo->new(filehandle => $fh); # ファイルハンドル渡し ($width, $height, $size) = $img->get(qw/w…

文字コード

あれ、Shift_JISじゃなくて、CP932のほうがいいんじゃないか? 昔チャットログのコンバータ書いたときにWAVE DASH - FULL WIDTH TILDE問題ではまったことがあるような。 追記 [13:01] 全部grepで探し出して、cp932に書き直し。

文字コードの件

直した。 my $charset = eval { Tangerine->_config->val(qw/Global charset cp932/) }; $charset = 'cp932' if $@; あとはこれでShift_JIS決め打ちになってるところを[]$charset[]を使うように置き換えるだけ。

文字コード

きちんと書き直し。文字列とバイト列の区別がついてないところは全部書き直しました。バイト列のままだと正規表現で2バイト文字の途中にマッチしたりしていろいろとやばいことになるので。

まだまずい

バイト列と文字列の件は修正したけど、IOのキャラクタセットがShift_JIS決め打ちになってる。これはポータブルじゃないから明日書き直します。

サムネイル作成のインターフェイス

どうしようか悩み中。外にくくりだすなら関数にするかメソッドにするか、あるいはImage::Magickを直に叩いてもいいし。あるいはImage::Magick::Thumbnailあたりに任せてもいい。悩むなぁ。