2006年8月アーカイブ

PoderosaからPuTTyへ

何度目か分からないけど今度こそ乗り換えを決意。

気がついたらPoderosaが落ちているという現象がしょっちゅう起きるようになったので、適当なターミナルエミュレータを探して乗り換える事に。

で、なんとなくPuTTyを選択。Poderosaを使ってた理由は、keepaliveのパケット送れてタブで複数の接続を1つのウィンドウで管理出来るから。あとは多分特別な理由は無い。

PuTTyでもkeepaliveはオプションにあったので問題無し(だと思う)。タブは無いので、GNU screenを使う事に。Cygwinでもパッチを当てればいいんだけど、表示が崩れた気がする。なので、極力Cygwinを使わない努力をする事に。coLinux(cofs)でどうにかなると思う。パーミッションの問題はクリア出来てないけど、まあどにかする。

意外に気に入ったのは、チープさ。機能じゃなくて見た目ね。自宅ではOSXでTerminal.appを使っているので、ツールバーとかステータスバーとかがない作りはしっくりくる。気分的にも、ほぼ同じ感覚で使える。

今使ってるPCは使い始めて4ヶ月経ってないと思うんだけど、すでにごちゃごちゃしてる気がする。出来る限りWindows環境を汚さないまま開発環境を構築した方がいいかもね。

VMって外付けHDか中のセカンダリで動かしてもパフォーマンスに影響は無いのかな?

エラーで見れず。まあ、個人運用だししょうがない。
はてブおせっかい

前にサンプル無しのネタとして書いた感じのものだけど、実現して公開したのが凄いと思う。ちゃんと方法論を持って実装してるみたいだし。

ただ、現実問題として、こういうのってユザー行動を蓄積していって解析(データマイニング?)するのが健全な気がする。サーバもたくさん用意して、さ。すぐにレスポンスを返せるものなのかな?

蓄積データを活用して素敵体験を提供してくれるってことをほとんどしてきていないのは、はてなブックマークのポリシーなのかな。API公開してるし、『君たち、おもしろネタ考えてね』って事かな。文句を言うつもりは無いんだけど、なんかもったいない感じ。実験中とか、そういう事?

インフラ面とか大変だと思うけど、もうちょっとプッシュ気味の機能を付けてみても面白いんじゃないかなぁ。

折角RSS(XML)を扱うアプリの開発に携わっている訳だし、もうちょっとXSLを使いこなした方がいいのかも。

PHPには標準で(--with-xsl)XSLエクステンションがついてるらしい。libxsltライブラリを使っていて、XSLの標準規格を実装しているとの事なので、RSS(モデル)をサーバサイドで色々なビューに変換して提供出来る。

サーバサイドなので、ブラウザ実装(クライアント)に引きずられる事無く確実に意図したかたちで見せる事が出来るはず。まあ、HTML+CSSとかだと、引きずられる部分は多少なりとも出てくるけど、それはそれ。

今更感がぷんぷんするネタだけど、プログラムでいじくる手法にばかり目がいっているのでXSLでの変換もちょっと視野に入れておこうと思ったり。

問題は、RSSデータをダイナミックに吐き出してないと難しい事かな。変換処理をクライアントサイドに任せるならスタティックでもいいけど、折角サーバサイドで変換するなら、クライアント情報を元にXSLを切り替えたりしたい。下のレイヤに任せてもいいけど、ビューの追加/変更のためにサーバ設定いじくるのはどうなんだろう(個人的にサーバ設定変更に伴う検証よりプログラムの検証の方が気楽)。

XPath関連の開発補助ツールも結構色々あるし、XSL開発(?)もやり易そうだけどどうなんだろう?

開発効率を高める方法として、『保存を切っ掛けにほげほげ』というのがよくある。

ブラウザのリロードだとか、構文チェックだとか、いっそ実行してみるとか。Emacsでも保存切っ掛けで実行させる事はできて、試しにPHPの構文チェックをさせてたんだけど、mini-bufferが混雑して結果メッセージがどっかに吹っ飛んだりしてどうしようもなかった。

『(能動的には)保存しない』がポリシー(?)になってしまっているので、今更auto-save-buffersを外すのは危険すぎ。DreamWeaverでの保存ミスがようやく無くなってきたこのごろではあるけど、Emacs使ってたら間違いなく保存しないでkill-bufferすると思う。勿論、『保存してないぞ!消すのか、おい!』と聞かれはするけど、『はいはい、いい子ね』で流す気がする。。。

AutoHotKeyとか言うのが気になったりするけど、こんな自分にも使えるのかな?


ひょっとして、『自動保存』愛好家って少数派?

初ログイン以来、数ヶ月ぶりにログインしてみた。

自信満々に掲げられてる『βversion』。『やる気ねぇ』と、ついつい思ってしまいました。いや、インフラ面とか凄い事してるのは何となく耳にしてるんだけど、ね。

上場だなんだと景気のいいニュースも耳にしてるので、『永遠のβ』のつもりで掲げてるならさっさと外した方がいい気がする。中の人たちが『永遠のバージョンアップ』っていう気持ちでいてくれたらそれでいいだろうし。表に出しておくメリットって無くないっすか?

まあ、mixiのポリシーだとかを知らないので、何かしら意味があっての事なんだろうけど。。。

Hyper Estraierで自分探し

MT/DokuWiki/Hikiと、いろんなとこに適当な事を書いてきたのでひとまとめで検索してみる事に。

それぞれ検索機能はあるけど、レンタルサーバが遅いのかとてもじゃないけどMTを検索する気になれない。というわけで、ローカル(OSX)にHyper Estraierを入れてクロール+インデクシング。そんで、検索CGIからさくっと検索。

完全に拾えてるのか分からないし、それぞれのアプリで保持してるメタデータは無くなってるから微妙ではある。あるけど、記事自体の検索は出来てるし、ある程度網羅してるはず。

前にRastを試したんだけど、会社のcoLinuxに入れたせいかサーバ設定を間違えていたせいか、遅すぎて使えなかった。Hyper Estraierは検索自体はゼロコンマで結果を得られた。インデックスが小さいのかも。

会社でもこっそりとcoLinuxに入れて社内サイトをインデクシング。coLinuxでも検索はさくさく。Windowsをログオフした時にcoLinuxのcronが動いてない気がするけど、どうなんだろう。

そんなわけで、自分探しの第1歩を踏み出しました。

自分の事ながら阿呆だ。。。

「出来ない!いや、出来るはず!」と悪戦苦闘。serializeして渡すのかと試してみるも、落ち着いて考えてみれば中でserializeしてるので意味無し。

クラス定義をサーバ側でしてなかった。。。そりゃ出来ないよね。オブジェクト(実体)がシリアライズされて渡ってきても、それを復元するための大本の情報が無きゃ意味分からんもんね。

はぁ、疲れてんのかな。。。

ブラウザからのリクエストから、ブラウザでのレンダリングまでを1つのモニタで見てみたい。

サーバのベンチマークというよりも、アプリケーションのデバッグというかプロファイリング?Webアプリのプロファイリング(っていうの?)を行うためのツールってあるんだっけ?サーバ側のこれこれこういう処理で時間かかってて、クライアント側のここのレンダリングに時間がかかってる。そんな感じの情報を一貫した流れの中で見てみたい。

狐の拡張とか探したらあるのかな。レンダリングの体感時間はローカルにファイル保存してローカルで開けば分かる。ちょっと工夫すれば実際の時間も分かるかな。けど、どのDOM操作で負荷が大きいかとかって調べられるんだっけ?まあ、タイマ仕込めばいいのかな。

デバッグ技術身につけたい。。。

MTに仕込んであるStatWatchを眺めてたら、『Google: PEAR 評判』なんてリファラがあった。

PEARライブラリの評判について書いた記憶なんかなかったのでちょっと見てみたら、PHP Conference 2006に関するの記事中の『PEAR』って言葉とはてなブックマークとdel.icio.usでの被ブックマークページへのリンク文言『HB評判』『D評判』が引っかかってた模様。

ありえね。。。ごめんなさい。

意外とブログの記事フッタの部分てスコア高いのかな?サイトのトップだからかな?

早実優勝!!

結果だけ見た。
会社ではUI甲子園と銘打ってUI改善を押し進めてますが、この決勝みたく熱くいければいいなぁ。


延長再試合も視野に入れて。。。

再試合!!

駒大苫小牧vs早稲田実業!
熱い!

PHP Conference 2006〜感想とか

PHP Conference 2006では、あまりノートPCを持ち込む人はいなかった。

それでもいるにはいて、そのリターンキーを叩く豪快な音が気になる。記録の取り方は人それぞれだし、効率的に記録出来る方法を選べばいい。いいんだけど、もうちょっと控えめに叩いてくれると嬉しいかなぁ。

神経質すぎなのかな?自分もノートPC買って持ち込めば気にならないかも。でも、自分の叩く音が気になって集中出来ない気がする。。。今日は何も考えずノートとペンを持って適度にメモ。

そういえば、osxのkeynoteはスライドエフェクトにキューブが使えるみたいだね。会場でちょっとした驚きが生まれてた。さっぱりしたスライドもキューブみたいなエフェクト使うと豪華に見えていいかも。

会場250席がいっぱいになったようで、着実に動員数が増えてるみたいです。机席が会場の半分くらいしか無かったのは、それが普通なんでしょうか。机入れすぎると席数が確保出来ないのかな。

懇親会には不参加でしたが、『イベントに参加した』事実だけでいい刺激になります。Zend Frameworkを触ってみようかと目論見中。Symfonyのデバッグコンソール(?)とかバージョン管理機能(?)とか面白そう。

『Ajax with PHP』ではAjaxアプリの内側を見れて楽しかったけど、PHPでAjaxアプリを書く方法には触れられてなかった。勘違い。やっぱ、javascriptで要求に見合うものを書くようにしなきゃなのかな。(使った事無いけど)HTML_Ajaxとか出てくるかと思ったんだけど。Ajaxツールキットに対応したフレームワークの完成度待ち?

と、まあ程よい刺激を貰って、帰りの電車ではうとうとしつつ帰りました。

prototype.jsは一番最初のscriptで読み込むべきなのかな?

prototype.jsを利用してクラスを書いて、クラスを個別のファイルで管理する場合、PHPの癖でrequire_onceしたくなる。

で、適当な関数書いてやってみようかとごにょごにょしてる中で、何となく無意味な気がしてきた。

prototype.jsはオブジェクト汚染がどうこうとかで、for in構文(で得られる結果)がおかしくなる。なので、いっそprototype.jsを(一部分でも)使うと決めたら最初のscriptで読み込むルールを決めればいいのかな、と。どうせアプリケーション全体でprototype.jsの影響を考慮する必要があるなら、ね。

んー、require_onceはあればあったでいいかも?どっかに落ちてないかな?

PHP Conference 2006より

行ってきた。ノートにメモした内容から。
Zend Frameworkは高品質のコアであって、Railsみたいな方向性ではないらしい。機能を豊富にするよりも品質を高める事に注力するとか。『PHPらしさを』的な発言が印象的。なんでも同じくすればいいってもんでもないもんね。それぞれ得意なものがあって、その分野ではその得意げなやつを使えばいいし、使えるように努力しろ、と。

基調講演

  • PHP5.1以降で高速化(Zend Engine)
  • hardended-patchでセキュリティ強化
  • 5.2ではメモリ管理が強化
  • 5.2でfilter,zip,jsonなど標準へ
  • PHP6でUnicodeネイティブ(モード設定)
  • PHP6で一部レガシーな実装を削除
  • PHP6で64bit整数やgoto、名前空間が追加?
  • コード肥大化の原因をPEAR/PECLに移動

パネルディスカッション:フレームワーク

  • Ethnaでテスト機構にSelenium入れてもいいかも
  • Symfony遅い?
  • SymfonyはしばらくTracのチケット対応がメイン?
  • Symfonyのデバッグコンソールでいろんなログ(SQLも)見れるよ
  • Mapleはプレゼンテーション層に注力してた
  • MapleはチェインやDIコンテナーでどうこう
  • Zend Frameworkはパーツでの使い易さを意識
  • Zend Frameworkは高品質のコア
  • Zend Frameworkは結合度を低く保つ
  • Zend FrameworkはIDEからのサポートも?
  • フレームワークのアップデートとかデプロイもフレームワークの範疇なの?

Ajax with PHP

  • JSの変数でセッションを保持してもいいね(画面遷移でセッション終わるけど)
  • リクエストは一度メッセージキューオブジェクトを通るよ
  • 他の作業されたくない場合はモーダルダイアログとかだしたらいいよ

セキュリティ:危険なコード

  • サブシステムとのバウンダリ(境界)に注意
  • 無線LANの盗聴に注意(米のカンファレンスとか偽物ごろごろあるらしいよ)

ライトニングトーク

  • PEARはアカウントを持った人たちの投票があって初めて登録出来るんだよ

PHP6とコラボレーションプロジェクト(Zeev Suraski)

  • PHP6では内部エンコーディングをUTF-16に
  • PHP6ではオブジェクトにtoStringを
  • PHP6ではSOAPなどのWebServiceサポートを
  • PHP6でのUnicode化はICU(IBMのライブラリ)使うよ
  • PHP6では文字列長(strlen)はバイト数でなくて文字数で返すよ
  • コラボレーションプロジェクトではウェブサービスをサポートするよ
  • データは重要で、データは検索出来なきゃいけない
  • コラボレーションプロジェクトではリッチインターフェースをサポートするよ
  • コラボレーションプロジェクトではドキュメントてんこもりでいくよ
  • コラボレーションプロジェクトではRADを整えていくよ
  • Zend Frameworkでは基本部分だけ実装して他は拡張出来るようにするだけだよ(20:80ルール)
  • Zend Frameworkではユースケース付きのドキュメントを充実させるよ
  • Zend FrameworkではQA(品質)を重視するよ
  • PHP IDEではWSDLブラウズとかしちゃうよ?
  • Feed(Atom)もWebServiceだよ
  • Zend_DBはActiveRecordパターンだよ
  • Zend_DBは基本PDOに従うよ
  • Zend_Search_LuceneをPHPで書いたよ(全文検索)
  • EclipseプラグインのATF(Ajax Toolkit Framework)でどうこう?
  • devzone.zend.com
  • framework.zend.com
  • ZMailはsendmailとかいらねよ
  • PHP IDE: www.eclipse.org/php/
  • クラスネームに関する名前空間だけは実装するかもね(PHP6)
  • Zend_Search_Luceneのマルチバイト対応は微妙かもね

DynamicでこそFeed?

Feedが、『リソースのある時点でのサマリ』だとすると、動的に出力した方が色々都合がいいのかな?

ケースバイケースではあるだろうけど、データを取り出す側が色々と要求出来た方が広がりがある気がする。要求全てをサーバ(のレイヤ)で捌ければ一番なのかな。

『過去の情報は別途管理』というポリシーであれば必要ないか。『最近のリソース変化を伝える』ための媒体がFeed。んー、でもFeedとして通り過ぎた情報なら、アーカイブもFeedで取り出せると都合いいんじゃないかな。

Feedの帯域問題もあるから、静的であった方がサーバ的には嬉しいのかも。キャッシュ機構を整えれば問題ないかな。キャッシュの有効期限を上手く調整出来れば、ね。

アーカイブだけは動的ってのもありかな。最新のFeedを静的に吐き出しておいて、アーカイブへの参照をそこに含めておく。そしたら、リレーションとかなんだとかで上手く回るかも。

あ、Feedが『変化し続けるもの』だとすると、アーカイブをFeedで表現するのは『処理系のわがまま』なのか?いや、『機械に優しい共通仕様』だっていう認識でも間違いじゃないはず。

ん?Feedって『更新』ありきだっけ?『アイテムごとにサマリをまとめられて機械処理し易い』から『更新通知』に利用し易いんだっけ?

わけわからなくなってきた。なんとなく、ここまでFeedが広まってきたら、Feedをメッセージ媒体として使ってもいい気がしてるのかも。『リソースを切り出してFeedでやり取り』かな。

使ってないけど、Podcastingでも『新しい曲目』だけが欲しい訳じゃないだろうし。むしろ、『ある条件下でのまとまり』を自分でコントロールして再生出来るべき?リファレンスとかのアーカイブも『条件を指定してまとめてFeedで受け取る』とかして、関連情報もFeedで持って来れればいいかも?

あれですね、Rails脳ならずFeed脳になってるという事です。末期かなぁ。。。

PHPRPCたのし

PHPで外部サーバ上のPHP関数を簡単に実行できる『PHPRPC』:phpspot開発日誌

参考記事のコードを見る限り、PEARのやつではなさそうなので、SourceForgeから2.1を落として試してみた。PEARのでも大丈夫かな?

サーバ側

  1. phprpc_server.phpをインクルード
  2. クライアントから呼び出したい関数を定義(戻り値をクライアントで受け取る)
  3. new phprpc_server()の引数に、クライアントから呼び出した関数名を配列で渡す

クライアント側

  1. phprpc_client.phpをインクルード
  2. new phprpc_client()でクライアントオブジェクトを作る($client)
  3. $client->user_service()でサーバURLを定義
  4. $client->encryptを設定(暗号化種類?)
  5. サーバ側で利用出来る関数をクライアントオブジェクトのメソッドとして呼び出せる($client->function('arg'))
  6. エラーがあった場合、'phprpc_error'オブジェクトが返ってくる

。。。

細かい事は、ドキュメントなり参考記事なりを読むとして、なんとなくたのしげ。

(サーバ側で)PHP関数として定義して、(クライアント側で)PHP関数(クラスメソッド)として呼び出せるのは、見通しがいい気がするので、個人的に大絶賛です(思いつけない自分にがっかりとも言います)。

Delta encoding in HTTP(RFC3229)
これは差分を取得するためのもの?

どこだかの話題でRFC3229というものの存在を知って興味津々なわけだけど、これは大まかに言えば『差分取得(応答?)』。コンテンツを前回取得した日時をサーバに知らせて、サーバはそこからの差分だけを返す。普通に、If-Modified-Sinceだけだと、0か1かな訳だけど、RFC3229なら0〜1なのかな?

ドキュメントを読んだ訳でもないんだけど、今疑問なのは『RSSの16個目のアイテムもとれるの?』という事。RSSは大体、1ファイル(レスポンス)でアイテム15個とか20個。前のアクセスから次のアクセスまでに、この15個とか20個が全く入れ替わっている事があったら、その差分にも対応してくれるのかな。つまり、15+N個のアイテムをとれる?サーバ側で勝手にキャッシュしていってくれるのかな。

で、もっと気になるのは、バックナンバー管理も出来るのかという事。『ある日付からある日付までに更新されたアイテムを取得したい』ってことを実現するためには、プログラムを使わずにサーバモジュールだけでなんとかなるものなのかな。

RSSはアイテム数制限無しに、ひたすら1ファイルに追記していけばいいのか?で、リクエストに応じて妥当な範囲のアイテム群を返す、とか。同じリクエストにはキャッシュを返すとか、ね。

これまで、『サーバの工夫』については『巡回対策(If-Modified-Since)』くらいしか考えてなかったので、『差分応答』とかを知るともうちょっと出来るんじゃないかなんて考えてしまいます。

まとはずれ?

Ruby勉強中〜配列

Ruby本を何冊か読んで、『たのしいRuby』の練習問題に挑戦中。今日は配列。

a = (1..100).to_a
b = a.sort_by{|i| rand}

今日の「へぇ」は、範囲を配列にする書き方と、ソート条件にrandを使う書き方。なるほどね。

最後の練習問題は毎回アルゴリズムの問題なのかな?数値、配列と駄目っぷりを露呈してへこんでます。

Emacsに自動構文チェック機能つけてみたけど、邪魔臭いかも。実行して駄目なら駄目でいいし、気になった時に実行すりゃいいか。

久しぶりにやりたい事が出来たので、追加。

本当は用意されているのかもだけど、とりあえず書いてみた。

保存されたら。。。

スクリプトを保存する時,自動的に chmod +x を行なうようにする』を参考。
"(add-hook 'after-save-fook ...)"で保存後の動作を定義出来るらしい。なので、これにPHP構文チェック関数を関連づけてみる。プチIDE。

(add-hook 'php-mode-user-hook
  '(lambda ()
             (modify-syntax-entry ?_ "w" php-mode-syntax-table)
             (define-key php-mode-map "\C-c\C-l" 'php-lint)
             (define-key php-mode-map '[(control .)] nil)
             (define-key php-mode-map '[(control c)(control .)] 'php-show-arglist)
             (define-key php-mode-map (kbd "C-c z t") 'zftemplate)
             (setq php-manual-path "/opt/local/share/php/doc")
             (setq php-manual-url "http://jp.php.net/manual/ja/index.php")
             (add-hook 'after-save-hook 'php-lint)
     ))

関係ないのも書いてあるけど、php-mode-user-hookに"(add-hook 'after-save-hook 'php-lint)"。を追加。

Ruby周りのEmacsよくわからない。。。

ずっとPHPだったので、ruby-modeよく知りません。急場しのぎという事で、自前でいくつか書いてみる。

;;; ;;; Rubyの構文チェック
(defun ruby-lint ()
  "Performs a Ruby lint-check on the current file."
  (interactive)
  (shell-command (concat "/opt/local/bin/ruby -c " (buffer-file-name))))

(add-hook 'ruby-mode-hook
          '(lambda ()
            (inf-ruby-keys)
            (define-key ruby-mode-map "\C-c\C-f" 'refe)
            (define-key ruby-mode-map "\C-c\C-l" 'ruby-lint)
            (add-hook 'after-save-hook 'ruby-lint)
))

構文チェックと、refeと自動構文チェック。実際は、inf-rubyとかの記述もあります。

ファイル単位で実行。。。

『PHPをリージョン単位で手軽に実行したい』という欲求から、単純なevalスクリプトを活用してますが、ファイル自体を実行する方法は用意してませんでした。意外と使い道が違ったりするので、ファイル実行関数も用意しました。

(defun php-exec ()
  "Execute a PHP on the current file."
  (interactive)
  (shell-command (concat "/opt/local/bin/php " (buffer-file-name))))

もちろん、これもキー割当(適当にC-cC-d; 衝突してるかな?)。とりあえず動きます。requireでの相対指定も大丈夫。

あとは。。。

デバッグ方法とかよく分かってないので、その辺勉強してEmacsで出来そうな事は取り入れます。

OSXでCarbonとかのGUIアプリとTerminalのシェル環境を使ってると、環境変数が微妙に違ったりして困ったりする。

~/.MaxOSX/environment.plistを作って対応出来ると言えば出来るんだけど、.zshrcと同じ事を別個に管理するってのはうざい。前は、『それで出来るんだからいい』と思ってたりもしたけど、なんかね。

幸い、Carbon側でシェル環境と環境変数をそろえたいアプリはEmacsしかないので、.emacs.elにパス情報を加えて対応。

;;; ;;; ENV
(setq exec-path (cons "/opt/local/bin" exec-path))
(setenv "PATH"
  (concat "/opt/local/bin:" (getenv "PATH")))

『たのしいRuby』の練習問題を進める中で、"M-x refe"でリファレンスを引いてるんだけど、rubyをDarwinPortsのものを使っているので、実行に失敗してた。ので、DarwinPorts標準の環境("/opt/local/bin")を追加したら解決。

シェル環境との整合性を求めるなら、Linuxとか使えって話?見た目重視なので、やる気無くなるんです。Windowsもぎりぎり我慢してる感じです(最近はOSXっぽい外観にしてごまかしてます)。CygwinもI/Oに問題があるみたいだしさ。

OSXを開発者向けに最適化してくれたりしないかな?もしくは、シェル環境を上手く整合性をとってほしい。AquaとかCarbonとかですらややこしいのに、わけわからない。

Leopardは来年の春だって話しだし、Intel Macを秋にでも買おうかと思ってたこの気持ちはどこにぶつければ!

まあ、使い心地はいいからいいんだけどね。

β版という事で、多少厳しめなのはご愛嬌?
F.Ko-Jiの「一秒後は未来」: Yahoo!ブログ検索に表示されない件についてYahoo!からがっかりな回答がきた

RSSのドメインとブログのドメインだとか、内容の整合性だとか、そうとう厳しい気がする。ブログのトラックバックとかコメント対策として、内容とURLとの整合性とかを利用するのはまあいいと思う。自分のコンテンツに対して、外から悪影響を受けないように厳しめの対策をとるというのは妥当かな、と。

一方で、検索のインデックス作りにこの辺のポリシーはちょっと厳しすぎるのでは?RSSはトラフィック的に結構無駄(阿呆なリーダーとかね)があるので、ホスティングしたいケースが考えられる。ここは問題ないけど、人気ブログだとか何百万PV稼ぐポータルだとかは、ね。独自のドメインで運用出来るサービスもあるけど、どうだろう。

RSSをホスティングする目的の1つに効果測定もあるんだけど、ドメインを合わせないとインデクシングされないとなれば、結構な参入障壁だとかにならないかな。

ブログ運用側も、そこまで細かい条件にいちいち対応してられないと思う。『コンテンツ内容との整合性』なんてどうすりゃいいのさ。全く一緒なんて、ね。

まあ、何にしてもブログ検索はβ版が多いし、トラックバックだとかコメントだとかの影響を考慮しての仮対応なのかもしれない。これからだんだんと緩くしてくとか。validatorでのエラーを受けて処理を止めてるとかはないよね?

検索精度を考えると色々難しいんだろうな。

Rubyを最近触りだして、イテレーション+ブロック渡しが好きになれそうなので、PHPでもやってみる。

% irb
irb(main):001:0> [1, 2, 3].each { |v| puts v*v }
1
4
9
=> [1, 2, 3]

基本的に、文法上の制限は許容。『メソッドの並びが処理順に書ける』事と『イテレーションに渡す処理をその場で書ける』事に注目。とりあえず、array_mapとcreate_functionがお気に入り。

array_map(
  create_function(
    '$v',
    'echo "$v\n";'
  ),
  array(1, 2, 3)
);
/** result
1
2
3
**/

改行とかインデントとかしてみたけど、いまいち読み難い。1行にしたらもっと読み難い。

require_once 'OO/Array.php';

$arr = new OO_Array(1, 2, 3);
$arr->each('$v', 'echo "$v\n";');
/** result
1
2
3
**/

そんなわけで、オレクラス書いてうさんくさいけどそれっぽくなったかも?クラス名とかよく分からないので適当にOOなArrayってことにしてみる。

PHPはC言語そのままっぽいところが多々あるので、RubyとかJSに慣れてるとちょっと書き難いかもしれないけど、組み込み関数とかPECLを利用すればそれっぽい書き方は出来るのかも。

こういうところも見直していって、自分に優しいコードを書くようにしないとかな。まあ、クラスの実装がへぼいのでパフォーマンスとか犠牲にする可能性があるし、何より『コードを書く量を増やす』事にもなるので、出来合いのライブラリとかあってほしいんだけど、ね。

ちなみに、今回書いたクラスはテストコードなので使う予定はありません。

PHPのserializeとvar_export

突然気になったので、serialize->unserializeとvar_export->include_onceについてベンチマーク。

一応、単純な配列構造のデータが対象(YAMLだとかJSONだとかのキャッシュ目的ね)。結果から言えば、解凍しないだけvar_exportが早い。早いけど、これ使っていいのかな?100*100*100の配列ってのも現実味が無い?var_exportが複雑な配列になった時にどうなるかも見た方がいいかな。

仕様を和訳したまま放置しているRSS+SSE。使ってみたいけどネタが無い。。。

集合Aと集合Bが存在し、それぞれに相互干渉する要素Aaと要素Bbが属している。
集合Aは作業者Aが操作し、集合Bは作業者Bが操作する。
集合Aは作業者Bが受け取る事が出来、集合Bは作業者Aが受け取る事が出来る。
作業者Bが集合Aを受け取り要素Aaを集合Bに加えた場合、作業者Aによる要素Aaへの操作結果を反映させなくてはならない。逆も同様。
要素は自身に対する操作履歴を持つ。履歴には、履歴番号と最新の操作記録、各操作の記録が記述されている。操作記録はその日時と作業者のIDが記述される。古い操作履歴は場合によって捨てられる。
要素は複数の作業者によって操作される事が想定される。この時、要素は各作業者の手元で操作されるため、その変更を受け取った際に、どの変更された要素を集合に組み込むかを決定しなければならない。これは、衝突という概念を元にあるルールで決定される。
また、集合に散らばる要素は順位を持つ場合がある。この場合、その要素を受け取る際に、順位を保持して受け取る必要がある。

RSS+SSEを利用する事で分散した集合を要素単位で同期する事が出来る。また、各集合を集合の集合として扱う。集合が置かれる基点には作業者かつ受け手存在する。ある要素のクローンが複数の基点に存在するとして、ある基点でクローンに対して操作された場合、その結果は各基点に存在するクローンに対しても反映される。

『興味があるトピックスを収集し、特定のトピックスの共同編集に参加する』というストーリーはすぐに思いつくんだけど、これぼんやりしすぎてるよね。場面がわからない。そもそも、これならRSS+SSEじゃなくてもいい気がするし。

RSS+SSEだからこそってストーリーがなければ、RSS+SSEを使う意味が無い。

  • 特定要素の同期(共有)
  • 要素個別の履歴
  • 部分集合の集約
  • 基点間の連携
  • 要素に対する操作

なんとなく自分が思う特徴とか考えてみても、なんかすっきりしない。だいたい『集合』とかいっちゃってるけど、ちゃんと論理とか勉強した訳でもないので使い方ぼろぼろな気がする。

Feedのアイテム単位でごにょごにょっていうのと、アイテムに対して操作するっていうところに興味がわくんだけど、あまり意味ない事なのかな。

というわけで、結局最後までネタは思いつかず、時間だけが過ぎていきます。駄目だ。。。

このごろ色々と『RSSリーダー』普及に関する記事を見ますが、どうなんでしょう。
というわけで、久々にネタです。
繰り返しますが、ネタなのでスルーしてください。

8/6には届くかと思ってたんだけど、結局今日(8/7)の午後に来た。

日・月と気合いを入れて練習問題に挑戦しようと気持ちの準備をしていたのに、出ばなをくじかれた感じ。すっかり別の事をしていたので、もう土曜までのやる気はどこかへ。

とりあえずざっと眺めてみて、練習問題がある場所を把握するにとどめた。明日から1ページずつでもやってこうかな。


このために土曜の代休を取ったのに。。。

以前挑戦して挫折したOSXでのTrac(apache+mod_python)に再挑戦。

DarwinPortsでインストール出来るmod_pythonが3.2.8_1になっていて、3.1系だからOSXでは駄目だった気がしたので試してみる事に。

細かいところはまだ確認出来てないけど、とりあえずTracにアクセス出来て一通りの表示も問題ない様子。サーバ系はDebianで賄っているのでもう必要ないと言えば無いんだけど、挫折したままってのも気持ち悪かったのですっきり。

Trac関係無いけど、DarwinPortsのGUIとして、Port Authorityを入れてみた。portがいまいち使いこなせていなかったので、多少は使い易くなったかも。Aqua版が有料なのでX11版で我慢。

あと、Tracもアップデートしておいた。ひょっとしたら、こっちも関係あるかも。

PEAR::MDB2がよくわからない

そろそろPEAR::DBじゃないライブラリを使おうと物色中。

とりあえず、どれだけ違うのか変なテストでチェック。マルチプルじゃないINSERTを10000クエリ発行してる時点で、現実味が無いんだけどこれだけ違いが出るとは思わなかった。MDB2を分かってないからかもだけど、prepareを誤って使うと時間がかかるのかな?

とりあえず、怖いのでMDB2は使わない方向で。使うにしてもパフォーマンスの検証を一通りしてからかな。後はMDB2に乗り換える理由がはっきりするまでは調査継続でいこう。

PHP5.1の環境であれば、とりあえずPDOに乗り換えるのもいいかも。PDOそのままだと(メソッドとか)ちょっと物足りないかもしれないけど、PDOベースのライブラリとかあればそれ使ってもいいし。AcriveRecordのやつでPDO使ってるのがあった気がするけど、なんだったかね。

あと、PDOのprepare(プレースホルダー)はちょっと戸惑った。サンプル見てbindParamを利用したんだけど、これ値をバインドするんじゃなくて、変数をバインドするメソッドらしい。なので、『$stmt->bindParam(':name', $name);』とするだけじゃ駄目で、実際に『$stmt->execute();』する前に『$name = "hoge";』とかして変数をセットアップしないといけない。いいのか悪いのかよく分からないけど、なんとなく面白い。

そんな訳で、PEAR::MDB2をどうしようか迷ってます。

ユーザビリティなんぞ意識せず、ただ自分の感覚だけでGoサイン。

検索ボックスを、type="search"してSafariっぽく角丸にしてみたら、なんかボタンがある事に違和感。ブラウザ右上の検索ボックスにはボタンなんか無いし、キーワード入力した後にマウスに手を持っていく事もない。じゃあ、いらないじゃん、と。

submitボタンは意外と配置に困ったりするので、特に問題がなければ置かなくてもいいかなと思っての試みです。

このごろブログを毎日書かなかったりしてたので、トップページをちょっとでもにぎわせようと悪あがき。

xml2jsonを利用して、自分の最近のはてなブックマークをJSONで取得してJSで整形して表示。

基本的な仕組みはサンプルコードそのまま。データ整形と表示がちょっと違うくらい。

最初RSSをjsonにしてたんだけど、コメントを書いてない場合descriptionが空じゃなくてページのサマリになってたので、/atomfeedの方を使う事に。atomfeedは同じ要素を属性値で分けてるので、その選別を力技で実装してますがスルーで。

そんな訳で、無駄にトップページがにぎわってます。

ThunderbirdでのRSS表示

以前作った社内SNS(OpenPNE)用RSSモジュールから吐き出す、RSS2.0形式のフィードをThunderbirdで購読しています。

で、なんだか上手く更新されなかったり、誰が書いた記事なのか分からなかったりしたので、テスト用モジュールを書いてテスト。

問題は2つあって、『アイテムの重複削除』と『auhtorがないとchannelのtitleが差出人』という所。
詳しく調べる前に解決したのでアレなんですが、Thunderbirdではタイトル+URLかURL辺りで、ユニーク判定をしているようです。なので、フィードの中に『同じと判断されるアイテム』が複数あったとしても1つしか取得してくれません。
あと、RSSを書き出す際に利用しているテンプレの記述ミスでauthorを書き忘れてました。なので、差出人がchannelのtitleになっていてなんとも間抜けな感じ。

ユニーク判定は、URLのクエリパラメータに適当なシーケンスをくっつけたら解決。Thunderbirdのスレッド表示にもちゃんと対応してくれました。日記とそのコメントがスレッド表示されて、コミュニティのトピックスとコメントがスレッド表示。
差出人はただの記述漏れなので、ちゃんとauthorを書いて無事差出人にニックネームが入るようになりました。

やっぱ、RSSとスレッド表示は相性いいかも。


後は、改行されないのが解決出来れば嬉しいけど、それは無理かな。content:encodedを使えばいいのかな?

サクはストライカー?

8.5 HERO's
なんだろう、シュートボクセでの練習の成果を発揮したかったから?

この辺のブランドは『谷川フィルター』効果でうさんくさく見てしまうせいか、いまいち盛り上がれない。サクの試合が、『勝手に疲れて終わった試合』に見えた。

まあ、サクは功労者だし、後は好きにやってくれたらいい。元からかもだけど、『最強』とか『王者』とかには興味ないんだろうし。

面白い試合が見たいのに、PRIDEは地上波で見れないし、どうしよう。チケット買って会場まで行くしかないかな。

問題はひとつ。おれ出不精。


亀田不発。サク不発。これでオシム不発だったらどうしよう。

ROLLYOで3ロール

ROLLYOにアカウント(koshigoe)を作って、searchrollを3つほど作ってみた。
どんなまとめ方が妥当かは分からないけど、とりあえず自分が書いてきた事とPHP,Rubyについてまとめてみた。

koshigoe
  • blog.koshigoe.jp
  • wiki.koshigoe.jp
  • hiki.koshigoe.jp
  • www.koshigoe.sakura.ne.jp
  • b.koshigoe.jp/KoshigoeBushou
  • d.koshigoe.jp/KoshigoeBushou
PHP
  • framework.zend.com
  • php.resourceindex.com
  • phpspot.org
  • pecl.php.net
  • pear.php.net
  • www.php.net
  • www.symfony-project.com
  • ethna.jp
Ruby
  • www.rubyonrails.org
  • www.loveruby.net
  • www.namaraii.com
  • jp.rubyist.net
  • www.ruby-lang.org
  • railsapi.masuidrive.jp
  • ruby-doc.org

検索結果は多分、どこか(powerd by Yらしい)の検索エンジンにインデクシングされてないと駄目なんだと思う。あと、ディレクトリ指定が来ているのか分からない。とりあえず、koshigoeロールではディレクトリ指定を活かしておいた。

PHPはまあ妥当なところと、念のためにいくつかのフレームワークについて。Rubyはリファレンス周りをどこで見たらいいのか分からないので、Googleで引っかかったそれっぽいやつをリスト。

bookmarkletで実行出来るようにしておいて完了。

PHP Conference 2006

まだまだしばらくPHPメインのお仕事となりそうなので、行ってみます。
PHP Conference 2006

content:encodedに『みんなのコメント』が入ってる気がする。

これ、読みたかったら遅延購読しろってこと?自分のブックマークだし、タイムスタンプは『ブックマークした日時』だよね?どうしよう?

かめだーにゃっ!

びっくり。

分散したサービスをAPIで統一してくれた方が嬉しい気がする。
【インタビュー】ブラウザー上で動くデスクトップ環境が目指すもの:ITpro

Webベースのアプリケーションは既に多数存在するが、それらはすべてバラバラに存在している。公開されているドメインやユーザーIDは異なるし、ストレージも別々だ。これでは、複数のソフト間でデータを共有できない。米グーグルなどは、自社が公開する一部のソフト間でのデータ共有を可能にしているが、共有できるのはやはり同社のソフトに限られる。
【インタビュー】ブラウザー上で動くデスクトップ環境が目指すもの:ITpro

ビジネスとして複数ソフトウェアを連動させるプラットフォームを提供しようとしたらこうなるのかな。SBSとかメールは外のデータを利用出来ないと、容量的にすぐつらくなる気がする。トラフィックも。

外部開発者がソフトを売れるってのは楽しそうだけど、これはGoogleみたく独自のマークアップ(XML)を用意してくれるのかな?JSとかが使えて自由度が高い場合、そのセキュリティとかに対する責任は誰のものなんだろう。1つの穴から不特定多数の情報が流れ出たら責任なんかとれない。

とりあえず、盛り上がるまでは放置。

調査方法に疑問だけど、とりあえず一般な人のスタイルはこんもんなんでしょう。
Japan.internet.com デイリーリサーチ - 「お気に入り」からサイトチェック9割以上、RSS リーダー派は0.6%

SBSなんて、一般な人には意味分からないだけのサービスでしょう。ブラウザを使いこなしてればきっと検索とかでどうにでもなるんだろうし。SBSっぽいサービスを広めようと思ったら、『具体的な使い方』とか『使ったらどれだけ幸せになれるのか』を強力にアピールしなきゃ駄目だと思う。

RSSリーダーだって、一般な人には縁がないツールだと思う。『更新通知』が欲しいだけなのに、よく分からない概念とかを勉強しないといけないならそんなものは使わない。ライフスタイルに見合ったUIとかをよく考えた上で、Yahooとかのパーソナルページにでも仕込んだらいいんじゃないかね。あとは、ブラウザの組み込み機能とかツールバー辺りで、『お気に入り』位の感覚で使えるようになれば自然と(潜在的であっても)RSS利用者は増えるでしょう。ついでに、サーバに対するRSSへのトラフィック量も。

RSSって割と突き放し気味に置かれてるから、一般な人は近寄らない印象がある。ただ単に検索経由でブログの個別アーカイブを見たとして、『RSSを購読する』とか書いてあっても無視するでしょう。ブラウザの『お知らせ』ボタンとか押したら、そのブログの更新通知とか取得出来るってならまだしもさ。

インターネット利用に関しての『一般的な感覚』ってのは忘れて久しいんだけど、どうやったら取り戻せるんだろう。昔はGoogle検索にも感動してたんだけどな。

MTを3.3にしてからmapaeが使えなくなってたんだけど、どうやら使えるようになった模様。

mapaeには問題なくて、MTをサーバにあげた際にミスってたらしい。古い設定ファイルのmt.cfgが(なぜか)残っていて、これがあるとこっちを利用してしまうらしい。なので、mt.cfgのDB設定に記述漏れがあって、それが原因でDBに接続出来ていなかったらしい。

というわけで、これがアップ出来てれば問題解決。


まあ、素のままだとタグが使えないので結局いじる必要はあるんだけど。。。

やっぱ微妙に駄目かも。とりあえずエントリー・タグをどうやってXML-RPCで使うか分からないので、投稿はブラウザからMT管理画面使ってする事に。。。

プロフィール

このアーカイブについて

このページには、2006年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年7月です。

次のアーカイブは2006年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。