Hatena::Groupasakura

浅倉卓司@blog風味? このページをアンテナに追加 RSSフィード

Error : RSSが取得できませんでした。

2005-01-31(Mon)

2対8じゃなくて、1対20なのかもしれない

|  2対8じゃなくて、1対20なのかもしれない - 浅倉卓司@blog風味? を含むブックマーク  2対8じゃなくて、1対20なのかもしれない - 浅倉卓司@blog風味? のブックマークコメント

 「経済物理学(エコノフィジックス)の発見」にベキ分布の話が書かれていたのですが、それによると為替相場は

  • 標準偏差の2倍程度の変動が全体の95%
  • 残り5%しかない大変動が全体の動向を示す

――という特徴があるそうです。

 ということは、良く言われている2対8以上に世の中偏ってるんじゃないのかな、とか思ったり。


 つらつらと検索したら「べき法則とネット信頼通貨を語る夕べ!*1」とかやってる方々もいるらしい。ざっとみた感じではまとまりに欠けるみたいだけど*2

 ……あれ、経済物理学の話じゃないのか。似たような(でも全然違う)ことが書かれてるんだけどね。

*1:リンク先は第2回のレポート。

*2:ベキ分布のことを書いているのにフラクタルのことに触れていないのはちょっと不思議。

ひできひでき2005/02/01 09:07いんやぁ、スケールフリーがフラクタルだって知らなかったんですよ。あの勉強会のお仲間はみんなネットワークからはいってきているもんですから...んで、気がついたら高安さんなんかがやってらっしゃることと限りなく近いじゃない!ということでびっくりしています。ちなみに、よろしかったらご参加ください。
http://mixi.jp/view_community.pl?id=42072
絶賛強力アクティブメンバー募集中です。

2005-01-27(Thu)

CMSとWikiとSubversionを組み合わせたもの

|  CMSとWikiとSubversionを組み合わせたもの - 浅倉卓司@blog風味? を含むブックマーク  CMSとWikiとSubversionを組み合わせたもの - 浅倉卓司@blog風味? のブックマークコメント

――ってないんだろうか*1

 便利だと思うんだけど。


ConceptSearchとExpandFinder*2との違い

|  ConceptSearchとExpandFinder*2との違い - 浅倉卓司@blog風味? を含むブックマーク  ConceptSearchとExpandFinder*2との違い - 浅倉卓司@blog風味? のブックマークコメント

ConceptSearchは、DocuWorks6.0に同梱されるExpandFinderから、
以下の機能が変更されています。ご参考ください。

 ■メールソフトで受信したメール文書対応
  メールソフトで受信したメールの本文(テキスト形式、HTML形式)
  と添付の文書ファイルが検索できます。

 ■「はっぴょう名人」のカードファイル対応
  弊社製文教プレゼンテーションソフト「はっぴょう名人」
  「はっぴょう名人2」「はっぴょう名人Teen's」
  「はっぴょう名人Teen's2」で作成したカードファイルが検索
  できます。

 ■「履歴」専用の検索画面を追加
  過去に検索した条件の履歴一覧から選んで検索するための専用画面が
  追加されました。

 ■DocuWorks関連機能を削除
  DocuWorks6以上がなくても動作可能にしました

――だそうな。

 うーん。メール検索機能は欲しいけれど、とりあえずSearchXで足りてるからいいか。

 とりあえずDocuWorks5.0を買っておこうかな*3

*1:CMSの部分はblogツールでもいいです。

*2:DocuWorks6.0に附属する検索ツール。

*3:今なら無償で6.0にバージョンアップできて、5.0のほうが1,000円安いから。それにしてもキター―(゚∀゚)―!はないだろ(笑)。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050127

2005-01-25(Tue)

久々にPHPを触ったけど、

|  久々にPHPを触ったけど、 - 浅倉卓司@blog風味? を含むブックマーク  久々にPHPを触ったけど、 - 浅倉卓司@blog風味? のブックマークコメント

 コーディングがつらいです。

 Perlに慣れすぎているというのもあるけれど、それ以上にプログラム言語として気持ち悪い部分が多い気がします。

 Perlでプログラムを学ぶと良くないと主張する人もいますが、PHPPerl以上に良くないのではないかと……。


 Perlでリライトさせてくれないかなぁ。


最近Googleの結果が微妙な気がする。

|  最近Googleの結果が微妙な気がする。 - 浅倉卓司@blog風味? を含むブックマーク  最近Googleの結果が微妙な気がする。 - 浅倉卓司@blog風味? のブックマークコメント

 一時期「軋む時空」で上位に表示されてたり、現時点だと「陰陽大戦記」で上位に表示されてるのが気になるのです。Yahoo!やAsk Jeevesでは上位に出ないのに。

 はてながGoogleに補足されやすいってのはあるだろうけど、通常はキーワードのほうが上位に来るはずなんだけど……*1

 ちなみにAsk Jeevesだとはてなはあまり上位に出ないようです。


ConceptSearchの一般販売が決定。

|  ConceptSearchの一般販売が決定。 - 浅倉卓司@blog風味? を含むブックマーク  ConceptSearchの一般販売が決定。 - 浅倉卓司@blog風味? のブックマークコメント

 株式会社ジャストシステムは、2,100社の先進企業で活用されている「ConceptBase IV」の検索エンジンを採用し、大容量化したパソコン内に蓄積された情報をすばやく探し出せる、デスクトップ情報検索ソフト「ConceptSearch(コンセプトサーチ)」を、3月4日(金)から店頭にて販売開始します。希望小売価格は、8,000円(税別)です。

ニュースリリース

 いちおう期待。ちょっと高いのが難点だけど。

 もっとも、今はDocuWorksが気になってるので、そっちを買うかもしれません*2

*1:Yahoo!はキーワードのページが上記にきてる。

*2:お買い得パックっぽいし。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050125

2005-01-21(Fri)

SubversionをVineLinux3.1に入れたけど、Apache2と連携できなくて困った。

|  SubversionをVineLinux3.1に入れたけど、Apache2と連携できなくて困った。 - 浅倉卓司@blog風味? を含むブックマーク  SubversionをVineLinux3.1に入れたけど、Apache2と連携できなくて困った。 - 浅倉卓司@blog風味? のブックマークコメント

 BerkeleyDBのバージョンが違ってるからっぽい。仕方ないのでdbのバージョンを合せるためにSubversionSRPMから作り直してみたら、それはそれで動かないし。

 どっかからRPMを拾ってきて入れたほうがいいのかなぁ。


Ask Jeevesのアルゴリズム

|  Ask Jeevesのアルゴリズム - 浅倉卓司@blog風味? を含むブックマーク  Ask Jeevesのアルゴリズム - 浅倉卓司@blog風味? のブックマークコメント

 これに対してAsk Jeevesは、同社が買収したTeomaの検索アルゴリズム「サブジェクトポピュラリティ」を採用している。いわばPageRankアルゴリズムを一歩前進させたものだ。検索キーワードに対してすべてのWebページのリンク構造を解析するのではなく、検索キーワードと同じ“サブジェクト”を含む文書の集合を調べ、その集合の中でのリンク構造を解析して表示順位を決める。政治問題について議論するためのブログにアダルトサイトのコメントスパムがリンクされていたとしても、政治問題とアダルトサイトは全く別のサブジェクトであるため、それぞれのサイト評価に影響を与える度合いがGoogleより少ないと考えられる。

Ask Jeeves、Googleが提案したコメントスパム対策機能に当面静観の構え
トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050121

2005-01-15(Sat)

empas

|  empas - 浅倉卓司@blog風味? を含むブックマーク  empas - 浅倉卓司@blog風味? のブックマークコメント

 久々の新エンジン、になるのかな。韓国製。

 キャッシュがインラインで表示されたり*1、「類似順/人気順」で表示できたり、あるいは検索オプションでドメインだけでなくディレクトリ以下を指定できたりと、それなりに便利です。

 検索精度はまだまだだけどね。

*1WiseNutにも類似機能あり。他にテキストオンリーで表示も出来る。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050115

2005-01-14(Fri)

Class::DBI::View

| 18:43 |  Class::DBI::View - 浅倉卓司@blog風味? を含むブックマーク  Class::DBI::View - 浅倉卓司@blog風味? のブックマークコメント

 Class::DBI的には「VIEW使えよ」って感じなんじゃないのかなと、個人的には感じてるのですけれど。PostgreSQLならVIEWも使えるので、そちらのほうがいいんじゃないでしょうか。

 と書きましたが、Class::DBI::Viewというのがありました。

 VIEWを擬似的に作るもので、「テンポラリテーブルを使う」「サブクエリを使う」「HAVINGを使う」が選べる模様。


 そうそう、Plugin::Iteratorのオプションとして書くのではなく、

package CD::Music::SalesRanking;
use base qw(CD::DBI); # your Class::DBI base class
use Class::DBI::View qw(SubQuery);
use Class::DBI::Plugin::Iterator::subquery;

のような書き方も出来ます。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050114

2005-01-13(Thu)

Class::DBI::Plugin::Iterator 0.07

| 18:44 |  Class::DBI::Plugin::Iterator 0.07 - 浅倉卓司@blog風味? を含むブックマーク  Class::DBI::Plugin::Iterator 0.07 - 浅倉卓司@blog風味? のブックマークコメント

 Class::DBI::Plugin::Iterator::subqueryを追加しました。


subqueryのcountを標準にしない理由

 ひとつ目には「パフォーマンスが悪そう」という点と、もうひとつは「Class::DBIを使っている人は複雑なクエリーを使わないんじゃないか」という点です。

 もしベンチマークを取ってパフォーマンスが悪くないのであれば変更もやぶさかじゃないんですけれど。もしパフォーマンスが悪いのであれば、滅多に使われないであろうクエリーのためにパフォーマンスを落とす選択はしたくないと考えています。


 Class::DBI的には「VIEW使えよ」って感じなんじゃないのかなと、個人的には感じてるのですけれど。PostgreSQLならVIEWも使えるので、そちらのほうがいいんじゃないでしょうか。


Eclipse/Perlプラグイン

| 18:44 |  Eclipse/Perlプラグイン - 浅倉卓司@blog風味? を含むブックマーク  Eclipse/Perlプラグイン - 浅倉卓司@blog風味? のブックマークコメント

 Eclipseってどうなんよ? と思いつつJavaは言語仕様が嫌い*1で避けてきたわけですが、Perlでも使えるとは知らなかったよ。

 もうちょっと早く知ってればいろいろ遊べたのになぁ*2。残念。


PHP::Functions::Mail

| 18:44 |  PHP::Functions::Mail - 浅倉卓司@blog風味? を含むブックマーク  PHP::Functions::Mail - 浅倉卓司@blog風味? のブックマークコメント

 こいつは便利そう。どこいってもみんな独自に実装してるもんな~。

 Templateを使うときはMIME::Lite::TT::Japaneseで。

*1:C#は好き。Perl6も好き。

*2ここにも紹介があったのに。なんで気付かなかったんだろう。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050113

2005-01-11(Tue)

Class::DBI::Plugin::Iterator 0.06

| 18:44 |  Class::DBI::Plugin::Iterator 0.06 - 浅倉卓司@blog風味? を含むブックマーク  Class::DBI::Plugin::Iterator 0.06 - 浅倉卓司@blog風味? のブックマークコメント

 makamakaさんの指摘による、先読み部分を変更しました。

 他の変更点は、allメソッドの実装方法の変更とか、count時のSQLがエラーになった場合の対策あたり。


 とりあえず当初考えてたことは一通り実装したので、あとはドキュメントを英語に直してCPANに登録するだけですが……。


うまく動かないSQLについて

 ううっ、素早いご指摘。HAVING句があるとまずそうなのはGROUP BYを判別する正規表現を書いていたときに気付いてはいたんですけどね……。

 他にもSELECT DISTINCTだとうまくない気がしてますし、UNIONを使っていてもまずそうです。


Class::DBI::Plugin::Iterator::subquery

package Class::DBI::Plugin::Iterator::subquery;
use strict;
use base qw/Class::DBI::Plugin::Iterator/;

sub count {
    my $self = shift;
    return $self->{_count} if defined $self->{_count};

    my $sql = sprintf 'SELECT COUNT(*) FROM ( %s ) AS __GROUP_BY__', $self->sql;

    eval {
        my $sth = $self->class->db_Main->prepare($sql);
        $sth->execute(@{$self->{_args}});
        $self->{_count} = $sth->fetch->[0];
        $sth->finish;
    };
    if ($@) {
        my $itr = $self->all;
        $self->{_count} = $itr->count;
    }

    $self->{_count};
}

1;

――という感じではどうでしょうかね?

 Plugin::Iteratorはこんな感じで処理してます。

sub count {
    my $self = shift;
    return $self->{_count} if defined $self->{_count};

    my $select_from_regexp = qr/(?si)^\s*SELECT\s+.+?\s+FROM\s+/;
    my $group_check_regexp = qr/(?si)\s+GROUP\s+BY\s+(.+?)(\s+HAVING\s+.+?)?(\s+ORDER\s+BY\s+.+?)?$/;
    my $order_check_regexp = qr/(?si)\s+ORDER\s+BY\s+.+$/;

    my $sql = $self->sql;
    if ($sql =~ $group_check_regexp) {
        unless ($2) {
            my $group_by = $1;
            $sql =~ s/$select_from_regexp/SELECT COUNT(DISTINCT $group_by) FROM /;
            $sql =~ s/$group_check_regexp//;
        }
        else {
            $sql = sprintf 'SELECT COUNT(*) FROM ( %s ) AS __GROUP_BY__', $sql;
        }
    }
    else{
        $sql =~ s/$select_from_regexp/SELECT COUNT(*) FROM /;
        $sql =~ s/$order_check_regexp//;
    }

    eval {
        my $sth = $self->class->db_Main->prepare($sql);
        $sth->execute(@{$self->{_args}});
        $self->{_count} = $sth->fetch->[0];
        $sth->finish;
    };
    if ($@) {
        warn "using \$self->all->count\n";
        $self->{_count} = $self->all->count;
    }

    $self->{_count};
}

makamakamakamaka2005/01/11 22:36(あ、下のコメント付ける場所を間違えました……)
性懲りもなくgroup byについてですが
# t/01-iterator.t for 0.06 において例えば
NewFilm->set_sql(group_test => q{
SELECT title FROM newmovies
GROUP BY title HAVING count(rating) > 0
});
NewFilm->search_group_test()->count; # 0になるはず
このときSELECT COUNT(DISTINCT title)のため、0ではなく6が返されます。
ただしsqliteはCOUNT(DISTINCT X)をサポートしていないのでエラーが発生し、
$self->all->countの結果が返ります(値は0)。

makamakamakamaka2005/01/13 02:130.07試してみました。ちなみに
NewFilm->set_sql(union_test => q{
SELECT title FROM newmovies
UNION SELECT title FROM newmovies
});
NewFilm->search_union_test()->count;
[SELECT COUNT(*) FROM newmovies
UNION SELECT title FROM newmovies]
SQLiteではokですが、PostgreSQLではtitleとcount(*)の型違いで
エラーが発生しますね……
思うのですが、最初から単純明快なP::I::subqueryのcountを
P::I::countにして良いのではないでしょうか?
失敗しても、救済措置があるのですし。
あと、driver無指定の場合に
$pkg->db_Main()->{Driver}->{Name}
を使ってドライバを自動判定できると嬉しいかも。
(などと勝手なことを言っていますが、私はmysqlのバージョン判定方法を知りません。ごめんなさい)

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050111

2005-01-10(Mon)

Class::DBI::Plugin::Iterator 0.05

| 18:46 |  Class::DBI::Plugin::Iterator 0.05 - 浅倉卓司@blog風味? を含むブックマーク  Class::DBI::Plugin::Iterator 0.05 - 浅倉卓司@blog風味? のブックマークコメント

 makamakaさんから指摘があった点をいくつか修正しました。


修正点

 とりあえず、

  • ORDER BY があったら削る
  • GROUP BY があったらCOUNT(DISTINCT cols)にてカウントする

ようにしました。

 GROUP BYのほうはエイリアスを使ってるとうまく動かない気がするので、makamakaさんのようにサブクエリーを使うように変えたほうが良いのかなと思いつつ。


サブクラス

 Class::DBI::Plugin::Iterator::mysql3はLIMIT構文の対応をしました。

 Class::DBI::Plugin::Iterator::mysql4ではFOUND_ROWS()を使っているので、カウントできるクエリーの種類が増えたんじゃないかと思います。


countメソッドの処理

 countメソッドの部分はエラー処理をちゃんとして、エラーが起こったときは通常のイテレータのデータを取得するように変更したほうがいいのかな……。


Class::DBIのEsssentials

| 18:46 |  Class::DBIのEsssentials - 浅倉卓司@blog風味? を含むブックマーク  Class::DBIのEsssentials - 浅倉卓司@blog風味? のブックマークコメント

 なんと、0.92で変更になっていたんですか。

 そいつはちょっとびっくり。


 パフォーマンスを気にする人はちゃんとEssentialsを設定しましょう*1、ということで。

 Essentialsを指定しないと余分なクエリーが増えるため、Plugin::Iteratorを使ってもあまりパフォーマンスが改善されませんからね。


Class::DBIのイテレータ

| 18:46 |  Class::DBIのイテレータ - 浅倉卓司@blog風味? を含むブックマーク  Class::DBIのイテレータ - 浅倉卓司@blog風味? のブックマークコメント

 コメントにちょっと補足。

 個人的には Class::DBI::Iterator が next で最後まで取得したあとに reset しない仕様とか、他にもいろいろ好きじゃない点が多かったりします*2。で、ごちゃごちゃ変更してたけど、んでもオリジナルとあわせておかないとマズイかなー、と思って現状のようになってます*3


 コメントを書いた後で気付いたんですが、makamakaさんの方式にしたほうがcountしなくて済むというメリットがあるので、次のリリースでは変更すると思います。

 allメソッドもcountを使わないようにしたり、countのエラー処理も付けましたので、まあ近々。

*1:あるいはSELECT * にしちゃうか。

*2:オリジナルの slice の挙動とか。prev や last や pos がないのもね。

*3:それでも slice の挙動はオリジナルと違いますが。

makamakamakamaka2005/01/10 22:34度々すいません、もひとつ気になっていたのですが、next()の
@{$self->{_data}}[$pos .. $end] = $itr->data;
これですと配列がどんどん大きくなります。
それで自分の修正版では先読み数に収まるようにしているのですが、
これはこのように意図されたものなのでしょうか?

asakura-tasakura-t2005/01/10 23:35どんどんというか、Class::DBI::Iteratorと同じサイズまでですね(countが上限)。
これはですね、今までClass::DBI::Iteratorを使っていた環境なら問題ないだろうとか、そもそもnextでそんなには廻さないだろうとか(だったらリストで取得するだろうし)、簡単で確実な実装がいいやと思って現状のようになってます。reset()して2回ループする時は全部キャッシュされてることになるし。
あとは、リリースしていないやつではnext()のほかにprev()やpos()があったほうが便利かなとか思って実装してたりもするので、その影響もあるかもしれません。
もっとも個人的には先読みはほとんど使っていないので(ほとんどがsliceで、あとはnextで1件取得するくらい)、makamakaさんが頻繁に使っていて配列が大きくなって困っているようでしたら、次のリリースで変更します。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050110

2005-01-05(Wed)

Class::DBI::Plugin::Iterator 0.04

|  Class::DBI::Plugin::Iterator 0.04 - 浅倉卓司@blog風味? を含むブックマーク  Class::DBI::Plugin::Iterator 0.04 - 浅倉卓司@blog風味? のブックマークコメント

 とりあえず先読みするようにした。

 1件だけ取得するなら前の方がパフォーマンスがいいはず。それでも標準のIteratorよりは良いかな。

makamakamakamaka2005/01/10 00:14はじめまして。Class::DBI::Plugin::Iterator利用させてもらってます。
ありがとうございます。SQL文にoerder by やgroup byが含まれると
countメソッドが正しく機能しない、ないしはエラーが出る場合があるので
下記のパッチを当ててます。
http://www.donzoko.net/doc/etc/Class-DBI-Plugin/Iterator_diff4.txt
先日まではnextの先読みにsliceを使わなかったのですが、
0.04をみて模倣しました。ごめんなさい……

asakura-tasakura-t2005/01/10 00:44あ、やっぱり問題があるSQLがありましたか。修正しときます。
できればテストに追加したいので、どんなケースだとエラーになるのか分かるとうれしいかも。
(かなり単純なケースでもなるのかな?)

まかまかまかまか2005/01/10 22:13order byですが、sqliteではエラーにならないようです。
PostgreSQL 7.2では例えば
NewFilm->search_like(Title => 'Film%', {order_by => 'title'})->count;
DBD::Pg::st execute failed: ERROR: Attribute newmovies.title must be GROUPed or
used in an aggregate function [for Statement "SELECT COUNT(*) FROM NewMovies
WHERE title LIKE ? ORDER BY title"]
となります。それからgroup byですが、無意味な例ではありますが
NewFilm->set_sql(group_test => q{SELECT title FROM newmovies GROUP BY title});
NewFilm->search_group_test()->count;
6を返してくれると嬉しいのですが、実際には1が返ります。
あと、私のところでもレスしておきましたが、columnsデフォルトの件は
0.92以降からの変更がドキュメントに反映されていないそうです。

makamakamakamaka2005/01/11 22:33既に変更されてらっしゃるので、今更なんですが、
>reset()して2回ループする時は
ということを考えると、確かに0.04での実装にも得心がいきました。
自分のアプリではPagerを使っているので、実際にはnextで延々と回すことは
ないです。ただ趣味で書いた一部のコードでは数万件分をnextで処理している
ものもあるため、ちょっと気になった次第です。メモリが圧迫されると困る
ような環境では利用していないので問題にならないといえばならないです。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20050105
2004 | 01 | 02 | 03 | 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 | 06 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 02 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 02 | 03 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2013 | 01 | 05 | 07 |
2014 | 01 | 02 |
2016 | 01 |
2017 | 01 | 05 |
Error : RSSが取得できませんでした。