サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
コーヒー沼
openlab.dino.co.jp
今開発しているサービで、約100台位のサーバに対し/usrマウントを提供しているのNFSサーバがあります。参照専用とはいえ、100台位になってくるとそこそこのパフォーマンスが要求されますし、/usrという重要なポイントをマウントしているため冗長化も重要です、また台数が日に日に増えているためとスケールアウトも出来なくてはなりません。そこで、スケーラブルで障害に強い参照用NFSサーバを構築してみました。 簡単なイメージは下図のとおりです。 NFSサーバはA,Bの2台ありそれぞれrsyncで内容が同期されています。それぞれのNFSサーバには仮想IPアドレス(以下、VIP)がそれぞれついています。クライアントはマウント時に、nfs.mynet(mynet部分はサービスのドメイン名等)をDNSに問い合わせると、DNSはNFSサーバのVIPのどれかを返却します。問い合わせごとに返却されるVIPが変わ
はじめまして、kmori と申します。最近は主に Ruby/Rails 案件を担当しています。初見で他人の Ruby で書かれたライブラリなどを読むときに便利な rdefs というツールがあります。モジュール、クラス、メソッドなどを単位にファイルの構造を一覧/可視化するコマンドラインツールです。著名なスーパーハッカー青木峰郎さんの書かれた小さな Ruby スクリプトです。ターミナルからこんなかんじに利用します。 rdefs 自体は るびまの添削記事 や 青木日記で紹介されています。これを emacs の anything から利用する anything-rdefs という emacs 拡張 を書いたので紹介します。anything の説明と導入方法の解説は行いません。 rdefs を emacs から利用することで、以下のようなメリットがあります。ただし、私が emacs はウィンドウ分割
お久しぶりです。ずいぶん記事を書くのをサボっていてごめんなさい。ディノでも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
ruby 界隈でよく使われている自動テストツール autotest の Symfony + Lime 用スタイルを書いて公開しました。 プロジェクトのローカルルールに合わせてあるのですが、軽く手を入れれば他のプロジェクトでも、また Symfony や PHP 以外でも使えると思います。 TDD で書いていないと不安が高じて動悸と息切れが始まる red-green-refactoring を唱えなさいとじっちゃに言われた growl の red を見ないとコードが先に進まない よくある話だと思います。 まずテストが無いと何も始まらない!書いたテストはがんがん自動実行して使い倒したい! となるとやはり、自動テストの出番ですね。 インストール手順 autotest コマンドをインストールします。rspec + autotest + インストール辺りでぐぐってください。 mac の人は a
Web/JS(あまくち) part.2 - 変数宣言、関数、無名関数 で関数オブジェクトの生成について触れましたが、var name = function(無名関数を変数にバインド)とする方法とリテラルとでは挙動が違うのではないかとの指摘がありました。 JavaScript の var についての考察にあるように、
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のブランチなんて使ってられないのでとっと
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だけは転送したい」なんて時はどうすればいいんでしょうか。 解決方
オブジェクト指向設計の原則1_単一責務の原則&開放/閉鎖の原則 1 オブジェクト指向設計の原則11 2 学ぶにあたってのゴール.........................................................................................................23 単一責務の原則(SRP: Single Responsibility Principle)...................................................24 開放/閉鎖の原則(OCP: Open-Closed Principle) ....................................................................45 用語集(wikipedia).......
ディノ日本酒調達部員の sou です。こんにちは。 今日はAjax開発に便利なjQueryプラグインを紹介します。 ディノも昨年から JavaScript 案件が増えており、本格的な JavaScript アプリケーションも実装するようになってきました。ただ、サーバサイドのみの開発に比べるとXMLHttpRequest経由でサーバサイドとのつなぎ込みが発生するので、問題の切り分けや実装スケジュール調整など難しい点もあるのではないでしょうか。 そんな時には jquery.mockAjax プラグインが便利です。 概要 これを使うと $.ajax のリクエスト先を条件に従い振り分ける事が出来、スクリプトや HTML の書き換え無しにサーバ側への通信をカットし、 ローカルファイルで用意した JSON や HTML フラグメントを代わりに持ってくる事が出来ます。 小さい&単純なコードですが、こ
ソフトウェアテスト入門(1) 2007/11/29 ディノ 竹腰彰成 目的・ターゲット 目的 ◦ テストの基本的手法を身につける ⇒経験的になんとなくやる、ではなく やるべきテストを判断できるようになる ターゲット ◦ テストについて勉強したことのない人 ◦ テスト経験の浅い人 内容(予定) テストの目的とは テストフェーズの分類 テストの難しさを認識する テスト技法 Webアプリのテスト 3回に分けて実施(予定) テストの目的 テストの目的は2つ バグ出し ◦ コーティングミスを探し出し、修正する 品質保証 ◦ テスト仕様書は品質を示す客観資料 「このシステムの品質は?」 「これだけのテストにパスしてます」 納品物に含まれることも多々ある 品質保証に重点をおいて話を進めます テストフェーズの分類 どんなテストがあるか 品質保証したい対象ご
たかはらです。 Googleが新しいプログラム言語を発表しました。早速プログラムされている方(1 2)とか尊敬します。最近はご無沙汰ですが、C++最強説を今だに唱え続ける自分としてはGo For C++ Programmersのようなドキュメントをみるとうれしくなってしまいまして、Go For C++ Programmersの最初の”Conceptual Differences”部分を勝手に和訳しました。権利的に問題があれば削除します。 適当に訳したので致命的な誤訳はありそうです。コメント欄で指摘頂けるとありがたいです。 以下、訳となります。 GoはC++のような汎用システム用のプログラム言語を目指しています。C++プログラマ向けにいくつかの注意点があります。このドキュメントでは、GoとC++の違いについて説明する事であまり違わない事が判るよ。 Goのもっと一般的な紹介は、”Go tuto
株式会社ディノでは技術者の中途採用を随時行っています。いま現在も一緒に仕事する仲間を募集しています。本記事では、採用の方針や採用フローのご紹介をさせて頂きます。 募集するエンジニアについて ディノではプログラミング・データベース・サーバ管理などの分野について一家言あるようなエンジニアを募集しています。ディノは社長が技術者ということもあり、技術指向の強いメンバーが集まっている会社だと思います。これは本ブログの内容からも見て取れるのではないでしょうか。 弊社ではプログラミング言語としてPHPを採用していますが、プログラミング言語の知識はそれほど重視していません。Webで複数人での開発を経験されている方なら、言語の知識は大して重要ではないと考えています。また、多少経験が足りなくても熱意のある方なら大歓迎です。入社後にはsymfonyを利用してWeb+DBシステム構築のプロジェクトに参加して頂くこ
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) ところで、最小の整数が必要な場合はどうすればいいのでしょうか。実は最小の整数は定数定義されていないのですが、次のようにすれば取得できます。 $ php -r 'var_dump(~PHP_INT_MAX);' int(-2147483648) 64ビット環境でも同様です。 $ php -r 'var_dump(~PHP_INT_MAX);' int(-9223372036854775808) ここで利用した~とい
Firefoxのアドオンの中でもFirebugは便利ですよね。無いと死ぬって人も多いかと思います。ところで、このFirebugの機能の中でも「要素を調査」ボタンが便利すぎるのでご紹介します。 ここで言っている「要素を調査」ボタンというのは、下記のキャプチャ画像にある、ナビゲーションツールバーの眼鏡のアイコンのことです。 この眼鏡ボタンを押すとFirebugの「要素を調査」の機能が働きます。要するに、Firebugの「調査」ボタンと同じです。Firebugをインストールしたままの状態だと、ステータスバーのFirebugのアイコンを押してから「調査」を押して、と2回クリックするところが、1回クリックするだけで実行できるというのが違いです。こうして説明すると小さな差ですけど、このおかげで私の「調査」をする頻度が格段に上がった気がします。JavaScriptやCSSを触る人は「調査」する機会が多い
「正規表現入門 (3)実習&ツール紹介」というタイトルで、経験2〜3年目の人をターゲットに社内勉強会を開催しました。正規表現に対して苦手意識を持っている人は多いようなので、実習を交えた形のプレゼンを試してみました。実験的な試みでしたが、おおむね好評だったようです。 まとめ 次の機能が使いこなせれば正規表現は怖くない!(たぶん) グルーピング 繰り返し 後方参照 正規表現作成のコツ 構造を日本語で説明できれば、正規表現が書けたも同然 例:「ドットの後に英数字2文字以上」の1回以上繰り返し 「ナントカのN回繰り返し」の組み合わせを作っていく Perlは便利! ムービー 発表資料 スライド(PDF) スライド中の問題 実習形式で、スライドの途中で正規表現を答える問題を出題していますが、この問題部分だけ取り出して紹介します。 これに答えられる人は出席の必要はないですよ、と事前に社内のMLに流してお
以前の記事「$HOME/.ssh/configを活用していますか?」では、設定ファイルを少し頑張って書けば普段のSSHライフが随分変わりますよ、と紹介しました。今日はその続編です。前回よりマニアックな設定を紹介します。 2段以上先のサーバにログインする Dynamic Forward機能を使う 共通設定をまとめて書く 2段以上先のサーバにログインする 目的のサーバにログインするために、踏み台的なサーバを経由しないと入れない環境があります。例えば、dmz経由でないとDBサーバにログインできない環境、というのは良くある構成でしょう。 このような場合に、ProxyCommandパラメータが利用できます。 上の設定で「ssh db1」とすると、sshでdmzに接続し、dmzから192.168.0.201へログインします。これを利用するには踏み台サーバにncコマンドが必要ですが、大抵の環境にインスト
lgrepコマンドをご存知でしょうか。日本語対応ページャlvの付属品で、対象ファイルの文字コードを推定して日本語文字列をうまく見つけてくれるという、優れもののgrepです。 古いプロジェクトだと、プログラムはEUCだけど静的ファイルはSJIS、なんてことがあると思います。そんなときに大活躍です。 grepした結果の文字コード変換も勝手にやってくれるので、grep結果をnkfする必要もありません。至れり尽くせりですね。 そんなlgrepコマンドにも弱点があります。grepで言う-r(再帰的にファイルを検索)オプションが無いのです。どこに書いてあるかわからないエラーメッセージを探す、なんてときに-rは必須ですよね。無いなら作ってしまえ、ということで作ってみました。 alias lgrep-r="find . -type d -name .svn -prune -o -type f -print
たかはらです、いつもながら小ネタですいません。 以前、arashoが紹介してくれたdsvn.elを便利に使っていたのですが、先日Subversionを1.6.1にバージョンアップしたらステータスバッファのファイル名の認識を誤るようになり、先頭に空白が一つ入るようになりました。 dsvn.elが古いのか?と思い以下の最新版を試したのですが結果は同じでした。 wget http://svn.collab.net/repos/svn/trunk/contrib/client-side/emacs/dsvn.el svn statusの出力の解釈に失敗しているようだったので、dsvn.elのファイルの中身を以下のように書き換えたところ動作するようになりました。 --- dsvn.el.orig 2008-12-02 23:46:43.000000000 +0900 +++ dsvn.el 2009
「文字集合と文字エンコーディング」というタイトルで、経験2〜3年目の人をターゲットに社内勉強会を開催しました。文字集合という単語を知っている必要はないですけど、少なくともUTF-8とShift_JISとでは扱える文字の種類数が違うことだけは伝えたかったので、その意味では目標が達成できたと思っています。 まとめ 文字集合とは、扱える文字の集合 JIS X 0208なら6000文字くらいの日本語の文字 UCS-2なら60000文字くらいの世界中の主要な文字 文字エンコーディングとは、文字の集合をバイト列に直す方式 Shift_JISはJIS X 0208(など)を1〜2バイトにする UTF-8はUCS-2を1〜3バイトにする 文字エンコーディング関連のツールを使いこなそう nkfやlvを使いこなそう 日本語を探すならlgrep 最終兵器:hexjaで16進ダンプ ムービー
社内の技術メモに「cronでは第1月曜日に実行などはできないので、実行されるスクリプト側で条件判定しないとダメ」というような記述がありました。一体どういうことでしょうか。 crontabの書式は「分 時 日 月 曜日 コマンド」です。また、数字はハイフンで範囲指定ができます。下記のように指定すれば毎月第1月曜日の午前3時にコマンドを実行できそうな気がします。 0 3 1-7 * 1 /path/to/command/execute-only-1st-monday しかし、これは期待通りには動きません。「1日から7日までの期間の唯一の月曜日」を指定したつもりが、実際には「1日から7日のすべて、または日付に関係なく月曜日」と解釈されます。マニュアルにも書いてあるのですが、「日」と「曜日」が両方指定された場合、OR条件になるのです。 ネット上を探すと、これでハマって試行錯誤した人が複数いるようで
ソフトウェアテスト入門(2) 2007/12/20 ディノ 竹腰彰成 前回の内容(1) テストの目的とは ◦ バグ出し・品質保証 ◦ 品質保証したい対象ごとにテストがある 演習問題 テスト技法 ◦ ブラックボックステスト 同値分割 境界値分析 前回の内容(2) 同値分割 ◦ 入力値を意味ごとに分割 「英字のみ受付」→ 有効値:英字 無効値:記号など 境界値分析 ◦ 処理が変わる境目に着目 「1ページ5件」→ 5件と6件で確認 ポイント もれなく・効率的に 今日の内容 テスト技法 ◦ ブラックボックステスト (同値分割) (境界値分析) デシジョンテーブル 原因結果グラフ 前回の内容 今回の内容 デシジョンテーブル ブラックボックステスト デシジョンテーブル Decision:意思決定、決断、判定 「決定表」とも言う 組み
cronは良く使うツールの一つだと思いますが、何故かトラブルの思い出がつきまとうのは僕だけでしょうか。今日はそんなcronの便利な機能を一つ紹介します。 cronで実行するコマンドの作法 はじめにcronスクリプトの作法を紹介します。cronは決められた時間が来るとコマンドを自動実行する仕組みですが、自動実行するコマンドは下記の条件を満たすべきです。 正常終了した場合は標準出力/標準エラー出力に何も出力しない 異常終了した場合は標準出力/標準エラー出力にエラーメッセージを出力する というのも、cronで実行したコマンドが標準出力・エラー出力に1バイトでも出力した場合、その内容がメールで送信されます。僕は異常時だけメールを受け取る使い方が一番スマートに思えます。 もしくは、次のような使い方も考えられます。 コマンドのログは標準出力に出力し、ローカルのログファイルに追記する 異常終了した場合は
Emacs使いの人はサーバ作業の際もEmacsを使うことが多いかと思います。ところが、Emacs使いはvi使いの人より少しだけ気をつけることがあるんです。今回はそんな内容をまとめてみました。 バックアップファイルに注意 Emacsは標準設定だと元のファイル名に「~」を付加した名前でバックアップファイルを作ります。普段は便利な機能なんですが、サーバ上の作業だと困ることもあります。 例えばWebサーバで公開中のPHPファイルを直接編集する場合、index.phpを編集したらバックアップとしてindex.php~ファイルが作成されてしまいます。標準的なWebサーバの設定ではindex.php~はtext/htmlとして出力されてしまいますので、一つ前のバージョンのPHPソースコードが全世界に公開されてしまいます。 また、特定ディレクトリ以下の全ファイルを処理対象にする処理があった場合、バックアッ
jQuery と言えばセレクタ、大変に便利で使える機能です。 さーて新卒皆にもセレクタ教えるぞーと意気込んでみたところ、バージョンアップに伴いセレクタがパワーアップしておりまして知らない表現が色々と・・ これではいかんと密かに自分の勉強も兼ねつつ jQuery Selector クイズを作って勉強会に持ち出してみました。 まるっと暗記するのではなく 何となく知っている 解決する手段を身につけている 状態になるため、リファレンスにざっと目を通した後にクイズとリファレンスを交互に見比べながら遊んで貰えると良いと思います。 興味ある方はチャレンジしてみてください。 前説ムービー コード (回答用に template.js を用意しています。)
「サーバセキュリティ」というタイトルで社内勉強会を開催しました。普段の勉強会ではSQLインジェクションやXSSなどWebアプリケーションのセキュリティの話題が多く、サーバのセキュリティについては人によって知識がまちまちなので、簡単にまとめてみました。普段サーバをいじらないポジションの人でも、セキュリティフィックスを当てる際にお客さんに説明することはあるでしょうから、サーバまわりについても概要を知っておいた方が良いと思います。 まとめ remote exploitは要注意 セキュリティフィックスが出たらすぐ適用すべき 公開サーバは常時パスワード総当たり攻撃を受ける 簡単なパスワードをつけない 可能ならパスワードログインを禁止すべき トロイの木馬は現実にあり得る脅威 うっかりopen proxyを作ったりしないように ムービー 発表資料 スライド(PDF)
「メール」をテーマに講習会を開きました。今後、複数回に渡りメール周りの様々な知識を紹介して行ければと考えています。 プログラマとしての担当範囲という視点では、「mb_sendmail()等の関数を用いればメールが送れる」しか知らなくてもギリギリ仕事はできるかもしれませんが、本当にそれだけの知識しか無いとしたら不安です。メールに限らず、ある程度の周辺知識は何事にも必要ですよね。 「メール」第一回目の今回は、送信した後の事がイメージできるようになることを目標に、メールを送信してからどのような過程を経て相手に届くかについて説明しました。 メールの送受信の仕組みには、多くの登場人物(アクター)が絡んでいます。登場人物が多い分、トラブルが起こるポイントも様々です。 今回の講義では、各過程におけるトラブルの原因や、確認方法も合わせて紹介しています。メール送受信の仕組みを知る事で、トラブルの原因発見や解
次のページ
このページを最初にブックマークしてみませんか?
『ディノ オープンラボラトリ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く