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

  • Rails におけるレースコンディションの例とその回避方法 - LukeSilvia’s diary

    最近立て続けにレースコンディション問題に遭遇したのでメモ。 レースコンディション(競合状態)とは、複数のプロセスやスレッドが共有リソースに対して何らかの操作をする際に、処理のタイミングによって結果が異なってしまう状態のこと。よくトランザクションの解説の際に銀行口座の例として紹介されるおなじみのやつです。 今回は、アプリケーションの書き方によって発生するレースコンディションと、MySQL のテーブル定義時の制約不足で発生するレースコンディションについてそれぞれ紹介したいと思います。 どちらの場合も共有リソースはDB で、条件を満たすと意図しない形でデータが保存されてしまいます。 サンプルアプリケーション サンプルアプリケーションとして、簡単なアクセス解析機能付きの短縮URL ツールを考えます。 アクセス解析機能として、以下のような機能を持つとしましょう。 URL毎 にクリック数を計測できる

    Rails におけるレースコンディションの例とその回避方法 - LukeSilvia’s diary
  • ハッカーと遅延評価勉強法 - LukeSilvia’s diary

    の(というかはてな界隈)ハッカーはほぼ「遅延評価勉強法」をしている気がします。 僕はまだまだ世界のハッカーについて詳しくもないし、日ハッカーですら、はてな界隈で有名な人を知っているくらいです。それでも、上記のような確信を持ちました。 遅延評価勉強法とは 遅延評価勉強法とは、僕が知る限りでは、id:amachangさんのブログで作られた造語です。元はプログラム用語の「遅延評価」から来ています。 「遅延評価」という言葉を調べてみると、「ある式を、その結果が当に必要になる時点までは評価しないでおくテクニック」とあります。そのメリットは、「条件次第で捨ててしまうような値を事前に準備することは非効率的である。このような場合遅延評価を行うと必要なときだけ値が計算されるので計算量を低減できる」とありました。 ここから遅延評価勉強法とは、「その知識が必要になった時に初めて勉強する方法」です。もっ

    ハッカーと遅延評価勉強法 - LukeSilvia’s diary
    ngtk_ma
    ngtk_ma 2012/03/08
    漫然と学ぶのではなく、必要なときに必要なところをピンポイントで学ぶ。知識欲が高まっているときに学習することほど効果的なことはない。
  • 携帯向けアプリでQRコードを生成する - LukeSilvia’s diary

    RailsでのQRコードの生成方法 これは主に2つの方法がある。1つはプラグインを使用する方法、もう一つはGDを使ったライブラリを使用する方法だ。 1.プラグインを使用する こちらはプラグインを使用する方法である。導入も簡単で、直ぐに使えるだろう。しかし、問題もある。 JavaScriptを使用しているため、PCでしか使えない QRコードを画像でなく、tableタグとして実現するため、保存できない 参考 http://agilewebdevelopment.com/plugins/qrcode http://www.fraction.jp/log/archives/2007/07/1190 2.ライブラリを使用する 今回は携帯向けということで、こちらを使用する。こちらは、GDという画像を扱う為のライブラリを用いてQRコードを生成するため、携帯でも使えるし、画像として保存もできる。ただ、1の

    携帯向けアプリでQRコードを生成する - LukeSilvia’s diary
    ngtk_ma
    ngtk_ma 2011/10/11
  • validationのエラーメッセージ(error_messages_for)の日本語化 - LukeSilvia’s diary

    何が問題か RubyOnRalsには、ライブラリとして便利な機能がデフォルトで提供されている。「error_messages_for」もその1つ。これは、ユーザーがフォームからデータを送信してきた時、内容にもれがあったり、値が不正であることをメッセージとして出力するもの。 しかし、デフォルトは英語表記。しかも、カラム名を使用してしまうのであまりよくない。そこで、これを日語化する。 解決策 主に3つあると思う。 1.「ActiveHeart」を使う(非推奨) 2.「ruby-gettext」を使う 3. 自分で変更 ActiveHeartは、作成者が非推奨していた。何らかの脆弱性なのかな。ググれば出ると思う。このライブラリの中に日語化をサポートするものがある。 ruby-gettextも日語化をサポートするが、こちらは日語化だけでなく、様々な言語にアプリケーションを対応させることがで

    validationのエラーメッセージ(error_messages_for)の日本語化 - LukeSilvia’s diary
    ngtk_ma
    ngtk_ma 2011/07/14
    わかりやすい!
  • formでもconfirm - LukeSilvia’s diary

    ちょっと悩んだのでメモしておこうと思います。 何が問題か Ruby on Railsのヘルパーメソッド「link_to」は、以下のようにすると、確認用のダイアログを出してくれます。 ダイアログで「OK」を押した場合は指定したリンク先である「Google」のトップに飛び、「キャンセル」を指定した場合には何も起こりません。 <%= link_to "test","http://www.google.co.jp",:confirm => "Googleに飛びますがよろしいですか?" %> 一方、フォームを用意して、そのフォームには「決定」というボタンがあるとします。このボタンを押した際にも確認用のダイアログを表示したいとします。 しかし、Railsでフォームを扱う場合にボタンを用意するメソッドである「submit_tag」は上記のような「confirm」オプションをサポートしていません。よって、

    formでもconfirm - LukeSilvia’s diary
    ngtk_ma
    ngtk_ma 2011/07/14
    なるほど。
  • 1