Login
  Days of Liris

2007/02/23

昨日の作業 - へんなもの、へんなもの

とりあえず、サイトの方はトップページもゴチャゴチャするようにして、検索機能もついて一段落です。CSSをいじったリ、いろいろとAJAXで遊んでみる作業や管理画面を作るとか残っていますが、その辺はゆっくりとやっていきます(バージョン0.3になるのが3ヶ月後ぐらい)。

で、そのバージョン0.3で外部サイトの情報をアグリゲートしたり変なことしたいのでハブというものを作ってみました。ハブの名前の由来は沖縄の毒蛇です。そのうち、ホンハブとか、ヒメハブも出てくるはず。さらにアワモリとかあるかも。

http://www.liris.org/blog/images/800px-Habu-pitviper.jpg/image_preview

ハブは何するものかと言うと、アグリゲーションです。とりあえず、昨日作り始めたばかりで、まだ、 テスト実装と言うか、技術検証 みたいな位置づけです。Perlの例のやつのPython実装を目指しているっぽい。違うかもしれない。

実行するには、twistedとfeedparserぐらいがあればいいのかな?今のところ。基本的にはデーモンと言うか、サービスと言うかプロセスが常駐することを想定して、Perlのやつのようにcronで定期実行する事とかは想定していません。

yamlの設定ファイルを読み込んでpipelineで指定したシークエンスに従ってモジュールを動的にロードして順番に実行するようになっています。それぞれのモジュールは非同期で処理されるはず。エーと、フィルタとか、UNIXのパイプみたいな感じ。一度に複数のpipelineも実行できるはず。

現在は、モジュールとモジュールの間を移動するものがfeedparserでパースしたオブジェクトそのものなんですが、それでいいのかな?それから、フィルタを通したり、最初のpublishのときに線が複数に分岐するようになっているんですが、いいのかな?

とりあえず、もう少しましなフィルタを書いて、最後の出力をデータベースに保存できるようになれば、それっぽく見えるかな。

あと、複数に分岐したものを全部がおわるまで待って処理を行なうところかな。


2007/02/20

paginateにちょっと困る

Tag: tmiki

サイトのトップページもそれっぽく見えるようになってきて、気を良くしていました。で、ローカルでいろいろテストしたり、このサイトがうまく動いているか、確認したりしていました。ページドリストを作るpaginateですが、なんだかうまく動いていていない事が判明。

まだ、原因をちゃんとみていないのですが、ちょっといろいろありました。macとlinuxで挙動が違ったり・・・。ちなみにWindowsでは開発しないので知りません。

さて、いろいろある問題ですが、まず、簡単なところから。paginateを使うとき

@paginate("resutls")
def fetch(self, arg1):
    
return dict(results=MyModel.select())

という感じで使うとドキュメントにあります。paginateの中でcgiパラメータを処理していると信じていたら、どうやらそうではないらしい。ここでは、fetchメソッドのキーワード引数を処理しているらしい。キーワード引数をとらないので、paged listにしたときのcgiパラメータが全く処理されないので、Paged Listは出るけれども最初のページしか表示されません。なのでdef fetch(self, arg1, **kwd)としないと動いてくれません。**kwdを追加すればいいだけなので、それほど困った事にはなりません。

次にその影響と言うか、arg1があってもなくても処理されるようにしたいので、def fetch(self, arg1=None, **kwds)とします。urlとしては、分かりやすく書けばhttp://localhost/fetch/1みたいな感じですね。子の場合、paginateでキーワード引数を処理すると書きましたが、そのせいで、2ページ目のURLはhttp://localhost/fetch/1?args1=1&...のようになってしまい、args1は文字列じゃなくリストがわたってくるようになります。結局def fetch(self, *args, **kwds)のようになりますた。

上の二つはちょっと前までは動いていたような気がして、1.0.1にしてから動かなくなったような気がするのですが、定かではないです。

さて、次の問題がargs1に日本語が入る場合です。URL的にはutf-8でescapeされたものがリクエストされてくるのですが、コントローラにわたってくるときにはunescapeされたutf-8の文字列です。これは自分でunicodeにしてあげればいいのですが、turbogears.urlでurlを作るときに、utf-8の文字列がunicodeにしようと頑張ってくれています。でもー、勝手にunicodeに変換しようとしてもそれは無理でしょう。escapeしていないとunicodeになっても困ります。この辺はもうちょっと調べて直すかも。でも、自分でescapeしてから渡せばいいので、その辺は仕様なのかな?

最後がちょっと困った問題。macだと大丈夫なんですが、linuxだと動かない、と言うもの。developementかproductionかの違いかもしれません。Paged Listの最後のページのURLにアクセスする場合、tg.paginate.href_lastとかになるのですが、macだとちゃんと設定されているのですが、linuxだとこれが最初のページになっています。これはどうしよう?ページ数などは正しく取得できるので、tg.pagenate.get_page()で最後のページとかを取得すれば回避できるのですが、気持ち悪いです

とか、いろいろ。

それから、このサイトにトラックバックが最近ないのは、フィルタがはじいてくれているのか、バグですべてはじいているのか?まあ、気にならないのでいいのですが。それと、pingサーバにちゃんと送信しているかはさらに謎。トラックバックは一応、ローカルでテストしていますが、pingは一度もテストしていない。最近はあまりpingサーバの意義(スパムを送信するための送信先データの収集以外)を感じないし。


2007/02/17

全文検索できるようにしました

Tag: tmiki

先日リリースしたHyperEstraierのPure Pythonを使って、このサイトで全文検索できるようにしました。右上のSearchで検索できるはず。まだ、HyperEstraierの検索フレーズを直接入力する方式なので、それはそのうち。文書数としては、2000件あります。

全文書を登録しちゃっているのでdraftなどのステータスになっている物は登録しないようにしないと。あと、ファイルは、まだです。

そんな感じ。残り作業はトップページをもう少しなんとかしないと。


2007/02/07

ちょこっとアップデート

Tag: tmiki

まあ、ほぼ、毎日、少しずつ変わっていっているのですが、今日の変更点。

  • ソースコードをアップロードするとSilverCityが色を付けてくて表示してくれるはず。30分ぐらいでできた。
  • Techの下の文書を開くと、勝手に右上に目次が表示されるはず。

Techの下の文書は全部、フォーマットがHTMLです。reSTで書いたものは全く問題ないのですが、HTMLのものは頑張って、BeautifulSoupがHTMLを解釈して、h1とかh2に<a name="hogehoge"/>を埋め込んでいってくれています。でも、<h1>hoge hoge<br/></h1>のようなやつがいて、<br/>があるとそれが目次から消えちゃいます。エーと、僕のコードが悪いんですが。そもそもは、こんなところにある<br/>が悪いんですが。気の迷いでKupuとかFCKを取っ替え引っ替え使った僕が悪いんですが。

かっこわるいけど、困ることがないので、そのうち直します。

明日は、Captchaを10分で作る方法かな。


2007/01/31

captcha widgetを作ってみる(まだ途中かもしれない)

Captcha Widgetを作ってみました。まだ、途中だけど。作成途中の 例のサイト でブログのエントリを表示したら見えるでしょう。作成途中と言うのは、validatorがよくわからない。CaptchaWidgetはCompoundFormFieldなんですが、こやつには普通のvalidatorをセットできないのです。AutoCompleteFieldもCompoundFormFieldでこいつにvalidatorを指定できない。chained_validatorsだと大丈夫なんですが、ちょっと負けた気分かも。もう少し別のやり方があるのかな?

とりあえずはそれなりに動いているっぽい。ローカルだけど。


2007/01/30

とりあえず進捗状況

Tag: dev tmiki

例のサイトの件ですが、まあ、バグはあるとして、CSSが後回しにしつつも、目についたところだけは直しています。機能的には、あとは、

  • コメントのpictcatcha(?)がまだ
  • コメントのvalidator(URLValidtorとか)をセットして上げる(一瞬なのに!)
  • トラックバックのスパム対応
  • pingをうったときのコメントでHTMLの中に埋め込むやつ
  • 作成をもう少しスマートに。

ぐらいかな。最低限のレベルとしては。とりあえず、blogのお引っ越しの準備はできているので、あとは、本番で頑張ってみることかな。

ちょっとした疑問は、うちのサーバ君と開発マシンのmac君、どちらが速いのか?


2007/02/01

あとはトラックバックスパム

Tag: dev tmiki

作成系も作り替えました。今までは/createってなっていたのを/$id/createにかわりました。idはディレクトリ構造ね。それと、/saveも/$id/saveに変更。

うーん、半年前にやりたかったことをやっているんですが、やっぱり、今でもそれが正しいのか分かりません。ちゃんと動くし、プラグイン構造にはしていないけど、僕にとってそこそこの拡張は簡単なはず。モデルを定義して、ウィジェットとバリデータを定義して、保存する時のロジックをちょこっと書けばいいだけ。保存のときのロジックももう少し直せば、単純にポストされたものを保存するだけならコードを書かなくてもよいはず。でも、こうした作りが正しいと言うか、TurboGearsの思想とはちょっと違うような気がする。と考えながらも、自分が便利なように続けるんでしょう。

多分、blogだけじゃちょっと。でもPloneほどちゃんとしていなくてもよい。Wikiもいいけど、もう少し構造化したい。かな。

とりあえずの最小限の機能セットは、トラックバックスパムを残すだけのはず。いや、スパムを送る方じゃなくって、拒否する方ね。と言ってもちゃんとしたトラックバックを受信できるかもあんまりテストしていないけど。トラックバックの対策ですが、どうしよう?

フィルタみたいな感じにして、最初はblacklist,whitelistで、そのあとは、トラックバック元にアクセスして、こちらのURLが記述されているかチェックしたいんですが、COREBlogからそれで受信できるのかな?まあ、非同期でやると思うので、数秒でトランザクションが終わってくれていればいいんだけど。いっそのこと、数分後に表示されるようにしてもいいのかな?


2007/01/24

リリースはいつ

Tag: tmiki

20ヶ月後にバージョン1がリリースされる予定です。では、バージョン0.1はいつでしょう。1月23日は過ぎ去ってしまいました。12月3日は遥か未来です。なので、その次にキリがいい日付と言えば、3月21日なので、その辺が危険日です。

その時までに何ができるようになっているかは、誰も分かりません。多分、お知らせ系の機能の追加とAmazonとの何かとアルバム機能が追加したいな。Google Mapsはよくわからない。

あと、TODOも管理したいのでその辺かな。

その前にmodel.pyとcontrollers.pyが太ってきたので、分割しないと。plugin的に管理した方がいいのかもしれませんが、どうするんでしょうね。DI(XMLじゃなくってyamlね)っぽいものもありかな。


メディアオブジェクト相当のもの、できた

Tag: tmiki

実装上、あまり面白みはないのですが、COREBlog2のメディアオブジェクト相当のものができました。とりあえずの入力と表示はできましたとさ。

とりあえずと言うのは、本当にとりあえずで、どのくらいとりあえずかと言うと、編集するときに関連するリソースのIDを知っておかないといけないと言うくらいです。あとは、ウィジェットを作って、入力しやすくするとか、そういうことになります。

次は、タグのフィルタリング関連かな。paginateはまだ、コンテンツが少ないので、後回し。リファクタリング関連はそこそこ残っていると言うか、やんないといけないことが増えてきています。

そのうち、中身がどうなっているのか、書かないと・・・。