epoll, エッジトリガー, EPOLLRDHUP

このエントリーは社内勉強会用の解説記事です。 普通の人は便利な libevlibuv を使っておきましょう。

epoll はいわゆる C10K 問題に対応するための Linux カーネルが提供する仕組みです。といってもこの問題、32bit 時代のメモリが潤沢ではなかった時代のものなので、いまどき並大抵のプログラムであれば、普通に1コネクション1スレッドで問題ないでしょう。@kazuho 先生がそうおっしゃっていました

まあ御託はさておいて、epoll のマニュアル読んでもちょいわからないところを補足しておきます。

続きを読む

テストコードなんて書きたくない(≠ テストしたくない)

はじめに言っておきますと、テストは重要ですよ。テストしないなんてありえない。

でも、テストコードを書いて当たり前という昨今の論調には、同意できないのです。テスト熱中症になんて到底なれません。そう思うのは私だけではないようで、Rails の作者も書きまくればいいってものではないと言っています。

なぜ同意できないのか、理由を書き連ねて鬱憤を晴らすことにします。

続きを読む

教材としての yrmcds

@ymmt2005 こと山本泰宇です。 [公式発表][official]とは別に、こちらでは [yrmcds][] のもう一つの使い方を紹介します。それと、私の気持ちなどを。

yrmcds は実際のところ、作ることをかなりためらいました。工数という観点でみれば Apache が Redis を扱えるようにするとか、レプリケーションの仕組みを頑張るといったほうが小さい気がしたからです。C++11 の実践課題という動機は個人に寄っているので、会社に十分なメリットがないことには・・・と。

そこで会社へのメリットとして、以下の価値を加えることにしました。

  1. 後進の開発者が設計やプログラミング技法を学ぶ教材として使える
  2. 英語圏では無名のサイボウズの知名度の足しになるようにオープンソース化して宣伝を頑張る
続きを読む

R.I.P. 金子勇氏

金子勇氏の突然の訃報に驚きました。

氏とは数年ほどお付き合いする機会がありましたが、プログラマーとしての才能は疑う余地なく素晴らしいものでした。 あの悪名高い起訴騒ぎを勝ち抜いたことは、未来の才能あるプログラマーを委縮から救う、見事な業績であると感謝しています。

合掌

アセンブリ読んだら負けかなと思ってる

子供のころからできるだけ手抜きして成果を挙げることだけは長けている山本です。

今回は、C/C++ で作ったプログラムが運用中にクラッシュするときのデバッグ方法のお話しです。 開発中のデバッグgdb などでソース追いながらデバッグできますが、運用中ですと [strip][] していたり最適化していたりしてデバッグが難しくなります。 そもそも、いきなりクラッシュすると情報が残らずに困ってしまいます。そんなときどうするか。

Step1. スタックトレースを出力する

続きを読む

マージソートが書けなくても、プログラマになれる方法

久しぶりに社内でプログラミングのレクチャーをすることにしたのだけれども、準備をしていて自分がどうやってプログラマになったかをふと思い返してしまった。結論を書くとあっさり一言で済んでしまうのだけれども、やはり苦労話(?)もないと面白くないのでぐだぐだ書いてみる。

◆コンピューターとの出会い

小学三年生くらいの頃、読んでいた雑誌(確か子供の科学)にマイコンのことがのっていて、四則演算とか表示とかをする簡単な BASIC を見たのが最初です。ゲームウォッチみたいなものを自分で作れるような夢の機械に見えて、それからしばらくは本屋さんでマイコンの本を立ち読みしてました。

当時は英語も読めなかったので、たとえば PRINT のことをピー・アール・インテジャーと読んでいました。INTはインテジャーと読む、と別のところで覚えて、でも PRINT は読み方が分からなかったので。それでプログラミングを覚えられたかというと全くそんなことはなかったです。立ち読みの紹介記事ではさもありなん。

で、親にパソコンをねだり続けたわけですが、確か六年生のころかな、MSX2を買ってもらいました。正確には親のためのものだったんですが、親がキーボードも打てないのを良いことに事実上自分のものにしたのですけど。それでようやく本物のパソコンを触れるようになり、信長の野望初代は BASIC でかかれていたので、STOP すればソースが読めた)や Wizardry で遊びつつ、マシン語(当時はOS)も覚えようとしたのですが。。

全然だめでした。いや、Z80は読み書きできるようになったんですが、I/Oや割り込みの仕方を調べられなくて、面白くもなんともなかったというか。あの当時他の人はどうやってそういう仕様を学んでいたのか、いまだに不思議に思っていたりします。

◆コンピューターとの別れ

で、ゲーム専用機と化した MSX2 で毎日遊んでいたら、中学2年生の頃に、親にパソコン捨てられました(笑)。その後はコンピューターに触る機会なかったのですが、コンピューターを触る仕事に就くという点だけは譲りませんでした。親は医者にさせたかったようですが、頑として拒否した結果、医者でなければ東京大学に行けという妥協案を出されました。

第一希望は1年目からコンピューターを触れる(と思っていた。入らなかったので実際は不明)東工大の5類だったのですが、東大にはコンピューターを触れそうな専攻がないと思っていたので嫌でした。でも親(のお金)には逆らえず、しぶしぶ調べたところ、理学部情報科学科というところでは触れそうと分かりました。

入学後2年は専門ではなく教養、というのがまた嫌なところだったのですが。

◆再会と挫折

無事入学後も、何とかしてコンピューターに触りたかった私は、駒場の授業で「計算機入門」というコマをとることにしました。でもその授業は座学で、実際のコンピューターにはさらわず、ソートなどのアルゴリズムを紹介するものでした。まあでも、このとき初めて、プログラミングというのはマシン語を並べて I/O するだけじゃないんだ、と知ったわけですが。

その授業で知ったマージソートというアルゴリズムが簡単そうだったので、また別の授業(プログラミング入門だったかな?)で Pascal という言語を習ったときに、試しに実装しようとしてみました。・・・実装できませんでした。

今となってはなぜ当時の自分がこんな簡単なアルゴリズムを実装できなかったか分かりません。でも、事実として、作ったプログラムは動かなかったのです。再帰という概念やデータ構造といった基本的な道具立てがなければ、ごくシンプルなプログラムであっても難しい、のでしょう。

さらに、なぜ動かないのか教えてもらおうと思って計算機センターの相談員の人に見てもらいました。・・・教えてもらえませんでした。今となっては、読むに堪えない代物だったのだろうと思います。が、当時はマージソートというのはとても難しいものなのだな、と理解?したのでした。

とりあえず今日はここまで。