safari4ベータが出たので、safariのリダイレクトエラーで書いた現象をWindows版で確認してみた。
[Perl]Mooseで携帯キャリア判定モジュール
自作の携帯サイト用アクセス解析ソフト「Episode」の携帯キャリア判定モジュールをMooseでリファクタリングしてみた。色々改善の余地があるコードだけどとりあえず動くので良しとする。
HashRef[Str]型のdefaultの指定方法にめっちゃ苦労した。default = {a=>’a'}ってできなくて、無名サブルーチン使わなきゃいけないらしい。
MooseX::AttributeHelpersを組み込めば、この辺が楽になるのかね?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package Episode::Request::UserAgent; use Moose; use Perl6::Say; has 'useragent' => ( is => 'rw', isa => 'Str', default => '', required => 1, ); has 'regex' => ( is => 'ro', isa => 'HashRef[Str]', default => sub { { docomo => '^DoCoMo', au => '^(?:KDDI|UP\.Browser\/.+?)-(.+?) ', softbank => '^(?:SoftBank|Semulator)', } }, required => 1, ); __PACKAGE__->meta->make_immutable; no Moose; sub is_mobile { my $self = shift; $self->useragent =~ $self->regex->{docomo} || $self->useragent =~ $self->regex->{au} || $self->useragent =~ $self->regex->{softbank} ? 1 : 0; } sub AUTOLOAD { my $self = shift; our $AUTOLOAD; my $pkg = __PACKAGE__ . '::is_'; $AUTOLOAD =~ s/$pkg//; my $regex = $self->regex->{$AUTOLOAD}; $self->useragent =~ m|$regex| ? 1 : 0; } 1; my $ua = 'KDDI-HI31 UP.Browser/6.2.0.5 (GUI) MMP/2.0'; my $req = new Episode::Request::UserAgent; $req->useragent($ua); say 'mobile? : ', $req->is_mobile; say 'docomo? : ', $req->is_docomo; say 'au? : ', $req->is_au; say 'softbank? : ', $req->is_softbank; |
結果
mobile? : 1 docomo? : 0 au? : 1 softbank? : 0
[Java]IISログの時間を日本時間にする
こんな感じでいいのだろうか。拡張性は一切考慮しなかった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import java.util.*; import java.text.*; public class IISLog { private static final DateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String JST(String time) throws ParseException { Date date = FORMAT.parse(time); Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.HOUR, 9); return FORMAT.format(cal.getTime()); } public static void main(String[] args) { try { System.out.println(IISLog.JST("2008-08-27 23:00:00")); } catch (ParseException ex) { ex.printStackTrace(); } } } |
[Perl][Windows]Strawberry PerlでDBIx::Classをインストール
Strawberry PerlのCPANでDBIx::Classをインストールしてたら以下のようなエラーが出た。
cp lib/JSON/DWIW.pm blib\lib\JSON/DWIW.pm gcc -Ilibjsonevt -s -O2 -DWIN32 -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_READFIX -s -O2 -DVERSION=\"0.29\" -DXS_VERSION=\"0.29\" -o libjsonevt\make_config libjsonevt\make_config.c libjsonevt\make_config.c:6:22: sys/wait.h: No such file or directory libjsonevt\make_config.c: In function `do_system_with_redirect': libjsonevt\make_config.c:42: error: `F_DUPFD' undeclared (first use in this function) libjsonevt\make_config.c:42: error: (Each undeclared identifier is reported only once libjsonevt\make_config.c:42: error: for each function it appears in.) libjsonevt\make_config.c:50: warning: passing arg 2 of `execvp' from incompatible pointer type dmake.EXE: Error code 129, while making 'libjsonevt\make_config' DOWENS/JSON-DWIW-0.29.tar.gz C:\strawberry\c\bin\dmake.EXE -- NOT OK
DBIx::Classが依存しているJSON::DWIWでsys/wait.hというヘッダファイルが必要みたいだが、どうやら存在しないらしい。
Strawberry Perlにはppmも入っていたのでppmからインストールを試したら、すんなりインストールできた。
まだDB自体を構築してないので動作検証コードは書いてないけど多分大丈夫でしょう。
[Perl]俺はActivePerlをやめるぞ!ジョジョーッ!!
WindowsでPerlと言えばActiveperlかCygwin+Perlでしたが、Strawberry Perlなるものがあるようなのでインストールしてみました。
ActivePerlはコンパイル環境がないので、XSモジュールのインストールにはVC++を別途インストールしないといけないが、それでもコンパイルでこける場合が多々あり、ppmからインストールする手法でした。
しかしStrawberry Perlはgccとdmakeというコンパイル環境込みでインストールされるので、CPANモジュールのインストールでこける事がほとんどありません。
ActivePerl+CPANで依存モジュールの多いMooseのインストールは失敗しましたが、Strawberry Perlだとサクッと入りました。
散々待たされた挙句、make NOT OKとか出ないから最高!