[.NET]VB.NETでWPFアプリを作ってみた

Posted on 4th 3月 2009 in .NET, Windows, プログラム

VB.NETもろくに触ったことないのに作った感想を書く。

コードは普通にVB.NET。

XAMLでUIの管理ができるのはすごい良い。XHTMLでWebサイト作ってるのと同じ感覚。

描画はDirect3Dを通して行われるのでCPU負荷が低いらしいが、業務的に高度なグラフィック処理が必要なプログラムは必要ないため実感沸かず。

.NET Framework3.0以上がインストールされているPCであれば、わざわざ従来のフォームアプリで作成するメリットは無い気がする。

comments: 0 » tags: , ,
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加

[Perl]forを高速化するイディオム

Posted on 2nd 3月 2009 in Perl, プログラム

プログラマー面接時の技術的な質問事項(アプレッソ版) – 解答編より。

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)

倍以上速いっぽいよこれ・・・
そもそもベンチマークの取り方が正しいのか不安だったので、ベンチマークの処理を除いて、スクリプトが終了するまでの時間を体感で計測してみたけどやっぱ速い。

もっと根本的な事を勉強し直さないと思い知らされました。

comments: 0 » tags: ,
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加

safari4でリダイレクトエラーの確認をしてみた。

Posted on 25th 2月 2009 in Web, Windows, ソフトウェア

safari4ベータが出たので、safariのリダイレクトエラーで書いた現象をWindows版で確認してみた。

Safariごと落ちるようになってた。

comments: 0 » tags: , ,
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加

[Perl]Mooseで携帯キャリア判定モジュール

Posted on 24th 2月 2009 in Perl, Web, ソフトウェア, プログラム, モバイル

自作の携帯サイト用アクセス解析ソフト「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
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加

[Java]IISログの時間を日本時間にする

Posted on 23rd 2月 2009 in Java, Web, Windows, ソフトウェア, プログラム

こんな感じでいいのだろうか。拡張性は一切考慮しなかった。

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();
        }
    }
}
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加