Evangeline
最初のページと最後のページへのリンクは作ってあったけど、前後のページへのリンクを作ってなかったので足してみた。最初はなくてもいいかなとか思ってたけど、自分でちょっと使ってみると、やっぱりあったほうが便利な気がしたので。 複数のテンプレートに…
# ダメ my $sth = $dbh->prepare('SELECT * FROM image_tag WHERE tag IN(?, ?) GROUP BY image HAVING count(image) == ?'); $sth->execute(10, 42, 2); # イイ! my $sth = $dbh->prepare('SELECT * FROM image_tag WHERE tag IN(?, ?) GROUP BY image HAV…
1984みたいな数字だけのタグが最後に来たときにページ番号とどうやって区別しようかと思ってたけど、$c->request->pathを見たら使えそう。実装はまだできてないけど、とりあえず目処はたったかな。下のエントリだと、 http://evangeline.example.com/tag/foo…
http://evangeline.example.com/tag/foo/bar/http://evangeline.example.com/tag/foo/bar/2http://evangeline.example.com/tag/foo/1984/http://evangeline.example.com/tag/foo/1984/2
というのは、はてブだとタグをクリックしたときにrelatedとしていっしょに使われているタグの一覧を出してくれるじゃないですか。あれを実装したい。で、とりあえずこんなコードを書いてみた。 my $schema = Evangeline::Schema::DBIC->connect(...); my $rs…
タグ一覧を実装してみた。実際にかかった時間は5分か10分くらい。フレームワークすごい。
昨日のはやっぱり私が変なコード書いてたせいでした>< きちんと書き直したのでこれでok。おなじくページャもこれで動作するようになった。複数タグでの絞り込みはまだ実装してないけど、実装できる目処はたったかな。
とりあえずこれで簡単なタグ検索が動くようにはなったかな。まだまともにデータ入れてないので、ページャは実装できてるか自信がない。書くだけのことは書いたけど。あと複数タグで絞込みはまだできてない。これも必要だよね。とりあえず100件くらいはデータ…
内部も外部とのI/Oも全部UTF-8にしてるので、C::P::Charsets::Japaneseをやめて、C::P::Unicodeを使うように変更。あと、ログはプロンプトに流れるのを追ってるだけだったけど、どうしても不便なので、C::P::Log::Dispatchでファイルにも書き出すように。他…
ページャはController内でData::Pageを使って自前で実装していたのだけど、DBIx::Class::ResultSet::Data::Pagesetを使って手を抜くように変更。自分でコード書いてもたいした手間にはならないのだけど、やっぱり面倒だし。勝手にやってくれたほうが気楽よね…
私のゴーストがささやくので、とりあえずコマンドプロンプトからのCUIでいいからとりあえず作ってしまおう。やっぱり作らないとなんの話にもならないしね。DBICのSchemaは書いてある。カテゴリの取得は前に書いたTangerine::Plugin::Categorizedがほとんどそ…
しばらくコードを書かないで、頭の中でいろいろ考える。テーブルの構造がこのままでいいかちょっと疑問になってきた。カラム1つ増やすべきかもしれない。
通しでのテストもきちんと通りました。1ヶ所だけスキーマのテーブル名が間違っていて少しはまったけど、それ以外はとくに問題もなく。ためしに6件データを登録。このまま全データを登録してしまいたいところだけど、それをやると多分25000件くらい登録しない…
これでサムネイルが出力できるようになりました。次は通しでテストをしないといけない。ファイルの読み込み、サムネイル作成、ファイルの移動、RDBへの登録。これだけ通しでテストを書いて、それを通せばまず第一段階はクリアかな。
インスタンス内に保持するように変更。次は、えっと、ファイル出力の実装か。ファイルハンドルとファイル名のどちらでも対応できるようにしたいけど、まずはファイル名の場合を実装して、必要になったらファイルハンドル渡しも対応させればいいかな。変更し…
Evangeline::Util::Imageの依存モジュールがどんどん増えてる。たぶんこれ以上は増えないと思うけど、どうだろう。 Carp Class::Data::Inheritable Digest Encode File::Basename File::Copy File::Temp Image::Info Image::Magick Term::Encoding
返値がEvangeline::Util::ImageクラスじゃなくImage::Magickクラスのインスタンスなのはどうかなぁと思った。同じEvangeline::Util::Imageクラスのインスタンスを返したほうがいいような気がするので、そのあたりちょっと書き直そう。出力するメソッドはどう…
サムネイルを作るコードを実装。普通にImage::Magickに読ませるとダメ文字が含まれているときに死ねるので、そのあたりも適当にごまかしつつ作成。具体的には、File::Tempでテンポラリを作っていったんコピーして、そっちから読み込むようにしました。コード…
きちんとホワイトリストを書きなおし。全部ハッシュに突っ込んでしまいました。これでハッシュを引くだけで確認できます。モジュール内でmyで宣言した変数は、モジュール外からはアクセサを介さない限り変更できないし、アクセサは存在しないから多分大丈夫…
別にわざわざImage::Infoを使う意味はないよね。これも全部Image::Magickを使うように書き直そう。あー、けど、それをやるとまたAUTOLOAD周りに手を入れないといけなくなるのか…。めどい。
入出力の文字コードを指定できるようにimportを実装。指定しないときは、入力はTerm::Encodingを使って取得、出力はUTF-8を仮定します。クラス変数として持たせるために、Class::Data::Inheritableを使いました。
とりあえずホワイトリスト方式に切り替え。存在しないメソッドを呼んで例外を投げてみるテストも追加。文字コードはまた明日にでも。サムネイル作るコードも書かないとなぁ。方針は見えてるから、さほど手間取らないと思う。
日本語はShift_JISからUTF-8に変換すること。
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…
NOT NULL制約のかけ忘れがあったので、sqlite3 Evangeline.dbから修正。tagテーブルのtag_idカラムにNOT NULLを振ってなかった。データは入ってないから、DROP TABEL tagしてからCREATE TABLE tagで再作成。なくても動くけど、完全を追求したいのです。で、…
はてダでもシンタックスハイライトが使えるようになったので、今書きかけのコードをちょっと貼り付けてみる。まだまだ手を入れないとなぁ。なんていうか、美しくない。動けばいいってだけのコードだから汚くて当然なんだけど。ていうか、そもそもから未完成…
同一ファイルの二重登録を避けるために、MD5でダイジェストを求めてファイル名に使っていたんだけど、MD5をやめてSHA-256にしようと思います。なんとなく大きい空間が欲しいので。まあ、MD5でもそう簡単には衝突は起きないだろうけど。CRC16くらいなら結構簡…
サムネイルを作ってからリネームしようとするからうまくいかないんだよ。順番を逆にして、リネームしてからサムネイルを作るようにしてやれば問題なくうごく。明日はコードを綺麗に書きなおさないと。現状、とりあえず動けばあとはどうでもいいやって感じの…
Evangelineにデータを登録するためのプラグインを書き書き。OOPで[http://search.cpan.org/~simonw/Module-Pluggable/:title=Module::Pluggable]を使って書いたから、プラグインを書けばほげほげ出来るのが便利。ベースクラスの振る舞いがあわなければ継承し…
ドキュメント読まなくちゃ。やりたいことをどう実装したらいいかわからない。