今開発しているサービで、約100台位のサーバに対し/usrマウントを提供しているのNFSサーバがあります。参照専用とはいえ、100台位になってくるとそこそこのパフォーマンスが要求されますし、/usrという重要なポイントをマウントしているため冗長化も重要です、また台数が日に日に増えているためとスケールアウトも出来なくてはなりません。そこで、スケーラブルで障害に強い参照用NFSサーバを構築してみました。
この投稿の続きを読む »
スケーラブルで堅牢な参照用NFSサーバのつくりかた
2011 年 11 月 10 日 by tumf — Cent, Linux, ネットワーク
rdefs を emacs/anything から使おう!
2011 年 5 月 23 日 by kmori — Emacs
はじめまして、kmori と申します。最近は主に Ruby/Rails 案件を担当しています。初見で他人の Ruby で書かれたライブラリなどを読むときに便利な rdefs というツールがあります。モジュール、クラス、メソッドなどを単位にファイルの構造を一覧/可視化するコマンドラインツールです。著名なスーパーハッカー青木峰郎さんの書かれた小さな Ruby スクリプトです。ターミナルからこんなかんじに利用します。

rdefs 自体は るびまの添削記事 や 青木日記で紹介されています。これを emacs の anything から利用する anything-rdefs という emacs 拡張 を書いたので紹介します。anything の説明と導入方法の解説は行いません。

rdefs を emacs から利用することで、以下のようなメリットがあります。ただし、私が emacs はウィンドウ分割せずに利用していることもあり、細かくウィンドウ分割された状況での利用は想定していません。
- rdefs の結果を ruby-mode の配色で表示するので見やすい
- 左のウィンドウで定義をプレビューできる(後述のスクリーンキャスト参照)
- anything の絞り込みができる
- 該当行にかんたんに移動できる
インストールと設定方法を説明します。emacs に anything をインストールし、rdefs.rb をパスの通ったところに配置し、実行権限を付与します。rdefs.rb は
で公開されています。
次に anything-rdefs を
からダウンロードし、ロードパスの通ったところに配置します。そして、dot.emacs などの設定ファイルに以下の内容を追記します。
(require 'anything)
(require 'anything-rdefs)
(setq ar:command "/path/to/rdefs.rb")
(add-hook 'ruby-mode-hook
(lambda ()
(define-key ruby-mode-map (kbd "C-@") 'anything-rdefs)))
(setq ar:command "/path/to/rdefs.rb") のところは rdefs.rb までフルパスで指定して下さい。Mac だと emacs がログインシェルの PATH を引き継がないことがあるらしいのでフルパスで指定するようにしました。
あとは、ruby-mode で開いているバッファで Ctrl-@ を押下すれば上の画像のようなウィンドウが表示されます。スクリーンキャストも作ってみました。
それから同様に、Sphinx などで利用されている rst ファイルの構造を表示し移動を簡単にする rst-goodies.el というのも書きました。よろしければお試し下さい。
最後に
ディノでは Ruby/Rails 案件を募集しています。6月中旬頃までに小さめのが一つ決まると最高なのですがどうでしょうか。ご検討のほどよろしくお願い致します。
OpenSSHのauthorized_keys2はもう古い
2010 年 12 月 8 日 by hnw — Linux, UNIX, ssh
お久しぶりです。ずいぶん記事を書くのをサボっていてごめんなさい。ディノでもAdvent Calendarやろうよ、なんて話もあったんですが、タイミングを逸した感がありますね。毎日とは言わなくても、またボチボチ書いていきたいと思います。
さて、今日は社内での雑談の話題から、「~/.ssh/authorized_keys2」ファイルはobsolete(古い、時代遅れ)だよ、という話題です。
SSH1とSSH2が混在していたころの習慣だと思うのですが、~/.ssh/authorized_keysにはSSH1の公開鍵を、~/.ssh/authorized_keys2にはSSH2の鍵を置くきまりだと聞いたことがあります。しかし、これはもはや正しくないようです。
OpenSSH3.0のリリースノートには下記のような記述があります。
2) The files
/etc/ssh_known_hosts2
~/.ssh/known_hosts2
~/.ssh/authorized_keys2
are now obsolete, you can use
/etc/ssh_known_hosts
~/.ssh/known_hosts
~/.ssh/authorized_keys
このように、~/.ssh/authorized_keysで一本化されています。
OpenSSH3.0は2001年にリリースされたようなので、なんと9年前からobsoleteなんですね。9年経った今でも使えるということは、今後も当分は利用可能ということかもしれません。
私も長いことauthorized_keys2を使っていましたが、最近少しずつリネームしています。そこまで頑張って直すような性質のものではないと思いますが、私のように知らずに使い続けている人もいるかと思って紹介してみました。
autotest で Symfony + Lime を自動テストする
2010 年 5 月 13 日 by sou — Mac OS X, PHP, 開発環境

ruby 界隈でよく使われている自動テストツール autotest の Symfony + Lime 用スタイルを書いて公開しました。
プロジェクトのローカルルールに合わせてあるのですが、軽く手を入れれば他のプロジェクトでも、また Symfony や PHP 以外でも使えると思います。
- TDD で書いていないと不安が高じて動悸と息切れが始まる
- red-green-refactoring を唱えなさいとじっちゃに言われた
- growl の red を見ないとコードが先に進まない
よくある話だと思います。
まずテストが無いと何も始まらない!書いたテストはがんがん自動実行して使い倒したい!
となるとやはり、自動テストの出番ですね。
Subversionのブランチ操作をgit並に簡単にする
2010 年 4 月 7 日 by tumf — Ruby, Subversion
svnとgit両方使うようになりました。するとgitの便利さに感嘆する一方、svnのブランチ操作の面倒臭さが際立ってきました。特に、ブランチ操作ではgitは素晴らしく例えば以下のような例をご覧いただくとその差は一目瞭然かと思います。
ブランチ一覧を得る
git branch
svn list http://example.com/svn/branches
ブランチを作る
git branch mybranch
svn cp http://example.com/svn/trunk http://example.com/svn/branches/mybranch -m 'create mybranch from trunk'
以上のように、svnはブランチをブランチとして扱っていないためとても面倒なコマンドを打たなくてはなりません。これではとてもsvnのブランチなんて使ってられないのでとっととgitに移動したいところです。しかしながら、諸処の都合によりまだ、しばらくは両方使い続けなくてはならないため、svnのブランチ操作を簡単にする、svnbrというRubyスクリプトを書きました。
rsyncの-Cオプションの指示を上書きする
rsyncの-Cまたは--cvs-excludeオプションって便利ですよね。これは、下記のファイル・ディレクトリを転送対象から外す設定です。
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS
.make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
*.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe
*.Z *.elc *.ln core .svn/ .git/ .bzr/
転送すると問題になりがちなファイルを転送対象から外せるので、普段はとても便利です(よく見るとEmacsユーザーにしか影響の無いファイル*.elcも混ざってますね)。でも、「上記のうち*.soだけは転送したい」なんて時はどうすればいいんでしょうか。
解決方法は色々あると思いますが、私はrsyncのオプションに「--include-from=rsync_include.txt」を追加し、rsync_include.txtを下記の内容で作成しました。
*.so
これで-Cにより他のファイルを転送しないままで*.soだけ転送するようにできます。バイナリ配布されている共有ライブラリをデプロイしたい状況で上記のように対処したので、小ネタとして記録しておきます。
jquery.mockAjax でサーバ待ちしないさくさく開発を
2010 年 2 月 10 日 by sou — JavaScript
ディノ日本酒調達部員の sou です。こんにちは。 今日はAjax開発に便利なjQueryプラグインを紹介します。
ディノも昨年から JavaScript 案件が増えており、本格的な JavaScript アプリケーションも実装するようになってきました。ただ、サーバサイドのみの開発に比べるとXMLHttpRequest経由でサーバサイドとのつなぎ込みが発生するので、問題の切り分けや実装スケジュール調整など難しい点もあるのではないでしょうか。
そんな時には jquery.mockAjax プラグインが便利です。
Go For C++ Programmers #Conceptual Differences の勝手に和訳
2009 年 11 月 11 日 by tumf — C++, lang
たかはらです。
Googleが新しいプログラム言語を発表しました。早速プログラムされている方(1 2)とか尊敬します。最近はご無沙汰ですが、C++最強説を今だに唱え続ける自分としてはGo For C++ Programmersのようなドキュメントをみるとうれしくなってしまいまして、Go For C++ Programmersの最初の”Conceptual Differences”部分を勝手に和訳しました。権利的に問題があれば削除します。
適当に訳したので致命的な誤訳はありそうです。コメント欄で指摘頂けるとありがたいです。
以下、訳となります。
株式会社ディノの中途採用について
株式会社ディノでは技術者の中途採用を随時行っています。いま現在も一緒に仕事する仲間を募集しています。本記事では、採用の方針や採用フローのご紹介をさせて頂きます。
募集するエンジニアについて
ディノではプログラミング・データベース・サーバ管理などの分野について一家言あるようなエンジニアを募集しています。ディノは社長が技術者ということもあり、技術指向の強いメンバーが集まっている会社だと思います。これは本ブログの内容からも見て取れるのではないでしょうか。
弊社ではプログラミング言語としてPHPを採用していますが、プログラミング言語の知識はそれほど重視していません。Webで複数人での開発を経験されている方なら、言語の知識は大して重要ではないと考えています。また、多少経験が足りなくても熱意のある方なら大歓迎です。入社後にはsymfonyを利用してWeb+DBシステム構築のプロジェクトに参加して頂くことになります。
サーバ・ネットワークまわりに特化したエンジニアも募集しています。サーバ周りでは仮想化技術に特に注力していますので、面白そうな会社だと思った方はぜひ一度面接にいらしてください。
PHPで最小の整数を得る方法
PHP 4.4.0以降およびPHP 5.0.5以降では、最大の整数が定数PHP_INT_MAXとして定義されています。
$ php -r 'var_dump(PHP_INT_MAX);' int(2147483647)
64bit環境では次のような結果になります。
$ php -r 'var_dump(PHP_INT_MAX);' int(9223372036854775807)
ところで、最小の整数が必要な場合はどうすればいいのでしょうか。実は最小の整数は定数定義されていないのですが、次のようにすれば取得できます。
