2003-02-07
λ. RHG
いちおう読了。読んで良かったです。だからといって、いきなり明日からRubyをハックできるようになるかと言ったら、そんな事は無いですが。……というか、正直、よくこれだけの物をメンテナンス出来てるよなぁ。ruby-devの常連さん達が如何に人間離れしてるか分かったような気がする。
λ. variance
O'Haskellでは全ての型構築子(type constructor)はvarianceを持っている。おそらく、subtypeの判定時にはCPLのCSL(Categorical Specification Language)と同様の計算を行っているはず。他にvarianceの概念を明示的に用いているものにはどんなものがあるだろうか?
O'Haskell | CSL | Charity |
---|---|---|
covariant | covariant (+) | positive |
contravariant | contravariant (-) | negative |
invariant | fixed-variant (T) | both |
novariant | free-variant (⊥) | neither |
2007-02-07 北方領土の日
λ. 『美しい国へ』 安部晋三
を読んだ。 案外良かったし、安倍首相の「こうしたい」という気持ちはわかる感じ。
読んでいて良くわからなかったのは天皇の国事行為に関する p.105-106 の以下の記述。「天皇に規定されているわけではない」というのは……
各国大使は、日本に赴任すると、皇居で行われる信任状棒呈式に臨む。東京駅もしくはホテルから、宮内庁差し回しの自動車か、馬車で参内するのだが、大抵の大使が馬車を選ぶそうである。棒呈式では、天皇が信任状を受け取られ、さらに外務大臣に授けられる。このときをもって大使が着任したとみなされるのである。
奥ゆかしい行事だが、法的裏付けは、憲法第七条九項の《外国の大使を接受すること》であり、天皇に規定されているわけではない。信任状を受け取るのは総理大臣でもよかったが、天皇の役割としたのは、占領下の吉田茂総理の英断だったといわれる。
あと、「年金は実はお得」という話については、割引率を考えず、異時点間の金額を単純に比較してるため、説得力に欠ける。
λ. ID3タグをCP1251から変換
пропагандаのオフィシャルサイトからMP3ファイルをダウンロードしてきたのだけど、ID3タグがCP1251で書かれていたらしく、iTunesのライブラリに追加したら文字化けしてしまった。仕方ないので簡単なスクリプトで直してみた。
iTunesからデータを取得する際に、CP1251の文字列をCP932(≒SHIFT_JIS)として扱ってUnicodeとの間で一度変換してることになるので、本当は何かまずい気がするが、動いているのでとりあえず気にしないことにする。
require 'win32ole' require 'iconv' def conv(track, key) WIN32OLE.codepage = WIN32OLE::CP_ACP s = track[key] s = Iconv.conv('utf-8', 'cp1251', s) WIN32OLE.codepage = WIN32OLE::CP_UTF8 track[key] = s end itunes = WIN32OLE.new('iTunes.Application') itunes.selectedTracks.each{|track| begin ['Artist', 'Album', 'Name'].each{|key| conv(track, key) } rescue => e puts e.inspect end }
【追記】 やはり、まずかった。 CP932として正しくないバイト列があった場合には変換がうまくいっていなかった。データをWIN32OLEを使ってiTunesから取得するのではなく、MP3ファイルのID3タグから直接読まないとまずいか。 id3libをラップした拡張ライブラリが幾つかあるのでそれを使おうと思ったが、cygwin版のrubyだとrequireした瞬間にrubyが落ちるっぽい。
仕方ないのでID3iconvというツールでMP3ファイルを直接変換した。 「java -jar ID3iconv-0.2.1.jar -e CP1251 *.mp3」などとする。 他には ID3Uni というのもあるようだ。
2008-02-07
λ. 正規表現における非包含オペレータの提案 by 田中哲
を読んだ。天泣記 (2008-01-11) より。いつもながらakrさんのこういうセンスは羨ましい。
これが役に立つ例はいくらでもあるとは思うが、最近遭遇したものだと「プレーンテキストをHTMLに変換する際にURLをアンカーにする」処理が直観的に書けそうだと思った。
実際に書いたコード:
def text2html(s) re = URI.regexp result = '' while m = re.match(s) result << CGI.escapeHTML(m.pre_match) uri = CGI.escapeHTML(m.to_s) result << %Q[<a href="#{uri}">#{uri}</a>] s = m.post_match end result << CGI.escapeHTML(s) result end
非包含オペレータがあるとこう書けそう:
def text2html(s) s.gsub(/(#{URI.regexp})|!(?:#{URI.regexp})/) { if $1 uri = CGI.escapeHTML($1) %Q[<a href="#{uri}>#{uri}</a>] else CGI.escapeHTML($2) end } end
おまけにtDiaryのString#make_linkのコード。 スペースやタブの処理もあるので単純に比較はできないけど、なんというか……
class String def make_link r = %r<(((http[s]{0,1}|ftp)://[\(\)%#!/0-9a-zA-Z_$@.&+-,'"*=;?:~-]+)|([0-9a-zA-Z_.-]+@[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+\.[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+))> return self. gsub( / /, "\001" ). gsub( /</, "\002" ). gsub( />/, "\003" ). gsub( /&/, '&' ). gsub( /\"/, "\004"). gsub( r ){ $1 == $2 ? "<a href=\"#$2\">#$2</a>" : "<a href=\"mailto:#$4\">#$4</a>" }. gsub( /\004/, '"' ). gsub( /\003/, '>' ). gsub( /\002/, '<' ). gsub( /^\001+/ ) { $&.gsub( /\001/, ' ' ) }. gsub( /\001/, ' ' ). gsub( /\t/, ' ' * 8 ) end end
2009-02-07
λ. 権利者団体が補償金制度に対し会見--Blu-ray課金を機に適正な見直しを
ブルーレイが補償金制度の対象になること自体は割とどうでも良いのだけど、「デジタル私的録画問題に関する権利者会議(Culture First推進91団体)」による声明「ブルーレイディスクの早期指定を求めます」にちょっと「アレ?」と思うところがあった。
なお、昨年6月に経産、文科両大臣の合意が発表され、またダビング10も実施されながら、約7カ月間も指定が実行されていないことについては、極めて異常な事態と言わざるを得ません。仄聞するところによれば、今回の政令案策定に関する経産、文科両省の調整過程において、「現行の録画補償金はアナログ放送の録画に限定したものである」との解釈が述べられ、その解釈に基づく制約を政令案に付すべきとの主張がされたようです。しかしながら、経産、文科両大臣の合意においては、今回の指定が、デジタル放送のコピールールであるダビング10の早期実現のための環境整備であるとのことがすでに明言されており、このような主張が行われること自体あり得ないことです。よって、今回文化庁から示された政令案につきましては、関係者が速やかに合意されるものと確信しております。
経産・文科両大臣の合意を理由に「このような主張が行われること自体あり得ないこと」と言われてもなぁ。
というのも、両大臣の合意がダビング10の早期実現のための環境整備であるのはその通りなのだけど、その合意についての平成20年6月17日大臣会見概要を読むと、あくまで暫定的措置としてブルーレイを私的録画補償金制度の対象に追加するというだけでしかなく、そのこと自体がデジタル放送の録画が本来補償金制度の対象であるか否かを含意することは無いように思えるので。
大体、2008年6月17日(火)デジタル私的録画問題に関する権利者会議28団体と社団法人日本芸能実演家団体協議会加盟61団体(賛同団体)自身が「ブルーレイディスクを現行補償金制度の対象とすることについて」への声明文発表では「デジタル放送に着目したものであるか明確でない」と言ってたわけで。