Powered by t2b
前回のときは予算枠を間違えてて仕切り直した分。見積とって管財課へ。boss からも Win7 機が 1 台欲しい、というリクエストがあった。これに HDD と DVD drv を足して使っていただけばいいかな。...
・バス (家〜川崎) 200 円 ・川崎〜大井町 160 円 ・大井町〜国際展示場 320 円 ・国際展示場正門〜新橋 370 円 ・新橋〜新川崎 290 円
午前体力回復に勤め、京浜東北線〜りんかい線で 12:00 ころ現地着。低い方が BA なコンビネーションゲージを物色。13:00 ギリギリに講演会場へ。みごとに満席。すばらしい。...
Powered by t2b
こんなもんかな。
Powered by t2b
武井さんに推薦されて買ってみたのを病床(笑)にて本日読了。雑誌で見かけるサイモン・クーパーのコラムとは違い、データを元にした分析が主内容。重回帰分析をツールに、チームの勝率が年俸総額と対応していること、...
朝の時点で 37.0℃、午前に 3h 寝て昼食べて測ったら 36.6℃、2h 寝て測ったら 36.0℃。ということでほぼ復帰した。まだ喉の調子がちょっと悪いが、明日はなんとか出ていけるかな。...
Powered by t2b
読んだ。
Debianのバグレポート(Bug#588125)によると、こんな具合いになることがわかった。
$ gem1.9.1 list /usr/lib/ruby/1.9.1/rubygems/source_index.rb:68:in `installed_spec_directories': undefined method `path' for Gem:Module (NoMethodError)
Ruby 1.9.2とRubyGems 1.3.7の組み合わせで、どちらもパッケージを利用している。RubyGemsのコードは、この場合、Ruby 1.9.2に含まれているものではなく、RubyGems 1.3.7からのものが使われている。Gem.pathがないっていうのはなかなか興味深いことだなあとちょっと調べてみた。
$ ruby1.$ ruby1.9.1 -ve 'p Gem.path' ruby 1.9.2dev (2010-07-30) [i486-linux] ["/home/akira/.gem/ruby/1.9.1", "/usr/lib/ruby/gems/1.9.1"]
特に問題ない。次。
$ ruby1.9.1 -e 'require "rubygems"; p Gem.path' /usr/lib/ruby/1.9.1/rubygems/source_index.rb:68:in `installed_spec_directories': undefined method `path' for Gem:Module (NoMethodError) [...]
おや。
$ ruby1.9.1 -e 'require "rubygems"' /usr/lib/ruby/1.9.1/rubygems/source_index.rb:68:in `installed_spec_directories': undefined method `path' for Gem:Module (NoMethodError) [...] from /usr/lib/ruby/1.9.1/rubygems.rb:839:in `searcher' from /usr/lib/ruby/1.9.1/rubygems.rb:478:in `find_files' from /usr/lib/ruby/1.9.1/rubygems.rb:982:in `load_plugins' from /usr/lib/ruby/1.9.1/rubygems.rb:1138:in `<top>' from <internal:lib/rubygems/custom_require>:29:in `require' from <internal:lib/rubygems/custom_require>:29:in `require' from -e:1:in `<main>'
おやおや。
$ ruby1.9.1 -e 'p Gem.path; begin; require "not exist"; rescue LoadError; end; require "rubygems"; p Gem.path' ["/home/akira/.gem/ruby/1.9.1", "/usr/lib/ruby/gems/1.9.1"] ["/home/akira/.gem/ruby/1.9.1", "/var/lib/gems/1.9.1"]
おやおやおや。
ある状況でGem.pathが消えてしまうらしいことがわかった。このあたりでRuby 1.9.2に入っているRubyGemsと単体で配布されているものとのdiffをとったりもして、どうやらこういうことらしいとわかった。
$ ruby1.9.1 -e 'p Gem.path; Gem::QuickLoader.remove; require "rubygems"; p Gem.path' ["/home/akira/.gem/ruby/1.9.1", "/usr/lib/ruby/gems/1.9.1"] ["/home/akira/.gem/ruby/1.9.1", "/var/lib/gems/1.9.1"]
回避策としてはとりあえずはこれでいい。ただ、どうしてこういう結果になるのかを把握するまでには、ここからさらにけっこうな時間がかかった。-d付きで実行したりデバッガ使ったり。printfデバッグしているつもりが表示内容がまずかったせいで別の例外を起こしているのにしばらく気付かなかったり。
ようやくわかったところによると、こういう流れがあるようだ。
まず「require 'rubygems'」がどこかで(たとえばgemコマンドの中で)行われてrubygems.rbが読み込まれる。このrubygems.rbはRubyGems 1.3.7由来のものである。
rubygems.rbは内部で「require 'rubygems/defaults/operating_system'」としているのだが、このoperating_systemというのはシステム上にない(*)。ここでRuby 1.9.2の「require」はRubyGemsが置き換えた後のものであることを思い出す。したがってrubygems/defaults/operating_system.rb(や.so)がなければ、RubyGemsの機構を使ってこれを救済できないか試みられる。
ところで、今問題にしている環境では、RubyGemsはRubyGems 1.3.7由来であり、Ruby 1.9.2に含まれるものではなかった。しかしながら、この時点で動作している「require」はRuby 1.9.2に含まれるRubyGemsに由来するものなのである。これはRubyインタプリタが内部に持っているgem_preludeの中にあって、$LOAD_PATH上にあるrubygems/custom_require.rb(=RubyGems 1.3.7由来)のそれとは動作が異なる。
ではそれによって何が起こるのかというとGem.try_activateが呼び出される。その実体はGem::QuickLoader.try_activateであり、これもRuby 1.9.2に由来する。このコードはGem::QuickLoader.load_full_rubygems_libraryを呼び出し、その先でGem::QuickLoader.removeが呼び出される。そうしてgem_preludeに由来するGem関係の何もかもを忘れ去ろうとする。
module QuickLoader
@loaded_full_rubygems_library = false
def self.remove
return if @loaded_full_rubygems_library
@loaded_full_rubygems_library = true
class << Gem
undef_method(*Gem::GEM_PRELUDE_METHODS)
end
remove_method :const_missing
remove_method :method_missing
Kernel.module_eval do
undef_method :gem if method_defined? :gem
end
end
[...]
end
さて、このremove、そもそもどうして呼び出されたのかというと「require "rubygems"」がきっかけとなって内部的に行われた「require "rubygems"」による。removeは、本来のRubyGemsがロードされるべき場面で使用されるはずのものであるが、この状況ではすでにrubygems.rb(RubyGems 1.3.7由来)が読み込まれてしまっている。したがって、removeした後で行われるに違いないと思われていたGem以下の再定義はなされない。
そうしてGem.pathがなくなってしまう。
この問題はRuby 1.9.2だけで構成されていれば起きることはない。というのも、Ruby 1.9.2に含まれるrubygems.rbは、その先頭で次のようなことをしている。
gem_disabled = !defined? Gem unless gem_disabled # Nuke the Quickloader stuff Gem::QuickLoader.remove end
この記述はRubyGems 1.3.7に含まれるrubygems.rbにはない。
Ruby 1.9.2だけから構成されていれば、上のストーリーの最初の「require 'rubygems'」の時点でgem_preludeに由来するコードは消し去さられ、フルセットのRubyGemsが読み込まれことになる。また、RubyGems 1.3.7に由来するrubygems.rbの先頭に同じ記述を加えた場合、同じように最初の「require 'rubygems'」の時点でgem_preludeに由来するコードは消し去られる。
いずれのケースでも、問題の発端となる「require 'rubygems/defaults/operating_system'」の時点で動作するのはgem_preludeに由来する「require」であるのに変わりはないが、removeの効果は一度だけしか現れない(@loaded_full_rubygems_library)ためGem.path消失問題が起きることはない。
(*) なお、operating_systemがシステム上にないのは特に問題ない。以下のようにLoadErrorをrescueしていて、そのファイルがなければなくても構わないというコードになっている。
begin # Defaults the operating system (or packager) wants to provide for RubyGems. require 'rubygems/defaults/operating_system' rescue LoadError end
この話とは直接的には関係ないけれど、今回の調査をしている中でRuby 1.9.2の-dオプションが地味に便利になっていることに気付いた。
$ ruby1.9.1 -d -e 'require "rubygems"' [...] /usr/lib/ruby/1.9.1/rubygems.rb:630: warning: method redefined; discarding old path <internal:gem_prelude>:43: warning: previous definition of path was here [...] <internal:lib/rubygems/custom_require>:29: warning: loading in progress, circular require considered harmful - /usr/lib/ruby/1.9.1/rubygems.rb [...]
大変ありがたいことに今年もRuby会議の動画配信があったのでこの三日間はそれなりに時間をとって見るようにした。以下は雑他なメモなど。主に自分向け。
前田さんの。[録画]
オープンクラスの後から定義をいじれる(メソッドを再定義できるなど)という点に、その影響の範囲を限定する仕組みを加える提案。面白いというかほしい。クラスボックス――と呼ばれていたが、実はクラスボックスとは違うものだったらしいという話がキーノートでちらっと出ていた。何て呼べば? で、たとえばこういう例。
class X def foo; puts "X"; end end module A def foo; print "A -> "; super; end end module B def foo; print "B -> "; super; end end module C overlay_module X, A overlay_module X, B X.new.foo # 「B -> A -> X」と表示される end
このようなoverlay_moduleを実装し、それを使って(ここでいうところの)classboxを実装している。わずか47行だとか。(必要となるcaller bindingも別に実装。)ネストしたメソッド定義の仕組みについて、定義されるメソッドの有効範囲をネストの内側だけに限定するよう改良。test-allにパス!
stdioまわりの話。知識としては持っているはずなのに、へー、ほーと思ってしまう。話をきくと一つのメソッドが配慮のかたまりだということがよく分かる。まあ、こうして、いつの間にかダメになっていくんだなあと。後半急ぎ足になったけどそちらも興味深そうであった。結局、というのもなんだが、デザインの話になっていく。重要なんだ。
Unix使っていると、こういったstdioだとか、あと端末だとか、そういうところに何度か戻ってくることがあるように思う。だんだん理解の深さが変わっていったり、あるいは角度が変わっていたりする。がっちりきっちり理解していないと困る、といわけでも実際にはない。「こういうものだから」という態度でなんとかやりくりすることも少なくなくて、その辺はコストのかけ方のバランスではあるのだけど。まあ、ちょっと離れているとかんどころを忘れちゃってたりするし。
まつもとさん。[録画]
メソッドをコピーするmixの提案。あれば欲しそうなな。難しい点、要検討が必要な点もあるようだけど。
でもこれが入るとincludeと混ぜるなキケンっぽい。あるいは単に混ぜられないか。(質疑のやり取りかすると後者っぽいかな。)で、そうなると移行期にはinclude用とmix用、それぞれにライブラリができてしまってそれらは混ぜるなキケン、てなことにならないのかな? と思った。どうもmix導入するなら移行をすすめたい感じだったのだけど、ホントにincludeはいらなくなるのだろうか。質疑では定数用名前空間としてmoduleを用いるケースについてmixだけではめんどうなんじゃないか、という点が指摘されていたが、それだけってこともないような気がする。
名前空間といえば、今のRubyでmoduleが名前空間のように使われているがあれがイヤだという意見もあった。高井さん? かな。時間がかかりそうなので後でどこかで、ってなっていたけど、普段気にしたこともないようなところだったのでどういう話だったのかが気になる。こういうのは現場にいないとなかなか興味を満たすことができないんだな。っていうか、気になったらことはその日のうちにつかまえるくらいの気持ちで行かないとってことか。
黒魔法の話。[録画]
かと思ったけど、そうでもなかったみたい。このあたりで作業しながらだったので後半あまり見られていないのだけど。
見てた範囲でいうと、メタプログラミングをやったことないよっていう人や、Railsのコードを読んでみようかなっていう人によさそうな内容。助走にちょうどよい感じ。基本的なところから丁寧に説明があるようだった。そのまま雑誌記事とかになるとうれしそうな。と思ったが、本が出てるんだった。本の中ではどこから始まって、どういうつっこみ方をしているのだろうか。というわけで
メタプログラミングRuby[amazon]は近いうちに買おう。(すでに品薄みたいだ。)
messagepack/messagepack-rpc @frsyuki - 単純に面白い。便利そう。気にはなっていたんだけど〜というプロダクトの一つで、だけどもついこのあいだkumofs経由で触れたくらいで、という感じだった。標準添付にできれば! という話も出ていて、たしかにそうなるとうれしそう。でもリリース間隔が短い感じがするので、標準添付になるとそのあたりのスピード感の違いがどうなるか。 [プレゼン資料]
babushka @ben_h - 早口でちょっとわからなかったけどキーワードだけでも気になる。test-driven sysadmin for rubyists。後で調べてみたところ、システムの状態を調査しながら定められた管理作業を行ようなツールのようだった。test-drivenというのは状態の調査結果に応じてっていうあたりなのだろうか。まだ読み切れていないのだけど、バラツキのある状態でのセットアップなんかには便利なのかも。変な例だけどハンズオンでセットアップ〜な場面とか。なかなか面白そうなので後で少し動かしてみようかと。babushka.meにデモビデオがある。コードはgithub。
ReVIEW @takahashim - ReVIEW自体には興味があることはあるが手を出すところまでは。LT本題のほうにも関心をもちかけたのだが、会社の業務としてやってくっていう話だそうなので、まあ、品質とかそういった面で恩恵?を受けられるのかな? というところ。とちぎで森田さんとしゃべったあたりのことが今でも欲しいなあと思ってはいるんだよな。
Lingo @KazkiMatz - デモに期待してたのだけど時間切れで残念。 開発者さんのblogに発表資料やデモビデオがあるので後でそれを見た。ビデオがあるので後でそれを見た。やっぱり自分で使って試してみたい。が、これサービスとして提供されるんだろうかしら。もしそうなら情報の取り扱いがどうなるが気になる。lingo-proj.com
VIMのほうで発表していた人がyokohama.vimを開催するのだとか。これ→Yokohama.vim #0。VIM使いではぜんぜんないのだけどちょっと行ってみようかしら。見てるだけになりそうだけど。
VIMのためのスーパー補完システムってことでいいのかな? 資料とコード。なんかすごそう。Ruby向けで機能が不十分なところがあるそうで、なんとかなんないかなあという話も。これも試してみないとな。
RICOHの方による発表。[録画] @suzumura_ss
quanpで使っている分散ストレージシステムCastoroの紹介。事前にコードをながめた人によるとNFSで何かやってるっぽいね? という話があったのだけど、要するにAPI的なものの他にファイルシステムからのアクセスが可能になっているということのようだった。これはこれでうれしい場面はたしかにありそう。(もちろんquanpには必要な機能だったわけだし。)遅延レプリケーションをするために最初のpeerにはRAIDが必要になる。この遅延具合いを調整することはできるのかしら。できるのならアプリケーション側で待つとかも可能なのかなと。まあ、それはそれでどうなんだってことかも。
Castoroがあきらめたものの一つにidの一意性というようなのが挙げられていたけど、ちょっとよくわからなかった。ストレージ上でidが重複するってどういう状況なのかな? アプリケーションが正しいidを知っていれば大丈夫っていう話だったが。
あとpeerからgatewayにmulticastしてたのはgatewayが複数いるからなのかな? オンエアではプロセス構造を再確認できなかったのでちょっとわからなかった。……ので確認したところ、複数いるようだ。clientはgateway〇ちの中からどうやって自分のgatewayを選ぶのだろう(ここはmulticastじゃなかったような…… どうだっけ?)。という意味では設定関係がどうなっているのか気になってくる。peer追加とか。
資料を見返すなり、コードを見るなり、かな。
いやおもしろかった。全文検索で使った自前のストーレージシステムというのが、OODBを昇華させたものということで、かなり気になる。すでに出てるやつ、ではないのだよね? きっと。
ささださんのところの学生さん。[録画]
リアルタイムに計測結果を見られるのはすごくわかりやすい。ただ動かすためにはRuby本体にパッチが必要ということで、すぐにどうこうということではなさそう。1.9.3に入るといいなーという感じのようなので期待。とりあえず今の段階でのコードをgithubに上げてくれという意見。コードが出てきたら試してみたいかな。
三日目の日曜はさすがに動画を見るのに目が疲れてきてしまって後で見るモードに。ぐるんがー[録画]は見ておかなきゃ。試しておきたいものもいくつか。忘れないうちに。いきおいがなくならないうちに。
中継のなかった部屋がいくつもある。まあ全部は無理だろうし、一部でもあるだけありがたい。ただまあそうなるとやはり現場へって感じだが、うーん、チケットを買う時点でどれくらい内容がわかってるんだっけ? COOKPADのんとか盛り上がっていたようだなあ。
たくさん考え、たくさん笑い、最後はちょっとしんみりしながら(あの場面で見送るスタッフたちは反則)、初参加のRubykaigi 2010が終了。
各講演の映像はRubykaigiスタッフのご尽力で素早く公開済みで、優れた報告・記事・日記も多数出稿されているようなので、中身についてはそちらをご参照。
感謝。公私両面でRuby関係者には、翻訳・執筆・監修・レビューア・そしてもちろんプログラミング言語やライブラリ、とお世話になっているので、上司にかけあって株式会社トップスタジオがゴールドスポンサーのうちの1社に。苦労しながら持ってきたパンフは内容が来場者とミスマッチなのでほとんど掃けなかったけど、それでもお持ちになられた方々には深く御礼。
『My Job Went to India』『情熱プログラマー』著者のChad Fowlerさんと『情熱プログラマー』合同サイン会。直前にちょっとしか話せなくて残念(akrさんの「Unix修正主義」講演がおもしろくて見ていたらギリギリになってしまった)。『情熱プログラマー』サイン会は多数の方々にお越しいただいて感激。またこういう良い本を作りたいなと強く思う。
Conflicts & Resolutions。
内省。素晴しいスピーカーはたくさんいらっしゃったけれども、印象深いのはやはり角谷さん。出力トラブルで一向に始められなくてアワアワしている間も皆が笑顔で見守っている、というのは角谷さんキャラならでは。講演内容は映像をご覧いただくとして、ビート感にあふれるトークと座禅を組んでいるかのような張り詰めた静寂という動静のコントラストが、聴衆に情熱と哲学、鼓舞と熟考を与える。角谷さんとビジョンを共有しているという感覚(角谷さんが悪徳霊媒師とかじゃなくて本当に良かった!)。あまり書くと卜部さんの言われるとおりになってしまうのでこのくらいで。
出会い。Matzさんや修吾さん、かずひこさん、今井さんといった旧交のある方々だけでなく、nari3さん、hsbtさん、たださん、レオさん、松田さん、高井さん、もろさん、Rockyさん、……ごめん、名前を挙げきれないたくさんの人々とお会いして短いながらもお話。誰もが素敵な個性と情熱を持ち、最近ちょっとテンション低めだった私に大きな大きな元気玉。
分解と再構築。今回のRubykaigiに参加してみて、1998年〜2000年頃のLinuxコミュニティで見られたパッション、若手とベテランのほど良い混合、という既視感を今のRubyのコミュニティに感じる。残念ながら、そういったLinuxコミュニティのほとんどは世代の新陳代謝の失敗や、目的の不明瞭化、つまらない内紛といった形でもう残っていない。
Rubyコミュニティがそういう残念な結末を迎えなければよいが、と秘かに憂いていたら、クロージングにおいて高橋さんから、現状の体制のRubykaigiを来年で一旦終えてみる——皆が何をできるかを考えてみる機会を作る、という宣言。継続して喝采を受けてきたことを終わりにするというのは(仮に煽りだとしてもそれが公式発表であるという面で)非常な勇気のいる決断だったと思う。Linux World/ExpoやLinux Conferenceとは背景やしがらみも異なるので同一視はできないだろうが、継続せんがための継続に縛られて誰かが燃え尽きていったり、誰のためであるかがわからなくなったりするのは、「楽しむ」ことがテーゼのLinuxあるいはRubyの世界において本質を見失うこと。
とはいえ、今のRubyコミュニティにはさほど悲観することはないだろう。Rubyは楽しい気分でドライブできるプログラミング言語であり、(柴田さんの述べたように)開発とユーザの世界的なコミュニティのつながりを支援するツールとしてGitHubが存在し、開発者の多数が日本語を解するから「英語が苦手で…」などとつまらないエクスキューズをする必要もない。新たな形での日本RubyKaigi Next Generationをやろうという人もきっと出てくる(それは自分かもしれないし、あなたかもしれない)。
一番のへたくそ。正直に言えば、Rubyの深層を味わい批評する方々の会話を拝見するにつけ新米Rubyユーザとしてはアウェイ感を覚えないことはないんだけれども、それはきっと今が「一番のへたくそでいろ」(『情熱プログラマー』)ということなんだろう。グループで自分が一番のへたくそだ、という感覚は、成長の糧。一番のへたくそからメンターへの成長を目指し、また別の分野でへたくそとして活動。Rubyには「一番のへたくそ」を温かく歓迎する雰囲気があると信じている。
気付き。国内外の方々を迎えるための趣向。ホワイトボード、付箋、フリードリンク、IRC経由の通訳。モニタ上に次々と打ち出されるIRCとTwitterのストリームタイムラインは、井上さんの所属する会社New Bambooが作ったPusherによるもの、すごい。非日本語圏の人々は日本語で主な開発話が進んでいくことにとまどいを感じ、私たちはほかのFLOSSプロダクトでは逆の立場。興味深い。レオさんの「新しい言語を1つ覚えれば視野が倍に広がる。なぜそれを覚えたいかや文化に興味を持たない限りは、習得に苦労する」(自然言語についての発言だけれども、人工言語にも適用可能)。
![]()
![]()
![]()
![]()
![]()
![]()
ヒット。宿は前泊後泊込みで会場隣のオークラエポカル。ネットワークがwiredなのはちょっと不便だったけど、静かでセミダブルのベッドは寝やすかったし、それほど値段高くなかったし、何よりちょっと荷物を置きにいったり身づくろいをしたりが簡単なのが最高だった。食事等については初日の夜に探すのに途方に暮れて「つくばってマジ怖い!」と思っていたものの、実は隣のDAYSTOWNで22:00までは開いていたらしいのでちゃんとiPhoneで探せばよいだけだった(ただ、SBの電波は会場に限らず周辺地域でかなり入りにくかった)。日曜日の夜はちょうどつくば夏祭りが開催されていたので、屋台も堪能(都心ではあまり見かけないヤンキーさんやテキヤさんもいっぱい…)。
決意。来年のRubykaigiもスポンサー(は景気次第だけど(笑))および行動的参加者となろう。高橋さんと一緒にReVIEWの開発とドキュメント化もがんばる。『Rubyレシピブック第3版』の編集組版もがんばった(著者はもっとがんばったけど)のでぜひ見てね。Happy Hacking.
どうも昨日の晩から、エアコンの設定温度と体感が一致しないなあ、と思っていたら、今朝になって 37.4 ℃になっていた。あらら。まあ微熱だし、と思って車で出たら、だんだん上がってくる気配。...
Powered by t2b
さすがに遅くまで寝た。洗濯してクリーニングとりにいって昼。午後から自室を掃除。エアコンを切ったので無茶苦茶暑かった。買い物いって晩食べて伝票類の整理。...
テスト
ちなみに素材は
おなじみ、メルセデス・ベンツ提供のMixed Tapeの
No. 34が出てます。
http://www.mercedes-benz.tv/mixedtape
今回はRed Rhythmっていうサブタイトルがついてます。
内容は、ポップあり、AOL, エレクトロニカ, スムーズジャズ, 要するにドライブの心地よいBGM一式。 今回はけっこうフツーにMixed Tapeだなーって感じです。 いつもどおり無料で楽しめますから、ぜひどうぞ。
S.A.D. / Allan's Grand Day Out
Dance Floor / Allan Rose
The Blanket / Zizou
Jolene / FRIDA&JOHN
Inspringtive / sabian
Connection / Boofa
Still Care / Melody and Soul
Night / Parfum Brutal
Man At Arms / Uphill Racer
Stop and Start Again (feat. Dee) / Circle
出張中に来ていたいくつかの案件へ返信。査読は原稿を見てみたが、ちょっと専門が違いすぎた。引き摺った挙句に申し訳ないが、decline させていただいた。執筆依頼はどうしようかな…...
昼からの会を夕方〜夜からだと勝手に思い込んでいて見事にスッポかした。携帯にメッセージを入れていただいていたのだが気付けず。とり急ぎ吉祥寺(大学)へは来たのだが、...
TODO ・Pei 先生の invited lecture の諸論文は参考にできそうなので早く get のこと。 ・Gudmundsson 先生に教えてもらった Anders さんの TSF 論文を早く get のこと。...
チェックアウトしてタクシーで会場へ。 VST, TF を聞いて plenary へ。 Lieber 先生の nanotube 話はすごかった。曲げるというアイデアだけであれだけ展開が急激に広がるものなのねえ。...
Powered by t2b
Powered by t2b
7:30 出発、今日はまっすぐ着いて 8:00 前に現地入り。新井くんのポスターを貼って、午前は TF, SE, VST あたりをうろうろ。12:00 からポスター。会場の端の陰になってるところだったので、...
今年は行かないわけなんです。で、タイムテーブルをざっとみてみたところ興味をそそる演目がちらほら。
じっくり見返せばほかにも出てきそうだけど。
配信があるかもっぽいので、そちらに期待して。あとは参加したみなさんからのレポートと、コードが出ているものはコードで追いかける、かな。
Powered by t2b
今日は 3 名でタクシーにて会場ヘ。昨晩フロントに電話したのが通ってなかったり、また national convention center の方に連れていかれたりで8:00 をちょい回るくらい。...
Powered by t2b
読んだ。
レイカ萌え。
読んだ。
岸本恵萌え。
7:30 に宿を出発。北京国際会議中心 (Beijng International Convention Center)が目的地のところ、国家会議中心 (China National Convention Center)に連れていかれ、あわててここじゃないよと言って道を変えてもらったり。...
Powered by t2b
接続環境の構築中にうっかりやっちゃったのでメモ。とりあえずレジストリエディタで、「HKEY_CURRENT_USER\Software\SimonTatham\PuTTY \Passphrases」を開いたところ、「crypto1」というそれっぽい文字列値がひとつだけありました。[snip]...
9:00 くらいに出発。会場は歩いていけるところにあるはず…と思っていたら、全然それらしき気配がない。近隣に散々聞いて回ったあげく、Google で検索して第一候補に出てきた...
Powered by t2b
Imation DVD-R 4.7GB データ用(8倍速) ワイドエリアフリープリント(ホワイト) 20枚パック DVD-R 4.7PWAx20P
京急で川崎から羽田へ、シャトルバスで国際線ターミナルへ。地方空港といった趣で、あらゆる手続きがあっという間に終了。搭乗案内までブラブラと過ごす。 JL023 で、10:30 羽田発、現地 12:55 に北京国際空港着。...
Powered by t2b
てなわけでかかる。わはは。途中で来た新井くんが 17:00 頃に fix したので、日留川くんのと 2 枚を先に印刷。自分は 22:00 になんとか仕上げて印刷。
Powered by t2b
おおむね 1 日ずつスケジュールが後押しになってるんだよなー。がんばらねば。しかしスライドで一作業終わってやる気が… M のお二人の分はおおむね完成。最後は boss に見ていただいた。...
見直して修正して白黒印刷、昨日の金原先生のと梱包して発送。ちょうど amazon.com の大きいサイズのダンボールがあり、あつらえたようにピッタリ。
10:15 in、来てもらった日留川くんとラックから外してキャスター足を取り付け。ちょうど終わったタイミングで吉川さんがいらっしゃったので引渡し。
Powered by t2b
先日のトラブルでIMAP環境の組み直しになった。それ自体はたいした話ではない。パッケージをいれてデータを戻すだけ。
悩ましいのは迷惑メールの処理。MUAでの判定でも十分ではあるのだが、複数のマシンで読み書きするのでちょっとめんどくさい。トラブル以前は自作ツールをぐるぐるまわしてbsfilterで処理していたのだが、再び自作ツールをぐるぐるまわす気にはなれない。かといってまともにdaemon化するなどさらにいじる元気もない。sieveでなんとかできないものかと思ったけども、やはり振り分けくらいにしか使えないようで、この手の目的には向かない。
そういえばdovecotにプラグインがあったのだったっけ。探してみたらそれらしいプラグインが見付かった。dovecot antispamという。
これ自体で迷惑メールの判定を行うものではなく、外部の迷惑メールフィルタの学習をコントロールするためのものだ。特定のフォルダを使って迷惑メールフィルタの学習をコントロールしようとする。つまり、MUAからのフォルダ操作で学習させることができる。自作スクリプトでやっていたのと考え方は同じ。debパッケージもあるようだ――がdebは使えなかった。
dovecot本体とプラグインとのバージョン整合性が行われていて、dovecot-antispam.debは古いdovecotでbuildされている。それがバレてはねられる。うーん、と、ちょっと迷ったが、rebuildして試してみることにした。
説明からは動きがいまひとつわからず、かつ、実際に動かしてみもよくわからなかったのだが、上のrebuildのついでにdebugログを出力するようにして試してみるとわかってきた。
antispamプラグインはIMAPのためのプラグインである。利用するには以下のような設定にする。
protocol imap {
...
mail_plugins = antispam ...
...
}
プラグイン自体の設定は以下のようにpluginブロックでする。
plugin {
...
antispam_trash = Trash
antispam_spam = Junk
antispam_mail_sendmail = /usr/bin/sa-learn
antispam_mail_spam = --spam
antispam_mail_notspam = --ham
...
}
dovecotを起動して、IMAPでアクセスし、迷惑メール箱とのやり取りをさせるとコマンドが実行されるはずだ。
なお、MUAの設定で迷惑メールを迷惑メール箱送りにする設定にしている場合、いきなり多数のメールがantispam処理にまわってしまうことがあるので注意が必要だ。そのあたりの設定をいったん止めて、あまり影響が出ないようにしてから動作確認したほうがよいだろう。
だいたいのところ思った通りに動いているのだが、たまにsa-learnが終了値9で終了してしまい、何やらおかしなことになる場合があった。エラー出力などとっていなかったので簡単なwrapperを書いてみたりしたのだが、それから現象が起きなくなってしまった。
検索すると同じ現象がよそでも起きてはいるようなのだけど、結論が出ていないような感じである。(きちんと見ていない。)