2014年11月30日

世界エイズデー

今日は妙に暖かい一日でした。しかし、明日はまた曇りのようなので、寒くなるのでしょうか。

明日、12 月 1 日は「世界エイズデー」だそうです。最近はエボラ出血熱の方に話題が集中していますが、日本でも HIV 感染者は増加の傾向にあるようです。しかし、治療法はかなり進化しているようで、感染しても適切な治療を受ければ発症をかなりの期間抑えられるのだとか。
エイズで亡くなった有名人というと、ミュージシャンならフレディー・マーキュリー、俳優ならアンソニー・パーキンスを思い浮かべます。洋楽にハマっていた頃によく聴いていたラットのギタリスト、ロビン・クロスビーもエイズで亡くなっていましたね。それを知ったのは、もう亡くなった後のことで、ラット再結成のニュースを見た時でした。

エイズにしろ、エボラにしろ、まだまだ怖い病気ではあります。突然変異して感染力が強まるようなことがないことを祈りたいと思います。  

Posted by fussy at 21:32Comments(0)TrackBack(0)

2014年11月29日

ドキュメント作成も自動で

明日で 11 月も終了。今年もついに残り一ヶ月です。

年末になると急にあせりだすというのも不思議なものですが、今年は割とのんびりと過ごしています。個人消費の落ち込みの例にもれず、特に大きな買い物をする予定もなく、何枚かの CD と何冊かの本くらいしか考えていません。ただ、ちょっとしたプログラムを公開しようかと考えていて、今はその準備をしています。

公開するにあたってドキュメントの整備が必要になるのですが、手作業ではかなりの労力が必要になります。ソースのコメントからドキュメントを自動的に作成するような機能は統合開発環境なんかでよくありますが、未だにエディタでソースを組んでいる身としては利用したことがなく、今頃になっていいモノがないか探していました。
Doxygen というものが割と有名なようで、早速使ってみたらこれが非常に便利でした。変換できるように書式を見なおす必要がありましたが、ドキュメントを手作業で作成する手間に比べれば大したことはありません。作成されたドキュメントも非常に見やすく、自分が一番参考にできそうなくらいです ( 自分で作っておいて何をやっていたのかわからなくなるというのはよくある話です )。

こういった便利な道具を使いこなせばもっと効率もよくなるんでしょうけど、なかなかその気になれないというのは来年こそ何とかしたいものです。  

2014年11月24日

C++ メモランダム (reference)

今日、11 月 24 日はフレディ・マーキュリーの命日でしたね。もう 20 年以上も経過しています。
そういえば、少し前にブライアン・メイを見ました。テレビだったか動画サイトだったか忘れましたが何かのインタビューだったと思います。内容も覚えてないですが、ただ「だいぶ老けたな」と思いました。フレディ・マーキュリーが生きていたら、どんな感じになっていたでしょうかね。

C++ で利用できる参照型 (reference) X& は非常に便利で、特にヌル参照が発生しにくいという利点があるのですが、発生がゼロになるというわけでもなくて、例えば

void test( const int& p )
{
  std::cout << p << std::endl;
}

int main( int argc, char* argv[] )
{
  int* i = 0;
  test( *i );
}

と書いてもコンパイルはできてしまい、実行結果は segmentation fault になります。一時期、参照ならヌル参照は絶対発生しないと思い込んでいた時期がありました。それから、ポインタの参照渡しは

int& *p

ではなく

int* &p

と書きます。前者は「参照へのポインタ」で定義不可能、後者は「ポインタへの参照」を意味します。これ、いつも逆に思えて混乱します。

参照の使い方としては、

int a = 5;

int& ref_of_a = a; // a への参照

int* pnt_of_a = &a; // a へのポインタ

int* &ref_of_p = pnt_of_a; // pnt_of_a への参照 ( = a へのポインタへの参照 )

int* pnt_of_r = &ref_of_a; // ref_of_a へのポインタ ( = a へのポインタ )

くらいを整理しておけば大丈夫でしょうか。ちなみに参照はエイリアス(別名)という意味なので実体がありません。なので、参照へのポインタというのは定義不可能ということになります。また、初期化も必ず必要です (別名にするものを渡さないと初期化できないためです)。
  

2014年11月23日

緊急地震速報

今日は「勤労感謝の日」。元々は五穀の収穫を祝う「新嘗祭」だったものを、戦後に別の意味を持つ祝日として改めたのだそうです。で、勤労者に感謝するとかではなく勤労そのものに感謝する日らしいのですが、今の御時世は働けるだけ感謝しなければならないということでしょうか。五穀収穫に感謝するという意味の方がわかりやすいんですけどね。

昨夜の長野県の地震は、揺れが来るより先に緊急地震速報が流れたので、放送が流れたときはかなりビビリました。一分ほどしてほんの少し揺れた程度だったので、地震速報がない方がビビらずにすんだようです。とは言っても、速報が流れるというのはやはり多少安心できます。PC 上で緊急地震速報が流れるアプリはないものかと少し探してみましたが、やはり最近は iPhone や Android 対応アプリばかりのようですね。少々残念です。  

Posted by fussy at 22:45Comments(0)TrackBack(0)

2014年11月22日

小雪

今日は「小雪」。雪が少し降り始める頃だそうですが、北海道などでは結構降ってますよね。北国ではあれでも少ない方なのでしょうかね。名古屋だったら確実に交通マヒしてしまう量です。

「Poisson Blending」という、画像の重ね合わせを自然に行うための手法について、サンプル・プログラムを見つけたのでそれを利用して簡単なツールを作成してみました。うまくいく場合があればダメな場合もあって、どこかに不具合がある可能性もあるので、もう少しテストが必要そうですが、それでも面白い結果が得られるのでなかなか楽しめます。サンプル・プログラムを公開して下さった方に感謝。

そして、恒例の大学入試問題ですが、今回は「数学問題bot(個人用)」から名古屋大の問題を取り上げました。例によって合っている保証はないです。一週間ほど、暇を見つけてはチャレンジしていました。

-----

■ a ≥ b > 0 とする。自然数 n に対して、次の不等式を証明せよ。
an - bn ≤ ( n / 2 )( a - b )( an-1 + bn-1 ) (1982年名大)

a > 0 なので、両辺を an で割ると、

(左辺) = 1 - ( b / a )n

(右辺) = ( n / 2 )( 1 - b / a )[ 1 + ( b / a )n-1 ]

そこで、b / a = x とすると 0 < x ≤ 1 で、(左辺) と (右辺) は

(左辺) = 1 - xn

(右辺) = ( n / 2 )( 1 - x )( 1 + xn-1 )

となります。(左辺) は

(左辺) = ( 1 - x )( 1 + x + x2 + ... + xn-1 )

なので、1 - x = 0 ( つまり a = b ) なら両辺は等しくなり成り立ちます。それ以外なら 1 - x > 0 なので、両辺を 1 - x で割って

(左辺) = 1 + x + x2 + ... + xn-1

(右辺) = n( 1 + xn-1 ) / 2

の大小関係を調べればよいことになります。n = 1 のとき、(左辺) = 1、(右辺) = 1 で成り立ちます。

1 + x + x2 + ... + xn-1 ≤ n( 1 + xn-1 ) / 2

が成り立つと仮定したとき、

1 + x + x2 + ... + xn
= 1 + x( 1 + x + ... + xn-1 )
≤ 1 + nx( 1 + xn-1 ) / 2

で、n + 1 のときの (右辺) = ( n + 1 )( 1 + xn ) / 2 と 1 + nx( 1 + xn-1 ) / 2 との差は

( n + 1 )( 1 + xn ) / 2 - [ 1 + nx( 1 + xn-1 ) / 2 ]
= ( n + nxn + 1 + xn - 2 - nx - nxn ) / 2
= [ n( 1 - x ) + xn - 1 ] / 2

となります。これを f(x) とすると f(0) = ( n - 1 ) / 2 ≥ 0、f(1) = 0 です。f'(x) は

f'(x) = ( -n + nxn-1 ) / 2 = n( xn-1 - 1 ) / 2

で、0 < x < 1 において f'(x) < 0 なので、f(x) は 0 < x < 1 の範囲で単調減少で極値を持ちません。

従って、f(x) ≥ 0 ( 0 < x ≤ 1 ) が成り立ち、

1 + x + x2 + ... + xn ≤ 1 + nx( 1 + xn-1 ) / 2 ≤ ( n + 1 )( 1 + xn ) / 2

となることが示されるので、帰納法により不等式が成り立つことが証明されました。

-----

(補足) 元のサイトでは、(右辺) が ( n / 2 )( a - b )( an-1 - bn-1 ) となっていました。しかし、この場合 n = 1 のときはゼロになってしまうので、不等式が成り立たず、他のサイトで符号が違うことを確認しました。作者さんへは返信をしていますが、今のところはまだ修正されていないようです。  

Posted by fussy at 22:14Comments(0)TrackBack(0)数学

2014年11月18日

ブラック・レイン

日本を代表する俳優の高倉健が亡くなりました。ご冥福をお祈りします。

世代的にはひと昔前の方なので、出演された映画をたくさん見ているわけではないですが、印象的だったのが「ブラック・レイン」。リドリー・スコットが監督しただけあって、大阪の街並みがまるでブレードランナーのようでした。今は亡き松田優作もこの映画に出演して強烈な印象を残していました。
高倉健は刑事役で出演していましたが、初登場でざるそば (いや、うどんだったか?) をすする場面が妙にかっこ良く見えました。そばを食べるときはああでなくてはと思わせるような食べっぷりでした。いや、本当に。

ブラック・レインは、日本の脇役陣も強烈な個性の持ち主ばかりで、主演の刑事の同僚役がアンディ・ガルシアだったこともあって、主演の印象はすごく薄いです。俳優が誰だったかも覚えていませんでした(先ほど調べたらマイケル・ダグラスでした)。

「ぽっぽや」は小説を読んでいるからと映画は見てないですが、一度くらい見てもいいかな。またテレビで追悼番組として放映されるかもしれないし。  

Posted by fussy at 23:53Comments(0)TrackBack(0)

2014年11月16日

C++ メモランダム (binder/adapter)

今日も寒い一日でした。11 月も半分が終わり、師走が近づいてくるとどうしても慌てだすんですよね。別に慌てる必要もないのに。

少し前に、STL のバインダ・アダプタを利用していて意味不明なエラーに遭遇し、ハマったことがあったので、ここで紹介しておきます。

次のようなクラスを作ったとします。

template<class T> struct OverloadTest
{
  void operator()( T& t1, T& t2 )
  { std::cout << t1 + t2 << std::endl; }

  void operator()( const T& t1, const T& t2 )
  { std::cout << t1 + t2 << std::endl; }
};

使うときは

OverloadTest<int> test;
int i = 5;
int j = 6;
test( i, j );

などと書けば、i + j = 11 を出力するという簡単なものです。ところが、

OverloadTest<int&> test;

と型を参照型にすると、

error: ‘void OverloadTest<T>::operator()(const T&, const T&) [with T = int&]’ cannot be overloaded
error: with ‘void OverloadTest<T>::operator()(T&, T&) [with T = int&]’

などとエラー表示されます。この場合は、メンバ関数をどちらか一方にすれば解決するし、そもそも二つのメンバ関数を定義しておく必要はありません( const T& の方を採用すればいいです )。

これと同じ現象が、STL の中の bind2nd と ptr_fun を組み合わせて使った時に発生しました。元々、構造体 RGB 用に用意した任意の演算子多重定義関数を、第二引数は固定値にして呼び出したいために作ったクラスです。

template<class T> class RGB_BindFunc : public RGB_Op
{
  typedef RGB& (*Op)( RGB&, T );

  std::binder2nd< std::pointer_to_binary_function<RGB&,T,RGB&> >
    ptrBinFunc_;

public:

  // PtrFunc コンストラクタ
  RGB_BindFunc( Op f, T t )
    : ptrBinFunc_( std::bind2nd( std::ptr_fun( f ), t ) ) {}

  // operator() : 任意の演算処理(override)
  virtual bool operator()( RGB& rgb )
  {
    ptrBinFunc_( rgb );
    return( true );
  }
};

これを次のように利用しようとすると、

RGB_BindFunc<unsigned char> func( (RGB& (*)( RGB&, unsigned char ))operator&=, 0x0F );

以下の様なエラーが出力されます。

.../binders.h:152: error: ‘typename _Operation::result_type std::binder2nd<_Operation>::operator()(typename _Operation::first_argument_type&) const [with _Operation = std::pointer_to_binary_function<GraphicLibrary::RGB&, unsigned char, GraphicLibrary::RGB&>]’ cannot be overloaded
.../binders.h:146: error: with ‘typename _Operation::result_type std::binder2nd<_Operation>::operator()(const typename _Operation::first_argument_type&) const [with _Operation = std::pointer_to_binary_function<GraphicLibrary::RGB&, unsigned char, GraphicLibrary::RGB&>]’

しばらくこのエラーに悩みましたが、binders.h の中でまさにさっき示したような定義がされていて、参照付きの変数が関数内にあるとうまくいかないということがわかったので、最終的に bind2nd と ptr_fun は使わずに組むことにしました。

Googleなんかで検索すると他にも悩んでいた方はいるようで、その中のアドバイスをいくつか参考にしました。しかし、ズバリこれで解決というようなものはなかったです。そもそもバグの類なのか、想定外の使い方をしてしまったのかも判別が付いてないです。  

2014年11月15日

真冬にPCを使うとき

急に寒くなりました。しかし、手元の温度計を見ると 17 度と表示されています。とてもそうは思えないくらい寒いです。

冬にはめっぽう弱い自分としては、そろそろ防寒対策をしておきたいところです。ホットカーペットはもはや必需品ですが、PC がデスクトップなので布団にもぐりながら操作するなんてことができません。そこで、前に購入して利用をほとんどしなくなったノート PC を活用しようかと考えてます。プリインストールされていた Windows7 は消去して、今は Xubuntu が入っています。
このノート PC、昔デスクトップ PC が壊れたときに活躍していました。その時も冬だったので、主にコタツで使っていました。しかし、コタツに入っているといつの間にか眠ってしまったりするんですよね。で、これではいけないと思い、新しくデスクトップ PC を購入して机の上で使うようになったわけです。そう考えると、冬の間ノートブックに切り替えていいのか、少々悩みどころではあります。

机の下にオイルヒーターでも置くという手もありますね。もしくは足専用の防寒具を買うか。毎年そう思いながら、結局用意しないのはなぜなんでしょうか。  

Posted by fussy at 23:57Comments(0)TrackBack(0)

2014年11月09日

翻訳サイト

新しいアルゴリズムを勉強したり、プログラムを組んだりしていると、どうしても英語を読まなければならない機会が増えてきます。英語が得意で語彙も豊富なら問題ないんですが、残念ながら読解力も語彙力も乏しい身には大変な作業になることもあります。

以前は、Firefox 用のプラグインを活用していました。単語にカーソルをあてるとサブウィンドウ上に日本語訳が表示されるというもので、全体を翻訳せずに単語の意味だけ知りたいという場合に便利なものでした。たいていはこの機能だけで足りたので重宝していたのですが、Firefox が新しいバージョンになって利用できなくなり、そのまま消えてしまったようです。非常に残念です。
現在は主に 、アルクの「英辞郎 on the WEB」を利用しています。わざわざページを切り替えなければならないのが煩わしいというのはありますが、英単語を調べるには非常に便利です。あとはたまに Google や Yahoo の翻訳ソフトを使うこともあります。

最近見つけたサイトで「訳GO.com」というのがあります。英辞郎と同じく単語を入力して意味を表示するものですが、スペルが若干違っていても候補を複数表示してくれるので、スペルがあやふやな場合は便利ですね。

英辞郎用の Firefox プラグインがあるみたいですね。しかし、単語を入力したら別ページに出力される仕様のようです。今のページ上で、ツールチップで表示されるようなものがあるといいんですけどね。
  

2014年11月07日

ハリガネムシ

カマキリやバッタなどに寄生する虫に「ハリガネムシ」というのがいます。カマキリのお尻を水に付けると水中に出てきたりすることがあるそうです。乾燥するとハリガネのようになるのだとか。何とも奇妙な生物です。

昆虫に寄生する虫は数多くいて、中には行動までコントロールしてしまうものもいます。カタツムリに寄生する「ロイコクロリディウム」は有名で、カタツムリの触覚に移動してイモムシのように見せることでわざと鳥に食べられ、そこで成虫になるそうです。
NHK の「スーパープレゼンテーション」という番組で、寄生虫をテーマにしたプレゼンテーションが放送されていました。寄生虫が、脳に影響を及ぼして行動までコントロールしてしまうということは昆虫などの世界だけではなく哺乳類でも起こっているそうで、そうなると人間も例外ではないということになります。こう聞くとなかなか怖いものがあります。

逆に、寄生虫によってアレルギーなどが発生しなくなるというようなことも以前聞いたことがあります。寄生虫をお腹に飼うことになりますけどね。  

Posted by fussy at 23:42Comments(0)TrackBack(0)

2014年11月05日

当たりが出たらもう一本

当たり付きの自販機でコーヒーを買ったら、見事に当たりが出ました。
で、もう一個買うことができたのでお茶を選んだのですが、後になって一番高いのを選べばよかったと後悔したのは貧乏性だからでしょうかね。

当たり付きの自販機で当たりが出た場合、キャッシュバックかもう一本選べるかのどちらかだと思うのですが、他にも違うパターンとかあるんでしょうか。会社で休憩中に買うことが多いので、今まで 5 回くらい当たったことがあります。どちらかというとキャッシュバックの方がうれしくて、もう一本買っても一度には飲めないので、たいてい他の人にあげることになります。景品がもらえるというのもいいかもしれませんが、それもモノによるでしょうか。変なキャラクターグッズだったらあまりうれしくないような。

まあ、こんな調子で宝くじでも当たればいいんですけどね。  

Posted by fussy at 22:52Comments(0)TrackBack(0)

2014年11月03日

人工知能は東大入学を夢みるか?

AI を使って東大入試に合格させようというプロジェクトが話題になってます。

学習アルゴリズムや分散処理技術の発達で、今やかなり専門的な分野にまでコンピュータが利用できる範囲が及んでいるように思います。メディアで話題になっていたのが将棋プログラムで、あれもひと昔前までは人間に勝つことは不可能とまで言われていたのに、今ではプロの棋士も打ち負かしてしまうというのはすごいものです。SF の世界にあるような、人工知能が暴走して人間を襲うようになることが将来起こらないことを祈ります。いや、本当に。

人工知能に負けないよう、今回もちょっとした問題を解いてみました。「数学問題bot」から今回は千葉大の問題です。パズルを解くような感じの問題でした。

-----

■ 自然数 a, b, c, d は c = 4a + 7b, d = 3a + 4b を満たしているものとする。1) c + 3d が 5 の倍数ならば 2a + b も 5 の倍数であることを示せ。2) a と b が互いに素で、c と d がどちらも素数 p の倍数ならば p = 5 であることを示せ(09千葉大前期)

1)

c + 3d
= ( 4a + 7b ) + 3( 3a + 4b )
= 13a + 19b
= 5( 3a + 4b ) - ( 2a + b ) より

右辺がが 5 の倍数になるためには 2a + b が 5 の倍数にならなければなりません。

2)

3c - 4d = 5b
4c - 7d = -5a

で、c, d は p を共通因数にもつので、5b と -5a も p の倍数です。ところが a, b は互いに素なので、5b と 5a は 5 以外に共通因数を持ちません。従って p = 5 でなければなりません。

例によって合っているという保証なしです。  

Posted by fussy at 22:40Comments(0)TrackBack(0)数学

2014年11月02日

文化の日

11月になりました。今年もあと二ヶ月を残すのみとなったんですねぇ。

そして明日は文化の日。読書の秋、芸術の秋にふさわしく、美術館や博物館へ行ったり図書館で本を読んだりするのもいいかもしれません。明日はなんとか晴れそうですしね。ちなみに、11 月 3 日は「まんがの日」「レコードの日」「文具の日」でもあるそうです。

レコードという言葉はほとんど使われなくなりましたが、今でも年末にレコード大賞が放送されますよね。しかし CD 大賞とすると少々変な感じがするので仕方ないのかもしれません。LP 版は CD と比べて面積が広いので、ジャケットも当然大きくなります。ジャケットの絵や写真はそれ自体がひとつの作品で、レコードの印象を決める要素の一つだったと思います。個人的に、CD になってジャケットの印象が弱くなったような気がします。ジャケットの中でいいなと思うのは、Pink Floyd の「狂気」と Korn のファースト、Genesis の「Nursery Cryme」に Norah Jones の「Little Broken Hearts」あたりでしょうか。もちろん、中身も非常に素晴らしい作品ばかりです。

ジャケットが発禁になる代表として自分が知っているバンドは Scorpions あたりでしょうか。たいていは「卑猥」という理由のものが多いですが、「暴虐の蠍団」は墓場で撃ち合いしている写真がテロを連想させるということで発禁になっています。ちなみに日本では全て OK になっています。特に「Virgin Killer」のジャケットはやばいだろうと思うのですが、いいか悪いかは別にして、今と比べると昔は大らかだったということなのでしょうか。  

Posted by fussy at 23:43Comments(0)TrackBack(0)音楽