福島の日本酒をもらった

先日書いた日本酒の会ですが、おみやげもあって大七の雪しぼりを頂きました。

f:id:r_kurain:20160413173107j:plain 大七なのでこれも生酛作りで、ちょっと癖のあるというか、複雑な味わい。 味がしっかりしてるので、合わせるのもちょっと強めのブルーチーズでもいけるかなと思って試してみたところ。バッチリでした。

f:id:r_kurain:20160413173143j:plain このブルーチーズ、キャステロブルーっていうわりと定番な奴なのですが、スライスしてあって食べやすくて便利です。味もブルーチーズのわりに おとなしいので僕はすきです。

和食じゃなくても、日本酒けっこういけるという話を前に読んだので試して見たわけですが、うまくいってよかったです。 機会をみつけてまた日本酒いろいろ飲みたいけれど、子育て中はなかなか難しいですね。

福島のお酒が美味しかったはなし

先日 id:aliliput さんの招待で、福島の日本酒を飲む会に行ってきた。 これ関連のイベントで、つまりこの記事は福島のお酒のPR。 超絶偏食な私がグルメイベントに参加するのは、とても不安だったのだけど結果としてどれもおいしくてよかった。 良いお店とよいお酒に感謝したい。

さて、"もやしもん"は好きなので2回くらい通して読んでるので、ちょっとくらいの日本酒の知識はある。 しかしその程度で日本酒の会に参加するのはいかがという気もして、前から積読になっていた

白熱日本酒教室 (星海社新書)

白熱日本酒教室 (星海社新書)

を前日に読んでから参加したのだがこれは大正解だった。 呼んでくれた alilipat さんは日本酒が好きなあまりPR業を引き受けているという筋金入りの酒好きなので、 どの日本酒も丁寧な解説があったのだけど、この本を読んでから聞くと座学を実地で復習する感じの、よい授業になった。

さて食事と日本酒のラインナップである。

うすにごり生 辰泉

f:id:r_kurain:20160320155840j:plain いきなりうまかったなあこれ。ブルーボトル。青い瓶は再生ガラスでは作るのが難しくコスト高の瓶。 あえてそんな瓶をつかうお酒は自信作が多いのだとか。 うすにごりってのは、お酒の固形成分の除去がちょっと緩いやつで、ほんの少し白濁している。

f:id:r_kurain:20160320155843j:plain これに合わせるのが、イカ人参と、きのこ味噌と、里芋とじゃこのポテトサラダ。 イカ!椎茸!マヨネーズ!どれも嫌いなやつじゃん死ぬ!!とか思ったのだが、食べてみたらどれも美味しかった。 上に挙げた3つの食材って癖が結構強いので相性悪いと最悪なんですが今回のはとてもよかった。 イカ人参がとくに良かったですね、いっけん人参のきんぴら風なんだけど、噛むとイカの旨味が溢れてくるという。 日本酒に合う。この日の食事はどれも福島で一般的なお酒のアテだそう。

飛露喜 特別純米生詰

f:id:r_kurain:20160320155846j:plain わりと僕の思う日本酒らしい日本酒。辛口って言っていいはず。

f:id:r_kurain:20160320155850j:plain これは馬刺しと一緒に。 馬刺しもなー。数年前なら生肉恐怖で食べれなかったもんなー。 最近は赤身肉大好きなのでこんなに美味しいものはない。 馬刺しといえば、九州のイメージが強いけれど福島でも盛んに食べられているそうで意外な感じ。 これも日本酒にあう。

大七 純米生酛

f:id:r_kurain:20160320155853j:plain 生酛らしいちょっと複雑な味。これは燗で飲んだはず。 生酛っていうのはちょっと手のかかるお酒の作り方だけど、 この大七という酒蔵は全部その生酛でお酒をつくっているらしい。 燗で飲むと香りが強調されるので、おちょこを顔に近づけた瞬間にパッと来るものがあって美味しい。

大和屋善内 どぶろく

f:id:r_kurain:20160320155859j:plain 飲みやすいどぶろくでとても驚いた一品。 どぶろくって独特の匂いでちょっと敬遠したくなるのに、これはいい香りしか無くてとても美味しい。 固形のお米がまだ残ってるのでドロっとした舌触りと、発酵に由来するスパークリングが味わえる。 他のお酒とちょっと違う変わり種なのもあって、印象が強くまた飲みたい。 ラーメンで有名な喜多方で作ってるそうな。

f:id:r_kurain:20160320155857j:plain この辺で、鶏のもつ煮がでてきて、たいへん美味しかったです。 もつといいながら、入ってるのは鶏皮で甘じょっぱく煮てあってお酒がすすむ。 鶏皮も昔は歯ごたえが苦手だったんだよなあ...

会津中将 純米原

f:id:r_kurain:20160320155905j:plain 原酒なんで濃いんですが飲みやすいし、なんというかついもう一杯ほしくなる感じの美味しいお酒。 杜氏が女性っていうのでも有名なんだそう。 東京農大を出て杜氏になって震災を乗り越えてっていう"もやしもん"ばりのお話がこちらで読めます。

ししゃも、チーズの燻製セットといくらの大葉巻きが合わせて出ていて、サイコーでした。

会津純米酒

もうこの辺でかなり酔っぱらいなので、もううまいっすうまいっす。 って飲んでた。雑なレビューですいません。でもうまかった。

飲み方とか

こちらのエントリーにあるように、 水をいっぱい飲んでおくと過度に酔わないというのは有名なはなしで、 先の"白熱日本酒教室"にも書いてあるし、 良いお店は言わなくてもいっぱいお水を出してくれる。 今回のお店もすぐにボトルで水を用意してくれて、お酒にそんなに強くない僕でも楽しく飲めた。

5人で飲む会だったのだけれど、一つのお酒を2合ずつ頼んでもらったので、 一人おちょこで2杯程度で一つのお酒はおしまい。 いろんなお酒をちびちび飲めたので会の進行としてもとても良かった。 日本酒好きな友人を集めて同じような飲みかたをまたしてみたい。 というわけで皆さん大阪にお越しの際はご連絡ください。

日本酒について

僕の日本酒の原体験って、正月に電気ポットで出てくる匂いのきついお酒。 という印象なんであんまり好きじゃ無かったのだけれど、京都に住んでたころに美味しい日本酒を出す

馳走いなせや

食べログ 馳走いなせや

とか
両川

食べログ 両川

とかに出会いまして、とても好きになりました。 今回のお店

も品揃え、雰囲気、お料理どれもとても良かった。 いいお店にいって、料理にあうやつ適当に出してくれっていうと最高です。 ワインほど高くないのも良いところで、リーズナブルにいろいろ試せるのが楽しい。 また日本酒のみに行きたい。

CO2モニタリングのためにセンサーをHackした話

昨年末にこの記事を読んで以来、昼過ぎに眠くなるのは CO2 濃度のせいでは無いかと思い始め、CO2センサーへの興味が湧いて仕方がなっかのだが、CO2センサーはいかんせん高い。そう悩んでいたところ、格安のセンサーを見つけたのでUSBで値を取れるようにしてみた。

f:id:r_kurain:20160126163549j:plain

まとめ

  • CO2mini というセンサーは何処にも書いてないが、USBデバイスとして認識できる
  • gem を作ったので bundle install すれば Mac でも Linuxでも値がとれる。
  • 僕のオフィスのCO2濃度は別に高く無さそう。

センサー選び

CO2 濃度を計れるセンサーは、専門家向けのものが多く価格帯が高い。 PCから値を取ろうと思うと、手頃のなのは

たぶんこの辺で、HTTPで叩けるAPIもあるので悪くない。 気温や湿度もとれる。お金に困らないひとはとりあえずこれで良さそう。

だが 2万4000円もするし、最近売り切れてたりするので、本稿では www.monotaro.com

カスタム CO2モニター CO2-MINI

カスタム CO2モニター CO2-MINI

これを使う。モノタロウから買うと税抜き8990円 amazon などでは 13000円 くらいで手に入る。

何処にもUSBで値がとれるとは書いてないので不安になるが、 http://www.co2meter.com/collections/fixed-wall-mount/products/co2mini-co2-indoor-air-quality-monitor これと同じなので実はUSBで値がとれる。 ただし、いつUSB出力の機能がオミットされるかはわからないので自己責任で。あるいは販売店に問い合わせてほしい。

値のとりかた。

ruby スクリプトを作ったのでこれを利用してもらえればと思う。 github.com

$ brew install hidapi 
  # or apt-get install libhidapi-hidraw0 など Linux では環境に応じてHIDAPIライブラリをインストールしてほしい
$ git clone https://github.com/kurain/co2mini.git
$ cd co2mini/examples
$ bundle install
$ bundle exec ruby -I./lib examples/co2show.rb

これだけだと、コンソールに値が見えるだけなので、僕の場合はMackerel に流して可視化 and 監視してる。 co2post.rb を参照してほしい。

※gem 化の準備はしてるのに、git を勧めるのは依存してるパッケージにPRを送ってるけれど採用されてないから!

参考資料兼余談

本稿で使ったもの以外のセンサーについて。

USB で繋がるものや、センサー単体で販売しているものが

http://www.co2meter.com/collections/co2-sensors

このサイトに沢山ある。日本でこの価格帯でかつ、オンライン販売で売ってるセンサーはほとんどない。 このサイトで買うとすると、安いセンサーで$80、輸送費が$35くらいなので、14000円くらい。 キャリブレーションどうするとかいう不安もある。

USBプロトコルについて

co2mini から値をとるソフトウェアは co2meter.com から取得できる。が windows 版しかない。 ありがたい事にプロトコルを解析してる人がいて

https://hackaday.io/project/5301-reverse-engineering-a-low-cost-usb-co-monitor

にまとめてくれている。逆アセンブルして調べたようで、上記のサイトの記事は相当おもしろい。おすすめである。 コードも github にまとまっている

https://github.com/henryk/fhem-co2mini

さらにサイトのコメントを見てると、各言語にポートしてる人も居て

node.js

https://github.com/maddindeiss/co2monitor

C言語

https://github.com/dmage/co2mon

の実装があるので、ruby 版を書くのはわりと簡単な話だった。

HIDAPI

co2mini はHIDデバイスとして認識される。HIDはUSBデバイスのなかの一つのクラスで、汎用的なのでよく使われているようだ。 ただ、libusb というメジャーな USB ライブラリからは扱いが難しく、libusb のサイトでも HIDデバイスを扱うときは

HIDAPI

を使えと書いてある。HIDAPIは各OS(Linux, Mac, Win)でのHIDの扱いを抽象化していて、これを使えばOSをまたいで動く コードが書ける。今回 Mac で実験して、実運用は Raspberry Pi というのを考えていたので、こちらを採用した。 先に紹介した他の人の実装は、オリジナルのperlのやつとnode.jsの実装は Linux 環境のみを想定している、C言語実装のものは、HIDAPIを利用している。

ちなみに Linux には /dev/hidraw にHIDがマウントされるという、便利機能があって HIDAPI はこれを利用する。(libusbをつかう事もできる) Macの場合はIOKITに含まれるIOHIDから制御可能で、HIDAPIも利用してるっぽい。MacのUSBまわりはこちらが詳しい。

ruby_hid_api

HIDAPIのrubyバインディングruby_hid_apiruby_hidapi の2つがある。前者はFFIを使っていて、後者は拡張ライブラリ。 FFIを使ってるほうが、OSが違った時に動く可能性が高いので、私は ruby_hid_api を利用している。 HIDAPIの send_featurer_request 関数に対応する部分が未実装だったので、実装してPR出しているけれど 音沙汰がないのが残念。

プロトコルの実際

プロトコルの詳細はコード見てくれという感じなんだけれど、面白かったので少しだけ解説しておく。

co2mini では 'Feature Report' でデバイスを初期化する。初期化前には 'Input Report' (HIDAPIにおけるread関数)では値がとれない。 初期化時に8バイトの値(マジックテーブル)を渡すのだけれど、この後 Input Report で返ってくる値は、マジックテーブルの値と XORが取られていたり、ビットシフト が行われたりしていて、簡単な暗号化がされている。 co2mini.rb の _decrypt が復号化メソッドなので、詳細はそちらを参考にしてほしい。 他のUSBデバイスを知らないので、一般的な動作なのかわからないのだが、不思議な挙動である。

 def _decrypt(key, data)
    offset  = [0x48,  0x74,  0x65,  0x6D,  0x70,  0x39,  0x39,  0x65]  #"Htemp99e"
    shuffle = [2, 4, 0, 7, 1, 6, 5, 3];

    phase1 = shuffle.map{|i| data[i] }
    phase2 = (0..7).map{|i| phase1[i] ^ key[i] }
    phase3 = (0..7).map{|i| ( (phase2[i] >> 3) | (phase2[ (i-1+8)%8 ] << 5) ) & 0xff }
    ctmp   = (0..7).map{|i| ( (offset[i] >> 4) | offset[i] << 4 )  & 0xff }
    result = (0..7).map{|i| (0x100 + phase3[i] - ctmp[i]) & 0xff }
    return result;
  end

おわりに

f:id:r_kurain:20160126164444p:plain というわけで、co2 濃度の可視化と記録を始めてみた。近代的オフィスなので、空調がとまると濃度が酷いことになる。 普通の時間帯は、空調とまらないのでほとんど問題ない。

理想的なエンジニアでありたい

前回のエントリにかなり反響があって、友人達が数ブクマして終わりという想定もしていたので、少々驚いている。 エクスキューズを全く入れなかったのもあって、いろんな感想を持たれた。 フワッとした文章で論点もはっきりしてないので、 941 さんのブコメはもっともだと思う。

ただ、一番言いたかったことは、 "プライベートを犠牲にしなきゃ、理想的なエンジニアになれない" って発想が嫌だってことだ。

結構ブコメで"好きだからやっているんだ"っていうコメントが多くて、そんなのは僕も知っている。 僕もコーディング大好きで、なんの制約もなければ体力の続く限りやることもあるだろう。 自分の時間の内であれば、コードを書くのも勉強するのも犠牲なんて思わない。 でも、それでいいの? 持続可能なの?って話なんだ。

独身のひとは、好きなようにすればよいかと思う。その人だけの人生だし。 でも、テレビゲームしたり、漫画読んでる時間に罪悪感を持つようだと、ちょっと神経症っぽい。 過去の自分が一時期そうだった。

そして、家庭があると自分だけの人生だとは言っていられない。 僕は家族と仲良く暮らしたいし、仲が良いほうが自分の生産性が高い。

それでも、僕は理想的なエンジニアでいたいし、家族も大切にしたい。

実際そういう生活ができてるエンジニアも知り合いに沢山いる。 ただ、そういう人に限ってあんまりメディアに出てこないので、若いころの自分にはそういう発想がなかった。 土日もずっとコーディングするようでなくては、理想的でないのだと過度に恐れていた。 だから、過去の自分にはもっと焦らなくていいから、妻と新婚生活を楽しめと言いたいのだ。

少しだけ自分の話を書く。

僕がはてなに入った2009年ごろ、僕の先輩に当たる人は、CTOのid:naoya さんを筆頭に、id:antipopさん, id:secondlife さんなどインターネットヒーローがいっぱいいた。 みんな、よく勉強してるし、どうやって追いつけばいいのか、正直わからなかった。焦っていた。 一方で僕は婚約者と初めて同棲生活するという、人生の大イベントもあってそっちも大切にすべきだった。 そんな中で家庭を大切にしろ。といってくれる人は居なかったので、大変に妻に迷惑をかけた思いが、今もある。

人に認めてもらわなくても家族と居ればよかったし、過度に不勉強を恐れなくても、 余暇を含めて自分はそれなりにコードも書いていたし、 もっと安心して日々の仕事に打ち込んでいればよかったのだ。今思えば。

前回の記事は、そういう個人的な、過去への反省でもあったのだけれど、結構な賛同コメントももらえて とても助かった。ひどい誹謗中傷が来る想定もしていたし、実際きたのだけれど、 賛同してくれる人も居たので随分気が楽になった。本当にありがとう。

とにかく、そんなに焦るな、家庭も大事にしてOKっていう話なので、特にハードワークを否定したいわけでも、 勉強することを否定的に捉えてるわけでもない。 そういう誤解を含め、すべてのコメントにお返事したいところだが、さすがに多いし、読みたい人も少ないと思うので ある程度類型化してコメントしたい。

そもそも犠牲に思うような、おまえ(id:r_kurain)はエンジニア向いてないよ派の人へ

犠牲って言葉が強すぎるのだろうけど、自分の好きなことしていたって代償になって しまうことはあると思うんだが。家族との時間だったり、ヘタすると健康だったり。 それを代償と思うなっていうのはちょっとブラックではないかな。

それ女性にも言えるの?というコメントでもある。 プライベートを代償にしたくない、っていうだけで向いてないって言われるのでは、 子供を作りたかった場合、女性は時間の制約が多いのにどうすればいいんだろう?

僕は、普通に業務に真剣にむかっていれば、ちゃんと成長できる業種になるのが良いと思っている。

プログラミング好きじゃない、おまえはエンジニア向いてないよ派、あるいは、趣味と仕事が一致してないやつは向いてないよ派の人へ

好きなことだって、趣味だって、それだけずっとできるわけじゃないんだよ。 家族ができるとか、違う趣味見つけちゃうとか、親の介護が始まるとか、ありえるイベントはいくらでもある。 そういう時に向いてないからやめたらっていうのは、どんだけエンジニアの数減らしたいんだろう。

それに、有能な人に限って、プログラミング以外の趣味も結構あったりする気がするんだけど。

できない同僚と仕事するの辛いから、ちゃんと勉強してくれ派

そうなんでしょうね。僕はあいにくできない同僚に遭遇したことが無いもので。

そもそもポジショントークだよ派の人へ

はい、全くそうだと思う。過去の自分はそれを差っ引いて聞くべきだった。 "こうでなくては"っていう職業観がこんなに強く発信されている業種を、僕は他に知らない。(ラーメン屋とか?) "研究者"なんてみんな他人の研究には興味あるけど、働き方に興味はないように見える。 今の職場もそういう話をしたこともない。 (だから現職とか前職の人には全く話が通じてない気がする。どうしたの?って感じだと思う。)

ミュージシャンとかスポーツマンと一緒だよ派の人へ

まあ、一緒な人も多いと思う。自分も好きなこと仕事にしたわけだし。 しかし、円谷幸吉さんとか知ってる?思いつめるのは良くないよ。環境が悪かったら最悪だ。

まとめ

それぞれのポジションがあるので、勉強し続けろって言い続ける人も居るのはわかる。 それを真に受けすぎた、若い自分が馬鹿だったな、と思うところもある。 当然、まじめに勉強しといてよかったなーと。思う部分もある。

ただ、それにしたって、良い職場でちゃんと働いてれば、良いエンジニアにはなれるよ!

DHHはプロ顔負けのレーシングドライバーだし、ポール・グレアムだって、美大に通う時期はあった。 吉本隆明は10年働いたら、だいたいみんな一人前になれるって言ってるじゃないか。 先端に置いてかれる事なんて気にしないで、好きなことをすればいいんだと思う。 プログラミング以外にも。あればね。

そんなにプライベートを犠牲にして大丈夫?

最近読んだソフトウェアエンジニアのキャリアの話が、みんなプライベートの時間も勉強しなきゃダメだという論調で、ちょっと私は疲れている。

hrnabi.com www.pasonacareer.jp paiza.hatenablog.com

曰く環境変化の激しいWeb系エンジニアは、プライベートを犠牲にして勉強しなければ最先端にはいられない。高給取りにはなれない。わりとみんな信じていることのように聞こえる。しかし本当だろうか。犠牲にするって、どのくらい犠牲にすればいいんだろう? 犠牲と比例して、技術力が伸びたり、給与が増えたりするんだろうか?

あっという間に知識が陳腐化するという仮定においては、時間の自由が大きい若い人ほど先端の勉強に時間を割くことができて、もっとも有能になりやすい。実際若くて有能な人は増えているように思う。それでも、オッサンたちがマネージャーにならず、第一線で働くことは可能なんだろうか?

ここで言うオッサンというのは30台前半のことで、まだまだ若手と言われてもおかしくない業界もたくさんある。そんな人々をオッサンと呼ぶのは正しいのだろうか?

Web業界で働いて、そしてちょっと離れたところから見るようになって、ずっとそんな事を考えている。子供が2歳になって、たくさん一緒に遊べるようになったので、もはやプライベートは犠牲にしたくないというのもある。

だから、私は、そんなに学習のためにプライベートを犠牲にするのは正しくないと言いたい。

例えば、プライベートが犠牲になるのではなくて、仕事が犠牲になるべきなんじゃないか?エンジニアが成長できないような仕事が、自動化もされずに残っている方がおかしい。普段、普通に働いて、家庭を大切にしていても、世の中に胸を張れるだけ成長できる仕事でなくてはいけない。あるいは仕事なんて17時には終わって、帰って勉強できるような余裕がなくてはいけないのでは?

ググっても答えが出てこないような仕事をしている時、人は確実に成長していると私は思う。学術論文を読んだり、新しい実装方法や、手法を試している時、コモディティでは無い知識が身について、あなたの市場価値は生まれているはずだ。 毎晩遅くまで働いているのに、もっと勉強しなきゃと神経をすり減らすのは終わりになったらいいなと私は思う。

はてなで働いていた時、周りのエンジニアがとても凄い人々に思えて、どうしたらそうなれるんだろうと思って、勉強しなきゃいけないという強迫観念にも似た何かに取り憑かれていた。 ほとんど後悔の無い人生だけれど、唯一後悔しているのは、妻との京都での新婚生活をもっと堪能しておけばよかった。という事だ。勉強しなきゃいけないと思いつめても、大して成果が上がらないなら、もっと妻と京都観光すればよかった。毎週末でも行くべきところは沢山あったと今は思える。週末動けなくなるほど勉強したり、仕事をしすぎる必要はない。

今はまた平日は忙しい暮らしをしているけれど、土日は完全に家族の時間にできているし、テレビゲームをしていて罪悪感を感じる事もなくなった。自分の成長を疑うこともないし、仕事も楽しい。そして何より、家族で過ごしている時間が幸福である。

もう少し、Web業界にワークライフバランスが普及しますように。

GoDaddy(Google Apps) からのドメイン移管

日本から利用している、Google Appsドメインを購入すると GoDaddy での取り扱いになったりするようです。 いろいろ不便があるので、さくらインターネットに移管しようと思ったところ異様に大変だったのでメモを公開しておきます。

1. GoDaddy から AuthCode を取得する。

Google Apps の管理画面から、"ドメイン" > "ドメインの追加と削除" > "詳細な DNS 設定" と遷移していくと、GoDaddy にログインできます。 ここで AuthCode もメールで送ってもらえるのですが、送り先が問題に。 どうも GoDaddy はデフォルトでWhois情報公開代行してくれるらしく、Whois の情報が DomainsByProxy(以下DBP)の情報 になっています。 AuthCode のメールもその登録されているアドレスに送信されて、さらに DBP が転送してくれます。 DBPの設定が正しく行われていればいいのですが、管理者が途中で交代していたりすると、メールがちゃんと来なくて ひどい目に合うわけです。

2. DomainsByProxy にログインして設定変更する。

じゃあ、DBPにログインして設定をちゃんとしよう。と思うわけですが、ログインIDもパスワードもわからない... 詰んだ.. と思ったところで

d.hatena.ne.jp

この記事です。詳細は書かれてませんが重大なヒントが。

productforums.google.com

このグループをよむとログイン方法が書いてあります。 先にかいた、Google Apps の画面から、GoDaddy に遷移するときに、ユーザーIDとパスワードが表示されていたのですが、 DBPへのログインは、そのユーザーIDの下1桁に+1 したものと、全く同じパスワードで可能だそうです。 (ユーザーIDは8桁の整数なので+1すればOKという意味。12345678 なら 12345679 にしてねという話。)

マジかよ!という感じですが、無事ログインできました。IDの生成方法どうやって見つけたんだろな−。という感じです。 DBPにはメールの転送先の設定などもあるので、適切に設定して、DBPはキャンセルして、ちゃんとWhois情報が掲載されるようにしましょう。 キャンセルのインストラクションは以下のとおり

Log in to your account at DomainsByProxy.com.

Select Private Domains, and then select the domain name(s) you want to cancel private registration for.

Click Cancel Selected, or click (Cancel private registration). The Confirm message displays.

Click OK. The Cancel DBP message displays.

Click OK.

(Make sure you click on both OK buttons to cancel the registration.)

(9/18 追記)

そのあとは、GoDaddy から AuthCode を送りましょう。 GoDaddy の設定画面で、ドメインの "Lock" を外しておく必要もあるので忘れずに。

AuthCode の準備ができて、ドメインの "Lock" が外れたのを確認したら、あとは

help.sakura.ad.jp

にしたがって設定すれば、移管処理は完了するはずです。 さくらインターネット以外でも、それぞれの会社で手順書があるとおもわれます。

9/18 追記

これで出来たと思ったら、さくらから連絡があり、転出元(GoDaddy)に拒否されたとのこと。 GoDaddy サポートに連絡したらDBPをキャンセルしないとだめらしい。 というわけでDBPをキャンセルした。

OS X(clang) で C++ を書いている時にデバッグする方法いろいろ

前提

  • Mac
  • C++ を書いていて
  • コンパイラgcc じゃなくて clang を使ってる
  • もっと良い方法があったら教えて欲しい。

デバッガ

gdb は使えないようなので lldb を使う。g++ コマンドが使えているなら、インストールされているはず。
gdb とコマンド名が若干ちがっているけどだいたい同じことはできる。

プロファイラ

valgrind が(ほぼ)使えないので、gperftools を使う。

$ brew install gpreftools

でインストール可能。プロファイリングを有効にするには

$ g++ your.cpp -o your.out -lprofile

コンパイル時にリンクするだけ。
プロファイル出力先は

$ CPUPROFILE=your.prof ./your.out

で実行時に指定する。
ここを読めばだいたい分かる。

ビジュアライズ

プロファイル出力はそのままでは読めないので、pprof コマンドで読む

$ pprof your.out your.prof

で対話的シェルが起動する。help で細かい使い方はわかるはず。
よく使うのは top とか web とかか。top は時間占有率(?)の高い関数がみえるし、
web は svgコールグラフを描画して、ブラウザでオープンしてくれる。

しかし、もうちょっと便利に見たいので qcachegrind を使う

$ brew install qcachegrind

qcachegrind は callgrind の出力を見やすく表示してくれるツール
callgrind 形式に gperftools の出力を変換する必要があるので

$ pprof --callgrind your.out your.prof > callgrind.prof

で変換。

$ qcachegrind callgrind.prof

で開く

関数名が16進数になってる...

既知の問題らしいので https://code.google.com/p/gperftools/issues/detail?id=562 に従って
コンパイル時のオプションを

$ g++ -Wl,-no_pie -g your.cpp -o your.out -lprofile

に変更。
これでも全部の関数は見えない。-g3 とかも試してるけれど効果無さそう。