« 2005年4月 | トップページ | 2005年6月 »

2005年5月の37件の記事

2005年5月31日

Contents☯2005年5月

続きを読む "Contents☯2005年5月" »

10,000 count 到達

今は 200 count/日くらいかな?

5,000 count 行くのに80日かかったというのに、5,000 から 10,000 になるのには26日しかかからず。もの凄い加速っぷり。

(サイドバーの「読んだもの」からの移入やら目次の投稿やらで水増しされてはいますがそれを抜かせば)発言ペースそのものは昔と比べ特に上がったわけでもなし。どうしてこんなに増えたのか謎です。時事的なネタもそれなりに書いているので、それが Google あたりに引っかかっているのでしょうか。

定期的に読んでいる人(もしおられたらご愛読ありがとうございます)はあまり居そうも無い性格の blog ですし。

2005年5月28日

朝鮮民族を読み解く:古田 博司

(サイドバーの「読んだもの」より移動)

  • 古田 博司: 朝鮮民族を読み解く
    古田 博司: 朝鮮民族を読み解く
    良くも悪くも単純な人達なのですね。精神論での体制順応型と言いましょうか。そして現実に体制を担う人達は泥沼の権力闘争に……。難儀な土地柄です。 2005年4月28日 (★★★)

著者の筑波大学研究室:古田研究室ホームページ

出版:筑摩書房 ちくま学芸文庫

神無月の巫女

神無月の巫女 最終話

マコちゃんまた美味しい所を取って行くし。

そのマコちゃんと、ソウマ&ツバサを描いているためギリギリで面目が立ってはいますが、やはり薄皮一枚深い所に行けなかった感じ。やりたい事は良く分かるのですがアルティメットガールのそれのようには上手くまとめられていないです。ストーリー上で矛盾/葛藤を提示出来なかったですから最後だけ思い入れいっぱいに「語られ」てしまっても困るだけですが、そういう事以前に、

千歌音
「神無き月のオロチの災いを鎮めるために、命と想いを引き換えに、正しい世界に戻すの」

もちろんこれは(設定上は世界の問題ですがテーマ上では)彼女の自己実現の問題なわけですが。神(アイドル・超越者・支配者)にもなり切れず自らの命(輪廻が約束されているのだから安い命だ)をダシにして想いを無理やりでっち上げる(その想いは手を伸ばせばすぐに手に届く所にいつでもあったものなのに)。そしてそうやって無理やりでっち上げた想いすら「思い出」という形に畳み込まないと消化出来ない。難儀というか哀れというか。

それを象徴して言えば「なぜ千歌音はマコちゃんになれなかったのだろう」という事になるわけですけれどもそれは視聴者に投げられてしまいましたし、そして最後に……という事で結局思考停止できてしまう。でも作者にはネガティブな意味でのドツボに嵌った永遠の呪縛を描いているつもりはないのでしょう。そうだとするなら完全に失敗。まあアルバム(今までの姫子との思い出)がフェイクである部分をちゃんと押さえているだけでも褒めるべきかもしれませんが。

でも姫子の

「ハッピー・バースデー」

は奇麗でしたね。

おおもね満足はしています。というかこの制作陣にこれ以上は求められないのだろうなぁ。それが会社の制約なのかテレビ放映の制約なのか監督やシナリオライターの限界なのかまでは分からないですけれども。原作も読んでみるかな。

HTML の文字コードを調べる

Pythn スクリプト。これを元に unicode(object, encoding) かけて html2text.py に通す前に使ったりするユーティリティー的なものです。微妙に大げさな感じのスクリプトになってしまいましたが使う側としては HTML を文字列として取って来て get_encoding(html) と関数を呼べばいいだけなので、使うだけなら簡単。

HTML ファイル内でちゃんと文字コードの指定がされている事が大前提ではありますが。(日本語の文書 だと確実に分かっているのならば指定が無かったとしてもそれなりにやりようがありますけれども、それはもはや HTML だからどうこうという話ではないですし)

ちなみに "Shift-JIS" が返って来たからといって馬鹿正直にそのまま適用すると機種依存文字でコケると思いますので、例えば unicode(html, 'cp932', 'replace') くらいの要領はこらしましょう。

u'''
htmlencoding.py

HTML の文字コード指定を調べる。
'''
import HTMLParser
import codecs

__author__ = 'kadotanimitsuru' __date__ = '2005-05-28' __license__ = 'public domain' __version__ = '1.0.0' class _encodingParser(HTMLParser.HTMLParser):
    def reset(self):
        HTMLParser.HTMLParser.reset(self)
        self.htmltype = None         self.encoding = None     def handle_starttag(self, tag, attributes):
        if not self.encoding and tag == 'meta':
            a = dict(attributes)
            if a.get('http-equiv', '').lower() == "content-type":
                try:
                    content = a['content']
                except KeyError:
                    return                 for i in content.split(';'):
                    try:
                        start = i.lower().index('charset=')
                    except ValueError:
                        continue                     start += len('charset=')
                    self.encoding = i[start:].strip()
                    break     def handle_decl(self, decl):
        d = decl.split()
        if len(d) > 1 and d[0] == 'DOCTYPE':
            if d[1] == 'HTML':
                self.htmltype = 'HTML'             elif d[1] == 'html':
                self.htmltype = 'XHTML'            
    def handle_pi(self, data):
        if not self.encoding and data.split()[0] == 'xml':
            try:
                start = data.index('encoding="')
            except ValueError:
                return             start += len('encoding="')
            end = data.index('"', start)
            self.encoding = data[start:end]
def get_encoding(html):
    u'''
    HTML の文字コード指定を返す。不明の時は None を返す。
    '''
    for codec, name in (
        (codecs.BOM_UTF8, 'utf_8'),
        (codecs.BOM_BE, 'utf_16_be'),
        (codecs.BOM_LE, 'utf_16_le')):
        if html.startswith(codec):
            return name

    # iso-2022-jp 等の '<' を含む漢字コードでエラーが出るので
    # 漢字の出現する可能性のある <title> 前で切る。
    try:
        n = html.lower().index('<title>')
    except ValueError:
        pass     else:
        html = html[:n]

    p = _encodingParser()
    p.feed(html)
    p.close()
    encoding = p.encoding
    if encoding is None and p.htmltype == 'XHTML':
        encoding = 'UTF-8'     return encoding
if __name__=='__main__':
    import urllib
    url = 'http://tuchinoko.moe-nifty.com/oboegaki/'     html = urllib.urlopen(url).read()     print url
    print get_encoding(html)

# 好きに流用してください。

天気晴朗ナレドモ波タカシ

日本海海戦100周年。ここらへんで大日本帝国が負けていたら朝鮮もロシア領になってやがてはソビエト連邦の一部になっていただろうから、今になって日本があそこらへんの人からやいのやいの言われる事も無かったんだなぁ。でもここで勝っても結局はアメリカに負けて属国になっちゃったわけだから、東郷平八郎元帥(肉じゃがの発明者)があの時に勝ったのも水の泡だったわけで。歴史って空しい。

それ以前に、当時の技術であの巨大なバルチック艦隊が地球を半周して来ただけで大事業。逆にあの当時の大日本帝国海軍がバルト海まで進出して会戦を行えたかと言えばとても無理だったでしょう。ロシアも大したものです。

もっとも回航するだけでなくその後日本海軍を突破しなくてはウラジオストクに入れないですし、また仮にウラジオストクに入っても巨大な艦隊を維持する設備がそこには無いとか、後の事を考えていなかった最初から無理がある計画、それが当然の如く破綻しただけの話。その破綻が形になったのがたまたま日本海海戦だっただけ。

そして後の太平洋戦争で帝国海軍が「攻勢終末点を越えた進出」という日露戦争でのロシアと同じ過ちを犯すわけで。資源の量は元より艦隊の展開能力も台湾あたりまでがせいぜいという代物だったのにインドネシアあたりまで伸ばしたあげく潜水艦にぼろぼろにやられて……同じ負けるにしてももう少し粘れたはずなんですが。小手先の技術はともかくとして本質的には「七つの海」を支配するなど到底無理な沿海海軍でしかないのに何を思い上がったのやら。さらに大戦略で見ればアメリカ・イギリスを敵にするよりソビエトと戦った方が枢軸同盟全体の利益になったわけで。当時の日本って何をやりたかったのか分からないです。「平和に引きこもっていれば無難に過ごせる」という時代ではなかった事は確かですけれども、それにしてもやりようはあったはず。

もっともアメリカに負けた後の日本国は国際政治の重さを全部アメリカにひっかぶせて経済繁栄に邁進、不況だ何だと言われてもいまだに(国単位で見れば)アメリカに次ぐ世界第2位の経済力。上手くやったものです。自民党&平和憲法万々歳。属国島国根性の勝利(?)です。

……でもアメリカが左前になったらどうなるか分からないですけど。共産中国も南北朝鮮も深入りするだけ馬鹿を見る相手ですし。東南アジア&台湾は当然として、ロシア極東との交流もこれからどんどん重要になって行くでしょう。今度は上手くやれると良いですね。

2005年5月27日

アルティメットガール 桜花春風巨大乙女!:威 成一

(サイドバーの「読んだもの」より移動)

  • 威 成一〔著〕: アルティメットガール
    威 成一〔著〕: アルティメットガール
    クマーーーーー!
    原作アニメが終わった後で出るノベライズですから今更ヴィヴィアン &で引っ張るわけにはいかないわけだし新キャラ投入は妥当な手ですが……。
    ヴィヴィつぼみの口調には違和感があるなぁ。白絹の妄想癖はいいけど。 2004年4月27日 (★★)

イラスト:濱元 隆輔 HP ryusuke works HELLBOY

原作:m.o.e.

出版:MediaWorks 電撃文庫

2005年5月26日

豹頭王の試練:栗本 薫

(サイドバーの「読んだもの」より移動)

  • 栗本 薫: 豹頭王の試練
    栗本 薫: 豹頭王の試練
    100巻達成だけど繋ぎの巻。最後に意外なあの人が!
    これにカメロンが加わればグイン・サーガ三大良い男揃い踏みですな。 2004年4月27日 (★★)

続きを読む "豹頭王の試練:栗本 薫" »

2005年5月25日

html2text.py HTMLをプレーンテキストに

変換する Python スクリプト。

ダウンロード 20050525html2text.py (5.1K)

まともに使う気ならばこんなのではなく Strip-o-Gram のようなちゃんとした物を導入した方がいいと思いますが、まあ作例という事で。いわゆるテキストプラウザ風の整形表示をするものではありませんので注意。(そういう用途には素直に Lynx 使いましょう)

出来るだけ安直に作れる/使える小さなパッケージを意図したのですが、タグをカットするという以上の事をするにはそれなりの手間は必要でした。でも実用上はここまでやらなくとも cococontents.py で使っている tagcut 程度のもので充分だと思いますが。


以下余談。

Python には HTML を処理するライブラリとして sgmllib, htmllib, HTMLParser と標準でもいろいろと含まれていますけれども、この内 sgmllib は継承してオーバーライドして使う事が前提の

モジュール自体も htmllib モジュールの基礎にするため だけに存在しています。

という代物ですし、HTMLParser の方は

htmllib のパーザと違い、このパーザは終了タグが開始タグと 一致しているか調べたり、外側のタグ要素が閉じるときに内側で明示的 に閉じられていないタグ要素のタグ終了ハンドラを呼び出したりはしません。

という事でそれこそタグカットやタグ単位での属性値の洗い出しくらいにしか使えず。結局残るのは htmllib になるわけですが、これがまた「writer インスタンスを引数に作った formatter インスタンスを引数にして……」というような代物。ついでに出来合いのその実装には単なる雛形か妙な方向に作りこんだものかのどちらかしかなく。つまり用途毎に htmllib.HTMLParser そのものも含め全てサブクラスを作って使わなくてはなりません。そしてこの3個のクラス、機能が密着しすぎていて理解するにも改造するにも3個セットで扱わなくてはならないみたいですし。(formatter はそのままでかまわないようで、今回もそのまま使っていますが)

標準の実装で不都合な所は

  • リンクのあった場所に [番号] という形式の索引が入ってしまう
  • maxcol で勝手に整形されてしまう(そして全角半角のある日本語の文字に未配慮の上、hr 要素の長さの基準にもなっているので無限大に指定して整形を切る事も出来ない)
  • ul, ol 行頭の記号や符番が付加されない

といった所なのですが、どれもサブクラス化して書き換えないとそれを修正出来ない仕様になっていました。

Python 標準の HTML 関係のライブラリ、微妙な存在だなぁ。アプリケーションと言うには硬直しているし、サンプルと見るには特化しすぎだし。いっそ Webブラウザ丸ごとくらい入っていればそれはそれで納得するのですが。

2005年5月23日

Web広告の無理

クリック数で広告費を払うWeb広告って根本的な所で無理があるよね。そのクリックがサイト運営者の仕業ではなく第三者によるものとどうやって認識しているのだろう? それが可能ならばサイト運営者のそれを「ノーカウント」にすればいいだけの話だし、それが不可能だったらそれを根拠に契約破棄は出来ないわけで。最初から契約自体に無理がありそう。また契約に無関係な第三者が多重にクリックした場合も……ってこれに関してはアクセス解析と同じ方法でノーカウントに出来るから問題ないのか。@nifty 謹製のカウンタですらそれくらい出来ますしまさか Google にそれが出来ないわけも無し。(いや出来ないから問題なのか?)

Web広告って結局の所、アフィリエイトつまり実際の売り上げに応じて配当を出す「Web小売店」形式と、報酬ではなく「無料」の代償として固定の広告を出す「無料Webスペース」方式しか残らないでしょう。前者のアフィリエイトならば広告費用に比例して確実に売り上げも上がるわけですから無問題、後者の広告と使用料のバーター取引ならばサーバーにかかる負荷(=費用)に応じて広告もより見られている(逆に見られないならサーバーの負荷も低い)事になるわけですから妥当な契約。それ以外の「アクセス数」やら「クリック数」を基準にする形式や、逆に費用固定でアクセス数に関わらず広告を付ける形式は、結局のところ広告主とサイト運営者の間に対立的な利害関係が存在するので「善意」を前提にしなくてはならないわけで……。

もっとも今後Webがまともにデータをキャッシュするようになれば、(各経路毎に)一度だけ個々のサーバーにアクセスし、そのデータが(変更を通知するまで)ずっと共有されるようになるでしょうから、Web広告は元よりアクセスカウンター等も含めサイトのアクセス数を根拠にするあらゆるシステムは成立しなくなりそう。所詮は過渡的な問題。


それはさておき。竹熊氏のように自身が著作を出している人の場合は Google なんぞの適当に出すヤツの広告屋に甘んじず、自身の著作の売り上げを伸ばすための広告を出す側になるのが良いのじゃないかな。

つまり自署の本や雑誌が出た時に

blog のエントリーとして紹介を書いてこの記事にトラックバックしてくれた人の中から抽選で10名様にサイン入りのその本をプレゼント

てな感じのエントリーを作り、そこに紹介用に使える表紙画像や紹介文等を置いておくわけです。

本のような趣味的な物の場合、当然ながらシンパが居るわけで、そういう人達の「参加したい欲」を満たす事が宣伝にもなり同時にサービスにもなると思います。

2005年5月22日

我が家のお稲荷さま。④:柴村 仁

(サイドバーの「読んだもの」より移動)

  • 柴村 仁: 我が家のお稲荷さま。 4
    柴村 仁: 我が家のお稲荷さま。 4
    土地神私道」呼ばわりして暴走する六瓢たん萌え。
    「不思議な枝」を倒す人と「L字ロッド」の人との対決とかも、もっと盛り上がっても良さそうなものですがキャラがインフレ起こしてるよ。
    ……1人寂しくラブコメしようと奮闘する佐倉たん哀れ。(笑) 2004年4月27日 (★★)

続きを読む "我が家のお稲荷さま。④:柴村 仁" »

cococontents.py ver.1.0.2 ココログに「目次」を投稿[改改]

(バグフィックス版あります)

前のでも問題無いですが、現在の目次を作ったやつを上げておきます。

ダウンロード 20050521cococontents.py (22.8K)

改良したのは「目次の文書内リンクに関する細かい使い勝手のリファイン」及び「概要の表示の q 要素 から blockquote 要素 への変更」です。

概要については、前のように一行程度しか表示されないのでは(書いた当人の記憶の助けとしてはともかく)他人が読んで意味が無いだろうと思い、(小さい字ではなく)ちゃんとした大きさで複数行表示する事にしました。実際、一行しか表示されないココフラッシュでの概要表示はあまり役に立っていない気がします。ちゃんと表示するか(概要を0文字に指定して)タイトルだけにするかどちらかにした方が良いだろう、と。


んで、恒例(笑)のココログ・バグ。

・デザインを「標準テンプレート」中から指定された記事は「ブログのデザイン変更」でココログのデザインをそれ以外の物に変えると勝手に「タイプパッド風」のデザインへと変えられてしまう

今までリッチテンプレートばかり使っていたので気付かなかったです。

目次用にシンプルなデザインを指定しようと思い目次の投稿の時だけ標準テンプレートから選んで投稿し、また戻してみたらば……。仮に同時に一つしかデザインを使えないとしても「最後に使った標準テンプレート」とかならまだ分からないでもないのですが、何故か変わるのは「タイプパッド風」へ、なのですよね。謎。

それ以前に「記事ごとのデザインを記憶せず(トラックバックが付いた等で)再構築がかかった時、勝手にデザインが現在のココログに指定されている物に変更されてしまう」という挙動自体が拙い。

どうもココログ(TypePad?)って「頭良いやり方」をしようとして小技を使ったあげく結果「頭悪い代物」になってしまっている感じ。先の XML-RPC で取得される固定リンクのズレの問題にしても、HTMLに出力される固定リンクと XML-RPC で出力される固定リンクを別口で形成しているからズレが出ているわけで。凡人ならば同じ事をするルーチンは手抜きして使いまわしますから片方だけズレるという事にはならないはず。何か「頭良い」方法を使っているのでしょうね。デザインの挙動がおかしいのだって「あらかじめ作っておけば動的に生成するより負荷が低い」とか考えて、再構築を最小限に抑える工夫をしているが故の事かも。でもそのせいでデザインが不完全に適用される事が頻発。(デザイン自体は古いままなのにサイドバーだけ現在指定の項目&順番になってしまう等)

いつまでも直らないあの HASH(0x~) とか出るヤツなんて今ある不都合の内では無害な部類のものでしょう。個々のバグがどうこうというよりもバグへの対処がまともにされる体制に早くなって欲しいです。

2005年5月20日

剣の舞踏会

神無月の巫女 第十一話

最終回一つ前だけあっていい所で終わるし。

でもこの演出だと「千歌音ちゃんは悪い人に操られてるんだ」と(姫子にも視聴者にも)理解されてしまいそう。千歌音に射られて石にされた雑魚オロチの皆さんの声やら、千歌音とパラレルに描かれる(かのように見えてしまう)ソウマがオロチ化して行く所とか、何より謎の声が巫女同士の殺し合いを眺めながら「してやったり」とばかりに喜んでいる事とか、ミスリードさせそうな要素が多いですから。

千歌音の側は借り物の形でしか生きる術を知らなかったというシンプルな人格なので、彼女が「その言葉どこから借りて来たの?」と(視聴者サイドから見て)突っ込みたくなるような調子なのは納得する所ですが。

本当に問題なのは姫子の側。単純な「萎縮した人格」というだけでは収まらないし、実際それではこういう話にならない。見ていて「姫子という人間が分からない」という事。「視聴者代表」で済ませられる単純さのヒロインではないですから。

乙羽と千歌音の関係程度には(姫子にとって作中唯一の親しい同性の友人である)マコちゃんとの関係を描いておいて欲しかった気がします。ソウマとのそれに関しても彼の好意をどう受け止めているか(というか本質的な部分で拒否しているその部分の“何故”)が良く分からない。

千歌音にとって姫子でなければいけない理由はあっても、姫子にとって千歌音でなければいけない理由は無し(ただの「身に余る憧れの人」)。またマコちゃん的な他人を受け止め救う強さも 乙羽的な他人を助けないでは立ち行かない弱さも無いのが姫子の「萎縮」の本質でしょう。しかし姫子は千歌音を(本質的な意味では)理解も共感もしていないのに(ピントのずれた形であれ)千歌音に「執着」しているのですよね、他の部分ではひたすら「人生のお客さん」なのに。その辻褄の問題。

なまじ ツバサ&ソウマ兄弟あたりが短い描写であってもちゃんとそのへん押さえられているだけに、彼女らに関してのその理由(の記述)の無さが気になります。

次回最終回で納得できる形で決着が付くでしょうか。見るのが楽しみです。

cococontents.py ver.1.0.1 ココログに「目次」を投稿[改]

やはりあのままではヤバイので改良版を。(更なる改良版あります)

ダウンロード 20050520cococontents.py (22.4K)

使い方は先に書いた通り。

カテゴリー別目次 を実行日の前月末から2秒前、総目次 を同じく3秒前に指定して投稿するようにしましたので、目次の投稿が月頭の魔の9時間にたまたま当たる事は無くなりました。

普通の記事がその9時間に投稿された場合への対処はあえてしていません。実際試しに4月1日1時0分0秒の日時で作っておいた「hoge」というタイトルの記事への4月の目次からのリンクが死んでいます。これは「どうせ一覧として表示されているのだから一つ後の記事を表示してその上にあるナビゲーションから辿って戻って見てもらう方が変な対処をして後々またおかしくなるのより良いだろう」という判断から放置する事にしました。


……いやその個別記事での

 

« ココログの XML-RPC で文字化け | トップページ | Contents☯2005年4月 »

 

てな感じに付いてるナビゲーションに関してまた一つココログのバグを発見してしまったのですが。

・同一日時に指定して連続で投稿すると個別記事表示でのナビゲーション・リンクが最後の一つ以外は無視される

というもの。今の状態だと最後に投稿された「Contents☯美少女 2005年」のみが4月最後の実投稿である「ココログの XML-RPC で文字化け」と4月最後の1秒に指定して投稿した「Contents☯2005年4月」の間に存在し、残りの カテゴリー別目次 の投稿は迷子になってしまっています。勿論、個別の 固定リンク ではアクセスできますし、多分もう一度何かの都合で再構築されれば解消されるのじゃないかと思いますけれども、みっともない事は確か。


ああ、どんどんココログのバグに関して詳しくなってしまう。でも知識が増えても全然嬉しくないのはなぜ?

2005年5月19日

昨日指摘したココログのバグですが

ちょっと考えたより重大な欠陥のような気がして来ました。

そのバグは要するに「月が替わってからの(日本の場合だと)9時間に投稿された post の固定リンクを XML-RPC で取得すると、実際の固定リンクより一月前のフォルダーを指す嘘の固定リンク URL が返って来る」という事なのですが。

つまり、その9時間の間に先の「cococontents.py ココログに「目次」を投稿」を実行してしまうとその投稿される目次が全て壊滅するという事。うわぁ。ヤバイ。

もっとも目次自体は、例えば現在月別目次に適用しているような「月末の最後の秒に指定して投稿」等とプログラムを書き換えれば救えるように出来るわけですが、普通に投稿された記事がたまたまその9時間の内に入っていた場合にはどうにもできないですね。いや、URL がズレる法則は明確なのですから対症療法としてその9時間の分の投稿だけプログラム中で URL を一つ後のフォルダに書き変えればどうにか出来ますが……それはそれでいきなり直った時に困るわけで。あ~あ。

自分で使う分には「その9時間は投稿を避ける」(あるいは投稿後に時間をその範囲から書き換えて外す)とすれば済んでしまう話ですけれども……。

というわけなので、危険性をここに書き置きます。もしアレを使おうという人が居るなら自前でまともなプログラムに書き換えるなりその9時間を避けるなりして使ってやってくださいな。

……つーか、消しちゃった方が良いかな?

2005年5月18日

ココログの XML-RPC で「1日0時0分」に投稿すると…

バグります。先日のアレとは別口。

具体的には XML-RPC で返ってくる 'link' の値が実際の固定リンクの URL とずれる。( /YYYY/MM/ フォルダーの位置が一つ前の月のものになってしまう)

どうも月頭から UTC と日本ローカル時の差の分の時間の間、XML-RPC で取得するリンクが先月のフォルダーにずれこんでしまうという事のようです。

以下 Python でのテスト・スクリプト。2005年5月1日0時0分0秒に設定して投稿しているはずなのですが XML-RPC が返す 'link' の値は

http://tuchinoko.moe-nifty.com/oboegaki/2005/04/hoge.html

といったもので、5月ではなく4月のフォルダーを指しています。

import xmlrpclib, time, calendar, datetime, webbrowser
from account import *
### account.py
##URL = 'http://tuchinoko.moe-nifty.com/oboegaki/' # ココログ URL
##ACCOUNT = 'hoge' # ココログアカウント
##PASSWORD = '????????' # パスワード
def main(title, year, month, day):
    datetime_ = datetime.datetime(year, month, day)
    datetime_ -= datetime.timedelta(hours = 9) # 時差     server = xmlrpclib.ServerProxy('http://app.cocolog-nifty.com/t/api')
    for i in server.blogger.getUsersBlogs("", ACCOUNT, PASSWORD):
        if i["url"] == URL:
            blogid = i['blogid']
    content = {
        'title':title,
        }
    postid = server.metaWeblog.newPost(
        blogid, ACCOUNT, PASSWORD, content, xmlrpclib.boolean(False))
    server.mt.publishPost(postid, ACCOUNT, PASSWORD)
    post = server.metaWeblog.getPost(postid, ACCOUNT, PASSWORD)
#    webbrowser.open_new(post['link'])
    print u'%4d-%02d-%02d %02d:%02d:%02d' % tuple(postdate(post)[:6])
    print post['permaLink']
    content = {
        'title':title,
        'dateCreated':xmlrpclib.DateTime(datetime_.isoformat()+'Z'),
        }
    server.metaWeblog.editPost(
        postid, ACCOUNT, PASSWORD, content, xmlrpclib.boolean(True))
    server.mt.publishPost(postid, ACCOUNT, PASSWORD)
    post = server.metaWeblog.getPost(postid, ACCOUNT, PASSWORD)
    webbrowser.open_new(post['link'])
    print 'date: %4d-%02d-%02d %02d:%02d:%02d' % tuple(postdate(post)[:6])
    print 'URL :',post['permaLink']
##    raw_input('Enter to delete.')
##    print server.blogger.deletePost(
##        '',postid, ACCOUNT, PASSWORD, xmlrpclib.boolean(True))
def postdate(post):
    '''-> time.localtime'''     return  time.localtime(calendar.timegm(
        time.strptime(str(post['dateCreated']).rstrip('Z')+'UTC',
                      '%Y-%m-%dT%H:%M:%S%Z')))
main('hoge', 2005, 5, 1)

それと他に、

・XML-RPC での blogger.deletePost でファイルが削除出来ない

というのも見つけました。正確に言うと、管理画面の「管理→記事一覧」等も含めの表面上は見えなくなるがファイルとしては残っている。(「固定リンク」でアクセスすると存在したままなのが分かる)

もっともこちらは「バグではなくて仕様」なのかもしれませんが。

Contents☯ 《 総目次 》

続きを読む "Contents☯ 《 総目次 》" »

cococontents.py ココログに「目次」を投稿

(改良版あります)


カテゴリー別
月別の個別記事固定リンクへの目次(及びそれらの総目次)を作ってそれを記事として投稿する Python スクリプト。

ダウンロード 20050518cococontents.py (21.2K)

最初は「ローカルにファイルを作る」状態なので本当に目次をココログへ投稿したい場合はソース末尾の指示に従ってスクリプトを書き換えてください。

また、このスクリプトを実行するには他に account.py というスクリプトを作る必要がありますがそれについてもソースの頭の方に記載がありますのでその通りに。

いずれにしろある程度の知識がある事を前提としてのプログラムですので悪しからず。というかココログに大量の投稿を機械的に上げるスクリプトですのでそれなりの事を自力で出来る人のみが自己責任で使ってください。
(「ローカルにファイルを作る」までなら特に危険は無いですので気楽に試してみて欲しいですが)

補足: ココログベーシックでは使えない(?)はずの「概要」と「続きを読む」への書き込みを使っていますのであるいは不都合があるかもしれません。また目次に登録されるのは先月分までですので、一月に何度も実行しても無意味(過去記事を書換えていない限りは)です。

警告: 月頭すぐの投稿の扱いに重大な欠陥があります。

2005年5月16日

愛と死の招待状

神無月の巫女 第十話

ひたすら憧れる千歌音との関係しか気にしていない姫子にしても、自分のお人形としての姫子の事しか考えていない千歌音にしても、世界の危機とか関係無いですね。雑魚オロチ達の怨念ですら千歌音には無関係/無感動でしょう。(哀れだ)

後半の千歌音&姫子のかりそめの蜜月も……もったいない作品だなぁ。雑魚オロチ達とかメイド長の乙羽さんとか姫子の親友のマコちゃんとか、対比的に描けるキャラクターが揃っているのに千歌音&姫子を描くだけで力尽きているので肝心のその2人の特異性も描けていない。まあ対比としては普通の熱血君であるソウマが浮いている分だけで充分かもしれませんが彼の場合はただ哀れなだけで終わってるし。(笑)

最後の、涙うるうる流している姫子におっぱいポスト、って「心を切る」という意味づけなのでしょうけれどもただのセクハラにしか見えないのがこの作品のいい所(?)。名シーンではありますが。

しかし千歌音さん、姫子を味わい尽くすつもりですね。愛も憎しみも。この先どうなるのか、色々な意味で楽しみです。

2005年5月15日

A君(17)の戦争8 うしなうべきすべて:豪屋 大介

(サイドバーの「読んだもの」より移動)

イラスト:玲衣 HP Apple Jack

出版:富士見書房 富士見ファンタジア文庫

2005年5月14日

Python で投稿してみる test.

'''upload.py

Python で投稿してみるテスト
'''
import xmlrpclib
import xml.sax.saxutils
import datetime
import webbrowser
from account import *
### account.py
##URL = 'http://tuchinoko.moe-nifty.com/oboegaki/' # ココログ URL
##ACCOUNT = 'hoge' # ココログアカウント
##PASSWORD = '????????' # パスワード

s = xmlrpclib.ServerProxy('http://app.cocolog-nifty.com/t/api')
for i in s.blogger.getUsersBlogs("", ACCOUNT, PASSWORD):
    if i["url"] == URL:
        blogid = i['blogid']
print unicode(i['blogName'])
print u':改行の処理の指定一覧 ("mt_convert_breaks" に指定する)'
print u'(値 : 説明)'
for k,v in s.mt.supportedTextFilters()[0].items():
    print k, ':', v
category_dict = dict([(unicode(x['categoryName']), x['categoryId']) for x in
                      s.mt.getCategoryList(blogid, ACCOUNT, PASSWORD)])
description = xml.sax.saxutils.escape(
    unicode(file('upload.py').read(), 'utf-8').lstrip(u'\uffef'))
# この Python スクリプトそのものを description に
content = {
    'title':u'Python で投稿してみる test.',
    'description':u'<pre>%s</pre>' % description,
    'dateCreated':datetime.datetime.utcnow().isoformat()+'Z',
    'allow_comments':xmlrpclib.Boolean(False), # コメントの可否
    'mt_allow_pings':xmlrpclib.Boolean(True), # トラックバック受付の可否
    'mt_convert_breaks':'key', # 改行を変換しない
    'mt_excerpt':u'ココログベーシックでは使えないはずの『概要』も指定できるよう。',
    'mt_text_more':u'<hr /><p>(好きに流用してください)</p>',
    }
postid = s.metaWeblog.newPost(
    blogid, ACCOUNT, PASSWORD, content, xmlrpclib.Boolean(True))
s.mt.setPostCategories(
    postid, ACCOUNT, PASSWORD,[
        {'categoryId':category_dict[u'Python']},
        {'categoryId':category_dict[u'ウェブログ・ココログ関連']}])
s.mt.publishPost(postid, ACCOUNT, PASSWORD) # これしないとカテゴリーが反映されない
webbrowser.open_new(
    s.metaWeblog.getPost(postid, ACCOUNT, PASSWORD)['link'])

続きを読む "Python で投稿してみる test." »

2005年5月13日

日溜まりの君~黄泉比良坂へ

神無月の巫女 まとめて。

第六話『日溜まりの君

姫子萌え、という話。

第七話

見逃してしまいました。

第八話『銀月の嵐

 

ソウマ「何をした姫宮ー!!」

という話。あの、姫子のパンツが……。

第九話『黄泉比良坂へ

雑魚オロチ粛清の巻。

続きを読む "日溜まりの君~黄泉比良坂へ" »

2005年5月12日

国を憂う事…ではなくて自分語り

いまさっきいきなしTBが飛んできましたのでのぞいてきました。

ブログ名が「つちのこ、のこのこ。」っつうなんだかなめた名前の(失礼)BLOGで、中のぞいてみても僕とはちょっと違うタイプの人ですね。

『溶解する日本: つちのこ、のこのこ!? 私にゃ似合わないな。(W より

コメントどうもです。まあ私は多分無政府主義者に分類されちゃうタイプでしょうしね。自衛隊にしても物見遊山で見に行くだけですし。

現代の日本国にしても、アメリカ合衆国やら中華人民共和国やらと比べればいくぶんかマシとは言え、独自の利権を持った連中が国民やらそこからの税金やらといったリソースを自分達の都合でいいようにしているだけなのは同じ事。それを「国を私物化している」と憤慨するか「組織というのはすべからくそういうもの」と割り切って見るか、そこらへんからの違いかもしれません。

あるいは「国益などというものは存在せず、各人の私益だけが存在する」とディプロマティックに見てしまうのは、ボードゲームの頃からシミュレーション・ウォーゲームなんぞにはまっていたせいかも。ってメディアの影響のせいにしてみたり。(笑)

でもサンケイ出版(現:扶桑社に合併)の第二次大戦ブックス(赤本)にはまっていた時も、日本人のライターが(従軍していた人でもないのに)旧軍をして「わが軍」と記述するのに違和感を感じていたし。元からかな。

あくまで結果論として(相対的に)「いい政治と悪い政治」があるだけで、徳川の江戸幕府だろうが薩長の明治政府だろうがマッカーサーのGHQだろうが55年体制の自民党だろうが、自分達の都合で自分達のいいように政治をしていた事は変わらないだろう、と。そしてそれ自体はでも何でもない。

いずれにしても、国旗を敬う人国旗を焼く人も「国家という抽象概念に過度の重みを置いている」という点で同類に思えてしまいます。

もっとも国家というのが当分のあいだは「たまたまそこらへんに住んでいる人に各種行政サービスを提供する」というだけの存在、ではありえないのが現実でしょうが。

監禁調教とバッシング

国がちゃんと監禁調教しておかないから再犯に及ぶし。今度こそ保護観察なんぞにせず塀の中で一生監禁調教して欲しいですが……ここまで アタマオカシイ と精神鑑定で無罪にされそう。

しかし私もそういうゲームが好きだったりしますけど実践しようなんて思わないですがねぇ。面倒くさそうですし。また(仮想を含め)戦記物も好きですが傭兵になってイラク行こうとは思わないですし。仮想と現実は違いますよね。加害や被害が絡むものはもちろんの事、単なる恋の鞘当て程度の事でも現実になるとうんざりですし。フィクションだからこそ楽しめるものは多いと思う。

んですが、またぞろ仮想と現実の区別の付かないアホマスコミがバッシングしているよう。こいつら反論して来ない弱いもの虐めが好きですよね。マスゴミというヤツですね。

中韓が日本叩きしているのもそういうロジックなんだろうなぁ。日本だったらいくら叩いても大丈夫。敗戦以後は軍事的脅威を全く示さない無害な対象だから。手軽に叩ける安全な悪

ジャイアンスネ夫のび太
アメリカ イギリス 日本
中国 韓国 日本

たすけて! ドラえもん!!

2005年5月 9日

pyhighlight.py:Python ソースを HTML で色分け

コマンドライン・ツールなので ドラッグ・アンド・ドロップで Python プログラムにファイルを渡す の方法で使うと便利です。

以下がソースにして実行例。

# -*- coding: utf-8 -*-
u'''
pyhighlight.py

Python ソースの色分け表示 HTML 作成。
'''
import tokenize
import codecs
import keyword
from xml.sax.saxutils import escape

__author__ = 'kadotanimitsuru' __date__ = '2005-05-09' __license__ = 'public domain' __version__ = '1.0.0' _BUILTINS = dir(__builtins__)
_STYLE = {
    'definition':'color:#0000ff;',
    'builtin':'color:#900090;',
    'keyword':'color:#ff7700;',
    'STRING':'color:#00aa00;',
    'COMMENT':'color:#dd0000;',
    }
def _name(token_type, token_string, pre_token, definition):
    '''-> (name, definition)'''     name = tokenize.tok_name[token_type]     if name == 'NAME':
        if keyword.iskeyword(token_string):
            name = 'keyword'             if token_string in ('def', 'class'):
                return name, True         elif token_string in _BUILTINS and pre_token != '.':
            name = 'builtin'         elif definition:
            name = 'definition'     return name, False def _convert(file_):
    t = tokenize.generate_tokens(file_.readline)
    data = []
    old_row, old_col = (0,0)
    definition = False     pre_token = ''     for (token_type, token_string,
         (srow, scol), (erow, ecol), line) in t:
        name, definition = _name(
            token_type, token_string, pre_token, definition)
        pre_token = token_string
#        print '%3d,%2d %s\t%s' % (srow, scol, name, repr(token_string))
        token_string = escape(token_string)
        if name in _STYLE:
            token_string = u'<span style="%s">%s</span>' % (
                _STYLE[name], token_string)
        if old_row==srow:
            data.append(u' '*(scol-old_col))
        else:
            data.append(u' '*scol)
        data.append(token_string)
        old_row, old_col = erow, ecol
    return ''.join(data)
def html(filename, encoding='utf-8'):
    '''-> HTML body text'''     style = (         'overflow:auto;'         'border:2px inset silver;'         'padding:1ex;'         'line-height:125%;'         'font-size:small;'         'color:black;'         'background-color:white;' #        'font-family:Courier,monospace;' # フォントも IDLE のにするなら。         )     return u'<pre style="%s">\n%s</pre>' % (
        style,_convert(codecs.open(filename,'r',encoding)))
def make(filename, encoding='utf-8'):
    '''hoge.py -> hoge.py.html'''     h =  u'''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>%s</title>
</head>
<body>
%s
</body>
</html>'''
% (escape(filename), html(filename, encoding))
    file(filename+'.html','wb').write(h.encode('utf-8'))

if __name__=='__main__':
    import sys
    argv = sys.argv[1:]
    if argv:
        for i in argv:
            make(i)
    else:
        make('pyhighlight.py')
# 好きに流用してください。

たいへんな所はみんな Python 標準装備の tokenize モジュールがやってくれているので楽だ。(^o^;

XML-RPC のバグとココログの告知

例のバグですが今日アレを実行してみたらちゃんと実行出来ました。直った様子。

……本当に連休明けまで直らなかったなぁ。

お知らせココログでもやっと

4月26日より、下記のような現象が発生しておりました。

・XML-RPC経由でカテゴリや過去に書いた記事を取得すると文字化けする

現在は復旧しております。

って、直って初めて認知ですか。さすがは @nifty ……。


それはさておき。ココログ関係で RSS を出している所をまとめてみました。ココログ公式の情報をいち早く知りたい人はチェックです。もっとも @nifty じゃ、いち早く知ったところでどうなるもんでもない気もしますが。

RSS を出しているココログ関係のナニ

週刊ココログ・ガイド [RSS]

素敵なココログ、奇抜なココログ、ためになるココログ、アイデア豊かなココログ。「週刊ココログ・ガイド」では、さまざまなココログを毎週月曜日に5件づつ紹介していきます。

他人に読まれる blog を目指したいなら参考に。

トラックバック野郎 [RSS]

「トラックバック野郎」は、皆さんにココログの機能であるトラックバックを気軽に活用してもらおうという試みです。

書くネタに困ったら。

ココログブックス [RSS]

ココログには、たくさんの人が紡ぎだす魅力的なコンテンツがあふれています。そんなココログの面白さを、インターネットのなかだけにとどめず、書籍というかたちにし、世に広めていこうという新しい試み、それが「ココログブックス」です。

紙資源の無駄使いをしたくなったらここへ。

お知らせココログ [RSS]

読んで字の通り

ココログスタッフからのお知らせルーム [RSS]

ココログスタッフたちの、ココログです。

「お知らせココログ」と機能がかぶってますが、それと違いトラックバックを受け付けてくれるのでクレームはこちらに

ココログ・ツール集 [RSS]

ココログを楽しむために開発されたさまざまツールをご紹介します。

バージョンアップ報告がトラックバックで付いてたりする。

デザインのココログ [RSS]

受付:機能についてのご要望

ココログデザインの機能についての、ご意見ご要望を受け付けています。
「「もっとこうして」というトラックバックはこちらへどうぞ。

受付:テンプレートへのご要望

ココログデザインのテンプレートについての、ご意見ご要望を受け付けています。
「こんなテンプレートが欲しい!」というトラックバックはこちらへどうぞ。

ひっそりと要望受付け中

新着ココログ [RSS]

新着ココログ一覧です。

ココログを始めた頃の初々しい気持ちを思い出したい時はこちらに。

ココログ新着記事 [RSS]

ココログの新着記事一覧です。

この全発言の新着記事のヤツはココログの投稿量が多すぎて使いものになりません。他にカテゴリー毎の新着記事一覧の RSS があるので、興味のあるカテゴリーに絞って使った方が良いでしょう。

2005年5月 8日

HTML の div要素の階層を表示する

Python のスクリプト。ココログのデザインで CSS がどうかかっているのやら一見して分かりずらいので解析の助けにと作ってみたもの。div要素(の id属性class属性 )しか対象にしていないので一般的には使えないと思いますが。でもこれで色々なサイトを見てみるだけでも面白いかも。

ダウンロード 20050508divview.py (3.0K)

使い方はソースを読んでください。

いもうとレッスン ここは乙女の園:山口 昇一

(サイドバーの「読んだもの」より移動)

著者 HP 『HExAGON』
イラスト:みけおう HP PINK CHUCHU
出版:フランス書院 美少女文庫

2005年5月 7日

運転免許証更新と自動運転

5月6日は連休中に挟まれた平日。役所もやっているので中南信運転免許センターへ行き運転免許を更新してきました。

5年間無事故無違反なので優良運転者講習。特に手間も無く終了。適性検査対策としてメガネを新しくしたのですが免許証更新自体よりもそっちの手間の方が大きかったです。(どんどん目が悪くなってる~)

運転免許証更新
更新手数料 2,100円
講習手数料 700円
交通安全協会費 2,000円
4,800円

交通安全協会 の方は任意なわけですが。しかし「ついでに払ってもいいかな」と思ってしまう絶妙な価格設定。これが本来必要な費用の計 2,800円より高いと払うにためらってしまうでしょうが、それと比べちょっと安目なので「まあいいか」と思ってしまう。「払う」と伝えると「ありがとうございます」と(一応は)民間団体のおばちゃんである受付の人は言ってくれますし。まあ上のほうは不正しまくりな団体ですがこれは日本の天下り団体はみんなそうか……。構造的に存続している悪の内ではマシな方の部類でしょうか。

交通安全協会入会のおまけで

交通安全協会見舞金制度
シートベルト付けて死ぬと 10万円貰える保険
DuPont™ Sontara® マルチクロス 1枚
レーヨン製の布巾

なんてのも付いてきました。見舞金の方は存在自体を忘れそう。昔は安っぽいビニールの免許証入れをくれた気がしますが……布巾の方が実用的ですね。でもどうせなら あわてるな と印字された布巾にすればより交通安全っぽくなるのに。

それより気になるのは写真1枚付いたカード1枚作るだけなのに 2,100円もかかる 更新手数料 の方。講習手数料 の方はカラーの冊子3冊付いての値段だから(それ自体の必要性はともかくとして)まあ妥当な部類だと思うのですが。(しかし義務教育の教科書もそうだけど 不許複製 などにせず GFDL 等のフリー文書扱いに出来ないのか?)


それはともかく。21世紀にもなって電車であれ自動車であれ数十km/h で動く物体を人間が常に気を張ってコントロールしなくてはいけないというのは馬鹿馬鹿しいですよね。技術の進歩というのはこういう不毛な無駄を無くす事につかうべきなのに。鉄道と高速道路くらいは何とか出来ないのかな?

そもそも人間が運転しなくてはならない内は 原動機付き車両 ではあっても 自動 ではないと思うし。

2005年5月 5日

MSX MAGAZINE 永久保存版3 に CHAOS ANGELS 掲載、なのですが……

カオス開発に関して主にシナリオ・プログラム関係を担当していた小松氏は実家の松本に戻っていたため、ここ数年ほとんど連絡をとっていませんでした。今回の収録のためにアスキーさんから連絡をとってもらっていたところ、2年ほど前に急逝されていたと連絡があり、いまだに信じられなくてとても驚いています。

(MSX MAGAZINE 永久保存版3』 p019 続々・ゴキゲン 8bit ゲーム『カオスエンジェルズ』作者から一言 より)

ああ、なんという事でしょう。悲しい。つーか作者の小松浩章氏って地元松本の人だったのか。

「会話の相手を無くし壁の落書きで全ての情報を出す」という手段で(コンピュータ相手だと限界のある)対話の必要性そのものを回避してしまったという画期的な作品でした。その(ゲーム世界の)薀蓄垂れ流しな落書きテキストの楽しさ。ゲームに興味のある人なら外せない名作でしょう。

個人的にも、(初代)『Wizardry 狂王の試練場 』、(OMGの)『電脳戦機バーチャロン』、(Classic)『TRAVELLER』、(Chaosium BRPの)『Call of Cthulhu』、そして『Natural -身も心も-』『ゆきのかなた』と並び俺名作ゲームの一つです。

それがせっかく公式に市販されるようになったというのに……。

❀
冥福を祈ります。

参考リンク
ファンサイト: カオスエンジェルズのページ (ブロックさん忍法帖 内)
企画・原画:Y人 HP Y人's

5,000 count 到達

2月14日にアクセスカウンタを設置して丁度80日目の今日、5,000カウントになりました。

設置からの全体で平均すると62.5カウント/日になる計算になりますが当初は

2月14日に設置して今日で一週間。

カウントが175くらい行ったので 25カウント/日くらいになります。

(アクセスカウンターを [2月21日] より)

という感じでしたからペースがずっと上がっています。実際、最近の分を観察して見たらば 100カウント/日くらいな感じ。

ココログ自体を始めたのは去年の12月9日なので前回の調査の時点は開始から 74日目。今日は開始から 147日目ですからほぼ半分(発言数ベースだと 44/108 で約4割)、その時点で25カウント/日だったのが今は 100カウント/日と4倍くらいになっています。

ここで使っている @homepage のカウンターは過去ログも新規も構わずページ(のアクセスカウンターの画像)が表示された数を基準にカウントしているみたいですので、過去ログの増加に従って検索エンジンでヒットする率が増えたという事もあるのでしょうが……継続して見ている方も増えている?

そうであるなら、ありがたい事です。いや見る人が多くても少なくてもありがたさは変わらないですがだんだん萎んで行くよりは楽しいですしね。

2005年5月 4日

toroman.py 改 ver.1.1.0

ローマ字だとやはり とろまん・ぴ と読むのだろうか?

昨日のアレを改良しました。Python の機能を安直に使ってのローマ字変換。

今までと同じようにスクリプトを直接ココログの記事に貼り付けると新しくなったリッチテキストエディタは「改行を <br /> に」とか「空白を &nbsp; に」とか余計な事をしてくださるのですが、変わりに(?)好きな場所にファイルをアップロード出来るようにもなりましたのでスクリプトを直接上げる事にします。

ダウンロード 20050503toroman.py (3.3K) (ダウンロードしたら名前を toroman.py に変える事)

使い方は前と同じ。ついでにテスト用に作った Unicode 文字一覧作成スクリプトも上げておきます。

ダウンロード 20050503unichrlist.py (2.5K)

toroman.py と同じフォルダに入れて実行してください。するとそのフォルダに HTML を70個ほど作りますので注意です。

他の応用としては、

import urllib, toroman
CODEC = 'utf-8' u=urllib.urlopen('http://tuchinoko.moe-nifty.com/oboegaki/')
h=toroman.toroman(u.read().decode(CODEC))
u.close()
f = file('tuchinoko.html','w')
f.write(h.encode(CODEC))
f.close()

なんてすればそこらの HTML ページで試してみる事も。

2005年5月 2日

Python で安直にローマ字変換

ココログの固定リンクのファイル名もこれくらいはして欲しいよね。という願いを込めてローマ字変換モジュール。(バージョンアップ版有ります)

"""toroman.py"""
import unicodedata
import string

__author__ = "kadotanimitsuru"
__date__ = "2005-05-02"
__license__ = "public domain"
__version__ = "1.0.2"

ALNUM = unicode(string.ascii_letters+string.digits)
def toroman(text, romanonly=False, chinese_numeral=False):
    """It changes into a Roman alphabet."""
    d = ""
    for c in unicode(text):
        num = unicodedata.numeric(c, None)
        if num is not None:
            c = unicode(int(num))
        elif chinese_numeral:
            try:
                num = u"〇一二三四五六七八九".index(c)
            except ValueError:
                c = {u"十":u" ten ", # これはやりすぎかな。
                     u"百":u" hundred ",
                     u"千":u" thousand ",
                     u"万":u" ten thousand ",
                     u"億":u" hundred million ",
                     u"兆":u" trillion "}.get(c, c)
            else:
                c = unicode(num)
        d += c
    text = d
    d = ""
    for c in unicodedata.normalize("NFKC", text):
        if c not in ALNUM:
            s = unicodedata.name(c).split()
            if c.isspace():
                c = u" "
            elif s[0] == "CJK":
                if romanonly:
                    c = u" "
            elif unicodedata.category(c) in ("Lu","Ll","Lt","Lo"):
                if len(s) >= 2 and s[-2] == "SMALL":
                    c = s[-1].lower()
                else:
                    c = s[-1].capitalize()
            elif romanonly:
                c = u" "
        d += c
    return d
def tofilename(text):
    """It changes into a character string appropriate to the main file name."""
    a = toroman(text, True)
    return "_".join(a.strip().split()).lower()
if __name__=="__main__":
    while True:
        a = unicode(raw_input("text:").strip())
        if not a:break
        print "toroman   :",toroman(a, chinese_numeral=True)
        print "tofilename:",tofilename(a)
# 好きに流用してください。

example:

text:“Hello,World!”
toroman   : “Hello,World!”
tofilename: hello_world
text:つちのこ、のこのこ。
toroman   : TuTiNoKo、NoKoNoKo。
tofilename: tutinoko_nokonoko
text:な!なんだってぇ~!?
toroman   : Na!NaNDatuTee~!?
tofilename: na_nandatutee
text:かな漢字をローマ字に変換する。
toroman   : KaNa漢字WoRoーMa字Ni変換SuRu。
tofilename: kana_woro_ma_ni_suru
text:우리나라半万年の歴史
toroman   : URiNaRa半 ten thousand 年No歴史
tofilename: urinara_no
text:ПРОЛЕТАРИИ ВСЕХ СТРАН, СОЕДИНЯЙТЕСЬ!
toroman   : PeErOElIeTeAErII VeEsIeHa EsTeErAEn, EsOIeDeIEnYaITeIeEsSign!
tofilename: peeroelieteaerii_veesieha_esteeraen_esoiedeienyaiteieessign
text:七五三
toroman   : 753
tofilename: 
text:ギャフン
toroman   : GiyaHuN
tofilename: giyahun

2005年5月 1日

撲殺天使ドクロちゃん 5:おかゆ まさき

(サイドバーの「読んだもの」より移動)

著者 blog Re:今週のおかゆ
イラスト:とりしも HP UNPLANNED PLOT

Python Janken class

ジャンケンをクラスに。


import random

__author__ = "kadotanimitsuru"
__date__ = "2005-05-01"
__license__ = "public domain"
__version__ = "1.0.0"

class _Janken(object):
    def __str__(self):
        return self.name
    def __unicode__(self):
        return self.ja_name or unicode(self.name)
    def __int__(self):
        return self.int
    def __cmp__(self, other):
        if isinstance(other, self.win):
            return 1
        elif isinstance(other, self.lose):
            return -1
        elif isinstance(other, self.tie):
            return 0
        else:
            raise TypeError
class Goo(_Janken):
    def __init__(self):
        _Janken.__init__(self)
        self.name = "rock"
        self.ja_name = u"グー"
        self.int = 0
        self.win = Choki
        self.lose = Par
        self.tie = Goo
class Choki(_Janken):
    def __init__(self):
        _Janken.__init__(self)
        self.name = "scissors"
        self.ja_name = u"チョキ"
        self.int = 2
        self.win = Par
        self.lose = Goo
        self.tie = Choki
class Par(_Janken):
    def __init__(self):
        _Janken.__init__(self)
        self.name = "paper"
        self.ja_name = u"パー"
        self.int = 5
        self.win = Goo
        self.lose = Choki
        self.tie = Par
GOO = ROCK = Goo()
CHOKI = SCISSORS = Choki()
PAR = PAPER = Par()
def pon():
    return random.choice((GOO, CHOKI, PAR))
# 好きに流用してください。

example:

>>> import janken
>>> a = janken.pon()
>>> print a,unicode(a),int(a)
scissors チョキ 2
>>> print a > janken.GOO, a > janken.CHOKI, a > janken.PAR
False False True
>>> print a == janken.GOO, a == janken.CHOKI, a == janken.PAR
False True False
>>> print a < janken.GOO, a < janken.CHOKI, a < janken.PAR
True False False
>>> b = janken.pon()
>>> print b,unicode(b),int(b)
rock グー 0
>>> a.__cmp__(b)
-1
>>> print a > b, a == b, a < b
False False True

参考:ジャンケン文明論(李 御寧) ISBN:4-10-610111-4

サージャント・グルカ :谷 甲州

(サイドバーの「読んだもの」より移動)

イラスト:西口 司郎 株式会社SPOON(代表取締役社長)
谷甲州黙認FC 青年人外協力隊

hoge

こういう微妙な日時の投稿がヤバイわけだ。

« 2005年4月 | トップページ | 2005年6月 »

他のアカウント

ブログ妖精

  • ココロ

Affiliate

無料ブログはココログ