タグ

ブックマーク / lukesilvia.hatenablog.com (57)

  • MySQLのINSERT/UPDATE時におこる不整合対策 - LukeSilvia’s diary

    先日、作っているアプリケーションにバグが発生しました。バグの内容は次のようなものでした。 同時に存在してはいけないはずのデータが、DB に存在する 整合性のチェックはアプリケーションレベルで行っている 一意制約のような単純なものではないので、アプリケーションレベルで実装 整合性のチェックロジックは正しい これに対し、バグは次のような状況で発生したと仮説を立てました。 ユーザがレコードを一括登録しようとする 登録ボタンを押したがレスポンスが遅い この間、整合性チェックが走っている ユーザはもう一度登録ボタンを押した 2回目の登録の整合性チェックが走り始める 1回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックの間、DBにはまだ1回目の登録によるINSERTが実行されていないので、チェックを通過した 結

    MySQLのINSERT/UPDATE時におこる不整合対策 - LukeSilvia’s diary
    japanrock
    japanrock 2011/01/29
  • script/console の履歴機能が上手く動かなくなった...ので対応 - LukeSilvia’s diary

    環境 ruby 1.8.6-p399 rails 1.0.0 (;_;) Mac OS X 10.6.4 現象 irb は通常通り~/.irb_history に履歴をためていく rails のscript/console を起動すると、~/.irb_history の内容が上書きされ、先程までirb_history にあった最新の履歴が消えてしまう script/console の実行中も、~/.irb_history をtail すると、どんどん履歴が書き込まれていっているのだけれど、何故かscript/console を終了して、再度起動したタイミングでやはり元の内容に戻ってしまう。~/.irb_history を空にしてもscript/console を実行すると中身が復活することから、どこからかコピーされている感じ。 原因 未だソースとかを追っていない もしかしたらrvm 関連の

    script/console の履歴機能が上手く動かなくなった...ので対応 - LukeSilvia’s diary
    japanrock
    japanrock 2010/10/24
  • RubyKaigi2010 に行ってきた(2, 3日目) - LukeSilvia’s diary

    RubyKaigi2010 に行ってきた(1日目) - Slow Danceに続き、今年のRubyKaigi に行ってきたレポートを書きたいと思います!例によって興味があった内容をまとめました。Chad Fowler の基調講演の内容は情熱プログラマー ソフトウェア開発者の幸せな生き方を読むのが一番いいと思います。 また、内容に誤りがありましたらお手数ですが指摘いただけますと助かります。 Ruby powering 9 million dining tables(Cookpad) Cookpad CTO の橋さん(@hashikem)によるCookpad のサービス、システム全般のお話と、id:secondlife さんが何故Cookpad に入社したかというお話を聴きました。 規模 9.89 M UU / month 83万レシピ 開発体制 ユーザにとって価値のあるものを作成するには

    RubyKaigi2010 に行ってきた(2, 3日目) - LukeSilvia’s diary
    japanrock
    japanrock 2010/09/20
    クックパッドさんについて詳しく書いてあって良い
  • RubyKaigi2010 に行ってきた(1日目) - LukeSilvia’s diary

    今年もRubykaigi に行ってきました。とても勉強になることが多かったので興味があった内容をまとめます。 まずは1日目から。2,3日目も後に書きます! もし間違い等ありましたら指摘いただけると助かります。 Conflicts and Resolutions in Ruby and Rails Rails のコミッタ達を迎えたトークセッション形式。 Rails2 と3 の違い Rails2 の上位互換でありながら様々な機能を盛り込んだ Rails のそれぞれのパーツをRails の外で使えるようモジュール化した Rails チームがRails3 構想時に描いたゴールは達成できたか Yes. 我々コアチームはよくやったと思う 最も良かったのは共通のAPI を作ったこと ruby1.9 対応をする上で難しかったこと encoding。常にencoding について考えなければならなくなった

    RubyKaigi2010 に行ってきた(1日目) - LukeSilvia’s diary
    japanrock
    japanrock 2010/09/13
    リアルの交流で得た話があり参考になる
  • MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary

    MySQL に限らず、SQL のNULL の仕様には何回か「えっ」と驚くことがあったのでメモしておこうと思います。5.1 版の日語マニュアルがなかったものについては、4.1 のマニュアルを参照しました。 そもそもNULL は何を意味するか NULL は未定義または、不明を意味する。「電話番号を持たない」ということを表現する場合は、NULL ではなく、空の文字列を使う。 NULL 値というものを SQL 初心者はよく混乱します。SQL 初心者は、多くの場合、NULL が空文字 "" と同じであると考えてしまいます。これは違います。たとえば、以下のステートメントは完全に別のものです。 mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (""); どちらのス

    MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary
    japanrock
    japanrock 2010/03/23
    ”NULL が結果に含まれる場合は「IS NULL」等を使ってNULL を区別して扱う必要がある。”
  • COUNT 関数を使ってMySQL のインデックスの基本を理解する - LukeSilvia’s diary

    Linux-DB システム構築/運用入門の8章「インデックスのチューニング(前編)」を読んだので、インデックスの基について実際に手を動かしながら勉強してみようと思います。 内容としては、クエリを実行する際に、「インデックスだけにアクセスした場合」と、「データにもアクセスする場合」のI/O 回数の違いが、パフォーマンスにどれだけ影響を与えるか調べてみるというものです。 環境 MySQL Ver 14.7 Distrib 4.1.22, for pc-linux-gnu (i686) using readline 4.3 ストレージエンジン MyISAM 今回は、インデックスだけにアクセスした場合と、データにもアクセスする場合のパフォーマンスの違いについて調べたいので、インデックスの構造が「キーの値, データの位置」となっているMyISAM の方が調査環境に向いていると判断しました。 テスト

    COUNT 関数を使ってMySQL のインデックスの基本を理解する - LukeSilvia’s diary
    japanrock
    japanrock 2009/11/04
    ヒットするレコードの件数が多い場合、インデックスを使ってしまうとランダムアクセスが多数発生し、フルテーブルスキャンよりパフォーマンスが落ちてしまう
  • REST について調べたまとめ - LukeSilvia’s diary

    普段仕事Rails を使っている身ですが、Rails 2.x 系を使っているものが1つもない。結構前からRails 3 の話題がでてきている今、そろそろRails 2.x をまともに使っておきたいと思ったので、まずはREST について調べました。最初にREST について調べたのは、REST がRails 2.x (実際には1.2.x から)で導入された最も大きな概念だからです。 REST とは REST とはアーキテクチャスタイルである アーキテクチャスタイルとはデザインパターンのようなもので、システムを設計する上での方針をまとめたものである。 REST は「REpresentational State Transfer」の略である 直訳すると、「(リソースの)表現可能な状態の転送」。あるリソースの状態を表現したものがサーバからクライアントに転送されるのがREST。ここにでてきた「リソー

    REST について調べたまとめ - LukeSilvia’s diary
  • Emacs からVim へ移行しました - LukeSilvia’s diary

    今までCarbon Emacs を使っていたのですが、カスタマイズによって動作が重くなったり少し不満に思っていました。そうした中、Emacs23 がリリースされたり、Carbon EmacsからCocoa Emacsへの流れも来ていました。 僕もCocoa Emacs に移行しようと思ったのですが、Web+DB の記事やRails ユーザにVim を使う人が多いことを知り、ふとわず嫌いだったVim を試してみようと思いました。 少しカスタマイズしてある程度使えるレベルになったので、まとめておきたいと思います。 環境 Mac OS X(10.5.8) Vim のバージョン macvim-kaoriya(7.2 KaoriYa 20090802) Mac OS X 用 Vimのいろいろを見ると分かる通り、Macvim を使うにも色々種類があります。 僕の場合は、ターミナルと別に使いたかっ

    Emacs からVim へ移行しました - LukeSilvia’s diary
  • swatch でログを監視しよう - LukeSilvia’s diary

    swatch とはログの監視に使用できるツールで、perl で書かれています。ログをリアルタイムで監視し、特定の文字列が書き込まれたらメールで管理者に通知することができます。 メールで通知をする以外にも、コンソールにメッセージを出したり、特定のコマンドを実行したりすることができます。 以下のページが参考になります。 @IT:サーバのログ監視ツールを使いこなそう(2/3) なお、今回Swatch を試した環境は以下のようになります。 CentOS 4.4 perl 5.8.5 cpan 1.03/CPAN.pm 1.7601 インストール swatch はいくつかのモジュールに依存しているので、まずはそれらをインストールする必要があります。ソースからインストールする方法もありますが、今回はCPAN からインストールします。ソースからインストールする場合は、直前に紹介した参考ページを参考にして

    swatch でログを監視しよう - LukeSilvia’s diary
    japanrock
    japanrock 2009/06/16
  • MySQL とメモリに関するまとめ - LukeSilvia’s diary

    前回のエントリーデータベースを用いたセッションデータ管理についてで、MySQL とメモリの関係について良く分からない部分があると書きました。 実はここに関する理解はかなり曖昧な部分があって、調査して追記します。とくにメモリ利用量について。mysqld のプロセスが利用できるメモリの上限が、32bit OS の場合は3G 程度ということは、innodb_buffer_pool_size もこの制限を受け、これについての警告が、先に紹介したリファレンスマニュアルのものという理解だけどいいのだろうかというのが1つ。 2 つ目は、この理解があっているとすると、4G 以上のクラスのメモリをつんだサーバをDB サーバとして利用する場合、64 bit OS でないとリソースの有効活用ができないか。それとも、先に書いたとおり、OS レベルのキャッシュとして利用できるから、結果としてデータファイルを読み込む

    MySQL とメモリに関するまとめ - LukeSilvia’s diary
  • データベースを用いたセッションデータ管理について - LukeSilvia’s diary

    Web アプリケーションとは切っても切れないセッション機構。DB ベースでセッション管理を行なって得られた知見と、それを元に考察した結果をまとめてみます。 セッションデータの特性 DB で管理される他のデータに比べ、セッションデータはかなり特殊です。主な特徴は次のような感じ。 データが増加するのが速い 定期的な削除が必要 頻繁に更新される リクエスト毎に読みに行く必要がある このデータを読めないとアプリケーション全体にアクセスできない アクセス頻度が高いということです。あと、1つ目の特徴からセッションデータについては意識的に管理してやる必要があります。 現在の環境 アプリケーションの領域が少し特殊で、セッションデータがやたらたまります(ユーザ数何百万のサービスとかそういうのではないです)。 RDBMS MySQL 4.0.22 ストレージエンジン InnoDB レコード数 6千万 テータサ

    データベースを用いたセッションデータ管理について - LukeSilvia’s diary
    japanrock
    japanrock 2009/05/25
    5.1のパーティショニングは便利そうだなぁ
  • git 環境のセットアップと簡単なチュートリアル - LukeSilvia’s diary

    ソーシャル化するOSS開発者たち − @ITGitHub Issue Tracker! - GitHubを見て、github がとても楽しそうなので、git を使い始めました。 http://github.com/lukesilvia/ 良く使いそうなコマンドとかを調べたのでメモ。 git インストール インストール Mac なので、macports 使う $ sudo port install git-core +svn +gitweb $ git --version git version 1.6.2.1 今までsvn 使っていて連携したので「+svn」 gitweb あると、ブラウザからリポジトリをブラウズできるので入れる PATH を通す 以下をPATH に追加 /opt/local/libexec/git-core git の場合、git rm とかの後にファイル名の補完が効か

    git 環境のセットアップと簡単なチュートリアル - LukeSilvia’s diary
  • 大きめのテーブルにカラムやインデックスを追加する際の注意 - LukeSilvia’s diary

    先日大きめ(といっても500万行くらい)のテーブルにインデックス付きのカラムを追加しようとして痛い目にあったので調査。 大きめのテーブルにカラムやインデックスを追加するとどうなるか 今回は単純に、「ALTER TABLE 〜 」で追加しようとしました。追加するカラムは3つで、 varchar(255) インデックスなし varchar(255) ↓のdate 型カラムとマルチカラムインデックスの形式のユニークインデックスあり date インデックスあり SQL を実行し、状況を「SHOW PROCESSLIST」で監視していたら、1つ目のカラム追加で次のような状態に… 最初にState が「copy to tmp table」状態になり、次の状態に遷移するまで1時間かかる 次にState が「Repair with keycache」状態になり、完了までに1時間かかる 次のカラム追加に対す

    大きめのテーブルにカラムやインデックスを追加する際の注意 - LukeSilvia’s diary
  • Evernote からChangeLog + chalow に移行した! - LukeSilvia’s diary

    今までEvernote を使って作業ログを残していたのですが、chalow の方がメリットがあったので、chalow を使ってみました! Evernote のいいところ シンクロできるのでどこでも使える クロスOS なクライアントソフトがある チェックボックスを挿入できて、Todo 管理に便利 Evernote に足りないところ 記法とかないので、上手く書かないと結構見にくい 社内の人だけ公開とかしにくい(LAN上のサーバに置いて誰でも見れるようにしたい) Emacs とか使い慣れたエディタ使いたい そこでchalow ですよ丶(´▽`)ノ chalow とはChangeLog 形式で書かれたファイルをHTML に変換してくれるプログラム。作者のサイトでも使われています。Evernote と比べた結果はこんな感じです。 ChangeLog なので、シンクロはDropBox で可能 Emac

    Evernote からChangeLog + chalow に移行した! - LukeSilvia’s diary
  • Macports のmysql の文字化け問題、readline 問題を直す - LukeSilvia’s diary

    macports のmysql4 やmysql5 を普通にインストールすると、mysql クライアントから日語を正しく入力できません。例えば、以下のようなクエリを入力すると、Return を押した時に日語が見事に化けます。 SELECT name AS 名前 from users; さらに困ったことに、mysql クライアント使用時にreadline が効かなくて、「Ctrl-r」の履歴参照が使えません。 解決策 これを修正するには、configure 時のオプションを追加する必要があります。実際には、「/opt/local/var/macports/sources/rsync.macports.org/release/ports/databases/mysql5/Portfile」ファイルを以下のように修正します。編集する際にはedit コマントを使います。 sudo port ed

    Macports のmysql の文字化け問題、readline 問題を直す - LukeSilvia’s diary
  • 現在閲覧しているページをはてブしている「お気に入りユーザ」を表示するGreasemonkey - LukeSilvia’s diary

    あったらいいなーって思い、作ってみました。機能概要は以下の通りです。 機能 現在閲覧しているページをはてブしている「お気に入りユーザ」を表示する ついでに、自分がはてブしているかも表示する 導入するとこんな感じに、左下にお気に入りユーザのfavicon が表示されます。 メリット なんとなくググったページを「お気に入りユーザ」がはてブしていると分かることで、有益なページを逃しにくくなる 「はてブしようとしたら以前はてブしてた」っていうあの敗北感から脱出できる インストール always_hatebu_favorites.user.js からインストールして下さい。ソースはgithub に置いてあります。 使い方 使うための条件は以下の通りです。 はてブにログインしていること はてブを公開していること お気に入りを公開していること 以下のコマンドが使えます。 update favorites

    現在閲覧しているページをはてブしている「お気に入りユーザ」を表示するGreasemonkey - LukeSilvia’s diary
  • Rails 1.2.3 〜 2.2.2 までの主な変更点のまとめ - LukeSilvia’s diary

    rails の2.x 系をまともに勉強していなかったので、調査しました。コピペの部分も多いですが、情報ソースと共に記述します。 あまり変更点がなかったマイナーアップデートは除外してあります。 1.2.4 2.0 からエラーになる構文に対する警告出力 1.2.4 で警告がでなければ、2.0 で問題なく動くと言われている セッション固定攻撃対策として, URLベースセッションのサポートを削除 ActiveRecord::Base#to_jsonを使っている場合に発生する可能性があるXSS攻撃を回避するようにJSONエンコーディングアルゴリズムが変更 参考 Rails 1.2.4登場 - 2.0での対応予定者もバージョンで警告チェックを | エンタープライズ | マイコミジャーナル 1.2.5 JSONXSS 修正 参考 Ruby on Rails 1.2.5公開 - JSON XSS脆弱性を

    Rails 1.2.3 〜 2.2.2 までの主な変更点のまとめ - LukeSilvia’s diary
    japanrock
    japanrock 2009/01/02
  • プログラマと仕事 - LukeSilvia’s diary

    最近、仕事に当てる時間が多くて、Blog が更新できてない・・・。はてダ初めて以来更新していない期間が一番長いです(⊃д⊂)更新が止まると、「最近勉強してないなぁ」っていう感じが押し寄せてきてしょんぼりします。 残業続きだったこともあり、仕事についてちょっと考えてみました。 仕事に当てる時間の基準は、無理なく勉強が続けられるペース 考えてみると、仕事に当てる時間の基準はこれかなぁって思います。以下の3つのバランスがとれているのがミソ。 仕事時間(8〜10時間くらいがいいと思う。僕の場合、情報収集のみの時間は仕事中に2時間ほど当てている) 勉強時間(2〜3時間くらいがいいと思う。) 睡眠時間(5〜7時間くらいがいいと思う。5割るときついはず) 仕事が終わってないのに帰ると開発は進まないことになります。でも、毎日勉強して成長すれば、開発にかかる時間は短くなるわけですし、長い目でみればペイすると

    プログラマと仕事 - LukeSilvia’s diary
  • 新はてなブックマークでもMinibufferBookmarkCommand を使う - LukeSilvia’s diary

    なんか、リニューアルされたらMinibufferBookmarkCommand 経由ではてブできなくなった。「100%」とかでるけど、実際にはブックマークされない( ゚д゚) ブックマークレットだと、タグの[]を打つのが面倒なので、MinibufferBookmarkCommand を修正。一応動くようになりました。 旧はてブとの違いを調査 Web 経由で「ブックマークを追加」ページにいって、ソースみる そもそも追加ページのURL が変わった 旧:「http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&url=...」 新:「http://b.hatena.ne.jp/[ユーザのID]/add.confirm?url=...」 当然フォームのポスト先URL も変わった 旧:「http://b.hatena.ne.jp/[ユーザのID]/add?mod

    新はてなブックマークでもMinibufferBookmarkCommand を使う - LukeSilvia’s diary
  • IME 関連のキーバインドを変更して快適に編集する - LukeSilvia’s diary

    Windows のIME 関連のキーバインドって物凄い使いにくいですよね!EeePC とかでWin 使うと耐えられない。 IME のON/OFF を切り替えるキーの位置が遠すぎ IME のON/OFF がトグル 英字を入力しようとして「半角/全角キー」押したら実は元々IME OFF でまた押すとかよくある カナ変換とか英字変換がF7/F10 とか遠すぎ Ctrl-a/e が使えない Ctrl-k/y が使えない 等々。あと、IME と関係ないけど、Ctrl キーの位置もないですよね〜。 ってなわけでMac 風に変更して快適になろう IME 関連の変更 これは、ツール不要。以下の手順で変更できます。 1. タスクバーのIME メニューの「ツール」を選択 2. プロパティを選択 3. 全般タブの中にある「設定」ボタンを押す 4. キー操作に対する動作を変更 無変換:IME オフ 変換 :IME

    IME 関連のキーバインドを変更して快適に編集する - LukeSilvia’s diary