![長文日記](https://cdn-ak-scissors.b.st-hatena.com/image/square/94008440e0963fe8d2809742eef92c5e4ba3c56d/height=288;version=1;width=512/https%3A%2F%2Fi.gyazo.com%2F6deb8e1c32254d9eb10d503c45ac741f.png)
最近、会社でシェルの操作方法について教えているのだが、 pgrep / pkill / skill / pidof といった 便利なプロセス操作系コマンドを知らない人が実に多い。 プロセスを殺すというのは、よくある作業なので 今回はコレについて書いてみる。 たとえば、これらのコマンドを知らない人が、 指定した名前のプロセスを kill する手順はだいたい 以下のようなものになることだろう。 $ ps aux | grep プロセス名 | grep -v 'grep' # コマンドの出力結果から pid を目で確認 12345 ... .. hoge .. .. $ kill 12345 この作業は非常に面倒で退屈だ。 もし殺さなければならないプロセスがたくさんあったときは どうするのだろうか。 おまけに、grep コマンド自身が候補に含まれてしまう事があるのだが、 grep -v grep
Rails3 でこんなふうに利用するバッチで ActiveRecord を使うときに、 $ rails runner script/hoge.rb おおよそ以下のようなコードを書いていたのですが、 require 'active_record' require 'yaml' require 'app/models/task' # 対象とするモデル db_config = YAML.load_file("config/database.yml") ActiveRecord::Base.establish_connection(db_config["development"]) Task.new(:name => 'Taro22', :due_date => '2010-11-11', :done => false).save これだけで済むと知りました。社長に教わりました。今、仕事で Rub
原因はおそらくwebサーバ〜DBサーバ間のセッションがネットワーク的に不安定だったからだと思うけど、DBサーバで netstat -an すると 大量の CLOSE_WAIT のセッションが残ってしまって、MySQL の最大コネクション数にまで達してしまってwebの表示が出来なかった。CLOSE_WAIT をいきなり消すことは出来ないので、早めに消えるようにしたいときは tcp_keepalive_time TCPセッションが確立されて検査が実施されるまでの時間 時間になると tcp_keepalive_intvl と tcp_keepalive_probes の値にしたがって検査を実施する tcp_keepalive_intvl 次の検査を実行するときの待ち時間 tcp_keepalive_probes 検査の回数のそれぞれの値を小さくしてあげればよい。変更方法は vi で :wq する
アカウント情報などの、開発者ごとに値のことなる定数を 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
卒論のグラフを描くにあたり、手元のMacにMsOfficeが入っておらず、OpenOfficeは入っているが微妙で、まぁせっかくだしgnuplotを使おうと思い立ち、MacPortsを使ってインストールしようと思ったけども、最近はHomebrewなるものがクールらしいとの情報を得*1、だいたいタイトル通りな感じになったのでそのメモ。MacPortsからHomebrewへの乗り換えについては、検索すればいくらでも出てきますが、問題はgnuplotのインストールでした。環境Mac Book Air 13-inch, Mid 2011Mac OS X Lion 10.7.2XCode 4.2MacPortsのアンインストール多分、パッケージがコンフリクトしなければおかしくなることはないと思うけども、一応アンインストールしました。方法は検索すれば分かりますが一応書いておきます。 $ sudo po
問題 凝ったマイグレーションを試行錯誤で作成中に 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 テーブルを
rails MockとStubの区別が曖昧で、今ひとつ腑に落ちないまま、WEBのコードを参考に書いていたけど、takihiroさんのブログを見て、やっと自分も腑に落ちた。何が すごい!と思ったかというと、この機能を使うと、モデルとコントローラ、モデルとビュー をそれぞれキレイに分離できそうだ思わされるという点です。RSpec のおかげで「分離するとはこういうことか」ということが分かりました。http://d.hatena.ne.jp/takihiro/20081023/1224762895takahiroさん、GJ!ありがとうございます。とても良いまとめでした。ただ、最後のコードサンプルの中で、 # (A) で作成したモックを返すことを記述している。 Product.should_receive(:find).with("37").and_return(mock_product) # (2
去年から、37signalsの本がでると騒いでいました。英語版は3月発売なのですが、日本語版の方が先に出たみたいです。Twitterで知って、さっそく入手しました。 37signalsから本がでるらしい。来年。 - このブログは証明できない。 内容としては、「Getting Real」をより一般化した感じです。さらにプラスアルファの内容も。 「失敗から学ぶこと」が過大評価されている件について。 失敗から何を学べるのだろうか?してはいけないことについては学べるかもしれないが、それにどんな価値がある?次に何をすべきかがわからないではないか。 成功から学ぶことと比較しよう。成功は次の手段を与えてくれる。成功すれば、何が成功したのかわかり、それをもう一度できる。そして次はもっとうまくやれるだろう。 その通り。ただし、注意が必要です。人は失敗した時になぜ失敗したのか考えるのですが、成功したときになぜ
Rails3 での cucumber の起動を spork で早くする手順を Spork and drb - GitHub に沿って紹介します*1。 Gemfile に以下を追記します。 gem 'spork', :group => [:development, :test] spork オプション付きでプロジェクトの cucumber を設定しなおします。path.rb を上書きされるのですでに編集しているなら退避しておきます。 rails generate cucumber:install --spork あとは spork を起動しておいて、そのポートを指定して cucumber を実行します。 bundle exec spork cuc --port 12345 & cucumber --drb --port 12345
LD_PRELOAD という環境変数に、共有オブジェクトを指定すると 任意のプログラムを実行する時にその共有オブジェクトを読み込ませる事が出来るらしい。 そして、もし読み込ませたときに シンボル名 が衝突していたときは、 先に定義されたシンボル名が優先されるという仕様になっているらしい。 そこから考えられるのが、 LD_PRELOAD でわざと同じ名前のラッパー関数を作成して、 ロギング処理を注入するという事だ。(アスペクト指向だ!!) (今度やってみよう。) とりあえず、以下は LD_PRELOAD で同名関数を上書きできる例です。 まず、main.c 1 #include <stdio.h> 2 3 int main() { 4 puts("hello world!!"); 5 return 0; 6 } ただ単に、puts 関数を呼び出しています。 実行すると、当然のように hell
Rails でテーブルごとに初期データを登録できるように改良する方法を考えます。 Rails では db/seeds.rb に初期データを登録するスクリプトを記述します。 db/seeds.rb は rake の db:seed タスクにより実行されます。 rake db:seed この仕組みを改良し、テーブル単位で初期データを登録できるようにします。 アプローチは色々考えられますが、ここでは以下のように改良する方法を考えます。 db/seeds.rb をテーブルごとに分割して作成する。 分割したファイルを個別に実行する rake タスクを定義する。 db/seeds.rb をテーブルごとに分割する まずは db/seeds.rb をテーブルごとに分割します。 分割したファイルは db/seeds というディレクトリを作成し、その中に保存することにします。 具体的には、以下のようになります
zusaar.com - zusaar リソースおよび情報 参加してきました。 以下、粒度にばらつきありますが、気になった点のメモです。ほぼ引用ですが、意図と違う表現になってしまっていたらすみません。 RESTful APIとしてのRailsとクライアントとしてのJavaScript (@ppworks) no title RESTfulの指向で考えると統一されたインターフェースで、URLを見ただけで何するかわかるのが良い JSはassetsのほうに統一しアクションごとに処理が書けるjQuery-Routerなどを使うと良いのでは RailsはだんだんAPI化していくのではないか 通常のHTTPリクエストと非同期HTTPリクエストを同じ統一インターフェースであるRESTfulな設計で管理すると一貫性が出て開発効率の向上につながる リソースモデリングパターンの提案 (@tkawa)
まずは、こちらを。 満足せる豚。眠たげなポチ。:[Ruby] 二時間の仕事を一秒で片付けてくれる(かもしれない)三行スクリプト。 「テキストファイルの各行に一括で同じような処理をして、その結果を得たい」というときに使えるそうです。ちょうど、ログファイルをゴニョゴニョして、、と思っていたのでナイスタイミングです。 下の3行のスクリプトをPATHの通ったところに置いておくそうです。 script = ARGV.shift || '' lines = $stdin.readlines.map {|li| li.chomp} puts eval(script) それを、こんな感じで使うと。rakeファイルからコメントで始まる行を抽出する例です。 type c:\ruby\bin\rake | filter "lines.select {|s| s =~ /^#/}" これは便利!だと思うのですが、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く