Perl

ImagerでPNGファイルを読んだときに iCCP: known incorrect sRGB profile エラーで死ぬ

png_ignore_benign_errors に真値をセットする。 my $im = Imager->new; $im->read(file => 'foo.png', png_ignore_benign_errors => 1);

#!perl use strict; use warnings; my @ary = (); my $i1 = length scalar @ary; my $i2 = $i1 + $i1; my $i4 = $i2 + $i2; my $i8 = $i4 + $i4; my $i16 = $i8 + $i8; my $i32 = $i16 + $i16; my $i64 = $i32 + $i32; print chr($i64 + $i8), chr($i64 + $i…

Win32::API経由でStrCmpLogicalWを呼ぶメモ

# Written in UTF-8. Output is CP932. use 5.16.0; use strict; use warnings; use Encode qw/encode decode from_to/; use Win32::API; my $f = Win32::API::More->new('shlwapi', 'StrCmpLogicalW', 'PP', 'I'); my @strs = qw/ 20string 2string 3string…

ファイル消しちゃった

しかも2回目。フォルダの中のファイルに対してjpegtranしてファイルサイズ削るためのラッパーなんだけど。また書き直すのもう嫌だから、ここにコード貼り付けておきます。絶対またやらかしそうだしね。

Perl5.12.1入れた

今まで5.10.1使ってたけど、いい加減5.12にしたいよねってことで、ActivePerl 5.12.1 (x64)をインストール。いくつかモジュール入れなおして元の環境に復帰、と。今はとりあえずこれだけ。普段から使ってるスクリプトの依存モジュールたち。 DBD::SQLite (w/…

exiftool

古いPainterなんかがそうだったと思うんだけど、JPEGのアスペクト比が72:1とか狂ってるのでそれだけ縦横72dpiに直すメモ。 exiftool --printconv -ResolutionUnit=1 -XResolution=72 -YResolution=72 INPUT

久々にコード書いた

ちょっとここには貼れないけど。DBI直に触るのはそろそろ飽きてきたけど、DBIC使うとオーバースペック過ぎるのでSkinnyあたり触ってみたほうがいいかなぁ……

Perl 5.10でsay

use feature qw/say/; 5.8系使ってた時は、 use Perl6::Say; してた。 追記 2011-08-11 最近はこうしてる。 use 5.14.0;

64bit環境でXSモジュールをコンパイルするときにBufferOverflowU.libがないって怒られる

Windows Driver Kitに入ってるので、ダウンロードしてインストールするなり、7-zipでファイルだけ抜き出すなりしてやればok。 追記 WDKのダウンロードリンク。 600MBちょっとあるから、回線が細いとちょっとつらいかも。/GS-スイッチをつければこれいらなく…

Flickr

use strict; use warnings; use Flickr::API; use Perl6::Say; use XML::LibXML; my $key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; my $secret = 'XXXXXXXXXXXXXXXX'; my $id = shift or die; my $api = Flickr::API->new({ key => $key, secret => $secret, …

Flickr::API

FlickrのAPIドキュメント見ながらごにょごにょ。久々にコード書くとやっぱり楽しい。うひゃーってなる。とりあえず簡単なテストだけかいて動かしてみた。

メモ

どうせほとんど定型なんだから、テンプレート的なものを用意して、あとはデータを差し込むだけで生成するようにできないかなー、そのほうが変更入っても更新しやすいし。 んんん、となると、これユーザ側で使うクラスじゃないんだよなぁ。一緒に入れておくと…

メモ

no MODULEするときのコード例。id:perlcodesampleのObject::Simpleより。 sub unimport { # Get caller class my $caller_class = caller; # Delete MODIFY_CODE_ATTRIBUTES subroutine of caller class no strict 'refs'; delete ${$caller_class . '::'}{M…

だいぶ前に書いたコード久々に見てみたら、onetimeみたいにループ中で毎回Digest->newしてたのでちょっと気になってベンチマークとってみた。サイズにもよるけど、再利用するのに比べて6倍くらい遅いなぁ…… 毎回生成するのはやっぱりコストが大きいね。 use …

とりあえずメモだけ残しておいて実装は後で書く

my $k = E::C::Kernel->instance; $k->flush; # バッファに貯まってるのはきだす $k->autoflush(1); # バッファに貯めない $k->autoflush(0); # またバッファに貯める 追記 04/25 11:53 書いた。別のところでIO::Handleを読んでいるので、そっちのflush、aut…

設計悩む

use E::C::Kernel; E::C::Kernel->say('foo'); use E::C::Kernel qw/say/; say 'foo'; E::C::Kernelをsingletonにして use E::C::Kernel; #my $k = E::C::Kernel->new; my $k = E::C::Kernel->instance; $k->say('foo'); $k->print('bar'); $k->printf('%s',…

XML::LibXMLでHTMLをパース

するのは、 use strict; use warnings; use XML::LibXML; my $parser = XML::LibXML->new(); $parser->recover_silently(1); my $doc = $parser->parse_html_file('http://blog.livedoor.jp/dankogai/'); print $doc->toString; とやればいい*1のだけど、い…

何やりたいのかはわかるけど

while (1) { last unless my $c = grep { COND } LIST; ... } いくらなんでもこれはキモい。 while (my $c = grep { COND } LIST) { ... } こっちも大して変わらないなぁ。多少ましか。

DBD::SQLiteでREGEXP演算子を使うメモ

UDFにしないといけない。UTF-8決めうちにしてるけど、SQLiteで日本語使うのに他の文字コード使う理由もそうないだろうし、別にいいよね。 use DBI; use Encode qw/decode/; my $dbh = DBI->connect('dbi:SQLite:dbname=sqlite3.db', '', '') or die $!; $dbh…

んー、呼べるとまずいメソッドが呼べてしまうなぁ… これだけどうにかすれば最低限使えないこともない、ってところには持っていけそうなんだけど。 追記 どうにかした。

そろそろ何したいのかわからなくなりそう。MooseでいったらRoleつけたりはずしたりしたい。継承ツリー直接いじるとか筋が悪いってレベルじゃないし。 package Foo; sub new { bless {}, shift } package Bar; sub bar { 'bar' } package main; use Perl6::Sa…

DBD::SQLite::Amalgamation

DBD::SQLite::Amalgamation 3.6.1.2をインストール。こっちを使ってみる。http://d.hatena.ne.jp/tokuhirom/20080727/1217140312で公開されてるパッチを当ててコンパイル。t\12create_collation.tが通らない*1んだけど、文字コードをiso-8859-1からutf-8にし…

メモ

アルファチャンネルを適用する。$img->convert(preset => 'noalpha')だとなんかアルファを削除してるだけみたいな感じだった。 use Imager; use Imager::Color; use Imager::Fill; my $img = Imager->new or die; $img->read(file => $src) or die $img->err…

ファイル作成

via ファイルを作成する - Perlゼミ(サンプルコードPerl入門) これ、タイミングの関係でまずいことが起きる気がする。 my $file = "sample_20080519_$$.txt"; # $$ はプロセスID if( -e $file ){ # ← 上書きしてはいけないので、存在をチェック。 croak "$fi…

ハッシュのサイズ

最初からサイズが分かっていれば、途中で拡大するコストはかけないようにできるよね。 my %hash; keys(%hash) = 1024;

$0

別のスクリプトからライブラリとしてrequireされてるときは何もしないで、単体のスクリプトとして実行されてるときだけ処理したいコードがあったので、$0を読んでみる。$0には実行してるスクリプト名が入ってるので、それを確認してやればok # foo.pl if ($0…

コミット忘れてた

DBIいじってて、DBから削除できないなぁと悩んでたら、単にコミットしてないだけという下らないミス。接続するときにAutoCommit => 0としてるんだから、明示的にコミットしてやらないといけないのでした。

ひどいミスしてた

こないだ書き直したコードが前に比べて妙に動作が重いと思って、読み直してみたら sub foo { ... while ($cond) { require Foo; ... } ... } それはない。ありえない。だいたい8000回くらいwhileで回すんだけど、それだけ毎回requireしてたらそれは遅くて当…

メモ

my %cmd = ( foo => sub {...}, bar => sub {...}, ); my $c = shift; $cmd{$c} or die; $cmd{$c}->(@ARGV); いわゆる一つのディスパッチテーブル。

ページャ

最初のページと最後のページへのリンクは作ってあったけど、前後のページへのリンクを作ってなかったので足してみた。最初はなくてもいいかなとか思ってたけど、自分でちょっと使ってみると、やっぱりあったほうが便利な気がしたので。 複数のテンプレートに…