2005年12月31日

今年もお前らありがとう

来年もお前らに迷惑掛けるはずだけど、ホントによろしくお願いしますm(__)m
皆さんがいないとオイラの今もないですから。


来年には、年賀状コンテンツも公開させていただきます。


響鬼さんのおかげもあって白組かったしね。


じゃぁ初詣と山登りいってくるノシ

Posted by Yappo at 23:42 | Comments (0) | TrackBack

大晦日だからXangoをhackる

ライブドアネ連発で年が終わるのもいやな感じなんですよ。
ってか、ライブドアじゃなくて企業ネタで終わるのがね。


というわけでXangoハック委員会です。
だりいからターボールの提供のみで我慢してくらさい。

ダウンロード

なんせ年賀状コンテンツを作らんといけない。

しばらく前に作ったXango製ロボットを公開するよ。
robots.txtとmetaタグに対応してるはず。
MySQLで管理してるよ。

Xango最新版のみでしか動かないからSVNでとってきてね。
しばらく稼動してると固まるバグもあるよ。


配布ファイルのinit_db.sqlでテーブルを作ってよ。
あとは、の

__PACKAGE__->set_db('Main', 'DBI:mysql:MyRobots', 'user', 'pass');

の所の場所を適度に変更しろよ。

正直コードは適当だからな。

じゃぁ、俺は高尾山で初日の出を見てくる。
シュッ。

全国のHackerよ!来年も鍛えような!シュッ!

残念~Xangoも西村ひろゆきさんの会社ですから~
2ch.net洗脳切り!

って人も今年の年末はみないなぁ。

Posted by Yappo at 23:24 | Comments (1) | TrackBack

年末クイズ

Q.東京23区内なのに冬になると、ほぼ毎日天然の雪が見れる場所がある。
その場所の大まかな位置をWeb Mapを用いて答えよ。

Posted by Yappo at 18:01 | Comments (0) | TrackBack

パクリは文化だ!

良く出来たものはパクられなければなりません。技術者たるもの我が社の利益だとか愛国心だとかのためではなく、人類の幸福のために行動すべきです。たかだか見た目程度でしか物事を判断できない人間がパクりは悪などという風潮を広めてまわるのは残念でなりません。大企業だろうがベンチャーだろうが一個人だろうが関係ありません、良く出来たものはパクるべきです。パクられてこなかった人の気持ちを考えたことがありますか?胸に手を当てて考えてみてください!

iYappo


Yahoo!をパクって付けられた名前なのは有名な話ですが、1996年当時Yahhoという大学生の作ったサイトがありまして、本来はそっちにリスペクトしてパクったネーミングなのです。
なんとYahoo!JapanよりもYahhoの方がサービス提供が早かったです。しかも、ちゃんとしたディレクトリ検索サービスでした。

現在Yahhoをぐぐってでるこちらは、当時のYahhoとはなんら関係がありません。

で、当時のYappoも構造やロゴなどもYahooに思いっきりインスパイアアされたサイトでございました。
Yappo/iYappoともども中の人たちにも認められてるので、特に問題がありません。
当時のインタビューでも、むしろパクってくれた方が嬉しいと記事になってますた。
ちょっと前まで、Yahoo!JapanにもYahooのパロディカテゴリがあった筈なんですが、いま探したら見当たらなかったです。

ただしYahooのロゴをそのまま使ってしまうとYawooのように大変な事になるそうです。

まぁ、YahooもLycosのwebロボット検索をパクってるわけですが。

そんなバリバリインパイアしまくりんぐなiYappoですら、iYappoの出してる仕掛けとかを別の企業とかにインスパイアされた(リンク先はインスパイアイメージです、実際のインスパイアとは異なります)名前自体インスパイアされて商業利用されてる(リンク先はインスパイアイメージです、実際のインスパイアとは異なります)ので、世の中そんなものなんでしょう。


え?ライブドアの件?
■e<livedoorがFlickrにインスパイアされると騒がれることによって、Flickrを本当に知らない層にまでFlickrが知れ渡る
■e<または、livedoorのユーザがFlickrの存在に気づきFlickrへswichする事もあるので
■e<Flickrが一方的に損する問題を回避した。

というかYahooブランドのデザインを全てのサービスでパクってない時点でライブドアは漢ではない!
あえて言うならツンデレになり切れないツンデレデレだ!


改めて宣言する。
不倫は文化だ!

Posted by Yappo at 14:57 | Comments (0) | TrackBack

2005年12月18日

ライブドア入りたい! から分かるGoogleの仕様

Googleのクロウラーたんの辞書にない単語を保持しているURLのランキングはかなり高い。
(そのキーワードで検索してる限り)

その強さは、フレッシュURLやリンク構造でのPageRankよりも強いパラメータとなっている。

んでもって、多分新規ワードを掲載するURLの時系列をある程度持っている。

で、ちょっと流行に乗り遅れるとページランクとかが優先されるのかな?


もともとyappoはPR高めだからヨクワカンネ

Posted by Yappo at 06:39 | Comments (0) | TrackBack

ライブドア入りたい! で始めるライブドア乗っ取り計画 by 鈴木島男

ライブドア入りたい! (via:はてな入りたい!)のSearch Word Cloudを見て笑った。。。

ライブドアスタッフ ライブドア入りたい はてな入りたい ライブドアに入りたい 面接 実力 入りたい! ・鬣、・ヨ・ノ・「ニ?、熙ソ、、 ライブドア入りたい! スタッフ
by Search Word Cloud

で、ためしにググったら
ライブドア入りたい

YappoLogs: ライブドア入りたい! (via:はてな入りたい!)
ライブドア入りたい!」(自動でキーワードになります)と書くともれなくライブドア
スタッフが巡回して、実力がありそうなら面接の場を設けます。 キーワード作ろうとした
けど作れなかったんで誰か作ってくださいorz. それにしても、最近は中の人たちが ...
blog.yappo.jp/yappo/archives/000327.html - 10k - キャッシュ - 関連ページ

YappoLogs: Discussion on ライブドア入りたい! (via:はてな入りたい!)
Continuing the discussion... TrackBack URL for this entry:
http://blog.yappo.jp/cgi-bin/mt-tb.cgi/337 Listed below are links to weblogs that
reference 'ライブドア入りたい! (via:はてな入りたい!)' from YappoLogs.
blog.yappo.jp/cgi-bin/mt-tb. cgi?__mode=view&entry_id=327 - 2k - キャッシュ - 関連ページ
[ 他、blog.yappo.jp内のページ ]

はてなダイアリー - ライブドア入りたい!とは
検索: 楽天 「ライブドア入りたい!」を楽天で検索. * リンクスコア:66 リンク不要(1)
リンク可(2). * 内容スコア:0 参考になりましたか? いいえ(2) はい(0). 「ライブドア
入りたい!」を含む日記 · RSSフィード · 2005-11-26 · めも帖 d4-1977 ...
d.hatena.ne.jp/keyword/ %A5%E9%A5%A4%A5%D6%A5%C9%A5%A2%C6%FE%A4%EA%A4%BF%A4%A4%A1%AA?kid=139057 - 14k - キャッシュ - 関連ページ

Yappo::Hatena::Diary - ライブドア入りたい!
ライブドア入りたい!」(自動でキーワードになります)と書くともれなくライブドア
スタッフが巡回して、実力がありそうなら面接の場を設けます。 ... はてなダイアリー -
ライブドア入りたい! <はてな入りたい! | SixApart入りたい!> 日記の検索 ...
d.hatena.ne.jp/yappo/20051030/1130643202 - 17k - キャッシュ - 関連ページ
[ 他、d.hatena.ne.jp内のページ ]

[ぴ] - ライブドア 次世代テクノロジーセミナー , WX310SA 不良情報 ...
と来たところで、新はてなキーワードライブドア入りたい!だそうです。 後日追記:他
のレポート↓. ライブドア次世代テクノロジーセミナー第1弾@TAKESAKO; ライブドアの次
世代テクノロジーセミナーに行ってきた@刺身☆ブーメラン; 六本木ヒルズ初上陸@てく ...
pmakino.jp/tdiary/20051213.html - 37k - 2005年12月15日 - キャッシュ - 関連ページ

TAKESAKO @ Yet another Cybozu Labs: ライブドア次世代テクノロジー ...
はてなキーワード「ライブドア入りたい!」はまだ健在。 ■第3部「大規模システムを
構築する秘訣」 →「Inside livedoor Blog's Backend」 ネットサービス事業部 テクニカル
マネージャー 池邉 智洋. ・ユーザ数100万人を超えるブログサービス ...
labs.cybozu.co.jp/blog/takesako/2005/12/livedoor.html - 20k - 2005年12月15日 - キャッシュ - 関連ページ

subtechグループ - 'hceT'.sub(/\Z/,'bus').reverse - ライブドア ...
ライブドア入りたい!」(自動でキーワードになります)と書くともれなくライブドア
スタッフが巡回して、実力がありそうなら面接の場を設けます。 という他社ダイアリー
の仕組みを使ってヘッドハンティングが流行るかも!!! [コメントを書く] ...
subtech.g.hatena.ne.jp/secondlife/20051031/1130744060 - 21k - キャッシュ - 関連ページ

はてなブックマーク - ライブドア入りたい!
はてなブックマーク > キーワード > ライブドア入りたい! キーワード「ライブドア
入りたい!」を含む注目エントリー. RSS. * はてなダイアリーキーワード:ライブドア
入りたい! 新着順 | 注目 | 人気順. 「ライブドア入りたい!」を含む注目エントリー ...
b.hatena.ne.jp/keyword/ ライブドア入りたい!?sort=hot - 8k - キャッシュ - 関連ページ

はてなブックマーク - タグ ライブドア
はてなダイアリー - ライブドア入りたい!とは d:id:keyword. タグ keyword livedoor
ネタ neta ライブドア hatena はてなダイアリー ... キーワード キーワード スタッフ
ライブドア ライブドア入りたい! カテゴリ ウェブ 詳細 11 users 2005年10月31日 ...
b.hatena.ne.jp/t/ライブドア - 68k - キャッシュ - 関連ページ
[ 他、b.hatena.ne.jp内のページ ]

ライブドアスタッフ


livedoor モバイル事業部
株式会社ライブドアのモバイル事業部紹介ページです。
mobile-d.livedoor.com/ - 5k - キャッシュ - 関連ページ

スポーツナビ|野球|プロ野球|堀江社長 「プロ野球の発展を祈る ...
... 経て、来季の参入が認められないことが決定した。仙台市内のホテルで落選の結果
を聞いたライブドアの堀江貴文社長は、まず「仙台に新球団おめでとうございます」と
あいさつ。サバサバとした表情で会見に応じた。以下はライブドアスタッフのコメント。 ...
sportsnavi.yahoo.co.jp/baseball/ npb/04season/column/200411/at00002991.html - 38k - キャッシュ - 関連ページ

「スカイプをみんなで使って」堀江社長がビジネスシヨウで呼びかけ
ビジネスシヨウ会場では堀江社長のほか、ライブドアニュースの山野明子キャスターや
ライブドア国際事業部執行役員の大久保紀章副社長を交え、スカイプの仕組みや利点を強調。
会場から実際に、英国・ロンドンのSkype社スタッフや東京のライブドアスタッフ ...
internet.watch.impress.co.jp/ cda/event/2005/05/19/7664.html - 24k - 2005年12月15日 - キャッシュ - 関連ページ

blog.livedoor.jp/livedoor_books/20051014182304
関連ページ

ライブドアスタッフの「これ、読みました?」 ...
ライブドアスタッフの「これ、読みました?」. ライブドアBOOKS
で購入した書籍・コミックの感想をのせています。 購入の参考にして
ください! 2004年11月05日. 第四回「電車男」. 09b93216 ...
blog.livedoor.jp/livedoor_books/archives/8906913.html - 8k - 補足結果 - キャッシュ - 関連ページ
[ 他、blog.livedoor.jp内のページ ]

厨子ブログ: 宮城でライブドア応援感謝イベント開催
会場ではフェニックスのロゴが入ったTシャツ、ステッカー、パーカなどのグッズ販売や、
ライブドアスタッフがファンとキャッチボールをしたり、全員参加のミニゲームなどを行う。
//. つまり作っちゃったグッズをていよく在庫処分しようってことだよな? ...
dzusi.seesaa.net/article/1295257.html - 16k - キャッシュ - 関連ページ

YappoLogs: ライブドア入りたい! (via:はてな入りたい!)
自動でキーワードになります)と書くともれなくライブドアスタッフが巡回して、実力が
ありそうなら面接の場を設けます。 キーワード作ろうとしたけど作れなかったんで誰か
作ってくださいorz. それにしても、最近は中の人たちがフェロモン出してる気がする ...
blog.yappo.jp/yappo/archives/000327.html - 10k - キャッシュ - 関連ページ

はてなダイアリー - ライブドア入りたい!とは
自動でキーワードになります)と書くともれなくライブドアスタッフが巡回して、実力が
ありそうなら面接の場を設けます。 http://d.hatena.ne.jp/yappo/20051030/1130643202.
という仕組みはまだありません。 * ふりがな:らいぶどあはいりたい ...
d.hatena.ne.jp/keyword/ %A5%E9%A5%A4%A5%D6%A5%C9%A5%A2%C6%FE%A4%EA%A4%BF%A4%A4%A1%AA?kid=139057 - 14k - キャッシュ - 関連ページ

ブログ+movieで思い出を残そう-livedoor Blog-
担当者Qやライブドアスタッフが日々の様子を撮影してブログにアップしていきます。
オフィスや会議の様子など、意外なシーンが見れるかも! もちろん撮影にはソニー
Cyber-shot M2を使用しています。 担当者Qのムービーブログをやってみよう ...
blog.livedoor.com/cybershot.html - 10k - キャッシュ - 関連ページ

球界再編
会場ではフェニックスのロゴが入ったTシャツ、ステッカー、パーカなどのグッズ販売や、
ライブドアスタッフがファンとキャッチボールをしたり、全員参加のミニゲームなどを行う。
ライブドアは「このイベントを最後にフェニックスはフェードアウト(次第 ...
news.kyodo.co.jp/kyodonews/ 2004/pa_league/news/1215-491.html - 4k - キャッシュ - 関連ページ

高柳さん・・・
( ̄- ̄)ニヤリ

Posted by Yappo at 06:33 | Comments (0) | TrackBack

2005年12月16日

メールで検索

新興モバイルサイトの中ではメール検索がトレンドらしい。
にわんごリリースもあったり、最近だとGoogleが日本でのメール検索サービスをはじめたみたい。
と思ったら、CrooozもインスパイヤされたのかGoogleに出し抜かれちゃったのか
来週から開始する発表があった。

どうせならinfoseekモバイルのリリース見た直後から実装始しつつ真似する元の悪いところを改善し、
当日の内にリリースを出すという某サイトのような事をしたら面白かったのに。

って事で、負荷的な問題とかで休止していたiYappoのメール検索は、そろそろ復活かもしれません。

iYappo、iモードサイトを電子メールで検索可能に

Posted by Yappo at 18:09 | Comments (0) | TrackBack

W-ZERO3買った

自宅に届いてたようなので使ってみました。
IEはGoogle MapsとかAjax周りは扱えてなさそうだけど、Operaはちゃんと使えてたみたい。
css周りが変で写真みたいな事になっちゃうけど、ドラッグとかも出来た。
2005121601.jpg

ターミナル環境としてはPocketPuTTYがあるようなので0.1を入れてみたが、マルチバイトが考慮されてないっぽ。
SJISなサーバだったら日本語使えそうだけどね。。。
あとCtl-Cとかがちゃんと送れてなくてmewツカエナサス。
キーバインドの変え方調べないと。。。
緊急時には何とか作業できるレベルかな。。。
何でもいいから日本語ターミナルが欲しい所。


とか言ってる間に電源切れないほど固まった。
どうみてもWindows端末です。
本当にありがとうございました。

Posted by Yappo at 18:07 | Comments (0) | TrackBack

2005年12月14日

sync

メモとか取ってないから適当にsync

next naoya.

L-1,L0,L1,L2,L3,L4,L7 is old 2000 y com's.

550R
のこり50R
myserve about50%
app 150
www 150?
db 250?
other 30
today update's 20~30U?

border BGP4
inner ospf
big-ip
コパボウル
rgcy's tech's.

my cdn squid based(uri (jpeg/gif not cached))?
my adns by bind on mysql/edu base ruby
for 8ch, win's from akamai. becs priceise, log pused 1hour, not technnical, sales powers.

nomal R is 1U used 3A. 1U on 10 servers is border.but on 30 server's avg.
my div member arich base,this 0.5U server 1R 60Server's used 3KV =/ 30A.
amd, not hdd, net boots, win 2kX/Xp/FBSD/TL.
アーク溶接DIY.bigwoods.
i w'nt things.
my alert system(ticket)

charhang's.
yoshino-ya copy's.
cpan 13 -> 3.(+1)
BHC.
memcached.
cdbi cluster dbi.
Based jobs.
bsd -> Tlinuxs.
apache 1.3.x -> mod_perl 1.x.
mysql 4.0.x. master -> slave model -> orz. -> cdbi cluster dbi model.
perl 5.8.x
not things.
go to web2.0,ajax, webserv.

blogNG project.
1 server.
many servers.
com rdbms. oh no!
back to mysql.
use public case.
oh! master -> slave!
many host names. -> mainte
pure ftpd -> src easy read.

オガワサンノ

おっぱい。
4012?
タイ風ビール。

point,
squid memcached mod_proxy salve power kv [+]<ここまで読むのは想定外

Posted by Yappo at 07:34 | Comments (0) | TrackBack

2005年12月09日

ケータイ業界クリスマス会2005いくずら

業界のキーパーソンが集結「ケータイ業界クリスマス会2005」

携帯電話業界のコンテンツプロバイダーを中心に、業界の振興と親睦を深める目的で開催されるクリスマス会が今年も開催される。

一般人の集まりがなくなって久しいけどいくずら。

月曜日のもいくずら。
火曜日はライブドアに入るずら。

Posted by Yappo at 14:35 | Comments (0) | TrackBack

2005年12月08日

SuiCa自動改札機は駄作

たまにSuiCaを使って改札を通ろうとすると、ICの情報が読み取れなくて改札が通れなくなることがあると思う。
何でも電波を強くしすぎると、隣の改札機に影響が出てしまい読み取り精度が悪くなるんだそうな。
だから、改札機にタッチして!と書いてある。
変な話である。

これは、そもそも構造に欠陥があるんじゃないかな?と思う。










現状の改札は
20051208_suica1.gif
こんな感じで、電波が上向きに出てるんだけど、もうちょっと工夫できないものかという感じで
















電波出すところを改札機本体の中に作って、








20051208_suica2.gif
このような形で溝を作って、その溝の中だけ強烈な電波を飛ばせば、外に漏らさず感度上げられるんじゃないの?














20051208_suica3.gif
こんな感じで、タッチさせることによりわずかな立ち止まりもなく、溝を通過させるだけで確実にキャッチできるから、今よりも改札が混雑しなくなるはず。

んで、ケータイSuiCa非対応機がでちゃうのも、この駄作な改札機のせい。
たしか、試験内容に携帯電話を改札にタッチさせても強度的に大丈夫なのか?
ってのがあったはずで、強度的に問題があったのがD902iとかなんじゃないの?
もしくは、やっぱり電波強度の問題。

だから、この改札に変更すれば問題は解決。










電波強すぎて携帯壊れてもシラネ

Posted by Yappo at 14:05 | Comments (0) | TrackBack

2005年12月07日

k.blogdb.jp で Mobile Link Discovery 対応しました

あまりにも放置されまくっていて、まともに動いていないblogdb.jpですが、k.blogdb.jpにてMobile Link Discoveryに対応しました。

キーワード検索結果でエントリタイトルをクリックすると、一度Mobile Link Discovery Redirectorに飛ばします。
飛ばした先のURLにてMobile Link Discoveryに対応していなければ、今までの詳細ページを表示するようにしてあります。

本来ならfeed中のMobile Link Discoveryを保持しておくのがベストなんですが、取り急ぎ対応です。


肝心のblogdb.jpですが、一日に100万件以上のWebUpdate pingを受け取るようになっていて
現状の構成では、どうにもならなくなっているのでサーバのリプレースとシステムのリプレースをかけます。
機能的にも、他がやってるようなものは撤廃する感じで逝きます。

なんとなくですが、システムのスクリプト関連は全部svnで公開する方向で行きます。
誰でもブログ検索サイト作れるような方向で。


ちなみにblogdb.jpのデータを一旦クリアして収集をやり直しています。こういうのを焼け石に水って言います。

Posted by Yappo at 20:09 | Comments (1) | TrackBack

Mobile Link Discovery

Where's your Mobile URL?: blog.bulknews.net

「あるウェブページのモバイル版 URL を明示的に指定する」 Mobile Link Discovery のドキュメントも作成して公開しています。

RSS Auto Discoveryみたいな感じで、モバイル用のURLがある場合には、そのURLを明示しておける仕様書が公開されました。

って事で、ネタで作ったMobile Link Discovery対応ページがあった場合には、モバイルURLにリダイレクトしてくれるMobile Link Discovery Redirector ってのを公開します。

http://mld.yappo.jp/b.hatena.ne.jp/

って感じでリンクしておくと、勝手にモバイルなURLへ転送してくれます。
URLが長いのがイケてないですけどね。

とりあえず生贄として、はてなブックマークをデフォルトにしておきます。

とりあえず、FROUTEの中の方は実装してみてはいかが?
iYappoとかblogdb.jpでも適時対応してきます。

Posted by Yappo at 17:38 | Comments (0) | TrackBack

2005年12月06日

YahooJ::Search 0.02 Released

YJDNのMLでたつをさんにBug教えてもらったのでfixついでにCPANに上げられるように中身を整備しといた。
http://tech.yappo.jp/download/YahooJ-Search-0.02.tar.gz

公式なCPANモジュールのうpまだなのかしら、、、。
年内にうpされなかったら整備してCPANうpしてしまおうか…

@yappo.ne.jpじゃ刺されそうだから、AUTHORは@cpan.orgとかにしとくかな…

Posted by Yappo at 23:27 | Comments (0) | TrackBack

Apache 2.2.0 mod_proxy_balancer hacks of failure.

mod_proxy_balancerを拡張して動的にごにょごにょしてやろうと思ったのに出来なかったからコアダンプ

基本的にLinuxとかの環境ではpreforkしてApacheが動いているはずですが
mod_proxy_balancerの実装がちぐはぐだった。
主なデータとして、balancer://スキームを取り扱っているproxy_balancerと
各クラスタの面倒を見ているproxy_workerってのがあるのさ。

で、バランサ管理画面でApacheの起動中に動的に設定変更出来る機能があるんだけど
proxy_balancerで管理しているstickysessionとか、リクエスト回数/転送サイズでバランシングアルゴリズムを切り替えるフラグを管理してるのね。

httpd.confを読み込むフェーズ中ならまだ良いんだけど、一度サーバが回り始めるとプロセス空間が別々になるのよ。
で、preforkで動いてるのよ。
メモリ空間がバラバラになってるのにproxy_balancerの中身弄ってるのよ。
しかも、ご丁寧にapr_pstrdupまでしちゃって…
変更したこと、他のプロセスから見えないのにね。

でも、proxy_worker系のパラメタは平気。
各ノードの重みとか、stickeysessionの値対応付けとか、クラスタの一時停止フラグとかの結構重要そうなやつ。
何でかって言うと、proxy_worker構造体の中にsっていうメンバがいるんだけど、そのsってのがproxy_worker系パラメータを管理画面から書き換えるときに弄ってるとこなの。
で、このsってのはスコアボード(共有メモリ)の中にいるので別プロセスからでも変更内容が分かるわけ。

balancer系のデータもスコアボードに入れればいいんだろうけど、今のcoreの実装上、改造するのがキツイ、書き換え範囲多すぎ。
そもそも、balancerとworkerの紐付けどうすr?worker新規作成したらどうすりゃいい?
worker用のメモリも前もって確保しなきゃだめじゃね?
てか、pre allocしてたら大規模運用じゃ意味ねえyp!pre allocした数以上の追加があったらどうすんの?
とかとか

struct proxy_balancer {
apr_array_header_t *workers; /* array of proxy_workers */
const char *name; /* name of the load balancer */
const char *sticky; /* sticky session identifier */
int sticky_force; /* Disable failover for sticky sessions */
apr_interval_time_t timeout; /* Timeout for waiting on free connection */
int max_attempts; /* Number of attempts before failing */
char max_attempts_set;
proxy_balancer_method *lbmethod;

/* XXX: Perhaps we will need the proc mutex too.
* Altrough we are only using arithmetic operations
* it may lead to a incorrect calculations.
* For now use only the thread mutex.
*/
#if APR_HAS_THREADS
apr_thread_mutex_t *mutex; /* Thread lock for updating lb params */
#endif
void *context; /* general purpose storage */
};

のmutexが気になるけど・・・
mod_proxy系全般でmutex使ってなさげだし

サーバ追加するだけで、自動的にクラスタ入りできるソリューションがApache 2.2単体で出来たらいいなぁと思ってたけど、もろもろあって実現きついぽ。
追加されたサーバの検知デーモン中にhttpd.confを書き換えてrestartさせる感じかなぁ。
てかmod_perlすりゃいいのか。いやプロセスでか過ぎだろw
preforkやめてworkerにして

ServerLimit 1
StartServers 1
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
とかにして、無理やり改造?

mod_proxy系のTODOも見当たらないしワケワカンネ。
なんとなくアーキテクチャの見直しが入る予感。。。

どうすりゃいいんでしょうね。


そうそう

/* The number of dynamic workers that can be added when reconfiguring.
* If this limit is reached you must stop and restart the server.
*/
#define PROXY_DYNAMIC_BALANCER_LIMIT 16
こんなのもあるんですよね。httpd.confの設定数+16個分のメモリ確保は出来てる。

Posted by Yappo at 05:26 | Comments (0) | TrackBack

2005年12月02日

Apache 2.2.0 のロードバランス機能(mod_proxy_balancer)を使いこなす

Apache 2.2がでました。
mod_dbdとか、mod_proxy_balancerとか気になる新機能てんこ盛りです。
ひげぽんさんの所に

誰か入れてみた人いますか?

と有ったのでmod_proxy_balancerを試してみました。

超簡単でした
mod_proxymod_proxy_balancerを参考にしました。
既に日本語ドキュメント完備!

以下から駆け足で、またセキュリティ的によろしくない設定例が多々あります

とりあえずこんな設定を仕込んでみました

ProxyPass /lb balancer://TEST stickysession=sesid
<Proxy balancer://TEST>
#1
BalancerMember http://i.yappo.jp loadfactor=10
#2
BalancerMember http://www.google.co.jp loadfactor=5 route=2
#3
BalancerMember http://www.yahoo.co.jp loadfactor=5 route=3 redirect=2
#4
BalancerMember http://127.0.0.1:8081 loadfactor=1
#5
BalancerMember http://127.0.0.1:8082 loadfactor=1 route=4 redirect=2
</Proxy>
基本的には、リバースプロクシを仕込むのと大差ありません。
balancer://hogehogeは、複数扱うことも可能です。
バランシング方法は、転送サイズとリクエスト数のどちらかが選べますが、分かりやすくするためにリクエスト数にしておきました。
loadfactorというパラメータは、優先順位みたいなもので、今回の設定だと1 1 2 3 1 1 2 3 1 1 2 3 1 1 2 3 4 1 1 2 3 5という感じでバランシングされました。
細かいパラメータはProxyPass ディレクティブを参考してください。

mod_proxy_balancerで嬉しい機能は、バックエンドのWebサーバが停止した事を自動的に検知して、止まってるサーバにリクエストを投げないですむ事です。
また、専用の管理画面も提供しているので、どのクラスタのどのサーバが落ちてるかが一目瞭然です。

<Location /LBMAN>
SetHandler balancer-manager
</Location>
という設定を仕込むと
http://localhost/LBMAN 経由から管理画面にアクセスできます。
また、管理画面にてhttpd.confで設定した内容を動的に変更することも可能です。
また、指定したバックエンドサーバを利用しないようにする設定も簡単です。
後ろのサーバ一台だけメンテしたい!って時にも最適です。


極めつけはstickysessionです。
これは、CookieもしくはURLの文字列の中に指定したパラメータ名があると、そのパラメータを見てどのサーバを振り向けるかを明示的に指定可能になります。
今回の例だとsesidというパラメータ名です。
route=3っていう設定に意味があります。

具体的にはApacheが

GET /lb/ HTTP/1.0
Cookie: sesid=hogegege.3;
というリクエストを受け取ったらYahooに強制的に振り向けます。
で、redirect=2についてですが、stickysessionに適合したサーバが落ちていた/管理画面で利用停止した場合に代替的に振り向けるサーバになります。
Yahooが落ちていたらGoogleに振り向けられるわけです。
で、代わりのサーバも利用不可能だったらランダムにバランシングされます。

で、携帯電話とかはCookieが使えないものが有るのでどうしようって、感じですがバッチリ対応しています。
こんなリクエストがくればおkです。
GET /lb/?sesid=iofhwehg.3 HTTP/1.0
POST /lb/?sesid=iofhwehg.3 HTTP/1.0
GET /lb/hogege/sesid=iofhwehg.3 HTTP/1.0
GET /lb/hogege/sesid=iofhwehg.3?id=hogaga HTTP/1.0
GET /lb/dyfoeifYGfiussesid=iofhwehg.3 HTTP/1.0

ただし、下記の例は動きません。
GET /lb/?sesid=iofhwehg.3&id=hoge HTTP/1.0
GET /lb/?sesid=3 HTTP/1.0
GET /lb/sesid=sddas.3/hoge HTTP/1.0

これには理由があって、以下の条件を満たすURL文字列でないといけないのです。
1.stickysessionに指定された文字列がある
2.stickysessionに指定された文字列の直後が=である
3.そのパラメータの値には.が入っている必要がある
4..以降から、URLの末尾もしくは?が出てくるまでの文字列がrouteで設定されてなければならない。

こんな感じです。
だからPOSTでも何でも条件さえ満たしてれば携帯でも使えます。
要はURLの末尾に必ずおけばいいです。

なんてのは大嘘で、おそらくバグがあって上の例じゃどうやっても動きません。
GET /lb/?sesid==iofhwehg.3 HTTP/1.0
のように=を2個つなげればいけると思います。(Cookie使うのだったら問題ない)
たぶん、なんらかの間違いだと思いPatchを付けたバグレポート出してみました


Webアプリ側ではstickysessionに配慮した構築を行わないとstickysessionを使いこなせなさそうですが、stickysession使わなければとてもお手軽にバランシング出来るので、あとは安定稼動すればおkなだけ!


オマケ:管理画面にxmlというパラメータを渡すと…(例: http://localhost/LBMAN?xml=1 )設定がxmlで取り出せます。多分作成中の画面かと。

Posted by Yappo at 21:48 | Comments (1) | TrackBack

WebService::SyncSBS::D2Hをupdate

過去にdel.icio.usとはてなブックマークの同期を取るモジュールとして、CPANに上げたdel.icio.usとはてなブックマークの同期を取るモジュールをupdateしました。
これははてなのtagの上限が10個に増えた事を受けての物です。

あとついでに、ある条件のはてなブックマークエントリがあった場合に無限ループ状態に陥るbugもfixしています。

過去のエントリからリンクしてるファイルはupdateしてません。
CPANからとってきてください。

Posted by Yappo at 02:55 | Comments (0) | TrackBack

iYappoの検索機能を拡張しました

ちょっと前からiYappoの検索結果の表示方法を変更しています。
PCからではなくて携帯電話で検索した時のみ変更されています。

今までのiYappoは、登録サイト単位での検索結果一覧を出していました。
登録サイトに含まれる各ページの本文をひとまとめに検索して表示していたのですが。
この出し方を細かくするようにしました。

要するに、Aというサイトで管理している複数のページの本文をひとつにまとめて検索で引っ掛けていたのです。
これを、検索結果にAというサイトが出たら、Aサイトの情報を出しつつ、Aサイトの中でもっとも検索結果に一致するCというページも検索結果で紹介するようにしました。

今までは、キーワードに引っかかったサイトを見に行っても、実際に引っかかったページはサイトのトップページ以下になってしまい、利用者からしてみれば「何でこんなページが引っかかるの?」と不信がられましたが
今回からは、サイト説明と同時にもっとも適合したURLも同時に出力するため、利用者が欲しい情報にすばやくアクセスできるようになりました。
対象となるページが多い場合には、サイトで絞り込んで検索することも出来ます。


登録制の特徴を保ちつつ、ロボット検索の良い所取りをしてる感じでしょうか。


Posted by Yappo at 02:47 | Comments (0) | TrackBack

YahooJ::Search - Yahoo!デベロッパーネットワークAPIを叩くモジュールを作った

12/06追記:YahooJ::Search 0.02 Releasedモジュールupdateしました。

Yahoo!デベロッパーネットワークがローンチしましたね。
SDKにperlのコードがあるですが、再利用しにくいのでモジュール作りました。
Y!Jの中の人がCPANに上げるだろうから、今回は野良モジュールです。
http://tech.yappo.jp/download/YahooJ-Search-byYappo.tar.gz

使い方は

use strict;
use lib './lib';

use Jcode;
use YahooJ::Search;

my $result = YahooJ::Search->Query
(
METHOD => 'Web',
appid => 'appid',
query => 'query'
);

if ($result->error_msg) {
die $result->error_msg;
}

print "totalResultsAvailable: " . $result->totalResultsAvailable . "\n";
print "totalResultsReturned : " . $result->totalResultsReturned . "\n";
print "firstResultPosition : " . $result->firstResultPosition . "\n";

foreach ($result->Results) {
print "\n";
$_->{Title} and print 'Title: ' . Jcode->new($_->{Title}, 'utf8')->euc . "\n";
$_->{Url} and print 'Url: ' . Jcode->new($_->{Url}, 'utf8')->euc . "\n";
$_->{Summary} and print 'Summary: ' . Jcode->new($_->{Summary}, 'utf8')->euc . "\n";
}

こんな感じで。

YahooJ::Search->QueryのMETHODオプションは、Web/Image/Videoが指定できます。
それ以外のオプションはAPIのリクエストパラメータを渡してあげてください。
レスポンスパラメータに関してはは本家のドキュメントを見てください。


example.plは適当です。
一応モジュールはそれぞれ動作確認をとてtますが、1時間くらいでやっつけたのでバグあるかもです。

さて、何作ろう。

Posted by Yappo at 00:10 | Comments (0) | TrackBack

2005年12月01日

PerlのAttributeについてのお勉強 part2 ~Attribute::Handlersで作るプラグイン機構搭載ソフト~

さて、前回ではattributeの扱い方を軽く見てみました。
ただ、あんなコードを毎回書くのは面倒です。
そこでAttribute::Handlersモジュールの登場です。

概要としては、独自attributeの作成を簡単にしてくれます。
もちろん関数以外のattributeの作成が出来ますが、今回も関数のみに絞ります。
詳細はperldocしてください。

基本的な使い方も簡単で

use strict;
use Attribute::Handlers;
sub ah_test1 : ATTR(CODE) {
my($package, $symbol, $referent, $attr, $data, $phase) = @_;
print "ah_test1: $package\n";
}
sub test : ah_test1 {
my $str = shift;
print "test: $str\n";
}
print "start\n";
test('value');
print "end\n";
こんな感じでかけます。
大雑把には、Attribute::HandlersはATTRというattributeを利用可にしています。
ATTRを関数に定義すると、関数名と同じ名前でattributeを作成します。
(CODE)の部分は、コードリファレンスを指します。(ANY)とか()でもありです。
ただし、(SCALAR)とかにしてしまうと型が違うため今回の例ではエラーが起きます。
このコードでは、at_test1という関数で利用可能なattributeを作成しています。
で、実行結果が
]$ perl ./ah1.pl
ah_test1: main
start
test: value
end
となります。

ちなみに、ATTR attributeがついた関数は、任意のperl実行フェーズで動かすことが可能です。
サンプルとして

use strict;
use Attribute::Handlers;
sub ah_test1 : ATTR(CODE,INIT,BEGIN,CHECK,END) {
my($package, $symbol, $referent, $attr, $data, $phase) = @_;
print "ah_test1: $package : $phase\n";
}
sub test : ah_test1 {
my $str = shift;
print "test: $str\n";
}
print "start\n";
test('value');
print "end\n";
だとすると、実行結果が
$ perl ./ah2.pl
ah_test1: main : BEGIN
ah_test1: main : CHECK
ah_test1: main : INIT
start
test: value
end
ah_test1: main : END
となります。

さて、ATTR attributeがついた関数には決められた引数が与えられます。
今回の例のah_test1でも、明示的に呼び出しを行っていないことからも分かるとおり、Attribute::Handlersより呼び出しが行われています。
で、

my($package, $symbol, $referent, $attr, $data, $phase) = @_;
こんな感じの引数なわけですが、それぞれ。
$packageは、attributeされている関数が属しているパッケージ。
$symbolは、attributeされている関数のシンボルテーブル。
$referentは、attributeされている関数のリファレンス。
$attrは、自分自信のattribute名。
$dataは、attributeに対する引数。
$phaseは、現在の実行フェーズ。
になります。
手っ取り早く次のサンプルを見てください。
use strict;
use Attribute::Handlers;
use Data::Dumper;
sub ah_test1 : ATTR(CODE) {
print "\n" . Dumper(@_) . "\n";
}
sub test : ah_test1(attr,{attr => 'hoge'}) {
my $str = shift;
print "test: $str\n";
}
print "start\n";
test('value');
print "end\n";
実行結果
$ perl ./ah3.pl

$VAR1 = 'main';
$VAR2 = \*::test;
$VAR3 = sub { "DUMMY" };
$VAR4 = 'ah_test1';
$VAR5 = [
'attr',
{
'attr' => 'hoge'
}
];
$VAR6 = 'CHECK';

start
test: value
end


大まかには、こんな感じです。
次は応用例として。
前回もattributeは複数設定できると書きましたが、shellのパイプのように複数のattributeを繋げて処理することも出来ます。
その場合は、ちょっとattributeのシンボルテーブルをいじってあげます。

use strict;
use Attribute::Handlers;
use Data::Dumper;
my $i = 1;
sub pipe1 : ATTR(CODE) {
my($package, $symbol, $referent, $attr, $data, $phase) = @_;
print "$attr: $package\n";
no warnings 'redefine';
*{$symbol} = sub {
my $c = $i++;
print "$attr [$c] start\n";
my $ret = &$referent($_[0] . " ($data [$c])");
print "$attr [$c] return = $ret\n";
print "$attr [$c] end\n";
return $ret . "($attr [$c])";
};
}
sub pipe2 : ATTR(CODE) {
my($package, $symbol, $referent, $attr, $data, $phase) = @_;
print "$attr: $package\n";
no warnings 'redefine';
*{$symbol} = sub {
my $c = $i++;
print "$attr [$c] start\n";
my $ret = &$referent("($data [$c]) " . $_[0]);
print "$attr [$c] return = $ret\n";
print "$attr [$c] end\n";
return $ret . "($attr [$c])";
};
}
sub test : pipe1('foo') pipe2('bar') pipe1('baz') pipe1('foo2') pipe2('bar2') pipe1('baz2') {
my $str = shift;
print "test: $str\n";
return $str;
}
print "START\n";
print test('value') ."\n";
print "END\n";
前回の最後のサンプルのような感じになります。
長いですが、結果は下記の通り。
$ perl ./ah4.pl
pipe1: main
pipe2: main
pipe1: main
pipe1: main
pipe2: main
pipe1: main
START
pipe1 [1] start
pipe2 [2] start
pipe1 [3] start
pipe1 [4] start
pipe2 [5] start
pipe1 [6] start
test: (bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])
pipe1 [6] return = (bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])
pipe1 [6] end
pipe2 [5] return = (bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])(pipe1 [6])
pipe2 [5] end
pipe1 [4] return = (bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])(pipe1 [6])(pipe2 [5])
pipe1 [4] end
pipe1 [3] return = (bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])(pipe1 [6])(pipe2 [5])(pipe1 [4])
pipe1 [3] end
pipe2 [2] return = (bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])(pipe1 [6])(pipe2 [5])(pipe1 [4])(pipe1 [3])
pipe2 [2] end
pipe1 [1] return = (bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])(pipe1 [6])(pipe2 [5])(pipe1 [4])(pipe1 [3])(pipe2 [2])
pipe1 [1] end
(bar [5]) (bar2 [2]) value (baz2 [1]) (foo2 [3]) (baz [4]) (foo [6])(pipe1 [6])(pipe2 [5])(pipe1 [4])(pipe1 [3])(pipe2 [2])(pipe1 [1])
END
また、このサンプルで、どのタイミングでATTR attributeが実行されているかも分かったかと思います。
関数の入力値や戻り値などの加工や、値チェックなども行うことが出来ます。
それ以外にも、内部フラグの状況に応じて、実際に関数を動かすだとか動かす関数を別のものに切り替えるなんて処理も出来ます。
ただ、ちょっと気軽にコードを書く用途では大掛かりすぎるのかも知れません。


Catalystのようなフレームワークでの活用や、独自アプリケーションソフトのプラグイン機構なんかで取り入れるとしっくりするかと思われます。
ちょっと頑張って、プラグイン機構が組み込まれた、なんちゃってサーバを作ってみました。
プラグインの骨組みはAHappli::Pluginsに書かれています。
プラグイン本体はAHappli::Plugins::Fooのような場所におきます。
プラグインの組み込みは、Catalystと同様にuseする時に組み込むプラグインを指定します。

肝はattributeにあるので、プラグイン側のメソッドは適当でもちゃんと動きます。
本当に簡単に作っているので、挙動などはコードを見て把握してみてください。
全ファイルのダウンロードはhttp://tech.yappo.jp/download/AHappli.tar.gzにて。
もうちょっとしっかり作りこめば、それらしい物が作れるはずでしょう。

CPANにはAttribute::Handlersを使ったモジュールがいくつかありますので、そっちも参考にしてみてください。


MFPM: Attribute::Handlers

Posted by Yappo at 06:07 | Comments (0) | TrackBack