サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは本日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。
こんにちは。私は今まで、3年間、RailsやCakePHP,Ethnaなど様々な言語やフレームワークを使って開発を行ってきました。その中で、共通して使ってきたのがHTML/CSSです。私が3年間かけて培ってきたHTML/CSSの書き方ややり方、方針などをこの場を借りてまとめたいと思います。 まずはじめに 対応ブラウザを確認する スマホ対応の必要があるかを確認する HTML/CSSを使った開発のルールを決める HTML編 idやclassの命名を考える idは多用しない HTMLの共通化を考えた記述をする コラム: IE(後方互換モード)の対応が必要になった時の対処 CSS編 共通で使えるCSSは共通用のファイルを作ってまとめる CSSの適用範囲を考慮して記述する reset.cssを使うかどうかを決める CSSの!importantはできるだけ利用しない BootstrapのCSSを上書き
操作ログや簡易的なパフォーマンス測定などの目的で、特定アクションで実行されたSQLを監視したいことがあります。 filterやviewで実行された分を含まず、単純に指定ブロックの中を監視するなら、以下のような方法で簡単に実現可能です。 # application_controllerにでも定義しておく def watch_queries events = [] callback = -> name,start,finish,id,payload { events << payload[:sql] } ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do yield end events end 使い方はこんな感じ def update @user = User.find(params[:id])
Rails4がリリースされてしばらく経ちましたが,一部のgemが対応に追いついていないこともあり,まだ本番系のシステムに適用するのは様子見かなというところです.社内システムや個人的に遊ぶアプリで予行練習中. というわけで,まだもうしばらくはRails3のお世話になりそうなので,Rails3の総まとめというわけではないですが,良く使うgemをまとめてみました.社内のチームMTGでの発表資料をSlideShareにアップロードしてあります. 既にRails開発に慣れた人にとってはおなじみのgemが多いと思いますが,これからRailsでの開発を始める人にとってはそれなりに有用かと思います. また,弊社では数多くのRailsアプリケーションをcapistranoでdeployしている実績がありますので,deploy関連のgem等も参考になればどうぞ. ================以下追記(20
RailsでFat ControllerになったらForm Classを作れ,という記事はあちこちで見るのですが,今一つ参考になるような実装があまり見つからなかったので記事にしてみました. Rails 3.2.13,Ruby 2.0.0系で動作確認済みです. Fat Controller問題 Railsで特に何も考えずに検索機能を作っていると,検索ロジックでcontrollerが膨らんできてしまうと思います(Fat Controller問題). 例えば,検索フォームの内容として最初は名前だけで検索するとのことで, HogeController < ApplicationController def index @hoges = Hoge.where("name LIKE ?", "%#{params[:name]}%") end end と書いていたのが,そのうちメールアドレスや住所でも絞
2013.08.12 [Rails 4.0] 巨大なテーブルやserializeを使うときのActiveRecordオーバーヘッドを測定してみた Railsは遅い!とよく言われますが、高速化ポイントのうち最有力候補の1つがDB/モデル周りです。 N+1問題を修正するだけでも、体感できるレベルの高速化が期待できます。 しかし、RubyKaigiでCookPadの方も言っていたように、RDBMSがSQLを実行する時間だけでなく、ActiveRecordオブジェクトの処理は非常に重いです。 モデル周りの最適化と聞いて、一生懸命SQLをEXPLAINするのも大事ですが、ログに出力される「Prefecture Load (0.5ms)」のような数値にはActiveRecordオブジェクト部分のオーバーヘッドが含まれていないため、全体でどの部分が遅いのかを理解しないと徒労に終わってしまう可能性がありま
ActiveRecordにはコールバックがたくさんあります。 実行順序がよくわからなくなるので、Rails 4が出たことだし改めてまとめてみました。 ※ActiveRecord::Callbacksのヘッダコメントに全部書いてあります 使うモデル まずは、このようなクラスを作りました。 class Work < ActiveRecord::Base callbacks = %w(before after).product(%w(validation save create update destroy)).map{|a|a.join('_')} callbacks += %w(after_commit after_rollback after_initialize) callbacks.each do |callback| send(callback) { logger.debug cal
ActiveRecordには便利なprevious_changesというメソッドがあります。 割と知名度が低いので、ここで使い方をご紹介します。 (08/26追記) はてブでご指摘(?)頂きましたが、正確にはActiveRecordではなくActiveModel::Dirtyの機能です。 まずはchanges previous_changesの前に基本のchangesです。 これは、saveする前に変更されたattributeを調べる機能です。 まずはfindした直後です。changed?は当然falseになります。 User.create(name: "Taro") user = User.find(1) user.changed? # => false user.changed [] user.changes # => {} user.changed_attributes # => {
モデルからデータを取得する際に常に特定の検索条件を指定することができるdefault_scopeですが、 デメリットについてあまり注意を払わずに使ってしまって失敗しました。 サンプル事例 環境 * Rails 3.2.12, 4.0 * MySQL 5.1.65 ※ 実際に問題が起きたバージョンが3.2.12 なのでそちらが中心になっています。 データを「名前」「年齢」どちらか指定された値で並び替えるという処理があったので、 特に指定が無ければid順で取得するという条件をdefault_scope を使って追加しました。 class User < ActiveRecord::Base default_scope -> { order(:id) } end これで、モデルからデータを取得する際に必ずORDERが指定されるようになります。 User.all #=> SELECT "users"
Rails3では,ActiveRecordを使ったデータの取得方法にfind, find_by_XXX, find_all_by_XXX, all, whereでの絞り込みなど色々ありますが,それぞれ微妙に異なった挙動をします. ちょろいサンプルアプリを書く位ならあまり気にならない所なのですが,きちんとアプリを書く上では以外と大事なところ(後述)なので,ここいらでまとめておきます. Rails使っている人で hoge = Hoge.find(params[:id]) || Hoge.new とか書いて思った様に動かないぞ?とかハマった人向けです. 取り上げるのはfind, find_by_XXX, all, find_all_by_XXX, whereです.Railsのバージョンは3.2.8を使っています. 以下の説明では,以下のクラスが存在することを前提とします. class Hoge
Concurrency and Python By Shannon ,jj Behrens, February 03, 2008 Stackless Python, Erlang, and greenlets are interesting approaches to concurrency Shannon -jj Behrens works for Metaweb Technologies. He can be contacted at [email protected]. Imagine you wrote a new Web server that didn't support concurrency and couldn't do multiple things at the same time. Consequently, each new Web request would r
2011 Pythonアドベントカレンダー(Python3) - connpass の3日目を担当します。 Python 3 がリリースされてから、 Python の進化は主に Python 3 で行われ、そこから Python 2 にバックポートできるものがバックポートされています(例: GCのチューニング、辞書の内包表記など)。 しかし、 Python 2 は 2.7 で新規開発を終了しており、 2.7 にバックポートされなかった機能はもう Python 3 に移行しないと利用することができません。今日は、そんな機能のひとつである New GIL を紹介します。 なお、今日紹介する内容のほとんどは UnderstaindingGIL で紹介されている内容を僕なりに要約したものです。(ただし、翻訳ではありません) 著作権の扱いがわからなかったのと、代わりに自分で図を書き起こすのが面倒だっ
Bob Ippolitoは2006年にEventletの最初のバージョンを書きましたが、割とすぐに開発をやめてしまいました。Donovan Prestonは当時働いていたLinden Labの他の人とメンテナンスを行いました。ステートマシンやコールバックを使うよりも簡単にネットワークソフトウェアを方法を探しており、2008年にEventletに興味を持つようになりました。GreenletをベースとしたEventletは、当時あった他のフレームワーク(PYthonネイティブのジェネレータ、生のgreenlet、Corotwine)よりも、使いやすさという点で進んだものでした。 その時関わっていたプロジェクトはTwistedを使っていたので、二つのライブラリを統合することから始めました。作業をしているとEventletの大量のバグを見つけて、ほとんどのコア部分を書き換えました。修正したブランチ
Katana プロジェクトの概要 Howard Dierking ASP.NET が初めてリリースされた 2002 年当時の状況は今とは異なり、まだインターネットの揺籃期で、ユーザー数は約 5.69 億人、1 日の平均利用時間は約 46 分、Web サイトの数は約 300 万でしたが、わずか 10 年後の現在、インターネットのユーザー数は 22.7 億人、1 日の平均利用時間は 4 時間、Web サイトの数は 5.55 億に達しています (bit.ly/MY7GzO、英語)。 このような増加が、Web アプリケーションの構築と実行の基盤となるフレームワーク、ツール、ランタイムに対するアプリケーション開発者のニーズを急激に変化させたことは明らかです。最新の Web アプリは、迅速に変化できるように多種多様なコンポーネントやフレームワークを利用する必要があります。その上、クラウドのように大掛か
OWIN — Open Web Interface for .NET こないだ 1.0 になった ASP.NET SignalR をインストールしたときに、Owin とか Microsoft.AspNet.SignalR.Owin がインストールされてるので気が付いた人もいると思いますが、SignalR はこの OWIN 上でホストされていたりします。 そして、事実上の OWIN リファレンス実装が Katana Project です。 Katana Project - Home ちゃんと SignalR の GitHub リポジトリを見ると、submodule として Katana が取り込まれてます。 で、OWIN って結局のところ何?使うと良いことでもあるん?という感じなので、まずは仕様書を確認しましょう。 OWIN — Open Web Server Interface for .
典型的で孤立したWebアプリケーションは、いくつかのI/OチャネルからHTTPリクエストを受け入れ、内部でそれを処理し、HTTPレスポンスを出力し、それをクライアントに送り返します。これは、アプリケーションが終了を命令されるまで繰り返し行われます。 この事は、WebアプリケーションがHTTPを直接的に話す必然性がない事を意味します: WebアプリケーションはあるHTTPリクエストの何種類かの表現を受け入れる事を意味します。
ども、大瀧です。 最近、お客さまからの問い合わせからElastic Load Balancing(ELB)の負荷分散について調べ社内資料としてまとめる機会がありました。せっかくなので、ブログ記事として公開してみます。内容は随時アップデートしますので、ツッコミ・ご指摘があればぜひお願いします! 負荷分散の仕組み ELBは、クライアントのリクエストを受け付けEC2インスタンスにトラフィックを転送するために、2種類の負荷分散を組み合わせて動作します。 スケーラビリティと冗長性のために、ELBはロードバランサの機能を提供するノードを複数動作させるはたらきがあり、クライアントから複数のノードへアクセスを分散させるためにDNSラウンドロビン、ノードからEC2インスタンスへのトラフィック転送を分散させるためにLeast Connsという手法を用いています。 DNSラウンドロビン DNSラウンドロビンはそ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く