トップ 最新 追記

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|08|
2018|03|
2022|03|
2023|03|
2024|02|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2005-10-08

* [今月のAcme] Acme::Test::WeatherB!

  実際には先月のAcme。Acme-Test-Weather。天候をテストの判定条件に利用できるようにするモジュールです。

 use Test::Weather;
 plan tests => 1;
 
 isnt_raining();

 今の天気が雨の時はテストに失敗します! CAIDA::NetGeoClientというモジュールを通じて、お使いのマシンのIPアドレスから都市名を取得し、wunderground.comで天候を調べるという仕組みです。ただ、このモジュールのレビューアが述べているように、依存モジュールであるCAIDA::NetGeoClientはCPANからは手に入りません。実際にはSee Alsoにあるサイトから手に入るのですが、何年もメンテナンスがされていないとあります。Geo::IPを使って書き直してくれとレビューアもいっています。ここではCAIDA::NetGeoClientをGeo::IPのラッパとして書き直してみましょう。

 package CAIDA::NetGeoClient;
 use Geo::IP;
 use Geography::States;
 sub new {
   my $gi = Geo::IP->open(GEOIP_CITY_EDITION_REV1);
   bless { _gi => $gi }, shift;
 }
 sub getRecord {
   my $self = shift;
   my $ip   = shift;
   my $record = $self->{_gi}->record_by_addr($ip);
   return {
     COUNTRY => $record->country_code,
     CITY    => $record->city,
     STATE   => Geography::States
                  ->new('USA')
                  ->state($record->region),
   };
 }

たぶん動くんじゃないかと思いますが、都市名を取得するにはMaxMindの有償データが必要なため、試していません。残念でした。

 これで話が終わるとなんですので、hostip.infoを利用して書き直した版をご用意しました。これでAcme::Test::Weatherを試すことができます(運良く都市情報が取得できれば)。

 package CAIDA::NetGeoClient;
 use WWW::HostipInfo;
 use Geography::States;
 sub new {
   my $hostip = new WWW::HostipInfo;
   bless { _hostip => $hostip }, shift;
 }
 sub getRecord {
   my $self = shift;
   my $ip   = shift;
   my $record = $self->{_hostip}->get_info($ip);
   return {
     COUNTRY => $record->country_code,
     CITY    => $record->city,
     STATE   => ($record->region ? 
      Geography::States->new('USA')
        ->state(uc($record->region)) : ''),
   };
 }

 念のため言っておきますと、テスト上のマシンにglobalなIPアドレスが振られていないと使えません。ここで登場するWWW::HostipInfoについては次の項目にて。

* [Perl][メモ] hostip.infoを利用するB!

  hostip.infoは、IPアドレスから国名と都市名(および経度、緯度)が取得できる(コミュニティベースの)サイトです。意外なことにCPANにこのAPIを利用するモジュールが無かったので書いてみました→CPANにアップ

 use WWW::HostipInfo;
 
 my $hostip = new WWW::HostipInfo;
 my $ip     = 'xxx.xxx.xxx.xxx';
 my $info   = $hostip->get_info($ip);
 
 my $country = $info->country_name;
 my $city    = $info->city;
 my $region  = $info->region; # USAの州とか

 こんな感じで利用できます。

* [メモ] IPアドレスデータベースの利用B!

  上記のhostip.infoには、月に一度更新されるMySQL用のダンプデータが公開されています(利用する際はhostip.infoに負荷をかけないために"Downloading the Source"の項目を読みましょう)。MySQL 4.0に入れようとしたらsystaxエラーになったので、下記のコマンドで修正して導入。
 perl -pe's/\) ENGINE.*/\) ENGINE=MyISAM CHARACTER SET latin1;/' hostip_current.sql > modified_hostip.sql
  10/8に落とした時点でダンプデータが300Mほどあり、MySQLに入れると400Mほどスペースをとりました。データ上は、日本の都市は72ありました(typoっぽいのや東京を指しているらしいEdo, Tokioなども含む)。 216.177.121.11の都市名を調べるなら

 SELECT name FROM cityByCountry
  JOIN ip4_216 AS i USING(city)
  WHERE i.b=177 AND i.c=121

とか。

本日のツッコミ(全2件) [ツッコミを入れる]

_ 西野 [WWW::HostipInfoの件ですが、ここ一週間くらい、www.hostip.infoではどうもうまくいってない..]

_ まかまか [あー、そうなんですよねえ。どうしようかなあ。一時的に修正してCPANにあげようかしら?]

[]

■2005-10-23

* [メモ] OpenID再びB!

 5月の終わり頃に一部で盛り上がっていたOpenIDが、ねねさんのOpenIDで個人サイト同士が繋がるSNSで再度、というか今度はもっと広く話題になっていたんですね。やけにopenidで検索してくる人が増えたわけだ。
  この数ヶ月全く追っていなかったのですが、大きな変更はなかったのかな。あー、以前気がかりだったことや、FOAFとの絡み(05-26とか05-30)ついて、OpenID は「認証」としては使えないでも同じようなこと言ってらっしゃる。うーん。

追記:05-30の補足を……

[]

■2005-10-25

* [メモ] FOAF関連ネタの補足B!

  FoaF認証より

WOT が OpenPGP の web of trust を利用するのであれば FoaF の認証サーバなど必要ない。もし認証サーバを作るのであればそれは CA として機能しなければならない。

  春にねねさんらと話題にしていたFOAF承認(当初はFOAF認証と呼んでいましたが、認証するわけではないので後に承認と呼ぶことになりました)は、直接FOAFの認証をするサーバではなくて、あるユーザに対するコンテンツの閲覧・編集権の許可を、FOAFを通じて制御するサーバを意味しています。具体的にはこんな感じです(FOAF認証Wiki)。で、そのユーザの認証をどうするかという点で、電子署名を使えば良いのは承知しているのですが、それだとハードルが高くて使ってくれる人が少ないかなあ、ということでOpenID等にも関心がありました(結局解決しないというのがその時の私の結論でした)。

[]

■2005-10-27

* [雑感] Shibuya Perl Mongers テクニカルトークB!

 Shibuya Perl Mongers テクニカルトーク #6 今年も行こうと思っていたのですがもう締め切られてる…… はやすぎるよぉ

本日のツッコミ(全2件) [ツッコミを入れる]

_ miyagawa [登録がなくてもきていただいてかまいませんよ。]

_ まかまか [そうなんですか。 ではぜひ。]

[]

■2005-10-31

* [今月のAcme] 現在の日付を返すB!

  ふぅ、ぎりぎりで今月のAcmeですよ。 課題:スクリプトを実行することで、現在の日付を返すスクリプト。 Time::PieceやらDateTimeが挙げられています。なるほどなるほど(Data::Calc::Objectとかでも良いかしら?)。 でもそこはソレ、Acme::Currentを使いましょう。

 use Acme::Current;
 
 print $Acme::Current::YEAR;  # 今年!
 print $Acme::Current::MONTH; # 今月!
 print $Acme::Current::DAY;   # 今日!

 シンプルですね!
  ところでこのモジュールのディストリビューション名はAcme::CurrentではなくAcme::Current::Foreverになっています。 もともとAcme::Currentは$Acme::Current::DAYなどの変数が固定値でした。それが毎日毎日バージョンアップ(変数の値が変更される)されてCPANにリリースされていました。だから毎日毎日最新のバージョンをインストールすれば、正しい日付を手に入れられると。
  Acme::Current::Foreverは、このバージョンアップを自動化した真に画期的なモジュールだったのです。

 ただちょっと問題なのは、返ってくる値がGMTってとこですか。 あ、石を投げないでくださ
     参考

[]