日記
だいぶわかってきた。「脱いだ服を床に散らかさない」は「~しない」だから「具体的に実行可能な行動」ではない。「脱いだ服をきちんと片付ける」は「きちんと」が定義されていないのでやっぱり「具体的に実行可能な行動」ではない。「脱いだ服は洗濯機の上の籠に入れる」ならOK。次に「服を脱いだら(即)籠に入れる」だと、籠に入っていない服が見つかったときに「失敗」になって無力感を味わうのだけど、「脱いだ服は籠に入れる」なら籠に入っていない服が見つかったときにそれを籠に入れて「成功」させ達成感を味わうことができる。
「毎日○○する」は1日失敗するだけで達成不可能になる。だから三日坊主になりやすい。「できたら○○する。○○した回数を数える」なら1回1回達成できる。とりあえずもうすぐ13時になるのに家でこんなことを書いている僕は「午前中にラボに行く」を目標にした方がいいかも。でも金曜から大阪だしなぁ。
「Rubyを勉強する」は具体的に実行不可能なので、「rubyco(るびこ)の日記を読む」にすれば…と読み始めてしまった。だからラボに行くのが先だって。冷房のついている部屋から出て駅まで行くのが無意識の足かせになっている。というか11~13時に出勤するので余計暑い。もっと早く行けばそんなに暑くないはずなんだけどね。
西尾泰和のブログ: PythonとRubyでデフォルト引数の評価されるタイミングは違う。
よし、出かけるとするか。
__ ラボに来たけど誰もいない…。
Rubyはメソッド名に?や!を使えていいなぁ。以上以下があっていいなぁ。
下の二つは同じことなのかなぁ。
class Foo
def Foo.bar
end
end
class Foo
end
def Foo.bar
end
全部が大文字じゃなくても、頭が大文字なだけで定数になるのですね。
しまった、もう5時半。何してるんだ自分。(Rubyの勉強?)
__ なんだか、4月の終わりにYouTubeが仕様変更をしたので昔僕が作ったダウンロード用スクリプトは使えなくなったそうです。新しい仕様では、tとlというパラメータが埋め込んであるので、何らかの方法でそれを取得しないといけません。
とりあえずダウンロードするスクリプトを書いてみたのですけど、ファイル名にタイトルが埋め込まれるようにしたらWindowsではUTF-8のままで書くと化けてSJISで書くと読め、Macではその逆。うーん。MacのFLVプレイヤーは知らないしWindowsで見るならSJISで出力すべきか。MacのPythonでSJIS出力をしようとするとSJISなんてエンコーディングは知らないと怒られたのでJapaneseCodecsをインストール。あー。MacでSJISのファイルを作成しようとしたらIOErrorになっちゃった。何か良くない文字でも含まれているのかな。仕方がない、urllib.quoteで変換しておいて、後で元に戻すとします。
さて、これで特定のキーワードで新しく見つかったまだダウンロードしていない動画を全部ダウンロードするスクリプトができたので、cronか何かで定期的に走らせればラーメンズのコントをもれなく自動的に収集できるはずです。
__ rubyco(るびこ)の日記 - マルチリンガルなシソーラス検索。欲しいなぁ。でも、データファイルを誰が整備するのか、を考えるとWikiを使ってデータ収集する方がいいのかも。Wikiに同じ内容のコードをいろいろな言語で書くと、その例えばPython部分のコードは"mltfind_python"という文字列がどこかに埋め込まれたページに出力され、同じ内容のコードをRubyで書いたページなどへのリンクが張られる、と。簡単にできそう。あー、でもその場合の問題点はGoogleがたとえ引用符で囲っていても"string->list"をstringとlistに分けちゃうことか…。検索をGoogleに丸投げではダメってことか…。 勝手に区切ったりしない全文検索を使うべきなんだろうなぁ。記号だらけだから。
帰ってきました。おなかいたい。
適当なWikiを改造したら簡単だ…と思ったのですけど、適当なWikiってどれでしょう…。うーん。大した機能は必要ないので作る方が手っ取り早いのかも。とりあえずDocutils: Documentation Utilitiesをインストールしてみました。reST rendererのソースがこれ。短い。
出力されたHTMLから正規表現で切り出したらいいと思っていたけども、ツリーで扱うことも簡単にできました。
XREA.COMにはdocutilsが入っておらず、docutilsを全部コピーしてみたけど「romanをimportできない」と怒られました。やれやれ。
あ、roman.pyだけdocutilsの中じゃなくてsite-packagesの中にありました。コピーしたら動きました。pywiki_0.01.py reStructuredTextを試せますが、書き換え保存はできません。
ここまでは簡単だったけど、編集がかぶったときの処理とか考えるの面倒だなぁ。
タイミング: 基本的なRatcliff-Obershelpアルゴリズムは、予想の3乗、最悪の場合でも2乗となります。SequenceMatcher オブジェクトは、最悪のケースに比べて4倍、予想される挙動は、シーケンスの中にどのくらいの要素があるのか(最良なのは一列の場合)、というややこしい状況に依存しています。
4.4 difflib -- Helpers for computing deltas
Timing: The basic Ratcliff-Obershelp algorithm is cubic time in the worst case and quadratic time in the expected case. SequenceMatcher is quadratic time for the worst case and has expected-case behavior dependent in a complicated way on how many elements the sequences have in common; best case time is linear.
ふむ。2番目の文はややこしいなぁ。 SequenceMatcher has expected-case behaviorで、behavior depend on how many elements the sequences have in commonなんですよね。 データに依存しているということはわかるけど、日本語にはどう訳せばわかりやすいのかな…。
計算量: 基本的な Ratcliff-Obershelp アルゴリズムは、最悪の場合はデータ量の3乗のオーダーの時間がかかりますが、通常は2乗のオーダーになると予想されています。 SequenceMatcher は最悪の場合に2乗のオーダーの時間がかかり、 通常の挙動は与えられた配列の中のどれだけの要素が共通であるかによって複雑に変化します。最良の場合の計算量は線形です。
僕はやりたいときにやりたいだけを訳しているだけので気が楽だけど、こんな文章を訳さないといけないとは翻訳チームの人も大変ですね。
__ difflib.Differ().compare(a, b)で簡単に文字列の比較ができますね。