VB.NETもろくに触ったことないのに作った感想を書く。
コードは普通にVB.NET。
XAMLでUIの管理ができるのはすごい良い。XHTMLでWebサイト作ってるのと同じ感覚。
描画はDirect3Dを通して行われるのでCPU負荷が低いらしいが、業務的に高度なグラフィック処理が必要なプログラムは必要ないため実感沸かず。
.NET Framework3.0以上がインストールされているPCであれば、わざわざ従来のフォームアプリで作成するメリットは無い気がする。
ヘヴィメタルプログラマー日記~メロイックサインでコードを書く日々~
VB.NETもろくに触ったことないのに作った感想を書く。
コードは普通にVB.NET。
XAMLでUIの管理ができるのはすごい良い。XHTMLでWebサイト作ってるのと同じ感覚。
描画はDirect3Dを通して行われるのでCPU負荷が低いらしいが、業務的に高度なグラフィック処理が必要なプログラムは必要ないため実感沸かず。
.NET Framework3.0以上がインストールされているPCであれば、わざわざ従来のフォームアプリで作成するメリットは無い気がする。
プログラマー面接時の技術的な質問事項(アプレッソ版) – 解答編より。
Perlでfor文のベンチマーク取ってみた。約70MB、32万行くらいのファイルを回すだけ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | use strict; use warnings; use Benchmark; use IO::File; my $file = '/var/log/hoge.log'; my @lines = IO::File->new($file)->getlines; timethese(100, { slow => sub { for (my $i=0; $i<=$#lines; ++$i) {} }, fast => sub { for (my $i=0, my $last = $#lines; $i <= $last; ++$i) {} }, }); |
結果
Benchmark: timing 100 iterations of fast, slow...
fast: 3 wallclock secs ( 2.66 usr + 0.00 sys = 2.66 CPU) @ 37.64/s (n=100)
slow: 6 wallclock secs ( 6.00 usr + 0.00 sys = 6.00 CPU) @ 16.67/s (n=100)
倍以上速いっぽいよこれ・・・
そもそもベンチマークの取り方が正しいのか不安だったので、ベンチマークの処理を除いて、スクリプトが終了するまでの時間を体感で計測してみたけどやっぱ速い。
もっと根本的な事を勉強し直さないと思い知らされました。
safari4ベータが出たので、safariのリダイレクトエラーで書いた現象をWindows版で確認してみた。
自作の携帯サイト用アクセス解析ソフト「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
こんな感じでいいのだろうか。拡張性は一切考慮しなかった。
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(); } } } |