Personal tools
Document Actions

python

Up one level

Document Actions

PyDS UTF-8対応パッチ

岩田さんが進めていたPyDSのUTF-8対応パッチが本家のCVSに反映されたとのこと。あ,すごいすごい,本家にも出てる。あとで遊んでみよ♪

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/25/tbping

Re: PyDS UTF-8対応パッチ

Posted by yasusii at 2003-09-27 19:03

オラ程度のプログラミング能力と英語力でも何とかなるんだという、良い証明になったのではないかと。

全国の中学生プログラマよ、立ち上がれ!

Re: PyDS UTF-8対応パッチ

Posted by ats at 2003-09-27 19:38

#スイマセン,実験中でコメントにModerationがかかるようになってて,
#コメントの投稿がすぐに反映されてませんでした。。。

>yasusiiさん

Re: PyDS UTF-8対応パッチ

Posted by JuNya at 2003-10-05 22:05

ワケのわからない TrackBack が着弾していますが。
目標を見誤りました(笑)。すいません。

WyPy

mooyaさんのところから,WyPyというPythonベースのWikiCloneを発見。
A Minimal Python Wikiとある通り,23行と短いです。しかも,PEP8 Pythonコーディングスタイルガイドに沿って80行で折り返しされてこの長さ。Shortest Wiki Contestで見事2位になっています:-)。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/27/tbping

Re: WyPy

Posted by ats at 2003-09-27 23:52

こんどはどうだ?

Zope Python Cookbook

Amazonで検索をしていたらこんなものが。さっそく予約,と。

Category(s)
zope
python
The URL to Trackback this entry is:
http://coreblog.org/ats/30/tbping

Weblogs.com Ping Specs

Blogの「更新報告」のためのプロトコル。XML-RPCを使ってBlogの更新状況を収集しているPINGサーバーがあって,そいつに対してエントリーの更新を知らせるわけです。更新のお知らせはリストになって配信されます。

Pythonで書くと数行でできちゃう。

import xmlrpclib
svr = xmlrpclib.Server("http://rpc.weblogs.com")
resp = svr.weblogUpdates.ping(\
             "BlogTitle","http://entry.perma.link/")

ちなみに,xmlrpclibはZopeの?/lib/python/に入っています。Python 2.3からは標準でついてくる。

以下,関連リンク。

ん,ああ,Permalinkを送るんじゃなくて,BlogのインデックスのURLを送るのか。でも,OptionでPermalinkも送れるようにしたろ。

The URL to Trackback this entry is:
http://coreblog.org/ats/82/tbping

Re:Weblogs.com Ping Specs

Posted by Anonymous User at 2008-04-30 21:57

よろしくお願いします。

PINGサーバーでBlogのタイプを判別

ウチのPINGサーバーは,PINGを受けると相手のサイトまで出かけて行って最新のEntryの情報を取りに行くようになっています。そのときついでに,Blogのタイプを判別するようにしました。とりあえず手始めとして,COREBlogとそれ以外を判別しています。

Blogツールが固有で持つURIの存在を調べる,という泥臭い方法を使っています。この方法だと種類を増やすのが面倒だな。なんか共通のインターフェースでBlogツールのタイプとかバージョンを取得できるようにならないかしら。

The URL to Trackback this entry is:
http://coreblog.org/ats/115/tbping

Nested scopes

Entry追加時にPreviewできる機能を追加していたわけです。Entry本体を表示するDTML(entry_html)では,EntryクラスのMethodを呼んでいます。Preview時にもこのentry_htmlを使いたい。そこで,REQUEST.formに必要なMethodをlambdaを使ってくっつけようと思い立ちました。

どうせならEntry追加時に日時指定できるようにもしたい。フォームから入力された日付の文字列を,DateTimeインスタンスにいったん変換する - つまり,lambdaでローカル変数(またはMethodの引数)を使う必要があるわけです。が,Python 2.1まではこれができないことをすっかり忘れて,10分くらいハマってました。Nested scopesとか呼ばれている問題ですね。LL Saturdayで説明したのにすっかり忘れてた。

2.1で"from __future__ import nested_scopes"すれば解消される。でも,COREBlogをインストールしているZopeインスタンスすべてにこれを強制するわけにはいかない。「2.2以上じゃないと動かないよ」,というのはもっと言えない。

結局,lambdaに引数として渡してやると目的のことができるんだけど,書き方としては美しくないよなあ。

あと,REQUEST.form使った時点でZPTでモジュール書きづらくなっちゃったなあ。ZPT嫌いだからいいけど。重いし:-p。けっきょくデザイナーと技術者の分業なんてきれいにいかないし。

The URL to Trackback this entry is:
http://coreblog.org/ats/156/tbping

Re: Nested scopes

Posted by kom at 2003-12-08 01:23

Entryを追加する時、Previewをしたいなぁと思ったときはstatusをCloseにして、追加して、Viewでみてました。( ソースにちょっと手を加えました。一行だけですが;-) )

今後はEntryを追加する時は必ずPreviewするようなつくりになるということですか?

Re: Nested scopes

Posted by ats at 2003-12-08 01:30

>komさん
>今後はEntryを追加する時は必ずPreviewするようなつくりになるということですか?

Previewしたければできるし,一度も確認しなくても追加できます

わがまま転送フィルター

外出時脱ノートパソコン計画を実行に移すためには,携帯にメールを転送する必要があります。しかも私の要求は高いです。

  1. 条件設定が柔軟であること
    • 特定のアドレスから来るメールを転送するだけでなく,転送しない条件を設定できる必要がある。不意に来るメール,メーラーだとInboxに入る様なメールも転送してほしい。かといってスパムは転送しないで欲しい
  2. 転送メールの成形機能が柔軟であること
    • 連続改行の除去とか,引用部分の除去とか
  3. Webで転送/非転送の切り換えができること
    • しかも,非転送中も定期的にメールを読み込んで,その分は既読扱いにしてくれる必要がある

全部の条件を満たしてくれる既存スクリプトがなさげなので,ちょっくら自作してみました。メールを読み込んで,条件をevalで評価して転送/非転送を判断する,という簡単なもの。UIDLをpickleで保存して,メールの未読管理を行ないます。簡単なWebインターフェースを作って,転送,非転送の切り換えをする。転送してほしい時は,携帯でフォームにアクセスして,転送モードに切り換えたりするわけです。

とりあえずサーバーに残っていた分のメールでテストをしてみたところ,なかなか良好。X-Mailerで弾くと,たいていのスパムは除去できるんですよね。Vodafoneの場合,ショートメールの受信は無料なので,多少多めに転送されても痛くないんですけど。

しばらくログを吐かせつつ運用してみて,フィルターを鍛えようと思っております。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/183/tbping

xmlrpclibでUSER_AGENTを書き換える

from xmlrpclib import Server,Transport

しているとき

Transport.user_agent = "Some agent name"

とすると,XML-RPC時のUSER_AGENTを書き換えられるみたいですよ,岩田さん(^^;。なんだかたくさん更新報告いただいているみたいですが,どうしちゃったんでしょうか?

COREBlogのリリース版では,これを書き換えていなくて,xmlrpclib.py/1.0.0 (by www.pythonware.com)とデフォルトのまま出力されています。CentralCorePINGサーバーでは,この文字列をCOREBlogに書き換えて表示しています。なので,PyDSから送られたPINGもCOREBlogと表示されてしまっています。。。

次のバージョン(0.6b)では,ちゃんとしたUSER_AGENTを送るようになります。なお,私が使っている開発版では,すでにそうなっています:-)。

The URL to Trackback this entry is:
http://coreblog.org/ats/199/tbping

Re: xmlrpclibでUSER_AGENTを書き換える

Posted by yasusii at 2004-01-08 00:23

ソース見たら、ping サーバのインスタンス生成するとこだけ user_agent の設定が抜けてました。後で作者に報告しときます。

PyDSでは修正を入れる度にpingが飛びます。Radio Userland をはじめ、そうゆう実装している Blog ソフトウェアが多いらしく、海外のpingサーバの多くは一定時間内に同一のブログからpingが飛んできても無視するようになってます。

Re: xmlrpclibでUSER_AGENTを書き換える

Posted by ats at 2004-01-08 02:30

>yasusiiさん

失礼しましたm(_ _)m

#そういえば,weblogs.comなどは同一Blogから5分に一回しかPINGを受け付けないようになってますね。。。

http://rssrpc.weblogs.com/RPC2 に対する pingRSSUpdates の応答:

Posted by yasusii at 2004-01-08 10:09

Thanks for the ping, however we can only accept one ping every half-hour. It's cool that you're updating so often, however, if I may be so bold as to offer some advice -- take a break, you'll enjoy life more.

ping さんくす。でもごめんね、うちは30分に1回しか ping を受けつけないのよ。きみの頻繁なブログ更新はすばらしいと思う。でも老婆心ながら加えると、少し休めよ。人生ほかにも楽しいことはあるぜ。

Re: xmlrpclibでUSER_AGENTを書き換える

Posted by ats at 2004-01-08 20:07

>yasusiiさん

おや,30分に一回でしたか,失礼しました。。。

__slots__

__slots__って最初にみたとき,定義を書くのに面倒くさい分,実利面でなにかメリット(パフォーマンス的にとか)あるに違いない,と直感的に思ってたんですけど,石本さんのメモをみると,やはり歴然とした差があるみたい。dictionaryなめてその先につながっているオブジェクト判定してとかいうコストと,__slots__だけ見て,っつーコストを比べるだけでも差は出て来るんでしょうねえ。

データベースからクエリの結果をガバチョと持ってくる時,dictionaryにいれたりするとムチャクチャ時間がかかる。SQLObjectを継承したMetaclassあたりで__slots__使うようにすると幸せになれるのかもしれません。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/298/tbping

socketのタイムアウト,HTTPアクセスのUserAgent

PINGサーバで最新エントリのタイトル取得を復活しました。

PINGのリクエストからは,BlogのタイトルとURLしか取得できません。SoftwareDesignの特集にも書きましたけど,清く正しいBlogにはエントリにRDFが埋め込んであって(ソースを見るとわかります),これを正規表現などを使ってパースすると,エントリのタイトルやPermalinkなどを取得できます。

で,このとき,アクセス先のサーバが混雑していたりして,延々応答しなかったような場合,RDF取得プロセスが重複して相手先のサーバに迷惑をかけたりして具合がよろしくありません。相手に迷惑をかけないためには,排他制御するのがひとつ。HTTPアクセスの際タイムアウトするようにするのがひとつ。

Python 2.3からはsocketモジュールにタイムアウトが設定できるようになったので,これを使ってみました。これがない時は,threadでurllib.urlopenをラップしてあげたりしていたものでした。それに比べるとラクチンになった。。。

import socket
socket.setdefaulttimeout(120)

で,urllib.urlopenなどを使ってPINGを送ってきたBlogの本文を取得するわけです。このときUserAgentを明示してあげて,「PINGサーバからやってきましたよ」と相手に伝えるとお行儀がよい。HTTPアクセスの際のUserAgentを帰る方法はいくつかありますが,手軽な方法ということで

import urllib2
request = urllib2.Request(url)
request.add_header('User-Agent','Existences PING Scanner 0.8b...')
opener = urllib2.build_opener()
body = opener.open(request).read()

みたいにしてみました。

たまに,埋め込みのRDFがないBlogがあって,タイトルを取りこぼすことがありますが,現状9割以上はとれている模様です:-)。

The URL to Trackback this entry is:
http://coreblog.org/ats/300/tbping
Recruit
r = urlopen("http://www.webcore.co.jp/recruit")
About this blog
■Author
atsこと柴田淳です。Atsushiはガイジンにうまく発音して頂けないので,これからはJunというペンネームで行こうと思っていましたがあんまり使ってません。
Webcore株式会社 代表取締役
■TRIVIAL TECHNOLOGIES 2.0
トリビアル・テクノロジー 2.0,「トリテク 2.0」と呼んでください。
Blog(ブログ)サイトです。Plone上で動く,オープンソースのBlog Product - COREBlog2を使っています。
 
最近書いた本,Mook
みんなのPython Webアプリ編
Pythonの基礎から,Webアプリやフレームワークの仕組みまで,つまることなく一気に学べる書籍です。「みんなのPython」と一緒に読んでください:-)。
みんなのPython
Pythonの入門書です。基本的なことから分かりやすく解説するよう勤めました。Pythonをはじめたいと思っている人,JavaやC++,PerlやRubyを学ぼうと思って躓いてしまった人はぜひ読んで下さい。
 

Powered by Plone, the Open Source Content Management System