Planet Vine


September 02, 2010

k3c

[twitter] Twitter post on Thu Sep 02 2010

  • 23:02  でもタスクの数は増えた!どゆことw
  • 23:01  今日はわき目もふらず無我夢中で必死に働いた。多分これまでの社会人生活で一番働いた日だと思う
  • 08:33  "There was something about the theme being “The Last Ruby Kaigi” but I think it was sort of a joke making..." http://tumblr.com/xuthda4ep

Powered by twtr2src

September 02, 2010 12:00 AM

September 01, 2010

kazutaka

こんなレイアウトは厳しい?? > OSC Tokyo

前回 OSC Tokyo 2010 Spring(だったけ?)に参加した時に思ったのは、「コミュニティの展示ブースのレイアウトがひどい」だった。

確かに場所の確保が大変なのは分かるし、主催者の方も工夫してくれているんだろうけど、それにしても来場者に背中を向けてる展示ってのはいかがなものかと。

んで、今度来週末にあるOSC 2010 Tokyo Fall(だったけ?)の出展ブースのレイアウト案というのを見せてもらったんだけど、レイアウトについては変更できない、ということになっているらしい。

ちなみにもらったレイアウト案だとこんな感じ。(*自分でOOoで書いた絵)
screenshot_086.png
(長机が水色と灰色で、オレンジの椅子は参考に書いてみた)

確かに通路を確保しようとするとこうなるんだろうし、コミュニティの展示ブースでも机より中側に人を入れようすると背中合わせの部分にスペースが余計に必要になるから、通路が確保できなくなるのは分かる。

でもそれではなんら改善できていないので、それじゃあこんなのはどうかと思って書いてみた。
screenshot_087.png

展示ブースの中側はぎりぎりの幅を取って、人の出入りように縦方向3列並びの机のどこか1箇所に人が通れるだけの隙間をあける=通路が最初と同じだけ確保できる、という感じ。

まあこっちの方が机が通路に近くなるので圧迫感がでてくる感じがあるけど、展示としては多少は好ましいんじゃないかなとも思う。

あと、いっそのこと展示ブースの内側のイスは無くしちゃって、基本は立って展示する、休憩するときは外の休憩ブースに行く、というスタンスもありかも知れない。

とは言え、実は過去に試してみた結果、やっぱり良くなかったから今のレイアウトに落ち着いている、なんて話かも知れないので正直悩ましいんだろうけど、でもなんとかしてもらえないもんかなぁ……。

September 01, 2010 11:52 PM

k3c

[twitter] Twitter post on Wed Sep 01 2010

  • 07:40  個人的なRubyKaigi2010総括と「最終回」について - ただのにっき(2010-08-30) http://ff.im/-q0isF

Powered by twtr2src

September 01, 2010 12:00 AM

August 30, 2010

\ay

Ruby 1.9.2とRubyGems 1.3.7とGem.pathの消失

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
-dオプション

この話とは直接的には関係ないけれど、今回の調査をしている中で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
[...]

August 30, 2010 08:22 PM

Ruby会議2010を見てた

大変ありがたいことに今年も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にパス!

Unix修正主義

akrさんの。[録画] [プレゼン資料]

stdioまわりの話。知識としては持っているはずなのに、へー、ほーと思ってしまう。話をきくと一つのメソッドが配慮のかたまりだということがよく分かる。まあ、こうして、いつの間にかダメになっていくんだなあと。後半急ぎ足になったけどそちらも興味深そうであった。結局、というのもなんだが、デザインの話になっていく。重要なんだ。

Unix使っていると、こういったstdioだとか、あと端末だとか、そういうところに何度か戻ってくることがあるように思う。だんだん理解の深さが変わっていったり、あるいは角度が変わっていたりする。がっちりきっちり理解していないと困る、といわけでも実際にはない。「こういうものだから」という態度でなんとかやりくりすることも少なくなくて、その辺はコストのかけ方のバランスではあるのだけど。まあ、ちょっと離れているとかんどころを忘れちゃってたりするし。

キーノート

まつもとさん。[録画]

メソッドをコピーするmixの提案。あれば欲しそうなな。難しい点、要検討が必要な点もあるようだけど。

でもこれが入るとincludeと混ぜるなキケンっぽい。あるいは単に混ぜられないか。(質疑のやり取りかすると後者っぽいかな。)で、そうなると移行期にはinclude用とmix用、それぞれにライブラリができてしまってそれらは混ぜるなキケン、てなことにならないのかな? と思った。どうもmix導入するなら移行をすすめたい感じだったのだけど、ホントにincludeはいらなくなるのだろうか。質疑では定数用名前空間としてmoduleを用いるケースについてmixだけではめんどうなんじゃないか、という点が指摘されていたが、それだけってこともないような気がする。

名前空間といえば、今のRubyでmoduleが名前空間のように使われているがあれがイヤだという意見もあった。高井さん? かな。時間がかかりそうなので後でどこかで、ってなっていたけど、普段気にしたこともないようなところだったのでどういう話だったのかが気になる。こういうのは現場にいないとなかなか興味を満たすことができないんだな。っていうか、気になったらことはその日のうちにつかまえるくらいの気持ちで行かないとってことか。

A Metaprogramming Spell Book

黒魔法の話。[録画]

かと思ったけど、そうでもなかったみたい。このあたりで作業しながらだったので後半あまり見られていないのだけど。

見てた範囲でいうと、メタプログラミングをやったことないよっていう人や、Railsのコードを読んでみようかなっていう人によさそうな内容。助走にちょうどよい感じ。基本的なところから丁寧に説明があるようだった。そのまま雑誌記事とかになるとうれしそうな。と思ったが、本が出てるんだった。本の中ではどこから始まって、どういうつっこみ方をしているのだろうか。というわけでメタプログラミングRubyメタプログラミングRuby[amazon]は近いうちに買おう。(すでに品薄みたいだ。)

Lightning Talksから

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

twitterから

VIMのほうで発表していた人がyokohama.vimを開催するのだとか。これ→Yokohama.vim #0。VIM使いではぜんぜんないのだけどちょっと行ってみようかしら。見てるだけになりそうだけど。

VIMのためのスーパー補完システムってことでいいのかな? 資料コード。なんかすごそう。Ruby向けで機能が不十分なところがあるそうで、なんとかなんないかなあという話も。これも試してみないとな。

Rubyによる分散ストレージシステムの実装

RICOHの方による発表。[録画] @suzumura_ss

quanpで使っている分散ストレージシステムCastoroの紹介。事前にコードをながめた人によるとNFSで何かやってるっぽいね? という話があったのだけど、要するにAPI的なものの他にファイルシステムからのアクセスが可能になっているということのようだった。これはこれでうれしい場面はたしかにありそう。(もちろんquanpには必要な機能だったわけだし。)遅延レプリケーションをするために最初のpeerにはRAIDが必要になる。この遅延具合いを調整することはできるのかしら。できるのならアプリケーション側で待つとかも可能なのかなと。まあ、それはそれでどうなんだってことかも。

Castoroがあきらめたものの一つにidの一意性というようなのが挙げられていたけど、ちょっとよくわからなかった。ストレージ上でidが重複するってどういう状況なのかな? アプリケーションが正しいidを知っていれば大丈夫っていう話だったが。

あとpeerからgatewayにmulticastしてたのはgatewayが複数いるからなのかな? オンエアではプロセス構造を再確認できなかったのでちょっとわからなかった。……ので確認したところ、複数いるようだ。clientはgateway〇ちの中からどうやって自分のgatewayを選ぶのだろう(ここはmulticastじゃなかったような…… どうだっけ?)。という意味では設定関係がどうなっているのか気になってくる。peer追加とか。

資料を見返すなり、コードを見るなり、かな。

RWikiと怠惰な私の10年間

咳さんの。[録画] [プレゼン資料]

いやおもしろかった。全文検索で使った自前のストーレージシステムというのが、OODBを昇華させたものということで、かなり気になる。すでに出てるやつ、ではないのだよね? きっと。

Memory Profile for Ruby

ささださんのところの学生さん。[録画]

リアルタイムに計測結果を見られるのはすごくわかりやすい。ただ動かすためにはRuby本体にパッチが必要ということで、すぐにどうこうということではなさそう。1.9.3に入るといいなーという感じのようなので期待。とりあえず今の段階でのコードをgithubに上げてくれという意見。コードが出てきたら試してみたいかな。

雑感

三日目の日曜はさすがに動画を見るのに目が疲れてきてしまって後で見るモードに。ぐるんがー[録画]は見ておかなきゃ。試しておきたいものもいくつか。忘れないうちに。いきおいがなくならないうちに。

中継のなかった部屋がいくつもある。まあ全部は無理だろうし、一部でもあるだけありがたい。ただまあそうなるとやはり現場へって感じだが、うーん、チケットを買う時点でどれくらい内容がわかってるんだっけ? COOKPADのんとか盛り上がっていたようだなあ。

August 30, 2010 05:27 PM

k3c

[twitter] Twitter post on Mon Aug 30 2010

  • 19:07  胃が痛いので病院に向かう
  • 17:38  "Q:1126への回答ありがとうございました。民主党の代表選挙は菅直人総理と小沢一郎前幹事長の争いになっているようです。小沢氏の出馬にはかなり驚きました。..." http://tumblr.com/xuth4quev
  • 16:58  ヒットポイントが減少し続けている。ピンチ
  • 13:25  @myEN 柔軟な対応には経験値と機動力が重要、かまってちゃん、トムソーヤのペンキ塗り、6年間もやってるんだから大丈夫だよ!、スイカ果汁のしみ
  • 13:05  手についたスイカ果汁のシミが消えない。スイカ割りで食べられないくらいぐちゃぐちゃにしたことに対する呪いではないかとgkbrしている

Powered by twtr2src

August 30, 2010 12:00 AM

August 28, 2010

k3c

[twitter] Twitter post on Sat Aug 28 2010

Powered by twtr2src

August 28, 2010 12:00 AM

August 27, 2010

yasumichi

GNOMEヘルプ用のja.poの更新例

忘れないようにメモ。$ xml2po -u ja.po ../C/*.xml

August 27, 2010 01:21 AM

gettextのツール類メモ

http://mail.gnome.gr.jp/ml/gnome-translation/201008/msg00031.htmlそんなんできるんですか。$ msgunfmt --help使用法: msgunfmt [オプション] [ファイル]...バイナリメッセージカタログを Uniforum 形式の .po ファイルに変換....$ msgcat --help使用法: msgcat [オプション] [入力ファイル]...指定された PO ファイルを連結し、マージします.2..

August 27, 2010 12:06 AM

k3c

[rubykaigi2010]RubyKaigi2010に参加した(今日だけ)

仕事にケリがついていないのに強引に休んで今日だけRubyKaigi2010に参加してきた。

往路

準備万端整えたつもりだったが途中で糊を持ってくるのを忘れたことに気づいた。せっかく名札ジェネレータで印刷して切って準備した名札が使えないじゃないか、というわけで、北千住の駅にあったファミリーマートでスティックのりをゲット。

つくばエキスプレスはJRじゃないということを今日はじめて知った。

つくば駅についたのは11:15。時間が余り過ぎなので、駅の近くのショッピングモールに入ってフードコートでとんこつラーメンを食べた。

受付

つくば駅から結構歩いて(暑かった)国際会議場でチェックイン。受付でチケットを見せたらスポンサーは別の担当者のところへ回されて青い名札をもらった。ええー、赤がよかったなあ、Rubyなんだから…

早速作業台へ行き、紙を貼り付けて名札を作成。糊は寄付した。みんな使ってくれただろうか。

RubyKaigi2010の名札

フォントはもちろんVLゴシック。裏はみかちゃんだけど。

他にもノベルティをいただきました。

RubyKaigi2010手ぬぐい

なぜか手ぬぐい。後ほど角谷さんがこれをカッコよく頭に巻いている姿を目撃することになる。

RubyKaigi2010トートバッグ

トートバッグ。一澤信三郎帆布のトートバッグで馳せ参じたオレ涙目(わら

そしてiPhoneで無線LANに接続。準備完了。さて充電でもしておくかと思ってユニバーサルドックのケーブルを取り出したら、先端にコンセントが付いていなかったのであった…充電できないじゃん…大失敗…

あとで電器店を探すことにしてとりあえず大ホールへ移動。

オープニング

実行委員長の高橋さんの開会宣言に続いて角谷さんの注意事項説明。全部日本語だったが@lchinさんが頑張って翻訳していた。@lchinさんはその後も大ホールの翻訳担当として頑張っておられました。

ゴミは全部持ち帰りましょう。

Conflicts and Resolutions in Ruby and Rails

Jeremy Kemperさんは来れなかったがその代わりに別のRailsコミッタ2人とまつもとゆきひろさんと松田さんと実行委員長の高橋さんと@lchinさんとのRails3の開発秘話的なセッション。たこ焼き仮面ことAaron PattersonさんはRubyとRails両方のコミット権を持っている。パッチとテストを大量に投稿し続けたら面倒臭がってコミット権をくれたらしい。どれだけ投稿したんだ。

AaronさんはRubyの開発は日本語メインなので英語が母国語の人にとっては言語の壁があるということを何度も繰り返して強調していた。Railsは逆に日本人コミッタがいない。言語の壁。

途中未発表のRuby2.0の仕様がバレたりしたのも面白かった。

@lchinさんが日→英、まつもとさんが英→日の通訳を担当。

途中から高橋実行委員長は置物と化していた。お疲れだった模様。

ラーメン

中ホールへの移動の途中に限定版を1箱だけ買った。あまりたくさん買うと日曜日までに全部無くなっちゃうもんね。まだまだたくさん売れ残ってました。

Feels Like Ruby

WebアプリケーションのJavaScript部分はなんでみんなテストしないの?ちゃんとやろうよ。というわけでJasmineつくったよ、という紹介。文法がRSpecぽくてよさげ。冒頭の自己紹介を一生懸命日本語でやってくれたのが印象的だった。

User Experience for Library Designers

使ってもらえるライブラリを開発するための心得。仕様をコロコロ変えない一貫性、貢献者を大事にすること、ドキュメントをしっかり書く、チュートリアルを整備する、本来の機能に特化する、などなど。最後のFall Gracefullyってどういうこと?というのがよくわからなかった。というかこの人のプレゼンは文字がほとんどなくてキーワードときれいな写真、あとは全部べシャリだけだった。それはプレゼントしてどないやねん。言語の壁を感じた。

買い物

割と早めに休憩時間に突入したのでここぞとばかりに電器店を探しに行った。さんざん歩きまわった挙句、会議場のすぐそばにコジマ電気があるという体たらく。USB充電アダプタを買って帰った頃には休憩時間後最初のセッションがほぼ終わっていた。

仕方がないのでただでは転ばないぞと、ジュンク堂書店RubyKaigi店でメタプログラミングRubyを購入。

メタプログラミングRuby

メタプログラミングRuby

ジュンク堂書店RubyKaigi店で買ったメタプログラミングRuby

帰りの電車の中で少し読んだけど、Rubyのかゆいところに手届いた説明が素晴らしいと思った。まだ読み終わってないけど、Rubyでコード書けるけどいまいち動作を理解している気がしない、という人に強くオヌヌメしておく。

Head First ふつうのシステム開発

永和システムマネジメントの人々がお昼休みに何をしているのか?じゃなかった、RubyとRSpecでどのようにスクラム回してシステム開発をしているのか、というライブデモ。

むちゃぶりを繰り返す@kakutaniに淡々と答える@ursm、暇を持て余すスクラムマスター@nawoto、という構図。きっとふだんからそんな感じなんだろうなと微笑ましく見ていた。

デモはサクサクと進んで、リハーサル(わら)で出なかったバグも出ながらも予定時間より早く終わった。

小さめの会議室がギャラリーでいっぱいになって通路に座り込んだり立ち見する人まで出る盛況ぶり。みんな永和が好きすぐる。

Rubyで作るDSLの基礎

株式会社万葉の社員が別々の会場で3人同時にスピーカーといいう、まさに万葉のターン。

メタプログラミングRubyを買ったばかりのせいか、非常にタイムリーに頭に入ってきた。DSL書いて仕事楽にできないかな、などと考えたりもした。

君のクラスの最高の偽物

前田修吾さんの発表。クラスへのメソッド追加をスコープの中だけで閉じておくために、MRIの実装に手を入れたという話。いや、メソッドをオーバーライドしなければいいだけのような話がするけど。classboxの論文読んでないから狙いが良くわからないんだろうなと思った。ていうかわかった気にさせない発表ってどうなんですか。

総括

スタッフの皆さんお疲れ様です。お金(Individual Sponsor)くらいしか協力できなくてごめんなさい。

あと、アジャイルレトロスペクティブズに児玉サヌールさんのサインが貰えなかったことが心残り。IRCのログで見かけたから会場にはいたのだと思うが発見できなかったのが返す返すも残念無念。また次の機会に。

August 27, 2010 12:00 AM

August 26, 2010

\ay

Ruby会議2010の注目演目

今年は行かないわけなんです。で、タイムテーブルをざっとみてみたところ興味をそそる演目がちらほら。

  • Rubyによる分散ストレージシステムの実装 (8/29 10:00〜10:30)
    おっと、こんな面白そうなプロダクトが作られていたんだ! とタイムテーブルを見て初めて知った。RICOHさんということはquanpで使われていたりするのかなあと連想するわけで、もしそうならがっつり使えそうなものっぽい。面白いというか、早いとこ試してみなければという気持ちに。
  • Memory Profiler for Ruby (8/29 11:30〜12:00)
    欲しいよね、メモリプロファイラ。1.8系でもいくつか実装があったけどRuby本体に手を入れなければならないものや、近似っぽいものがほとんどだったような。1.9系向けのこれはどういう実装なのしら。
  • 君のクラスの最高の偽物 (8/27 18:00〜19:00)
    前田さんの提案。なんとなく恒例っぽい感じもするけどそんなこともなかったっけ? いかにも欲しそうな機能なのだけど、commitはいつだろう?
  • User Experience for Library Designers (8/27 14:30〜15:00)
    これはいつだったかのakrさんのAPIデザインの話とどういう対比になるのかなという点で興味が。
  • Unix修正主義 (8/28 15:30〜16:30)
    で、akrさんの発表。毎度恒例のこいー話なんだろうなと。
  • RWikiと怠惰な私の10年間 (8/29 10:30〜11:00)
    きっと何かあるに違いない。

じっくり見返せばほかにも出てきそうだけど。

配信があるかもっぽいので、そちらに期待して。あとは参加したみなさんからのレポートと、コードが出ているものはコードで追いかける、かな。

August 26, 2010 08:08 PM

k3c

[twitter] Twitter post on Thu Aug 26 2010

Powered by twtr2src

August 26, 2010 12:00 AM

[twitter] Twitter post on Wed Aug 25 2010

  • 23:09  RT @rubykaigi: [ANN] Jeremy Kemper's Keynote Has Been Cancelled http://bit.ly/d0MTpU #rubykaigi
  • 22:59  基調講演がキャンセルされた枠をみんなで残念がるCancelKaigi開催のお知らせ #rubykaigi
  • 22:51  俺のアジャイルレトロスペクティブスに児玉サヌール氏のサインを貰うのが今回のミッション #rubykaigi
  • 22:48  @kakutani ハサミもいるよね? #rubykaigi  [in reply to kakutani]
  • 22:46  名札はジェネレータで準備済みの俺は、メンディングテープを持参してヒーローになるんだ… #rubykaigi
  • 22:44  基調講演がキャンセルされた枠を使って、RejectRejectKaigiからはじめるというのはどうか #rubykaigi
  • 22:42  チケット印刷しとかないとなあ #rubykaigi
  • 22:38  金曜日はなんとか休み取れそうな気配 #rubykaigi
  • 22:36  僕はエレベータに乗り込んで1階のボタンを押し、鏡を見た。よく日焼けして眼鏡をかけ、無精髭の生えた男の像が映っていた。僕が瞬きすると、鏡の中の像も瞬きした。 でもその像は僕の像ではなかった。それは僕ではない別の生き物の像だった。この歳になると、そういうことが割と分かるようになる。
  • 12:44  Rubyist Magazine - RubyKaigi2010 参加者のしおり http://ff.im/-pFSRZ
  • 08:32  有明デニーズの森
  • 07:58  @tekitoizm おはようございます  [in reply to tekitoizm]
  • 07:35  "あなたは女たちに笑いかける。女たちは自分と釣りあうと思って笑いかえす。あなたの客観的な認識は「やったね」と思う。でもあなたの隠された制御しがたいプライドみたいなものはその女の平凡さを許せない。..." http://tumblr.com/xutgmnu28

Powered by twtr2src

August 26, 2010 12:00 AM

August 24, 2010

k3c

[twitter] Twitter post on Tue Aug 24 2010

  • 00:52  洗濯終わるまで眠れない

Powered by twtr2src

August 24, 2010 12:00 AM

August 23, 2010

k3c

August 22, 2010

munepi

[Vine][Linux] Kernel 2.6.35 で VMware Player 3.1.1 のカーネルモジュールがビルドできなかった件

ググってみると、次の 2 つのパッチを当てることで、VineSeed x86_64 上で VMware Player 3.1.1 が一応動くことを確認しました。 VMware vmmon compilation issues on 64-bit kernel 2.6.35 http://www.rrfx.net/2010/06/vmware-vmmon-module-compilation-issues.html Persuading VMware Workstation 7.1 to coopera ...

August 22, 2010 12:00 AM

[Vine][Linux] RealPlayer のバージョン番号が…

vine-users-forum:290 realplayer が投稿されていて、少し気になったので調べてみました。 現時点において、Vine Linux 5.1 上で RealPlayer for Linux http://www.real.com/realplayer/linux の rpm パッケージ RealPlayer11GOLD.rpm がインストールできなくなっています。 実際に、実際に試してみました。 $ sudo apt-get install install-assist-Rea ...

August 22, 2010 12:00 AM

[Vine][Linux] Adobe AIR アプリ TweetDeck for Linux を動かしてみた

TweetDeck http://www.tweetdeck.com/ を Linux 上で使いたくて調べていると、Adobe AIR アプリケーションとのことでした。 早速、Adobe AIR http://www.adobe.com/jp/products/air/ のサイトにいくと、いつの間にか rpm での提供をしていたのねん!→ http://get.adobe.com/jp/air/ おぉ、すぐにでも install-assist 化しなきゃーということで、やっちゃいました。 instal ...

August 22, 2010 12:00 AM

August 21, 2010

yasumichi

単一のファイルに変更を加えると%dがそのまま表示されてしまう(書庫マネージャ)

 書庫マネージャから書庫内の1つのファイルを他のアプリケーションで開き、修正を加えて保存すると%dがそのまま表示されてしまう問題があります。GNOME日本語翻訳チームに相談したところ、西堀さんに原因究明して頂き、upstreamへバグレポートまでして頂きました。https://bugzilla.gnome.org/show_bug.cgi?id=627387 ここで提案されたパッチを適用したものを file-roller-2.30.2-2vl6 として VineSeed に ..

August 21, 2010 01:41 AM

k3c

[twitter] Twitter post on Sat Aug 21 2010

  • 21:16  "男性は取材に「なぜ不具合が放置され、捜査機関は見抜けなかったのか。今後も同じような逮捕が起き得ると思うと恐ろしい」と話した。..." http://tumblr.com/xutgak4nm
  • 10:32  [twitter] Twitter post on Fri Aug 20 2010 http://ff.im/-psT6i

Powered by twtr2src

August 21, 2010 12:00 AM

[twitter] Twitter post on Fri Aug 20 2010

  • 16:24  ちびっこぶちょう旋風が吹き荒れた
  • 09:53  "あんまり関係ないかもしれないけど、全てのコンテンツが広告付けて作るってことになったら、みんなが好きなものしか出すことが出来ません。 僕はそういうのって退屈だと思います。" http://tumblr.com/xutg740gu

Powered by twtr2src

August 21, 2010 12:00 AM

August 19, 2010

\ay

dovecotのantispamプラグインで迷惑メールフィルタの学習をコントロールする

先日のトラブルでIMAP環境の組み直しになった。それ自体はたいした話ではない。パッケージをいれてデータを戻すだけ。

悩ましいのは迷惑メールの処理。MUAでの判定でも十分ではあるのだが、複数のマシンで読み書きするのでちょっとめんどくさい。トラブル以前は自作ツールをぐるぐるまわしてbsfilterで処理していたのだが、再び自作ツールをぐるぐるまわす気にはなれない。かといってまともにdaemon化するなどさらにいじる元気もない。sieveでなんとかできないものかと思ったけども、やはり振り分けくらいにしか使えないようで、この手の目的には向かない。

antispamプラグイン

そういえばdovecotにプラグインがあったのだったっけ。探してみたらそれらしいプラグインが見付かった。dovecot antispamという。

これ自体で迷惑メールの判定を行うものではなく、外部の迷惑メールフィルタの学習をコントロールするためのものだ。特定のフォルダを使って迷惑メールフィルタの学習をコントロールしようとする。つまり、MUAからのフォルダ操作で学習させることができる。自作スクリプトでやっていたのと考え方は同じ。debパッケージもあるようだ――がdebは使えなかった。

dovecot本体とプラグインとのバージョン整合性が行われていて、dovecot-antispam.debは古いdovecotでbuildされている。それがバレてはねられる。うーん、と、ちょっと迷ったが、rebuildして試してみることにした。

antispamの動作

説明からは動きがいまひとつわからず、かつ、実際に動かしてみもよくわからなかったのだが、上のrebuildのついでにdebugログを出力するようにして試してみるとわかってきた。

  • コマンドを起動して学習させるのにはantispam_mail_sendmailを使う。もともとantispam_mail_sendmailは迷惑メールと判定されたかどうかに応じてメールを転送するものだったようだが、内部では指定されたコマンドにメール本文を与えて実行しているだけ。したがって任意のコマンド(sa-learnやbsfilterなど)を実行できる。
  • 注目するフォルダはantispam_trashとantispam_spamで指定する二種類。それぞれゴミ箱と迷惑メール箱をの名前を指定する。
  • ゴミ箱との間でのメールの移動は無視される。
  • ゴミ箱以外と迷惑メール箱の間のメールの移動があると、その方向に応じた引数を指定してコマンド実行される(antispam_mail_sendmailの場合)。
    • どこか→迷惑メール箱 - そのメールを迷惑メールとして学習させるためantispam_mail_spamで指定したオプションを付けてコマンドが実行される
    • 迷惑メール箱→どこか - 迷惑メールでないとして学習させてためantispam_mail_notspamで指定したオプションを付けてコマンドが実行される
設定方法

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を書いてみたりしたのだが、それから現象が起きなくなってしまった。

検索すると同じ現象がよそでも起きてはいるようなのだけど、結論が出ていないような感じである。(きちんと見ていない。)

August 19, 2010 06:03 PM

munepi

[Vine][Linux][TeX] 新しい TeX ドキュメント制作環境 TeXworks の紹介

先週 put しました texworks パッケージを紹介してみます*1。 VineSeed:21497 NEW: TeX Live 2009; NEW: texworks VineSeed:21516 VinePlus/5 NEW: texworks TeXworks は TeX (LaTeX, ConTeXt, etc) ドキュメント制作のための総合環境です。 ユニコードベースで編集する TeX に特化したエディタに、PDF プレビュアーが統合されており、不慣れな非技術系のユーザへの簡潔で操作しや ...

August 19, 2010 12:00 AM

k3c

[twitter] Twitter post on Thu Aug 19 2010

  • 21:48  5対1で快勝
  • 17:37  ゼネコンにチケットが流れている模様
  • 17:35  仕事帰りにプロ野球観戦という至福
  • 17:25  午後半休なのに16時退社とかあり得ない
  • 17:00  "Apple、upstreamに報告してくれないまま脆弱性をCVEに届け出る upstreamに連絡が来ないまま脆弱性が公開される ruby-devにAppleが書いたパッチが貼られる..." http://tumblr.com/xutg59ieb
  • 13:01  "さすがにここまで計算していたとは思わないが、結果論としてキレずにあそこで切り替えた事で得たものは計り知れない。お笑い怪獣とは笑いをとるだけで得られる称号ではないようだ。" http://tumblr.com/xutg4qfk4
  • 07:47  盲信って恐ろしい… http://www012.upp.so-net.ne.jp/mackboxy/Health/summary.pdf
  • 00:36  RT @machikomemo: ブログなどにcocoonの感想を書いてくださった方、ぜひお知らせください。本が品薄のまま世の中から消えてしまう瀬戸際なので、、出版社の良き判断材料となりますよう応援いただければ嬉しいです。 @COCOON_info #cocooninfo
  • 00:34  RT @yaginome: レイモンド河馬

Powered by twtr2src

August 19, 2010 12:00 AM

[twitter] Twitter post on Wed Aug 18 2010

  • 22:08  "中学2年の時に帰国し、近くの公立中学に編入した私は、歴史のみならず、あらゆる教科書の絶望的退屈さ加減にショックを受けた経験がある。義務教育である..." http://tumblr.com/xutg2owdn
  • 21:29  "正直なところ nanaco 終了のお知らせということなのでしょう ?" - セブンイレブンでも Pasmo、Suica などが使えるように - スラッシュドット・ジャパン http://tumblr.com/xutg2mbqn

Powered by twtr2src

August 19, 2010 12:00 AM

August 18, 2010

\ay

HDDがまたとんだ

前回とは別のマシンでまた…… 復旧作業中はおおむね終わりました。

以下、顛末のようなもの。有用な情報はないです。

RS-232Cはどこへ?

月曜の朝方、RAID箱から警告音が鳴りはじめた。まずは状態を確認しようと思ってminicomを起動した。が、接続できない。

使っているのはARC-5010という内蔵のRAID箱で、これはRS-232Cで接続して操作できるようになっている。状態確認も同様。先日のトラブルのときにケースを変えたので、まだRS-232Cを接続していなかったのだったかな。そう思ってケースをひっぱり出すとたしかに接続されていない。ぷらんとしている。接続しなきゃともぐり込んだところで困ってしまった。うちのマシンからRS-232Cがなくなっている。

なんとも間抜けな話だが、パーツの交換を繰り返すうちにRS-232Cを持っているマザーボードから、持っていないマザーボードへと変えていってしまったようだ。二台あるPCのどちらにもRS-232Cはない。すぐに使えるノートPCもないし、MacにもRS-232Cなんてない。

時間をおくのは心配だけど、なにせ状態を確認できないのだからRS-232Cを買ってくるほかない。

SRC06USBを得て、HDDをもう一つ失う

いつもの通りIRCできいて、調べて、無難そうで入手しやすそうなSRC06USBを買いに横浜まで出掛けた。どうせ出掛けたので、ついでに用事をいくつか済ませる。そうして帰宅。SRC06USBは難なく使うことができ。minircのポートだけ変更すればARC-5010の状態確認が可能となった。どうだったかというと、五本あるうちHDDのうちの二本に障害が出ていた。

四本でRAIDを組み、残りの一本をホットスペアとしていた。ログを見ると、RAIDメンバーの一本がまずとび、再構築が始まって一時間ほどしたところでホットスペアだったHDDがとんだようだ。逆算してみると、ちょうど出掛けたあたりではHDD二本に異常が出ていたのではないかと思われる。こうなると…… まあ、どうしようもない。

徒労

それでもkernelはまだ生きていた。ファイルシステムにさわると、ところによりbus errorが出る。というよりもbus errorにならないところもあるといった具合い。バックアップはとっていたので、重要なファイルが失われることはなさそうだ。ただし、この日記のここ数日上のデータはバックアップに入っていない。記事自体はRSSに出しているから入手可能だし、運よくキャッシュファイルが生きていた。wgetにも応答があり、キャッシュのコピーを得ることができた。

ではDBはどうかなと見てみると、こちらはダメのようだ。日記を表示できていない。mysqldumpをしてみようとするも、bus errorになる。どうもmysqldumpのバイナリにアクセスできていないようだ。

ファイルシステムはroになっているが、障害が起きていない別のディスクになら書き込める。他のマシンからmysqldumpをコピーして実行してみよう。あら、scpが動かない。お、sshは動く。それならリダイレクトでなんとか…… なった。ファイルを送り込む。mysqldumpだけでなくライブラリのいくつかもダメなようなので、これを繰り返すことしばし。なんとかmysqldumpは動くようになったが他のエラーが出る。やはりデータベースも影響を受けてしまっていたようだ残念。(実際にはmysqlを送り込んだり、MySQL/Rubyを直接使ってみたりもした。)

RAID再構築が進まない

SRC06USBのおかげで鳴り続けていた警告音を止めることができた。状態もわかり、これ以上データを取り出せないこともわかった。すでにどうにもならない状態だが、RAID的な整合性を取り戻さなければなるまいと、ストックしていたHDDへの交換を行った。まずは一本。エラーを示すLEDが消えて状態が「Rebuilding」となった。ところが実際の再構築が行われない状態になっており、いろいろとあったのだがファームの更新、メンテナンスコードの調査、コードの投入、とやってようやく再構築が始まった。

そこで外出しなければならい時刻になったので、もう心配するまでもないし、待ち時間ばかりだしと出掛けた。HDDのストックがつきてしまったので一本だけでも買っておこうと思いながら。

PATAなんてない

数年前から使っていたため個々のHDDのサイズは160GB。今となってはどこにもないようなサイズ。もちろん大きい分には困らないが、あまりに無駄が大きいのも困りもの。だがそれ以前に、サイズがうんぬんではなくPATAのHDDを近場で入手することができないのだった。

考えてみればあたり前。でもARC-5010にはPATAのHDDしか接続できない(PCとの接続はPATA/SATAの両対応)。ARC-5010は2004年からファンなども含めて何も障害なく使ってこれた。HDDの容量の関係でRAIDとしてのサイズも小さめだがまだまだ動く。でも次に障害が起きたらどうしようもない。HDD入手にコストがかかりすぎるとなると今後は使わない方向しかないか……。

今回の買い物

August 18, 2010 12:05 AM

k3c

[twitter] Twitter post on Tue Aug 17 2010

  • 21:39  上野なう。出張おわり。つかれた&はらへった
  • 12:55  時間が余ったので図書館なう。図書館の長所は、本のために冷房を控えめにしていることだ。暇潰しに最適
  • 06:49  今日は朝から出張だが眠気と頭痛がつらい。潰れかけてんのかな俺

Powered by twtr2src

August 18, 2010 12:00 AM

August 16, 2010

kazutaka

押し付けがましくない日本語って難しい;

「インストール直後にどうやってアップデートしたら良いのか分からん」問題(<今命名)をなんとかるする為に、update-watch にこんな画面を新しく追加してみた。

screenshot_086.png

インストール直後に表示されるので、あんまり押し付けがましくなったらイヤだなと思って、日本語については結構悩みながら、かれこれ3時間くらいはあーでもないこーでもないと書き直してはダイアログを表示し直してみて、をくり返してやっとできた。

ちなみに見た目に付いてもちょっと新鮮さが欲しかったので、アイコン+ラインという形を試してみている。

とりあえず Seed 向けだけパッケージを put してあるので、試してみて気になる点があったらコメントお願いします。

# しかし我ながらデザインセンス無いなぁ……。

August 16, 2010 12:23 AM

August 15, 2010

kazutaka

欲しいなぁ、電子ペーパー黒板

しばらく前に engadget の記事を見て知った、電子ペーパ黒板なる「Boogie Board LCD Writing Tablet」。

タッチパネル採用の電子ペーパー黒板 Boogie Board | engadget
http://japanese.engadget.com/2010/01/25/boogie-board/
screenshot_085.png

レビュー記事がいくつかあって気になっていたんだけど、ちょっとしたメモ取ったり、子供とらくがきやお勉強に使ったり、デザイン考えるときの下書きに使ったりと、色々な用途が思いつくので欲しいなーと思っていたら、日本でも買えるようになったらしく、そうと知ったらかなり欲しくてしょうがなくなってきた。

アキバ総研-感圧式パネル採用の電子黒板! 「Boogie Board」発売、約4千円-[秋葉原総合情報サイト]
http://akiba.kakaku.com/pc/1008/13/231500.php

岡谷エレ、電子ペーパー黒板「Boogie Board」の国内販売を開始 | エンタープライズ | マイコミジャーナル
http://journal.mycom.co.jp/news/2010/08/10/005/

まあぶっちゃけコスト的には「スケッチブック買えよ」とか「白板あんだろ」と突っ込まれてるレベルなんだけど、タッチ式のLCDでできてて、表示に電池不要で、内蔵電池で50,000回も書き換えられる、なんて特徴をずらずら並べ立てられてしまうと、ガジェット好きな男子としてはうずうずしてきてしまう。

# 久しぶりに秋葉にでも行ってみようか悩み中。
# でも嫁に無駄遣いって感じで見られちゃうんだろうなぁ……。

August 15, 2010 10:04 PM

\ay

プログラミングGIMP

自由研究にGIMPプログラミングをやってみた(2.6.10を使用)。夏休みはないけど。

GIMPを使って、複数の操作を順番に実行する必要のある、ある程度手間のかかる画像処理をしたいのだけど、手作業で繰り返すのはちょっと辛い。また、できればバッチ的にたくさんのファイルを処理したい。というわけで、ごく具体的な目的があってのチャレンジである。参考にしたのは以下。

GIMPでのプログラミングはScript-Fuと呼ばれていて、Schemeで書く。かっこを多用しなければならないのでついつい腰がひけてしまう。ただ、ここでやりたいのは操作手順を書き起こすことなので、webサービスを作るような場面でのプログラミングよりはずっと単純な内容で済む。「;」のかわりに「)」を書く、という程度の気持ちでもなんとかなる。はずだ。

作業の流れ

今回行ったいくつかのプログラム作成ではどれもこんな手順を繰り返した。

  1. まず、プログラムの最初と最後に書く決まり文句をコピー・ペーストする。最初の一つは上に挙げたページやファイルからコピー・ペーストした。
  2. 次に、決まり文句の間に必要な命令(GIMPでの操作に対応する)を書き加えいく。
  3. 終わったらセーブして、GIMPに読み込ませる。
  4. そして、メニューからプログラムを実行して動作を確認する。
  5. うまく動けば完了。そうでなければファイルの編集→セーブ→読み込み→実行→動作確認を必要なだけ繰り返す。
プログラムの実体

GIMPにプログラムを実行させるときの単位は関数である。だから、プログラミングでは関数を書く。

関数を書いたファイルは編集→環境設定→フォルダ→スクリプトで表示される場所に置く。拡張子はscm。手元では~/.gimp-2.6/scriptsとなっていたので、~/.gimp-2.6/scripts/foobar.scmといった名前のファイルとした。

一つのファイルに複数の関数を書くことができる。手順が長かったり、似た手順を何通りかで作りたい場合など、適度なサイズの関数に分けておくと、全体的な記述量を減らすことができる。このあたりは一般的なプログラミングと同じ。

決まり文句

作成したプログラムはGIMPのメニューに登録することができる。というよりも、メニューから実行できるようにするために、前述した「決まり文句」を書いておく。

メニューから実行しないのであればこの決まり文句がなくたって構わない。ただ、動作確認の際にはメニューから実行して、画像がどう変わっていくかをいちいち見たほうがわかりやすい。なので、そういう必要がないとはっきりしている場合以外はとりあえず決まり文句から書き始める。(そのうち必要あるかどうかはわかるようになる。)

(define (script-fu-foo-bar-baz image layer ...)
  ... GIMPに実行させたい手順を書くところ ...
)

(script-fu-register "script-fu-foo-bar-baz"
  "メニューに表示させる見出し..."
  "関数の説明文"
  "作者の名前"
  "copyright表示"
  "作成日付"
  ""
  SF-IMAGE       "Input Image"   0
  SF-DRAWABLE    "Input Layer"   0
  ...
)

(script-fu-menu-register "script-fu-foo-bar-baz" "<Image>/Filters/メニュー階層の小見出し")

「define 〜」というのが関数を書く部分。最初のかっこの中身が関数名と引数の指定になる。Script-Fuのための関数(メニューから実行する関数)は「script-fu-」で始める決まりだそうなので従っておく。

「script-fu-register 〜」と「script-fu-menu-register 〜」は作成した関数をGIMPに登録するためのもの。前者はメニューから実行された際、処理対象となる画像(キャンバス)やファイル名の指定、入力されたパラメータ値などを関数に渡すための定義となる。最後の「...」の部分にいろいろな記述をすることで、実行時にファイル選択させることなどが可能となる。

後者は関数をメニューのどこにいれるかを指定するもの。どこであっても構わないだろうが、たいていは画像→フィルターあたりが適当だろう。

script-fu-registerとscript-fu-menu-registerの最初の引数で関数を指定するので、defineした関数名にそろえておく。

関数の探し方

defineの中身には、GIMPのGUIで行っている操作を書くことになる。これらの操作もやはり関数として提供されている。関数の呼び出しは「(関数名 引数...)」という形式で行う。前項の「(script-fu-register 〜)」も関数呼び出しだし、関数を定義するための「(define 〜)」もそう。

手順が一つだけならScript-Fuにするまでもないわけで、関数の中ではいくつもの処理を実行することになる。複数の操作を順番に実行するにはこの関数呼び出しを並べてやればよい。

(define (script-fu-foo-bar-baz image layer)
  (function-a)
  (function-b 123 "456")
  ...
)

と、こんな具合い。では、実行したい操作に対応する関数をどうやって探すのか。

一つのルートはフィルタ→Script-Fu→Script-Fuコンソール→参照で表示されるScript-Fuプロシージャブラウザである。検索という部分にそれらしいキーワードを入力する。うまく見付かると関数のリストが表示される。おれおれScript-Fu入門に詳しい説明がある。

キーワードがわからないときにはメニューの項目が二つめのルートになる。……が、メニューは日本語で表示されているので、英語の関数名とはなかなか結び付きにくい。また、省略されていることもある。こういうときはヘルプを参照する。そこで出てくる英語の見出しが参考になることがある。

あとは勘。あるいはシンプルに検索する。似たようなScript-Fuがあればそこから類推できることもある。標準添付のScript-Fuもあるのでgrepしてみるのもよい。

動作確認とデバッグ

プロシージャブラウザを見るために起動してScript-FuコンソールではScript-Fuで使う関数の実行ができる。これを使って動作確認すればよさそうであるが…… 使い勝手はあまりよくない、と思う。(一行しか書けないし、補完もきかない。Rubyでいうinspect的な表示がちょっと弱い、など。)

しょうがないので、ごくごく簡単な動作確認以外は、ファイルを編集してセーブしてフィルタ→Script-Fu→スクリプトを再読み込みとした上で、メニューから実行するというのを繰り返した。

プログラムに間違いがあって動作させられないときにはエラーメッセージが表示される。ただ、それではよくわからないことも少なくない。

ウィンドウ→ドッキング可能なダイアログ→エラーコンソールと選択すると動作中のメッセージが記録されていくウィンドウが開く。プログラム中に「(gimp-message "メッセージ〜")」と書いておくと、その内容はエラーコンソールに表示させることができる。(エラーコンソールがないときにはキャンバスの下端に表示されては消えていく。)

関数の効果を知る

手順が長くなると、エラーは起きないけども求めた結果にならないということもある。Script-Fuのステップ実行ができるといいのだけど……。

前項ではファイル書き換え→再読み込み→実行を繰り返すとはいったものの、いくつかあるなかのどの関数を使えばいいかわからないときや引数に何を値えれば適正なのかわからないときなど、ファイル編集を繰り返すのが辛いこともある。コンソールから現在開いているキャンバスを指定して関数を実行すれば、ある程度の助けになるかもしれない。

多くの関数ではキャンバスと、キャンバス上のレイヤを引数にとる。したがってこれらをコンソール上で得る方法が必要となる。キャンバスを得るにはこんな風にすればよいようだ。

(aref (car (cdr (gimp-image-list))) 0)

これを使って次のようにしておくと、コンソール上ではimageによって最初のキャンバスを参照できるようになる。(ここに限っていえば変数設定のようなもの。)

(define image (aref (car (cdr (gimp-image-list))) 0))

次にレイヤを得る方法。これは行いたい操作によって何が必要なのか変わってくるのだけども、とりあえずキャンバスでアクティブになっているレイヤを得るなら次のようにする。

(car (gimp-image-get-active-layer image))

やはり次のようにdefineしておくことでレイヤをいつでも参照できるようになる。

(define layer (car (gimp-image-get-active-layer image)))

これらを用いて、次のようなことができるようになる。

> (gimp-image-get-filename image) ; 元ファイルの名前を得る
("/tmp/xyz.jpg")
> (gimp-histogram layer HISTOGRAM-VALUE 0 255) ; レイヤのヒストグラムを得る
(215.6229328 76.42384291 255 1732800 1732800 1)
> (gimp-invert layer) ; レイヤの明暗を反転させる
(#t)

実はもっとスマートな方法があるのかもしれないが、よくわからない。(とりあえず手元でやりたかったことはできたので追求していない。)

実際に使った関数

実際に作成した関数たちの中で使った関数を挙げてみる。適当にコピー・ペーストしているのでこれが全部ではないかもしれない。

  • number->string - 数値を文字列に変換
  • string-append - 文字列の列結
  • gimp-message - デバッグプリント
  • gimp-histogram - ヒストグラムを得る
  • gimp-levels - 色→レベル
  • gimp-displays-flush - キャンバスの再描画
  • gimp-image-convert-grayscale - 画像→モード→グレースケール
  • gimp-layer-copy - レイヤの複製
  • gimp-image-add-layer - キャンバスにレイヤを加えて操作できるようにする
  • gimp-image-set-active-layer - 指定したレイヤをアクティブにする
  • plug-in-unsharp-mask - フィルタ→強調→アンシャープマスク
  • gimp-by-color-select - 色域を選択
  • gimp-image-remove-layer - レイヤの削除
  • gimp-selection-shrink - 選択→選択範囲を縮小
  • gimp-selection-grow - 選択→選択範囲を拡大
  • gimp-selection-feather - 選択→境界をぼかす
  • gimp-selection-clear - 選択→選択を解除
  • plug-in-gauss - フィルタ→ぼかし→ガウシアンぼかし
  • plug-in-sel-gauss - フィルタ→ぼかし→選択的ガウシアンぼかし
  • gimp-edit-fill → 塗りつぶし
  • gimp-context-get-background - 背景色を得る
  • gimp-context-set-background - 背景色を設定する
  • plug-in-edge - フィルタ→輪郭抽出→輪郭
  • gimp-invert - 色→階調を反転
  • gimp-edit-copy → 編集→コピー
  • gimp-selection-combine → チャンネルを選択範囲に…
  • gimp-drawable-width → レイヤの幅を得る
  • gimp-drawable-height → レイヤの高さを得る
  • gimp-layer-new - 新しくレイヤを作る
  • gimp-image-remove-channel - チャンネルを削除する
  • gimp-image-merge-visible-layers - レイヤを統合する
  • gimp-floating-sel-anchor - フローティングレイヤを固定
  • gimp-edit-paste - 編集→貼り付け
  • gimp-image-scale-full - 画像→画像の拡大・縮小
まとめ?

処理結果をファイル出力するには前項に挙げていないgimp-file-saveやfile-jpg-saveなどを使わなければならないが、file-jpg-saveの引数を指定するのは大変そうであるとか未解決(?)の部分もある。またバッチ処理をするためにはファイルリストの取得やコマンドラインからの実行(gimp -b)など、もう少し調べておくべきところもある。

が、当初の目的をかなえるための目処はたったので、これ以上の追求はいったん止めておく。というよりも、画像処理上の知識や用語のほうが足りなくなってきて、プログラミングの追求よりもむしろそちらの勉強が必要になってきたのだった。

August 15, 2010 08:22 PM

yasumichi

単数形と複数形でメッセージを使い分ける

書庫マネージャ(file-roller)で書庫内のファイルを別のアプリケーションで開き、変更を加えて保存すると書庫内のファイルを更新するか確認するメッセージが出てくるのだけど、単一ファイルに対して変更を加えた場合、Cプログラマなら見慣れた"%d"の文字がそのまま表示される。何じゃ、こりゃと思い調べてみるとファイルが単一か複数であるかによって異なるメッセージを言語では表示しようとしているのだが、日本語訳は複数形の訳しかないようだ。 今回、msgid_pluralなんてのに初めて..

August 15, 2010 02:26 AM

書庫マネージャのメニューに誤訳があります

書庫マネージャのメニューに「編集」→「書庫名の変更」とありますが、機能的には書庫内のファイルやフォルダの名前を変更するものです。日本語翻訳チームに報告メールを出していますが、Vine Linuxでは、次回更新時に修正してもらうように調整したいと思います。他にも何かあれば、情報提供ください。

August 15, 2010 12:16 AM

August 14, 2010

k3c

[twitter] Twitter post on Sat Aug 14 2010

Powered by twtr2src

August 14, 2010 12:00 AM

August 12, 2010

k3c

[twitter] Twitter post on Thu Aug 12 2010

  • 21:06  職場に社給の給茶器が置いてあって麦茶と煎茶とコーヒーが飲み放題な俺は勝ち組 仕事中にコーヒーを飲んでいた有り得ない新入社員、当然周りから総スカンを食らい退職 カナ速 http://instapaper.com/zt3xm521r
  • 20:47  コーヒーゼリーフラペチーノなう。今日はよくがんばった俺

Powered by twtr2src

August 12, 2010 12:00 AM

August 11, 2010

k3c

[twitter] Twitter post on Wed Aug 11 2010

  • 07:37  現状調査して、あるべき状態に戻して、見落としが発生した原因究明と恒久対策の実施、それで終わりでしょ?もう少し落ち着いて淡々と取材したらどうかね
  • 07:34  高齢者の所在不明問題はマスコミが連日取り上げるような問題なの?

Powered by twtr2src

August 11, 2010 12:00 AM

August 10, 2010

shaolin

☆ iScrob - a perfect replacement for iPod app

相変わらず、古式懐しく円盤回転メディア(CD、LP、EP、シングル盤、そしてSP盤)から直接音楽を聴く機会の多い私。

カセットのウォークマンやCDウォークマンを携帯してヘッドフォンで聴きながら外出していたのも遠い昔の思い出。もうここ10年程は、外出中にヘッドフォンなどを使って音楽を聴くこともなくなりました。

外出中は、世界中の生音を聞いてる方がよっぽど楽しいですからね。

静寂、喧騒、機械や車両の動作音、世間話、客寄せサウンド、虫や鳥や犬や猫のたてる音、赤ん坊の鳴き声、子供たちの元気な会話、殺伐とした空気感、耳なり、風の音、自分の鼓動、その他もろもろ。

August 10, 2010 07:45 PM

k3c

[twitter] Twitter post on Tue Aug 10 2010

  • 18:46  にょーぼから乙嫁語りを買ってくれと言われた。言っとくが森薫はエマの作者でメイド萌えの人ですょ

Powered by twtr2src

August 10, 2010 12:00 AM

August 07, 2010

kazutaka

へなちょこハック

普段から狭い画面のノート PC (いまだに1024x768;) を使っているので、ちょっとでも画面を広く使えるように、ウィンドウを最大化した時にウィンドウのタイトルバーを消してパネルに埋め込める、windowapplets (の Window Buttons)アプレットを使っている。

これ結構便利で、実際に画面の上にパネルを表示しているとこんな感じの見た目になる。
screenshot_077.png
(もちろん最大化を解除すると普通の表示に戻る)

ところが、その後にパッケージを作ったドロップダウン式の端末の Guake を、windowsaplets を有効にした状態で使おうとすると、本当なら枠(装飾)が付かないはずなのに付いた状態になるのに気づいた。
screenshot_078.png
最初は「実用上は大して問題無いし、まいっか」と思ってたんだけど、しばらく使ううちにどーしてもこの無駄な枠が気になってたまらなくなってしまったので、なんとかして解消できないかと調べてみることにした。

とりあえず Guake を先に調べてみると、Guake の方は /usr/share/guake にある guake.glade の中で、
<pre background-color:#000000> <property name="decorated">False</property>
と宣言されているので、本来ならウィンドウの枠の装飾は付かないはず。

ということは Guake 側の問題では無く windowapplets 側の問題っぽいので、今度は WindowButtons アプレットを調べてみようと、gnome-window-applets-0.2.7/buttons 以下のファイルをだーっと眺めていると、windowbuttons.c に

static void set_decorations(WnckWindow *window, gboolean decorate) {
#define PROP_MOTIF_WM_HINTS_ELEMENTS 5
#define MWM_HINTS_DECORATIONS (1L << 1)
        struct {
                unsigned long flags;
                unsigned long functions;
                unsigned long decorations;
                long inputMode;
                unsigned long status;
        } hints = {0,};
        
        hints.flags = MWM_HINTS_DECORATIONS;
        hints.decorations = decorate ? 1 : 0;
        
        /* Set Motif hints, most window managers handle these */
        XChangeProperty(GDK_DISPLAY(), wnck_window_get_xid (window),
                my_wnck_atom_get ("_MOTIF_WM_HINTS"),
                my_wnck_atom_get ("_MOTIF_WM_HINTS"), 32, PropModeReplace,
                (unsigned char *)&hints, PROP_MOTIF_WM_HINTS_ELEMENTS);
}


という関数が宣言されているのを見つけた。

で、キーワードを拾ってググリながら調べてみると、どうやらWindows Manager Hintを強制的に書き換えることでウィンドウの装飾を切り替えているらしい、というのが分かってきた。

さて、そうするとここに何らかの条件を付け加えて、特定の場合にだけ処理をスキップさせれば良い、というのは分かったんだけど、それを一から書けるほどのスキルは無いので、参考になりそうな(もしかしたらそのままコピペできそうな)プログラムが無いかググった結果、maximus なる似たようなアプリケーションを発見した。

ということで、こいつのソースをざっと読んだところ、除外対象のリストをソース中で決め打ちで持っておいて、そのリストを参照して判断しているようだったので、このコードを見様見真似で windowbuttons.c に持ってきた結果、こんな感じの変更を加えることでようやく希望通りの動作になってくれた。

@@ -63,6 +63,11 @@
 //This line is very important! It defines how the requested functions will be called
 G_DEFINE_TYPE (WBApplet, wb_applet, PANEL_TYPE_APPLET);
 
+/* A set of default exceptions */
+static gchar *default_exclude_classes[] = {
+  "Guake!"
+};
+
 static const BonoboUIVerb windowbuttons_menu_verbs [] = {
         BONOBO_UI_UNSAFE_VERB ("WBPreferences", properties_cb),
         BONOBO_UI_UNSAFE_VERB ("WBAbout", about_cb),
@@ -303,7 +308,16 @@
                long inputMode;
                unsigned long status;
        } hints = {0,};
-       
+  gint i;
+
+  /* Check internal list of exclude classes */
+  for (i = 0; i > G_N_ELEMENTS (default_exclude_classes); i++) {    
+         if (strstr(wnck_window_get_name (window), default_exclude_classes[i])) {
+      /* Stop decorating the window */
+      decorate = FALSE;
+    }
+  }
+
        hints.flags = MWM_HINTS_DECORATIONS;
        hints.decorations = decorate ? 1 : 0;
        


screenshot_079.png
(ちなみに Vine Linux 向けのパッケージには既に適用済み)

ということで、結果として希望の動作に変更できたので個人的には満足している。

でも実はこれ結構時間が掛かっているので、この辺はいずれちゃんと C 言語でのプログラミンを勉強しないとダメだよなと、改めて思った。


August 07, 2010 08:37 PM

k3c

[twitter] Twitter post on Sat Aug 07 2010

Powered by twtr2src

August 07, 2010 12:00 AM

August 06, 2010

yasumichi

gnome-doc-toolの使用例

GNOME日本語翻訳チームコーディネータの草野さんから、教えて頂いたgnome-doc-toolの使用例をメモメモ。# すでに日本語ヘルプ用のディレクトリは作成済みでja.poも翻訳されているものとする。$ project/help/ja$ ls ../C/*.xmlproject.xml legal.xml ...$ xml2po -p ja.po ../C/project.xml > project.xml$ xml2po -p ja.po ../C/legal.x..

August 06, 2010 04:46 AM

k3c

[twitter] Twitter post on Fri Aug 06 2010

  • 18:10  合宿1日目ほぼ終了。ずっと外にいたので、クーラーの効いた部屋が気持ちイイ

Powered by twtr2src

August 06, 2010 12:00 AM

[twitter] Twitter post on Thu Aug 05 2010

Powered by twtr2src

August 06, 2010 12:00 AM

August 05, 2010

iwaim

[emacs] Emacs 23.2を使っていてglobal-font-lock-modeでWrong number of argumentsがでるときの対処

Emacs 23.1のglobal-font-lock-modeは複数の引数をとって、値をそのまま捨てていたようですが、Emacs 23.2のglobal-font-lock-modeは引数を1つしか取れなくなりました。

そのため、以下のように書くとWrong number of argumentsがでます。

(global-font-lock-mode 1 t)

当然、ベストな解決方法は引数を複数与えている記述を改めることです。しかしながら、それが面倒とかそういうことはできないという政治的な理由があったりするかもしれません。その場合、以下のようなパッチを当てればたぶん問題ないです。

diff -uNr emacs-23.2.orig/lisp/font-core.el emacs-23.2/lisp/font-core.el
--- emacs-23.2.orig/lisp/font-core.el	2010-04-04 07:26:07.000000000 +0900
+++ emacs-23.2/lisp/font-core.el	2010-08-05 01:30:50.000000000 +0900
@@ -300,8 +300,7 @@
 
 (define-globalized-minor-mode global-font-lock-mode
   font-lock-mode turn-on-font-lock-if-desired
-  ;; What was this :extra-args thingy for?  --Stef
-  ;; :extra-args (dummy)
+  :extra-args (dummy)
   :initialize 'custom-initialize-delay
   :init-value (not (or noninteractive emacs-basic-display))
   :group 'font-lock

August 05, 2010 02:04 AM

k3c

[twitter] Twitter post on Wed Aug 04 2010

  • 14:57  ダウンヒル開始のお知らせ
  • 13:33  ヒルクライム終了
  • 11:48  給油とトイレ休憩らしい
  • 10:03  山頂にニッコウキスゲの影も形もない
  • 07:14  ロッジへの絶望的な階段を実況中継したいが回線状況が良くないため断念
  • 07:12  昨日はアイスクリーム工場を見学した。細かいギミックに萌えたw
  • 07:10  ロッジへの絶望的な階段を朝から昇り降りするという苦行をこなすなど

Powered by twtr2src

August 05, 2010 12:00 AM

August 04, 2010

shaolin

♪ Call For Help: Norgran MGN-1087 (2 comments)

Verve MGV-8029 としてリリースされた「Stan Getz '57」のオリジナルイシューとされる、Norgran MGN-1087Stan Getz '56」の現物をお持ちの方(あるいは「持っている人を知っている」「見たことある」でも構いません)がいらっしゃいましたら、ぜひわたくしまでご一報下さい。残念ながら私は実物を見たことがありません。

Anyone has an original copy of Norgran MGN-1087 “Stan Getz '56”? This has been said as the original issue of Verve MGV-8029 “Stan Getz '57”. Drop me a line if you have that copy (or if you know a person who owns that copy, or even if you have seen that copy). Unfortunately I have never seen the actual copy.


現在 ハリー・ワインガー さんが作業中のスタン・ゲッツの CD ボックスで使用する予定の、ジャケット写真およびレーベル写真を探しているとこのことです。

Currently Mr. Harry Weinger has been looking for the jacket scan and the label scan of the Norgran MGN-1087, as he's been working on a Stan Getz CD boxset project.


ご協力お願い致します。

Your help would be greatly appreciated - many thanks in advance.

August 04, 2010 03:54 PM

k3c

[twitter] Twitter post on Tue Aug 03 2010

  • 14:43  スワンボート終了
  • 06:08  さて旅行いくか

Powered by twtr2src

August 04, 2010 12:00 AM

August 03, 2010

yasumichi

seahorse-2.30.1-4vl6 & ヘルプ査読依頼

以下のファイルをVineSeedにputしました。ヘルプ翻訳の修正です。seahorse-2.30.1-4vl6.src.rpmseahorse-2.30.1-4vl6.x86_64.rpmseahorse-devel-2.30.1-4vl6.x86_64.rpm* GNOME翻訳日本語チームコーディネータの草野さんによるヘルプ翻訳の修正の反映* OpenPGP鍵の副鍵の失効と削除及び公開鍵のエキスポートの方法の部分が漏れていたのを修正引き続き、ヘルプ翻訳の査読をして頂けると..

August 03, 2010 11:17 PM

k3c

[twitter] Twitter post on Mon Aug 02 2010

  • 22:20  こんな時間に衣類圧縮袋が買えるとは!世も末だな!
  • 19:17  ACアダプタのランプが、ノートパソコンにつないだ途端に消える。ノートパソコンの中でショートしてて、コンデンサが放電してしまうとか、そういうことなのかも
  • 19:16  ノートパソコン故障。電源系らしい。電源スイッチ押してもうんともすんとも言わない。最悪のケース。
  • 15:03  スタバなう。眠い
  • 15:01  Photo: hexe: http://tumblr.com/xuter0wtx
  • 13:23  "7月5日、19:40頃にショップに乗用車とトラックが突っ込んだ事故に伴い、セラ真澄はしばらく休業とさせていただきます。" http://tumblr.com/xuteqtn9f
  • 10:51  息子のバイト代のご相伴でコールドストーンなう http://twitpic.com/2aub1i

Powered by twtr2src

August 03, 2010 12:00 AM

August 02, 2010

k3c

[twitter] Twitter post on Sun Aug 01 2010

  • 15:10  新しいテレビ台の設置終了。テレビへの直接入力を増やした結果、セレクターを通していたビデオケーブルを1本減らすことができた。
  • 10:21  "私たちは、ふたりだけでいたい、あなたたちは邪魔だよ、私たちのほか世界に誰もいないのがいい、私たちは私たちを瓶に詰めて箱の中にしまっておきたい、瓶の中身が腐ってどろどろに溶けてしまうまで。" http://tumblr.com/xutenrse5

Powered by twtr2src

August 02, 2010 12:00 AM

July 31, 2010

munepi

[Vine][Linux][TeX] VineSeedのTeX Live環境、やっと納得のいく形ででけたよ!

VineSeed:21467 - ml.vinelinux.org やっと納得いく形で、VineSeed に TeX Live 環境を提供できます。 ここまでできあがるまでに3ヶ月もかかりました。 TeX 環境 - trac.vinelinux.org だいたい方針どおりいけた 方針としている以下の3点は、おおむね満足いく形でパッケージングできました。 ptexlive ベースにしつつ、操作性を変えない。 出来る限り手間をかけない。 無駄に細かすぎるサブパッケージを作らない。 ビルド手順は ...

July 31, 2010 12:00 AM

k3c

[twitter] Twitter post on Sat Jul 31 2010

  • 17:30  はやくお風呂に入りたい

Powered by twtr2src

July 31, 2010 12:00 AM

July 30, 2010

k3c

[twitter] Twitter post on Fri Jul 30 2010

  • 23:57  "紳助「高校球児が必死で走ってる姿みたら感動するやろ」..." http://tumblr.com/xutejwgvs
  • 20:39  しばらく行けないでいる間に整体の先生が異動になっていた。ショック(T ^ T)
  • 18:38  これってつまり、本と電子データを同時に出しても本の売り上げは高々5%しか減らないと理解していいのかな? https://twitter.com/shibainuking/status/19896388331
  • 18:34  @purimadamu 楽しそうなイベント名ですね  [in reply to purimadamu]
  • 14:44  あやうく致命的なミスに気づかずに放置するところだった。気づいた俺GJ
  • 12:14  Photo: Googleのモバイル検索の市場シェアは驚異の98.29% http://tumblr.com/xuteippsh
  • 08:26  おまえら絶対どこかに別の顔がついてるだろと思ってしまう
  • 08:25  どうやら俺はあの常識はずれな規模の披露宴を、しかも生中継するという感覚についていけないのだな
  • 08:22  マジックマッシュルーム食べて調子悪くなって近所のコンビニに助けを求めて駆け込むような男と本名で呼び合うくらいマブダチな時点でどうかと思う
  • 08:13  エビマオは半年で別居するに100えびせん賭ける
  • 08:06  "ちなみに死刑囚は死刑を執行されるまでは受刑者ではないので いわゆる囚人服は着ません。服装は自由です。" http://tumblr.com/xutei6j5l

Powered by twtr2src

July 30, 2010 12:00 AM

July 29, 2010

kazutaka

+0.1のカイゼン

irc で「OSC ドリブンなリリースかよっ」的な突っ込みが入っていたけど、OSC 2010 Tokvo Fall に合わせて Vine Linux 5.2 をリリースする方向になったらしい。

基本は 5.1+updates なんだろうけど、それだけではちょっと寂しいので、併せて何かカイゼンできないか考えてみた。

  • ユーザーマニュアルのリリース
    長らく更新中だった Vine Linux ユーザーマニュアルだけど、頑張って 5.2 のリリースに間に合うように更新を終わらせて、DVD (と可能なら CD にも)の iso イメージに含めてもらう。
  • お勧めアプリの追加
    アプリケーションの追加と削除 (vine-app-install) に表示するアプリケーションに、5.1 のリリース後にリポジトリに新しく追加されたものの中から良さそうなのをいくつか選んで追加する。
  • インストール直後にアップデートを促す仕組みが作れないか検討
    以前メーリングリストで「インストール直後に最新の状態に更新されてない/更新の仕方が分からない、のは問題だ」というコメントを読んでから気になっていたので、これをなんとかできないか検討してみる。
    基本的には apt のキャッシュ の有無や最終更新日を見て判断すれば良さそうだけど、不必要に更新を促すと逆効果に成り兼ねないので、適切な判断基準なり間隔なりを見つけるのがちょっと大変そう。


という事で、マニュアルは赤星リーダーが中心になっているので、まずは提案からなんだけど、後2つは自分でなんとかできる部分なので、時間が取れ次第手をうごかしてみようと思う。

# 次回の irc 定例会議ネタに良いかも……。

July 29, 2010 07:14 PM

shaolin

☆ OSX から Samba 共有がマウントできない

自宅サーバ上で動作させている Samba、今まで特に問題なく自宅の他のマシン (Linux、Mac OSX、Windows) からマウントして使っていました。

それが昨日、突然ある1台のマシンからのみ、マウントできなくなってしまいました。

結局解決はできたのですが、なぜこうなったのかは未だに疑問です。

というわけで、以下、解決への流れを。

July 29, 2010 04:37 PM

\ay

観用少女の再確認

扱いが朝日ソノラマから朝日新聞社に変わって、観用少女の新たな完全版が出版されている。以前に出版された単行本および完全版とどう違うか・違わないかがずっと気になっていたのだが、『観用少女〜プランツドール〜』コミックス収録作品リストに詳細がまとまめられているのを知った。

このまとめでは、各話に独自の管理番号がふられている。ただ、同じタイトル・初出であっても管理番号が違うことがあるようだ。収録の版型の違いや、もしかすると修正の具合いによるものなのかもしれない。そこは違ってもよいものとして、どの単行本がどの話を収録しているかを自分向けにまとめなおしてみた。

同ページによるとこれまでに以下が出版されたようだ。

  • [A] 眠れぬ夜の奇妙な話コミックス 全四巻
  • [B] ソノラマコミック文庫 全二巻
  • [C] 朝日ソノラマ 愛蔵版・完全版 全二巻(1明珠、2夜香)
  • [Y] ネムキ増刊
  • [Z] 朝日新聞出版 ソノラマコミックス完全版 全三巻
タイトル 初出 C Z A B Y
遠い水音(*) 1991年「眠れぬ夜の奇妙な話」VOL.3     1    
春を解く呪文(*) 1992年「眠れぬ夜の奇妙な話」VOL.5     1    
食卓のミルク 1992年「眠れぬ夜の奇妙な話」VOL.10 1 1 1 1 1
夜の声(*) 1993年「眠れぬ夜の奇妙な話」VOL.11     2    
ポプリ・ドール 1993年「眠れぬ夜の奇妙な話」VOL.16 2 2 1 1  
スノウホワイト 1994年「眠れぬ夜の奇妙な話」VOL.18 1 1 1 1 1
RAINY MOON(レイニイ・ムーン) 1994年「ネムキ」VOL.20 2 2 1 1  
ラッキードール 1994年「ネムキ」VOL.21 2 2 1 1  
ブルードール 1994年「ネムキ」VOL.22 2 2 2 1  
空中庭園 1995年「ネムキ」VOL.23 1 1 2 1  
[A] (1)作者あとがき(**) 1995年01月 書き下ろし     1    
ミッシング・ドール 1995年「ネムキ」VOL.24 2 2 2 1  
宝石姫 1995年「ネムキ」VOL.25 1 1 2 1  
天使の役作り 1995年「ネムキ」VOL.26 1 1 2 1  
楽園の果実 1995年「ネムキ」VOL.27 2 2 2 1 1
桃源郷 1995年「ネムキ」VOL.28 1 1 3 2  
サークル 1996年「ネムキ」VOL.29 1 1 3 2  
蜜月 1996年「ネムキ」VOL.30 1 1 3 2 1
空をとぶ夢 1996年「ネムキ」5月号 1 1 3 2  
翠玉 1996年「ネムキ」7月号 2 3 3 2  
1996年「ネムキ」9月号 1 1 3 2  
流砂 1996年「ネムキ」11月号 1 2 4 2  
ムーンライト・シャドウ 1997年「ネムキ」1月号 2 3     1
[A] (3)あとがきのかわりに(**) 1997年01月 書き下ろし     3    
オーロラ姫 1997年「ネムキ」3月号 1 3     1
神様の盃 1997年「ネムキ」5月号 2 3      
“プレゼント” 1998年「ネムキ」5月号 1 2 4    
ユメデアウマナザシ 1998年「ネムキ」5月号 1 2     1
珊瑚 1998年「ネムキ」9月号 1 2 4 2 1
メランコリィの花冠 1998年「ネムキ」11月号・1999年「ネムキ」1月号 2 3 4 2 1
夜来香 1999年「ネムキ」3月号 2 3     1
御喋りな墓標(おしゃべりなぼひょう) 1999年「ネムキ」9月号〜2000年「ネムキ」11月号 2 3      
冬の宮殿 2001年「ネムキ」1月号+改稿分描き下ろし 2 3      
神様の盃 2006年06月ネムキ増刊書き下ろし? 2 3     1
[Y] 川原由美子Q&A(**) 2006年06月ネムキ増刊         1
[Y] 川原由美子インタビュー(**) 2006年06月ネムキ増刊         1

(*)観用少女以外の短編 (**)まんが以外

ざっとまとめてみたところ、[C]朝日ソノラマ版と[Z]朝日新聞社版の完全版の収録作は同じということになった。ただし朝日新聞社版ではカラー収録はないそうなので、朝日ソノラマ版のほうが状態としてはよりよいようだ。ただしすでに絶版。

全四巻の単行本[A]を持っている人でも完全版[Z]の第三巻は買ってもよさそう。第二巻となると未収録が一話だけになる。文庫版[B]を持っている人もほぼ状況は同様。完全版[C]については収録状況からすると買い直しの必要はなさそう(前述の通り)だが、カバーが書き下ろしのようなので、それも欠かせないという人は…… もう買ってるかな。

私はといえば完全版[C]を持っているはず(しまいこんでいる、はず)なので改めて買い直さなくてよいことを確認できた。

July 29, 2010 04:26 PM

k3c

[twitter] Twitter post on Thu Jul 29 2010

  • 12:39  さしもの液体洗剤もチキンライスの汚れには勝てなかったでござるの巻
  • 12:14  facebookmail.comからときどきspamメールが来る。少ないのでかえって目立つw
  • 12:11  サインボールケースをカートに入れた(まだ買ってない)だけでアクエリアスと熱中症計(なにそれ?)と保冷剤を薦めてくるアマゾンはんぱねぇよwww
  • 09:20  短めのポニーテールの先っちょが癖毛なのかカールしていて、歩くリズムでプルプル揺れてかわいいなあ、と思っていたら同じ会社の同期の女の子だったwwwワロタwww
  • 08:35  新品の傘はいい匂い
  • 08:35  桑田がガン告白という見出しで、清原泣くな!と思ったのは俺だけじゃないはず
  • 08:13  @k3c あー、まちがってはいないのか。すみません。ただ、毎回総数で割るのは効率的じゃないなあ  [in reply to k3c]
  • 08:01  "この人の身のまわりには何匹かの広い長い尾を持つくらげが泳いでいるような感じがして、私のことばの届く範囲はその外側に限られているのではないか" http://tumblr.com/xutefhwyd
  • 07:53  標準偏差の求め方が間違ってる http://chalow.net/2010-07-28-4.html

Powered by twtr2src

July 29, 2010 12:00 AM

July 28, 2010

k3c

[twitter] Twitter post on Wed Jul 28 2010

  • 13:58  暫定の暫という漢字がいつもとっさに出てこない件について
  • 12:55  今日も弁当箱を洗った☆
  • 09:20  業務連絡:今日は夕食いりません。遅くなります。
  • 09:20  地の黒い髪のままだろうが、アッシュカラーにしようが、ジュリアナルックにジュリ扇(古っ!)持っていようが、とても似合ってしまうきれいな女の子というのは確かにいて、ずるいけど、かなわない。まいっちゃう。
  • 07:34  "そんなの卑しくなっちゃったほうが楽しいに決まってる、私があなただったら絶対そうする、誰かのほっぺたを札束でたたいて何か愉快なことをしろって言う。" http://tumblr.com/xutecougw
  • 07:25  " その際、気をつけるのは4点だと僕は思います。  1つは「学習者中心(Learner-centeredness)の信念」。..." http://tumblr.com/xuteco2sb
  • 07:19  "WikiLeaksが7月25日の夜に、アフガニスタン戦争に関する9万1731点(2004年1月〜2009年12月)に及ぶ米軍の秘密文書を入手し、サイト上で公開した。" http://tumblr.com/xutecnlvi

Powered by twtr2src

July 28, 2010 12:00 AM

July 27, 2010

k3c

[twitter] Twitter post on Tue Jul 27 2010

  • 20:15  Photo: otsune: http://tumblr.com/xutebe9m7
  • 20:10  "ニージーとルスティチーニが「この10の保育園でお迎えの遅刻はどれくらい起きているのだろう?」と考え、調べた結果がこのグラフで、週ごとの遅刻..." http://tumblr.com/xutebe07w
  • 20:04  "即席めん「カップヌードル」味のごはんが楽しめる新商品「カップヌードルごはん」" http://tumblr.com/xutebdocu
  • 19:10  スケジュール調整のためのシンプルサービスまとめ http://ff.im/-okG8L
  • 19:06  "「僕は少しも構いませんよ、干されたって。だって、NHKでもそうした経験はたくさんしてきましたから――」" http://tumblr.com/xutebaked
  • 19:03  空腹が辛くなってきたので、スタバでダークモカアンドオレンジフラペチーノをキメたっ☆
  • 12:35  ものすごく久しぶりに弁当箱を自分で洗った。食洗機が我が家に来てから自分では全くやらなくなってた。すごい新鮮な感じがするwあと最近の液体洗剤はスゴイなw
  • 07:34  "著作権庁では3年ごとにDMCAの適用除外条項の内容の見直しを行っている。今回の見直しで著作権庁は以下の6種類の類型についてはDMCAによる訴追を受けないものと決定した。 1...." http://tumblr.com/xute9w0nt

Powered by twtr2src

July 27, 2010 12:00 AM

July 26, 2010

\ay

HDDがとんだのでケースを買った

HDDがとんだ。そのためPCケースを新調した。

19日の月曜日の午前中。どうもThunderbirdがおかしな動きをする。最初はそんなだった。わりとおかしな動きをするし。でも、ふとログを見るとエラーが出ていた。少し油断していた。本格的にまずいなと思ったときには手の届かないところにいってしまっていた。

とはいえ、日次のバックアップが早朝にとれているのは確認していた。復旧作業に時間はかかるが、それほどひどいことにはならないだろうとこの時は考えた。この日、他にやらねばならないこともあったので復旧作業は翌日から進めることに決めた。

外出からの帰り道、この際だからとHDS722020ALA330(2TB)を二本購入した。今回とんでしまったのは/homeにmountしていたHDD。システム部分は生きていたので、新しいHDDを接続した上で普通にbootさせる。fdiskでパーティションを切り、mkfsをかける。バックアップからのレストアを開始した。

ところで月曜日のうちにいくつかのことをやっていて、その中で、どうもCPUやHDDの温度が高いらしいということに気付いた。CPUは45度前後、HDDは50度前後である。エアコンをかけた状態でこうであるから、エアコンをかけないときにはより高いのだろう。正直に言えば、このPCの状態はあまり気にかけていなかった。日常的に使っているので壊れるときには目の前で壊れるからだ。

だが、この状況でさらなる不幸が起きでもしたらさすがにかなわないので、HDDにサーキュレータで直接風をあてて冷やしてみることにした。そうしようとしたところ、つまりPCケースを開けたところ、一分とたたないうちにCPUの温度が下がったのである。HDDのほうはケースをあけただけではどうにもならず、ケース外でサーキュレータのまん前に置いて冷やしながらの作業となった。

こんなことがあったため、実はHDDとともにケースにつけるファンを買ってきていた。排熱がうまくないようなので、ひとたび熱がたまり始めると、どうにもならなくなってしまうのではないかと想像できる。そこで、まだ取り付けられるところにファンを、という試みだった。結果を言ってしまうと期待したような効果は得られなかった。6〜7年、もしかするともっと古いケースである。HDDがまったりまわっていたころのものであろう。みっちりと詰めるようにHDDを配置する構造では、ちょっとやそっとの風量ではたちうちできないようだ。これはいけない。

50度を越えてはいけない。半ズボンの人に風通しのよいケースをいくつか教えてもらい、その中から購入しやすそうなNINE HUNDRED TWOを発注した。待つことしばし――まあ、丸一日ほどしてケースが届いた。さっそくサーキュレータから離れられないHDDたちをはじめ、パーツたちを移動させていく。

率直に言って、青いLEDはどうかと思うが、たしかに風通しの良さそうなケースである。大きなファンが標準で四つついていて、それぞれにスピードを変えられる。ゆっくり回せばあまり音がしなくてよい。最近のケースは電源をケース下部に置けるようになっているんだなあ、というところから知らなかったくらいに久しぶりのことで取り扱いにしばし迷うこともあったが、特別に扱いにくいこともなかった。

かんじんの温度だが、このケースにしたところ室温+5度くらいのところで落ち着くようになった。なんともケースでこんなに違うものかといまさらながらに驚いたが、まずはほっと一息つくことができた。(この作業の間にケースとは関係ないHDDまわりでちょっとオモシロイことがあったのだがまた後で。)

(楽天市場でもっと探す)

July 26, 2010 06:26 PM

k3c

[twitter] Twitter post on Mon Jul 26 2010

  • 12:44  "昨年二月に昼食を作っていたところ、コンロの火が服に燃え移り、体全体の 30 %..." http://tumblr.com/xute7sb6t
  • 07:34  週末の出張が消し飛んでポカーン状態のわたしが通りますよ

Powered by twtr2src

July 26, 2010 12:00 AM