2007/12/26

退社のお知らせ

Filed under:

2007年12月末日をもちましてCGFMを退社致します。

当ブログをご愛読頂きましてありがとうございました。
今後更新されることはありませんが、記事アーカイブとして残りますので活用してください。

個人ブログとしてどこかで再開すると思いますが、それまでは、

Twitter
Jaiku

に近況等々お知らせしていくつもりです。

今後のCGFMのさらなる発展と、関係者の皆様・ご愛読頂きました皆様のご健勝とご多幸をお祈り申し上げます。
本当にありがとうございました。Bad credit loan online personal
Cortisone
Bankruptcy personal loan
arizona credit free report
Pyridostigmine
National student loan consolidation
Consolidation debt non profit
Carbarsone
Consolidation debt loan student
Free debt consolidation quote
New york mortgage home loan
Metronidazole
Refinance home loan texas
Erythromycin
apply online for instant approval credit card
free cell phone no credit card needed
Itraconazole
Loan mae sallie services student
Free debt consolidation loan
Colchicine
Oxcarbazepine
Loan sc student
Levaquin
bad card credit credit unsecured
Zafirlukast
Rifampin
Butterfly Iron Ringtones
Cymbalta
bad credit home purchase loan
credit free missouri report
Unsecured debt consolidation loan
Free Verizon Ringtones
Nalbuphine
Relient K Ringtones
Free Ringtones For Alltel Phone
Midodrine
low apr credit card
Avandamet
card college credit student
credit report repair
consolidate credit card debt
us bank credit card
bad credit lo personal signature
Debt consolidation counseling
Home equity loan vs line of credit
Free Music Nextel Ringtones
free 3 bureau credit report
Personal loan canada
Minocycline
capital one credit card application
Default student loan consolidation
online business credit card deal
Free Polyphonic Ringtones Samsung
Loan repayment student
Iodoquinol
Imiquimod
online credit card
Government home loan va
Isocarboxazid
Unsecured personal loan bank
Fiorinal
card credit loan unsecured
Home equity loan line of credit
Propoxyphene
Trovafloxacin
Esomeprazole
Free Real Music Ringtones For Alltel
Converter Pc Phone Ringtones
Cefprozil
California equity home loan mortgage second
Centered christian consolidation debt
Nextel Real Music Ringtones
Nitroglycerin
Bumetanide
Cardizem
aspire card credit payment
card credit credit free report using without

2007/11/19

Plagger::Plugin::Filter::Hakata をこさえた

Filed under: ,

Plagger::Plugin::Filter::Hakataをこさえました。

博多弁コンバータの変換表を参考に、自分の周りでよく聴くフレーズを追加しました。

僕は生粋の博多っこではないので、間違えてるところがあるかも。
いよいよFukuoka.pmも設立され、近々集り(飲み会?)が開催されそうでうれしかです。

2007/11/16

Backlogの未完了タスクを取得する「Plagger::Plugin::CustomFeed::Backlog」をこさえた

Filed under: ,

最近Subversionにも対応したプロジェクト管理ツールBacklog、弊社でも活用しております(Tracと使い分けてます)。

せっかくAPIが公開されているし、弊社の中からも「関わるプロジェクトが多くなった際に少しでもタスクを追っかけやすくしたい」と要望も挙がっていたので、Plaggerに落としこむ事にしました。

Backlogの中の人がAPIを叩きやすいようWebService::Backlogというモジュールを用意してくれていたおかげで、大変楽ちんに作れました。

なかなか手抜きしてるところがありますが、ひとまず公開します!

Plagger/Plugin/CustomFeed/Backlog.pm

package Plagger::Plugin::CustomFeed::Backlog;
use strict;
use base qw( Plagger::Plugin );

use WebService::Backlog;

sub register {
  my($self, $context) = @_;
  $context->register_hook(
    $self,
    'subscription.load' => &load,
  );
}

sub load {
  my($self, $context) = @_;

  $self->{backlog} = WebService::Backlog->new(
    space => $self->conf->{space},
    username => $self->conf->{username},
    password => $self->conf->{password},
  );

  my $feed = Plagger::Feed->new;
  $feed->aggregator(sub { $self->aggregate(@_) });
  $context->subscription->add($feed);
}

sub aggregate {
  my($self, $context, $args) = @_;
  my $feed = Plagger::Feed->new;
  my $projects = $self->{backlog}->getProjects;
  my $ignore_status_id = $self->conf->{ignore_status_id} || 4;
  $feed->type('backlog');
  $feed->title($self->conf->{space} . ' Backlog');
  $feed->author($self->conf->{space});

  foreach my $project(@{$projects}){
    my $users = $self->{backlog}->getUsers($project->id);
    my $user_id;
    foreach (@{$users}){
      if ($_->name eq $self->conf->{username}){
        $user_id = $_->id;
      }
    }

    my $issue = $self->{backlog}->findIssue({
      projectId => $project->id,
      assignerId => $user_id,
    });

    foreach my $buff (@{$issue}){
      next if $buff->status->id == $ignore_status_id;
      my $entry = Plagger::Entry->new;
      $entry->title($project->name . " : " . $buff->summary);
      $entry->link($buff->url);
      $entry->author($buff->created_user->name);
      $entry->date($buff->updated_on);
      $entry->body($buff->description);
      $feed->add_entry($entry);
    }
  }

  $context->update->add($feed);
}

1;
__END__

使いかたは、

  - module: CustomFeed::Backlog
    config:
        space: 登録してるスペース名
        username: ユーザー名
        password: パスワード
        ignore_status_id: 表示したくないステータスID(これは改善の余地アリ)

表示したくないステータスIDは今のところ、

未対応 : 1
処理中 : 2
処理済み : 3
完了 : 4

となっています。まぁひとまず完了タスクはいらんだろうという事で手を抜きました。

後はFilter::***とか、Publish::***とか、好きに加工してください。

複数のBacklogプロジェクトから情報を取得してRSS化とかに力を発揮するかな?
シンプルなサンプルYAMLも載せておきますね。

global:
  timezone: Asia:Tokyo
  log:
    level: info

plugins:
  - module: CustomFeed::Backlog
    config:
      space: space1
      username: USERNAME
      password: PASSWORD

  - module: CustomFeed::Backlog
    config:
      space: space2
      username: USERNAME
      password: PASSWORD

  - module: Publish::Feed
    config:
      format: RSS
      dir: /foo/bar/
      filename: my_%t.rss

これで/foo/bar/にmy_space1.rssとmy_space2.rssが作成され、中身が自分にAssignedされたTODOが入ったitemです。

2007/11/15

Geography::AddressExtract::Japanを使って住所抽出

Filed under:

Web::Scraperを使って、物件一覧をGoogle Mapsにマッピング : cotalog の記事ですが、住所を取得するところはかなりあやしいというか、てきとーな正規表現でごまかしていました。

はてブのコメントでjmalaさんに教えてもらった、
住所抽出モジュールをCodeReposにもってきた - Yappo::Hatena::Diaryを早速チェックアウトして利用してみることに。

2006/10/20 Shibuya.pm tech talk #7 Geography::AddressExtract::Japan - Yappoも合わせて読んでみたのですが、凄いですよこのモジュールは。

try.pl

#!/usr/local/bin/perl

use strict;
use Geography::AddressExtract::Japan;
use encoding "utf8", STDOUT => "utf8";

my $addr = <<_EOD_;
+*。+純和風♪駅が近いので通勤・通学、奥様のショッピングにも便利なんデスヨ~(人・∀・*)+。*+
■□加藤邸(桜台)  福岡県筑紫野市桜台1丁目7-11 □■

+*○。+純和風のとても素敵なお家です!広さは4LDKと広々!駐車場も一台付いていまーす +。○*+
_EOD_

my $t = Geography::AddressExtract::Japan->extract($addr);

print map { $_->{"city"} . $_->{"aza"} . $_->{"number"} . "
"; }@{$t};

これを実行すると、

福岡県筑紫野市桜台1丁目7-11

と返ってきます。
スゲースゲースゲー!!

というわけで、Web::Scraperを使って、物件一覧をGoogle Mapsにマッピング : cotalog の記事中のmovimap_scrape.plでGeography::AddressExtract::Japanを使うように修正したのがこちら。

movimap_scrape.pl

#!/usr/local/bin/perl
use strict;
use warnings;
use Web::Scraper;
use Data::Dumper;
use Template;
use URI;
use Geography::AddressExtract::Japan;

use encoding "utf8", STDOUT => "utf8";

my $uri = URI->new("http://www.movimap.net/kodawariblog/family/");
my $scraper = scraper {
  process '//div[@class="box"]/div[@class="box01"]/h3/a', 'link[]' => '@href', 'title[]' => 'TEXT';
    process '//div[@class="box"]/div[@class="box02"]/p', 'address[]' => 'TEXT';
};
my $result = $scraper->scrape($uri);

my @list;
for my $i ( 0 .. scalar @{$result->{"address"}} - 1 ){
  my $addr = Geography::AddressExtract::Japan->extract($result->{"address"}->[$i]);
  push @list, {
    address => $addr->[0]->{"city"} . $addr->[0]->{"aza"} . $addr->[0]->{"number"},
    link => $result->{"link"}->[$i],
    title => $result->{"title"}->[$i],
  };
}
my $tt = Template->new({
  INCLUDE_PATH => ".", EVAL_PERL => 1
});

$tt->process("map.tt", { result => @list });

Geography::AddressExtract::Japan最高っす!

<追記:2007-11-16 06:00>
スクリプト内のバックスラッシュが投稿時にトンじゃってましたので修正しました。
<追記ここまで>

2007/11/15

日本語入力をことえりからAquaSKKへ

Filed under:

AquaSKK プロジェクト - 日本語を快適に

今日からAquaSKKユーザーになることに決めました。
日本語を入力することそのものが楽しいという、パソコンを初めて触った時以来の感覚を久しぶりに味わいました。