« 2005年4月 | トップページ | 2005年6月 »
今は 200 count/日くらいかな?
5,000 count 行くのに80日かかったというのに、5,000 から 10,000 になるのには26日しかかからず。もの凄い加速っぷり。
(サイドバーの「読んだもの」からの移入やら目次の投稿やらで水増しされてはいますがそれを抜かせば)発言ペースそのものは昔と比べ特に上がったわけでもなし。どうしてこんなに増えたのか謎です。時事的なネタもそれなりに書いているので、それが Google あたりに引っかかっているのでしょうか。
定期的に読んでいる人(もしおられたらご愛読ありがとうございます)はあまり居そうも無い性格の blog ですし。
(サイドバーの「読んだもの」より移動)
著者の筑波大学研究室:古田研究室ホームページ
出版:筑摩書房 ちくま学芸文庫
マコちゃんまた美味しい所を取って行くし。
そのマコちゃんと、ソウマ&ツバサを描いているためギリギリで面目が立ってはいますが、やはり薄皮一枚深い所に行けなかった感じ。やりたい事は良く分かるのですがアルティメットガールのそれのようには上手くまとめられていないです。ストーリー上で矛盾/葛藤を提示出来なかったですから最後だけ思い入れいっぱいに「語られ」てしまっても困るだけですが、そういう事以前に、
- 千歌音
- 「神無き月のオロチの災いを鎮めるために、命と想いを引き換えに、正しい世界に戻すの」
もちろんこれは(設定上は世界の問題ですがテーマ上では)彼女の自己実現の問題なわけですが。神(アイドル・超越者・支配者)にもなり切れず自らの命(輪廻が約束されているのだから安い命だ)をダシにして想いを無理やりでっち上げる(その想いは手を伸ばせばすぐに手に届く所にいつでもあったものなのに)。そしてそうやって無理やりでっち上げた想いすら「思い出」という形に畳み込まないと消化出来ない。難儀というか哀れというか。
それを象徴して言えば「なぜ千歌音はマコちゃんになれなかったのだろう」という事になるわけですけれどもそれは視聴者に投げられてしまいましたし、そして最後に……という事で結局思考停止できてしまう。でも作者にはネガティブな意味でのドツボに嵌った永遠の呪縛を描いているつもりはないのでしょう。そうだとするなら完全に失敗。まあアルバム(今までの姫子との思い出)がフェイクである部分をちゃんと押さえているだけでも褒めるべきかもしれませんが。
でも姫子の
「ハッピー・バースデー」
は奇麗でしたね。
おおもね満足はしています。というかこの制作陣にこれ以上は求められないのだろうなぁ。それが会社の制約なのかテレビ放映の制約なのか監督やシナリオライターの限界なのかまでは分からないですけれども。原作も読んでみるかな。
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位の経済力。上手くやったものです。自民党&平和憲法万々歳。属国島国根性の勝利(?)です。
……でもアメリカが左前になったらどうなるか分からないですけど。共産中国も南北朝鮮も深入りするだけ馬鹿を見る相手ですし。東南アジア&台湾は当然として、ロシア極東との交流もこれからどんどん重要になって行くでしょう。今度は上手くやれると良いですね。
(サイドバーの「読んだもの」より移動)
イラスト:濱元 隆輔 HP
原作:m.o.e.
出版:MediaWorks 電撃文庫
(サイドバーの「読んだもの」より移動)
変換する 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 はそのままでかまわないようで、今回もそのまま使っていますが)
標準の実装で不都合な所は
といった所なのですが、どれもサブクラス化して書き換えないとそれを修正出来ない仕様になっていました。
Python 標準の HTML 関係のライブラリ、微妙な存在だなぁ。アプリケーションと言うには硬直しているし、サンプルと見るには特化しすぎだし。いっそ Webブラウザ丸ごとくらい入っていればそれはそれで納得するのですが。
クリック数で広告費を払うWeb広告って根本的な所で無理があるよね。そのクリックがサイト運営者の仕業ではなく第三者によるものとどうやって認識しているのだろう? それが可能ならばサイト運営者のそれを「ノーカウント」にすればいいだけの話だし、それが不可能だったらそれを根拠に契約破棄は出来ないわけで。最初から契約自体に無理がありそう。また契約に無関係な第三者が多重にクリックした場合も……ってこれに関してはアクセス解析と同じ方法でノーカウントに出来るから問題ないのか。@nifty 謹製のカウンタですらそれくらい出来ますしまさか Google にそれが出来ないわけも無し。(いや出来ないから問題なのか?)
Web広告って結局の所、アフィリエイトつまり実際の売り上げに応じて配当を出す「Web小売店」形式と、報酬ではなく「無料」の代償として固定の広告を出す「無料Webスペース」方式しか残らないでしょう。前者のアフィリエイトならば広告費用に比例して確実に売り上げも上がるわけですから無問題、後者の広告と使用料のバーター取引ならばサーバーにかかる負荷(=費用)に応じて広告もより見られている(逆に見られないならサーバーの負荷も低い)事になるわけですから妥当な契約。それ以外の「アクセス数」やら「クリック数」を基準にする形式や、逆に費用固定でアクセス数に関わらず広告を付ける形式は、結局のところ広告主とサイト運営者の間に対立的な利害関係が存在するので「善意」を前提にしなくてはならないわけで……。
もっとも今後Webがまともにデータをキャッシュするようになれば、(各経路毎に)一度だけ個々のサーバーにアクセスし、そのデータが(変更を通知するまで)ずっと共有されるようになるでしょうから、Web広告は元よりアクセスカウンター等も含めサイトのアクセス数を根拠にするあらゆるシステムは成立しなくなりそう。所詮は過渡的な問題。
それはさておき。竹熊氏のように自身が著作を出している人の場合は Google なんぞの適当に出すヤツの広告屋に甘んじず、自身の著作の売り上げを伸ばすための広告を出す側になるのが良いのじゃないかな。
つまり自署の本や雑誌が出た時に
blog のエントリーとして紹介を書いてこの記事にトラックバックしてくれた人の中から抽選で10名様にサイン入りのその本をプレゼント
てな感じのエントリーを作り、そこに紹介用に使える表紙画像や紹介文等を置いておくわけです。
本のような趣味的な物の場合、当然ながらシンパが居るわけで、そういう人達の「参加したい欲」を満たす事が宣伝にもなり同時にサービスにもなると思います。
(サイドバーの「読んだもの」より移動)
(バグフィックス版あります)
前のでも問題無いですが、現在の目次を作ったやつを上げておきます。
ダウンロード 20050521cococontents.py (22.8K)
改良したのは「目次の文書内リンクに関する細かい使い勝手のリファイン」及び「概要の表示の q 要素 から blockquote 要素 への変更」です。
概要については、前のように一行程度しか表示されないのでは(書いた当人の記憶の助けとしてはともかく)他人が読んで意味が無いだろうと思い、(小さい字ではなく)ちゃんとした大きさで複数行表示する事にしました。実際、一行しか表示されないココフラッシュでの概要表示はあまり役に立っていない気がします。ちゃんと表示するか(概要を0文字に指定して)タイトルだけにするかどちらかにした方が良いだろう、と。
んで、恒例(笑)のココログ・バグ。
・デザインを「標準テンプレート」中から指定された記事は「ブログのデザイン変更」でココログのデザインをそれ以外の物に変えると勝手に「タイプパッド風」のデザインへと変えられてしまう
今までリッチテンプレートばかり使っていたので気付かなかったです。
目次用にシンプルなデザインを指定しようと思い目次の投稿の時だけ標準テンプレートから選んで投稿し、また戻してみたらば……。仮に同時に一つしかデザインを使えないとしても「最後に使った標準テンプレート」とかならまだ分からないでもないのですが、何故か変わるのは「タイプパッド風」へ、なのですよね。謎。
それ以前に「記事ごとのデザインを記憶せず(トラックバックが付いた等で)再構築がかかった時、勝手にデザインが現在のココログに指定されている物に変更されてしまう」という挙動自体が拙い。
どうもココログ(TypePad?)って「頭良いやり方」をしようとして小技を使ったあげく結果「頭悪い代物」になってしまっている感じ。先の XML-RPC で取得される固定リンクのズレの問題にしても、HTMLに出力される固定リンクと XML-RPC で出力される固定リンクを別口で形成しているからズレが出ているわけで。凡人ならば同じ事をするルーチンは手抜きして使いまわしますから片方だけズレるという事にはならないはず。何か「頭良い」方法を使っているのでしょうね。デザインの挙動がおかしいのだって「あらかじめ作っておけば動的に生成するより負荷が低い」とか考えて、再構築を最小限に抑える工夫をしているが故の事かも。でもそのせいでデザインが不完全に適用される事が頻発。(デザイン自体は古いままなのにサイドバーだけ現在指定の項目&順番になってしまう等)
いつまでも直らないあの HASH(0x~)
とか出るヤツなんて今ある不都合の内では無害な部類のものでしょう。個々のバグがどうこうというよりもバグへの対処がまともにされる体制に早くなって欲しいです。
最終回一つ前だけあっていい所で終わるし。
でもこの演出だと「千歌音ちゃんは悪い人に操られてるんだ」と(姫子にも視聴者にも)理解されてしまいそう。千歌音に射られて石にされた雑魚オロチの皆さんの声やら、千歌音とパラレルに描かれる(かのように見えてしまう)ソウマがオロチ化して行く所とか、何より謎の声が巫女同士の殺し合いを眺めながら「してやったり」とばかりに喜んでいる事とか、ミスリードさせそうな要素が多いですから。
千歌音の側は借り物の形でしか生きる術を知らなかったというシンプルな人格なので、彼女が「その言葉どこから借りて来たの?」と(視聴者サイドから見て)突っ込みたくなるような調子なのは納得する所ですが。
本当に問題なのは姫子の側。単純な「萎縮した人格」というだけでは収まらないし、実際それではこういう話にならない。見ていて「姫子という人間が分からない」という事。「視聴者代表」で済ませられる単純さのヒロインではないですから。
乙羽と千歌音の関係程度には(姫子にとって作中唯一の親しい同性の友人である)マコちゃんとの関係を描いておいて欲しかった気がします。ソウマとのそれに関しても彼の好意をどう受け止めているか(というか本質的な部分で拒否しているその部分の“何故”)が良く分からない。
千歌音にとって姫子でなければいけない理由はあっても、姫子にとって千歌音でなければいけない理由は無し(ただの「身に余る憧れの人」)。またマコちゃん的な他人を受け止め救う強さも 乙羽的な他人を助けないでは立ち行かない弱さも無いのが姫子の「萎縮」の本質でしょう。しかし姫子は千歌音を(本質的な意味では)理解も共感もしていないのに(ピントのずれた形であれ)千歌音に「執着」しているのですよね、他の部分ではひたすら「人生のお客さん」なのに。その辻褄の問題。
なまじ ツバサ&ソウマ兄弟あたりが短い描写であってもちゃんとそのへん押さえられているだけに、彼女らに関してのその理由(の記述)の無さが気になります。
次回最終回で納得できる形で決着が付くでしょうか。見るのが楽しみです。
やはりあのままではヤバイので改良版を。(更なる改良版あります)
ダウンロード 20050520cococontents.py (22.4K)
使い方は先に書いた通り。
カテゴリー別目次 を実行日の前月末から2秒前、総目次 を同じく3秒前に指定して投稿するようにしましたので、目次の投稿が月頭の魔の9時間にたまたま当たる事は無くなりました。
普通の記事がその9時間に投稿された場合への対処はあえてしていません。実際試しに4月1日1時0分0秒の日時で作っておいた「hoge」というタイトルの記事への4月の目次からのリンクが死んでいます。これは「どうせ一覧として表示されているのだから一つ後の記事を表示してその上にあるナビゲーションから辿って戻って見てもらう方が変な対処をして後々またおかしくなるのより良いだろう」という判断から放置する事にしました。
……いやその個別記事での
てな感じに付いてるナビゲーションに関してまた一つココログのバグを発見してしまったのですが。
・同一日時に指定して連続で投稿すると個別記事表示でのナビゲーション・リンクが最後の一つ以外は無視される
というもの。今の状態だと最後に投稿された「Contents☯美少女 2005年」のみが4月最後の実投稿である「ココログの XML-RPC で文字化け」と4月最後の1秒に指定して投稿した「Contents☯2005年4月」の間に存在し、残りの カテゴリー別目次 の投稿は迷子になってしまっています。勿論、個別の 固定リンク ではアクセスできますし、多分もう一度何かの都合で再構築されれば解消されるのじゃないかと思いますけれども、みっともない事は確か。
ああ、どんどんココログのバグに関して詳しくなってしまう。でも知識が増えても全然嬉しくないのはなぜ?
ちょっと考えたより重大な欠陥のような気がして来ました。
そのバグは要するに「月が替わってからの(日本の場合だと)9時間に投稿された post の固定リンクを XML-RPC で取得すると、実際の固定リンクより一月前のフォルダーを指す嘘の固定リンク URL が返って来る」という事なのですが。
つまり、その9時間の間に先の「cococontents.py ココログに「目次」を投稿」を実行してしまうとその投稿される目次が全て壊滅するという事。うわぁ。ヤバイ。
もっとも目次自体は、例えば現在月別目次に適用しているような「月末の最後の秒に指定して投稿」等とプログラムを書き換えれば救えるように出来るわけですが、普通に投稿された記事がたまたまその9時間の内に入っていた場合にはどうにもできないですね。いや、URL がズレる法則は明確なのですから対症療法としてその9時間の分の投稿だけプログラム中で URL を一つ後のフォルダに書き変えればどうにか出来ますが……それはそれでいきなり直った時に困るわけで。あ~あ。
自分で使う分には「その9時間は投稿を避ける」(あるいは投稿後に時間をその範囲から書き換えて外す)とすれば済んでしまう話ですけれども……。
というわけなので、危険性をここに書き置きます。もしアレを使おうという人が居るなら自前でまともなプログラムに書き換えるなりその9時間を避けるなりして使ってやってくださいな。
……つーか、消しちゃった方が良いかな?
バグります。先日のアレとは別口。
具体的には 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 でファイルが削除出来ない
というのも見つけました。正確に言うと、管理画面の「管理→記事一覧」等も含めの表面上は見えなくなるがファイルとしては残っている。(「固定リンク」でアクセスすると存在したままなのが分かる)
もっともこちらは「バグではなくて仕様」なのかもしれませんが。
(改良版あります)
カテゴリー別と月別の個別記事固定リンクへの目次(及びそれらの総目次)を作ってそれを記事として投稿する Python スクリプト。
ダウンロード 20050518cococontents.py (21.2K)
最初は「ローカルにファイルを作る」状態なので本当に目次をココログへ投稿したい場合はソース末尾の指示に従ってスクリプトを書き換えてください。
また、このスクリプトを実行するには他に account.py というスクリプトを作る必要がありますがそれについてもソースの頭の方に記載がありますのでその通りに。
いずれにしろある程度の知識がある事を前提としてのプログラムですので悪しからず。というかココログに大量の投稿を機械的に上げるスクリプトですのでそれなりの事を自力で出来る人のみが自己責任で使ってください。
(「ローカルにファイルを作る」までなら特に危険は無いですので気楽に試してみて欲しいですが)
補足: ココログベーシックでは使えない(?)はずの「概要」と「続きを読む」への書き込みを使っていますのであるいは不都合があるかもしれません。また目次に登録されるのは先月分までですので、一月に何度も実行しても無意味(過去記事を書換えていない限りは)です。
ひたすら憧れる千歌音との関係しか気にしていない姫子にしても、自分のお人形としての姫子の事しか考えていない千歌音にしても、世界の危機とか関係無いですね。雑魚オロチ達の怨念ですら千歌音には無関係/無感動でしょう。(哀れだ)
後半の千歌音&姫子のかりそめの蜜月も……もったいない作品だなぁ。雑魚オロチ達とかメイド長の乙羽さんとか姫子の親友のマコちゃんとか、対比的に描けるキャラクターが揃っているのに千歌音&姫子を描くだけで力尽きているので肝心のその2人の特異性も描けていない。まあ対比としては普通の熱血君であるソウマが浮いている分だけで充分かもしれませんが彼の場合はただ哀れなだけで終わってるし。(笑)
最後の、涙うるうる流している姫子におっぱいポスト、って「心を切る」という意味づけなのでしょうけれどもただのセクハラにしか見えないのがこの作品のいい所(?)。名シーンではありますが。
しかし千歌音さん、姫子を味わい尽くすつもりですね。愛も憎しみも。この先どうなるのか、色々な意味で楽しみです。
(サイドバーの「読んだもの」より移動)
イラスト:玲衣 HP
出版:富士見書房 富士見ファンタジア文庫
'''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'])
いまさっきいきなしTBが飛んできましたのでのぞいてきました。
ブログ名が「つちのこ、のこのこ。」っつうなんだかなめた名前の(失礼)BLOGで、中のぞいてみても僕とはちょっと違うタイプの人ですね。
『溶解する日本: つちのこ、のこのこ!? 私にゃ似合わないな。(W』 より
コメントどうもです。まあ私は多分無政府主義者に分類されちゃうタイプでしょうしね。自衛隊にしても物見遊山で見に行くだけですし。
現代の日本国にしても、アメリカ合衆国やら中華人民共和国やらと比べればいくぶんかマシとは言え、独自の利権を持った連中が国民やらそこからの税金やらといったリソースを自分達の都合でいいようにしているだけなのは同じ事。それを「国を私物化している」と憤慨するか「組織というのはすべからくそういうもの」と割り切って見るか、そこらへんからの違いかもしれません。
あるいは「国益などというものは存在せず、各人の私益だけが存在する」とディプロマティックに見てしまうのは、ボードゲームの頃からシミュレーション・ウォーゲームなんぞにはまっていたせいかも。ってメディアの影響のせいにしてみたり。(笑)
でもサンケイ出版(現:扶桑社に合併)の第二次大戦ブックス(赤本)にはまっていた時も、日本人のライターが(従軍していた人でもないのに)旧軍をして「わが軍」と記述するのに違和感を感じていたし。元からかな。
あくまで結果論として(相対的に)「いい政治と悪い政治」があるだけで、徳川の江戸幕府だろうが薩長の明治政府だろうがマッカーサーのGHQだろうが55年体制の自民党だろうが、自分達の都合で自分達のいいように政治をしていた事は変わらないだろう、と。そしてそれ自体は悪でも何でもない。
いずれにしても、国旗を敬う人も国旗を焼く人も「国家という抽象概念に過度の重みを置いている」という点で同類に思えてしまいます。
もっとも国家というのが当分のあいだは「たまたまそこらへんに住んでいる人に各種行政サービスを提供する」というだけの存在、ではありえないのが現実でしょうが。
国がちゃんと監禁調教しておかないから再犯に及ぶし。今度こそ保護観察なんぞにせず塀の中で一生監禁調教して欲しいですが……ここまで アタマオカシイ と精神鑑定で無罪にされそう。
しかし私もそういうゲームが好きだったりしますけど実践しようなんて思わないですがねぇ。面倒くさそうですし。また(仮想を含め)戦記物も好きですが傭兵になってイラク行こうとは思わないですし。仮想と現実は違いますよね。加害や被害が絡むものはもちろんの事、単なる恋の鞘当て程度の事でも現実になるとうんざりですし。フィクションだからこそ楽しめるものは多いと思う。
んですが、またぞろ仮想と現実の区別の付かないアホマスコミがバッシングしているよう。こいつら反論して来ない弱いもの虐めが好きですよね。マスゴミというヤツですね。
中韓が日本叩きしているのもそういうロジックなんだろうなぁ。日本だったらいくら叩いても大丈夫。敗戦以後は軍事的脅威を全く示さない無害な対象だから。手軽に叩ける安全な悪。
ジャイアン | スネ夫 | のび太 |
---|---|---|
アメリカ | イギリス | 日本 |
中国 | 韓国 | 日本 |
たすけて! ドラえもん!!
コマンドライン・ツールなので ドラッグ・アンド・ドロップで 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^;
例のバグですが今日アレを実行してみたらちゃんと実行出来ました。直った様子。
……本当に連休明けまで直らなかったなぁ。
お知らせココログでもやっと
4月26日より、下記のような現象が発生しておりました。
・XML-RPC経由でカテゴリや過去に書いた記事を取得すると文字化けする
現在は復旧しております。
って、直って初めて認知ですか。さすがは @nifty ……。
それはさておき。ココログ関係で RSS を出している所をまとめてみました。ココログ公式の情報をいち早く知りたい人はチェックです。もっとも @nifty じゃ、いち早く知ったところでどうなるもんでもない気もしますが。
素敵なココログ、奇抜なココログ、ためになるココログ、アイデア豊かなココログ。「週刊ココログ・ガイド」では、さまざまなココログを毎週月曜日に5件づつ紹介していきます。
他人に読まれる blog を目指したいなら参考に。
「トラックバック野郎」は、皆さんにココログの機能であるトラックバックを気軽に活用してもらおうという試みです。
書くネタに困ったら。
紙資源の無駄使いをしたくなったらここへ。
読んで字の通り
ココログスタッフたちの、ココログです。
「お知らせココログ」と機能がかぶってますが、それと違いトラックバックを受け付けてくれるのでクレームはこちらに。
ココログを楽しむために開発されたさまざまツールをご紹介します。
バージョンアップ報告がトラックバックで付いてたりする。
ココログデザインの機能についての、ご意見ご要望を受け付けています。
「「もっとこうして」というトラックバックはこちらへどうぞ。
ココログデザインのテンプレートについての、ご意見ご要望を受け付けています。
「こんなテンプレートが欲しい!」というトラックバックはこちらへどうぞ。
ひっそりと要望受付け中
新着ココログ一覧です。
ココログを始めた頃の初々しい気持ちを思い出したい時はこちらに。
ココログの新着記事一覧です。
この全発言の新着記事のヤツはココログの投稿量が多すぎて使いものになりません。他にカテゴリー毎の新着記事一覧の RSS があるので、興味のあるカテゴリーに絞って使った方が良いでしょう。
Python のスクリプト。ココログのデザインで CSS がどうかかっているのやら一見して分かりずらいので解析の助けにと作ってみたもの。div要素(の id属性 と class属性 )しか対象にしていないので一般的には使えないと思いますが。でもこれで色々なサイトを見てみるだけでも面白いかも。
ダウンロード 20050508divview.py (3.0K)
使い方はソースを読んでください。
(サイドバーの「読んだもの」より移動)
著者 HP 『HExAGON』
イラスト:みけおう HP
出版:フランス書院 美少女文庫
5月6日は連休中に挟まれた平日。役所もやっているので中南信運転免許センターへ行き運転免許を更新してきました。
5年間無事故無違反なので優良運転者講習。特に手間も無く終了。適性検査対策としてメガネを新しくしたのですが免許証更新自体よりもそっちの手間の方が大きかったです。(どんどん目が悪くなってる~)
更新手数料 | 2,100円 |
講習手数料 | 700円 |
交通安全協会費 | 2,000円 |
計 | 4,800円 |
---|
交通安全協会 の方は任意なわけですが。しかし「ついでに払ってもいいかな」と思ってしまう絶妙な価格設定。これが本来必要な費用の計 2,800円より高いと払うにためらってしまうでしょうが、それと比べちょっと安目なので「まあいいか」と思ってしまう。「払う」と伝えると「ありがとうございます」と(一応は)民間団体のおばちゃんである受付の人は言ってくれますし。まあ上のほうは不正しまくりな団体ですがこれは日本の天下り団体はみんなそうか……。構造的に存続している悪の内ではマシな方の部類でしょうか。
交通安全協会入会のおまけで
なんてのも付いてきました。見舞金の方は存在自体を忘れそう。昔は安っぽいビニールの免許証入れをくれた気がしますが……布巾の方が実用的ですね。でもどうせなら あわてるな
と印字された布巾にすればより交通安全っぽくなるのに。
それより気になるのは写真1枚付いたカード1枚作るだけなのに 2,100円もかかる 更新手数料 の方。講習手数料 の方はカラーの冊子3冊付いての値段だから(それ自体の必要性はともかくとして)まあ妥当な部類だと思うのですが。(しかし義務教育の教科書もそうだけど 不許複製
などにせず GFDL 等のフリー文書扱いに出来ないのか?)
それはともかく。21世紀にもなって電車であれ自動車であれ数十km/h で動く物体を人間が常に気を張ってコントロールしなくてはいけないというのは馬鹿馬鹿しいですよね。技術の進歩というのはこういう不毛な無駄を無くす事につかうべきなのに。鉄道と高速道路くらいは何とか出来ないのかな?
そもそも人間が運転しなくてはならない内は 原動機付き車両 ではあっても 自動車 ではないと思うし。
カオス開発に関して主にシナリオ・プログラム関係を担当していた小松氏は実家の松本に戻っていたため、ここ数年ほとんど連絡をとっていませんでした。今回の収録のためにアスキーさんから連絡をとってもらっていたところ、2年ほど前に急逝されていたと連絡があり、いまだに信じられなくてとても驚いています。
(『MSX MAGAZINE 永久保存版3』 p019 続々・ゴキゲン 8bit ゲーム『カオスエンジェルズ』作者から一言 より)
ああ、なんという事でしょう。悲しい。つーか作者の小松浩章氏って地元松本の人だったのか。
「会話の相手を無くし壁の落書きで全ての情報を出す」という手段で(コンピュータ相手だと限界のある)対話の必要性そのものを回避してしまったという画期的な作品でした。その(ゲーム世界の)薀蓄垂れ流しな落書きテキストの楽しさ。ゲームに興味のある人なら外せない名作でしょう。
個人的にも、(初代)『Wizardry 狂王の試練場 』、(OMGの)『電脳戦機バーチャロン』、(Classic)『TRAVELLER』、(Chaosium BRPの)『Call of Cthulhu』、そして『Natural -身も心も-』『ゆきのかなた』と並び俺名作ゲームの一つです。
それがせっかく公式に市販されるようになったというのに……。
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 のカウンターは過去ログも新規も構わずページ(のアクセスカウンターの画像)が表示された数を基準にカウントしているみたいですので、過去ログの増加に従って検索エンジンでヒットする率が増えたという事もあるのでしょうが……継続して見ている方も増えている?
そうであるなら、ありがたい事です。いや見る人が多くても少なくてもありがたさは変わらないですがだんだん萎んで行くよりは楽しいですしね。
ローマ字だとやはり “とろまん・ぴ” と読むのだろうか?
昨日のアレを改良しました。Python の機能を安直に使ってのローマ字変換。
今までと同じようにスクリプトを直接ココログの記事に貼り付けると新しくなったリッチテキストエディタは「改行を <br /> に」とか「空白を に」とか余計な事をしてくださるのですが、変わりに(?)好きな場所にファイルをアップロード出来るようにもなりましたのでスクリプトを直接上げる事にします。
ダウンロード 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 ページで試してみる事も。
ココログの固定リンクのファイル名もこれくらいはして欲しいよね。という願いを込めてローマ字変換モジュール。(バージョンアップ版有ります)
"""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)
# 好きに流用してください。
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
(サイドバーの「読んだもの」より移動)
ジャンケンをクラスに。
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))
# 好きに流用してください。
>>> 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
(サイドバーの「読んだもの」より移動)
イラスト:西口 司郎 株式会社SPOON(代表取締役社長)
谷甲州黙認FC 青年人外協力隊