サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
デスク環境を整える
d.hatena.ne.jp/kitokitoki
カレントディレクトリの全ファイルのパーミッションを 777 にするには、 chmod 777 * ターゲットディレクトリ以下の全ファイルのパーミッションを 777 にするには、 chmod -R 777 ディレクトリ名 R はリカーシブの R。cp などでもあった。chmod の場合はなぜか大文字でないと駄目。 特定のディレクトリ以下の特定のファイルのパーミッションを変更するには、 find ディレクトリ -name パターン | xargs chmod 755 日付が違う。なんでだ。 ネット検索して (1) を見つけ、「う〜ん、思い出せ〜自分〜」と (2)(3)を思い出した。 IT media ファイル操作 404 Blog Not Found 勝手に添削 - find(1) ディノオープンラボラトリ いまさらxargsの便利さを主張してみる
▼ strftime を使う <%= foo.bar_at.strftime("%d/%m/%Y") %> ▼ I18n.localize を使う <%=l foo.bar_at, :format => "%d/%m/%Y" %> ▼ en.yml で I18n.localize の default を上書き en: date: formats: default: "%d/%m/%Y" <%=l foo.bar_at %>
次のような例で、 class Foo def initialize(&block) instance_eval(&block) if block_given? end end x = Foo.new { def foo; 'foo'; end } p x.foo class Foo def initialize yield self if block_given? end end x = Foo.new { def foo; 'foo'; end } p x.foo え、後者はプライベートメソッド呼びだしエラーになるよ。yield で self を渡しているのに、ブロックで受けとっていないからだね。こうかなぁ class Foo def initialize yield self if block_given? end end x = Foo.new {|obj| def obj.foo(
6/14 で万葉さんとの仕事は一区切りです。5月末までの契約だった案件が、わりとギリギリになって 2ヶ月の延長の打診。もうすっかり気持ちが切り替わっていたのですが、もろもろ考えて 2週間だけ追加で受けて、その案件から抜ける形になります。フリーになりたての頃、以前いた会社に1案件いただいたのを除くと、ず〜っと万葉さんにいました*1。たいへんお世話になりました。私の場合は、何度も契約更新したのですが、そのたびに条件を良くしてもらえましたし、残業が月20時間を超えることは一度もありませんでした。Rails/JS でアプリが作れるフリーランスの方は、万葉さんとつながっておいて損をすることはないと思います。私はホームページの社員募集欄に載っていたメールアドレスに「社員希望ではなくフリーランスの普通のプログラマなのですがどうでしょうか」といった内容のメールを送り、仕事を得ました。 このメモブログを書き
default_scope で scores.measurement_date の ASC と設定したソート順を、DESC に変更するのに reorder が使えます。 ▼ モデル class Score < ActiveRecord::Base attr_accessible :measurement_date, ... default_scope order('measurement_date') end ▼ コントローラ def index Score.scoped.to_sql # => SELECT "scores".* FROM "scores" ORDER BY measurement_date Score.reorder('measurement_date DESC').to_sql # => SELECT "scores".* FROM "scores" ORDER BY
has_many :through と HABTM の使い分けの基準が Rails Guides にのっていました。 The simplest rule of thumb is that you should set up a has_many :through relationship if you need to work with the relationship model as an independent entity. If you don’t need to do anything with the relationship model, it may be simpler to set up a has_and_belongs_to_many relationship (though you’ll need to remember to create the joinin
必見!Forkwell松田明が出題するRails課題の正解発表【Tech総研】 を読んでいて、n.times.map {...} というイディオムを知りました。次のように使われています。 let(:users) { 10.times.map.with_index(1) { |i| User.create! username: "johndoe_#{i}", first_name: "John#{i}", last_name: "Doe#{i}", email: "john_#{i}@example.com" } } かんたんに置き換えるとこうなります。 3.times.map { |n| n * 3 } # => [0, 3, 6] 3.times.collect { |n| n * 3 } # => [0, 3, 6] 以下は、kaminari gem の kaminari/spec/m
以下の仕様を満たす素朴な実装のメモ。 画像(jpeg)をアップロードして DB に格納する 一覧画面で表示する # コントローラ class FooController < ApplicationController def index @items = Item.all end def new @item = Item.new end def create @item = Item.new(params[:item]) if image = params[:item][:image] @item.image = image.read @item.image_full = image end if @item.save redirect_to ... else flash.now[:alert] = @item.errors.full_messages.join("\n") render
IS NOT NULL の書き方が気にくわないです。 ▼ IS NULL {ActiveRecord::Relation}.where(foo: nil) ▼ IS NOT NULL {ActiveRecord::Relation}.arel_table[:foo].not_eq(nil) # または {ActiveRecord::Relation}.where("foo IS NOT NULL")
小さな単位で RSpec でのテストを実行するのに、 rspec -l192 path/to/test_spec.rb と l オプションを使っていたのですが、以下のように「rspec テストファイルへのパス:行番号」でもうまくゆきました。v2.12.0 です。 rspec path/to/test_spec.rb:192
次のコマンドを一度実行することで、マージコミットのコミットメッセージに、そのマージコミットでのマージ対象となる個々のコミットのコミットメッセージの一行目が含まれるようになります。 git config --global merge.log true
現象 rails console すると、"cannot load such file -- readline (LoadError)" というエラーになる $ rails c /home/m/.rvm/rubies/ruby-1.9.3-p286-perf/lib/ruby/1.9.1/irb/completion.rb:9:in `require': cannot load such file -- readline (LoadError) from /home/m/.rvm/rubies/ruby-1.9.3-p286-perf/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>' from /home/m/.rvm/gems/ruby-1.9.3-p286-perf@XXX/gems/railties-3.2.3/lib/
昨日、Twitter で @kentaro さんになんとなく、Rails のログは何か独自のことをしているのかと質問したところ、@kyanny さんに話しをふってくださり、ちょっとした工夫や基本として抑えておくべき考え方のいくつかを聞くことができました。
Heroku にデプロイしたアプリが、config/application.rb で config.time_zone = 'Tokyo' としても、日付時刻が 9時間ずれて表示されてしまいました。アプリのコードで Time.now.in_time_zone あるいは Time.zone.now などとするか、サーバの環境変数 TZ を Asia/Tokyo にすることで対応できました。 $ heroku run console ... irb(main):001:0> Time.now.strftime("%Y-%m-%d %H:%M") => "2013-01-27 02:55" irb(main):002:0> Time.now.in_time_zone.strftime("%Y-%m-%d %H:%M") => "2013-01-27 11:57" irb(main):005:0>
Rails プロジェクトで jQuery1.9 を使うことにしたので、jquery-migrate を導入して古い書き方が指摘されるようにしました。 ▼ Deprecated だと表示されている様子 ▼ application.html.erb <%= javascript_include_tag "application" %> <% if Rails.env.development? || Rails.env.staging? %> <%= javascript_include_tag "jquery-migrate-1.0.0b1.js" %> <% end %> 参考リンク jquery/jquery-migrate - GitHub jQuery 最新版で Deprecated になっている書き方を指摘するツールはないでしょうか - QA@IT
問題 凝ったマイグレーションを試行錯誤で作成中に rake db:migrate:up VERSION=XXX しても何も実行されなくなりました。 対処 そのマイグレーションのステータスがすでに up なら、rake db:migrate:up されません。現在のステータスは rake db:migrate:status で確認できます。 bundle exec rake db:migrate:status ... up 20121120071333 Migrate map admin user rake db:migrate:status して up と表示されている場合は、いったん適当な内容で rake db:migrate:down VERSION=XXX することで、該当のマイグレーションを up で実行できるようになります。あるいは、schema_migrations テーブルを
Rails3 の remote => true な Ajax 処理では .js.erb を使うか、JS で Rails が追加したカスタムイベントを使うのがレールにのった方法です。WEB+DB PRESS vol.58 詳解Rails3 p26 あたりの、簡易ブログアプリの一覧画面での Ajax 検索が .js.erb を使っていたので、カスタムイベント版にして動作を確認しておきました。 まずは index.js.erb を使わない場合。 ▼ posts/index.html.erb <%= form_for @search_form, :url => posts_path, :remote => true, :html => {:method => :get} do |f| %> <%= f.search_field :q %> <%= f.submit '検索' %> <% end %
ghci で、":i 演算子" とすればわかるんですね。省略しないなら ":info (演算子)" 。 infix は無結合、infixl は左結合、infixr は右結合。レベルは 0 から 9 まで の 10 段階で、数が大きいほど結び付きが強いです。 Prelude> :info (+) class (Eq a, Show a) => Num a where (+) :: a -> a -> a ... -- Defined in GHC.Num infixl 6 + Prelude> :i + class (Eq a, Show a) => Num a where (+) :: a -> a -> a ... -- Defined in GHC.Num infixl 6 + Prelude> :i . (.) :: (b -> c) -> (a -> b) -> a -> c --
以下では、「コールバック関数を引数で受け取る関数」と「引数を持たないコールバック関数」を定義し、呼び出しています。 function f1(callback){ console.log('f1'); callback(); } function f2() { console.log('f2'); } f1(f2); //=> f1 //=> f2 では、「コールバック関数を引数で受け取る関数」に、「引数のあるコールバック関数」を渡すにはどうすればよいでしょうか。 方法1 「コールバック関数を受け取る関数」の定義を、コールバック関数の引数も自身の引数として受け取るように変更します。 function f1(callback, arg1){ console.log('f1'); callback(arg1); } function f2(arg1) { console.log(arg1); }
C-k はポイントの右側全部を削除します。じゃあ、現在行のポイントの左側をすべて削除するにはどうしたらいいんだろう。こう思ったのは、どの設定が原因なのか、最近 PHP や HTML を編集していると「えぇぇ、そこまでやりますか!」と言いたくなるくらい、豪快にインデントされることがあるから。特に、隣に先輩がいるときにそうなると最悪です。で、実際調べてみると、ググる必要すらありませんでした。答えはこれです↓ (global-set-key (kbd "C-c C-k") '(lambda () (interactive) (kill-line 0))) anything で describe-binding し kill-line を見つけ、その describe-function アクションでヘルプをみると、ズバリな解説がありました。 (kill-line &optional arg) Ki
.bashrc に次のように追記すれば、source-bashrc-all コマンドで、他のアクティブになっていないターミナルでも source ~/.bashrc されます。reddit に載っていて、なるほどと思いました。 # http://www.reddit.com/r/commandline/comments/12g76v/how_to_automatically_source_zshrc_in_all_open/ trap "source ~/.bashrc" USR1 alias source-bashrc-all="pkill -usr1 bash"
差分の確認に meld を使う Git での diff に meld を使うにはどうするのか検索してみると、次の2つの方法がありました。 wmanley/git-meld - GitHub How to: Meld for Git diffs in Ubuntu Hardy - Nathan Hoad "git diff ブランチ1..ブランチ2" したいといった用途だと、1 は diff をいっぺんに表示する "meld dir1 dir2" 的な挙動です。2 は 対になる 1 ファイル diff を表示するだけの meld がまず起動し、その meld を閉じると次の差異のあるファイル同士の diff を表示する meld が立ち上がる、といった挙動です。1 の git-meld の方が使いやすかったです。 ▼ 1 の設定 [alias] ... meld = /home/m/Drop
「戻る」リンクは、link_to ヘルパーで次のように作ることができます。 link_to "戻る", :back これは、@controller.request.env["HTTP_REFERER"] || 'javascript:history.back()' です。複数画面の共通部でこれを使っていると、どんどん戻るのではなく、行ったり来たりすることになります。request.env["HTTP_REFERER"] を意図していないなら、link_to_function で次のように書けます。 link_to_function "戻る", "history.back()" ただし、たいていの場合、戻り先の *_path をアクションでインスタンス変数に格納しておくなどして、それを使う方がよいと思います。
昨日は git fetch --prune がでてこなくて、同僚(的な人) に教わりました。帰宅後「Git によるバージョン管理」を読んでいたところ、git fetch と git pull と git remote update の違いについての端的な説明がありました。 git fetch リモートブランチから情報を取得するだけで、チェックアウトしているブランチにマージしないコマンド ワーキングツリー、インデックスには影響を与えない ローカルブランチに反映せずにリモートリポジトリにあるブランチの内容を git log で確認したり、git diff で差分を確認したりできる 取り込まれたリモートブランチの HEAD は FETCH_HEAD に格納される git pull リモートブランチから情報を取得して、チェックアウトしているブランチにマージするコマンド git remote upd
PostgreSQL を開発環境の OS にインストールして Rails プロジェクトを PostgreSQL ではじめる手順です。 PostgreSQL のインストール $ sudo apt-get install postgresql PostgreSQL に接続するアカウントの作成 PostgreSQL をインストールすると、postgres という PostgreSQL のスーパーユーザが作成されます。この postgres になって、ログインユーザ m を PostgreSQL に接続するアカウントとして登録します。 $ sudo su postgres $ createuser m Rails プロジェクトの作成 rails new では、-d オプションで、postgresql を指定してます。 $ rails new sample -d postgresql config/
app/helpers で定義したビュー用の(?)ヘルパーをコントローラやモデルで使うには、そのヘルパーを include します。 class FooController < ApplicationController include XXXHelper 逆に、コントローラで定義したコントローラ用のヘルパーをビューで使うには、helper_method に続けて設定します。 class ApplicationController < ActionController::Base helper_method :foo private def foo "foo" end end ヘルパーを定義するとき、どこに置こうかなーと迷うことがあります。
Rails のソースコードリーディングです。Let’s read some Rails code: OrderedOptions « Codeulate. を参考にしました。OrderedOptions について。aa['bb'] ではなく aa.bb と書けるのはなぜ、という話題です。Rails では ActiveSupport の ordered_options.rb で実現しています。 ActiveSupport 3.0.7 の ordered_options.rb は以下になります。30行たらずの短いコードですが、影響力抜群です。 require 'active_support/ordered_hash' module ActiveSupport #:nodoc: class OrderedOptions < OrderedHash def []=(key, value) supe
アカウント情報などの、開発者ごとに値のことなる定数を Rails で扱うのに、これまでは settingslogic と endeco を使っていたのですが、今回の仕事では定数管理に rails_config という gem が使われていました。とりあえずドキュメントを読むと、config/settings.local.yml をつくれば、config/settings.yml より優先されるそうです。定数に開発者固有の値を設定するという目的は、rails_config だけではたせました。endeco は「1定数につき1ファイル」形式なのに対し、rails_config では settings.local.yml のみで管理できる点が違うところであり、気に入っているところです。ただし、settings.local.yml は .gitignore に入れるので、settings.yml
無印良品の「体にフィットするソファ」を導入しました。実店舗で下見したときは、思ったより硬いなーという印象だったのですが、別売りのカバーを装備していたのがその原因でした。どーんと沈み込む感覚が好きなので、クッションカバーは、伸縮性のある生地の敷き布団カバーで代用することにしました。大きな面を上にしたこのクッションにのっかって後頭部を預け、膝の上にノートパソコンを置くと非常に快適で、個人的な「暮らしの革命」レベルの環境改善となりました。怠惰なプログラマだと自覚する人におすすめです。
次のページ
このページを最初にブックマークしてみませんか?
『d.hatena.ne.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く