EC2 Reserved Instanceの有効期限をAPIで管理する

EC2 Reserved Instanceの有効期限が切れた通知って僕の知る限りはメールで来ないんですよね。カレンダーに登録しとくとかタスク管理ツールに入れとくとかすればいいんですがAPIを使ってcronで毎日確認する方法もあるので軽く書いてみた。引っかかったインス…

Atom上でWindows Explorerぽく動作するfile-explorerというパッケージを書いた

Problem github製のテキストエディターであるAtomにはデフォルトでfuzzy-finderというファイル探索機能がありファイル名を入力すればどこにあるファイルでも見つけることができる。これはとても便利なのだが、Railsなどで開発をしてると開いてるファイルと同…

Passengerでゾンビプロセスを殺す時のベストプラクティス

Passenger EnterpriseでRollingRestartを有効にしているとworkerプロセスがゾンビになって再起動してもプロセスが死なない時がある。 下記のケースではPID24388がtmp/restart.txtをtouchしても死なない状況である。 $ passenger-status Requests in queue: 0…

Atom上でRailsプロジェクト内のファイル移動を楽にするRails-Transporterというパッケージを書いた

最近Emacsからgithub製のテキストエディターであるAtomに移行しました。慣れるまで1週間ほど移行期間は必要でしたがデフォルトの設定で十分高機能で使いやすいです。自分は普段の仕事ではRailsアプリの開発をする事が多いのでRails開発で使える便利そうなパ…

RailsでArgumentError: invalid byte sequence in UTF-8が発生する場合の解決策

Railsで作成されたアプリケーションのリクエストURLにURLエンコード(壊れていてUTF8にデコードできない)された文字列を含めるとArgumentErrorが発生します。 環境 ruby 2.0.0p353 rails-4.0.4 再現方法 サンプルプロジェクトを構築 # railsの最新版をインス…

Apache Passengerの設定項目について調べた

PassengerはRailsを動かす事ができるアプリケーションサーバである。 Apache版の設定項目について調べたので自分用の備忘録として残しておく。 バージョン Passenger-4.0.37 http://www.modrails.com/documentation/Users%20guide%20Apache.html Configuring…

dalliの挙動を検証してみた

Rails4でmemcachedをキャッシュストアで使う定番gemといえばdalliとRailsGuideに書いてある。ただ、このgemが実際どうゆう挙動をするのかググってみてもあまり日本語の情報が見つからなかったので試してみた。 環境 Ruby-2.0.0p353 Rails-4.0.2 dalli-2.7.0 …

active_adminの認証を他のページに設定する方法

active_adminはrailsで定義したモデルを操作するwebインターフェースを数コマンド叩くだけで簡単に定義してくれるお手軽なツールです。まれにあるページに対して認証を定義したい時がありますがactive_adminの認証を簡単に設定する方法があります。認証を設…

CoffeeScriptで定義したクラスを別のcoffeescriptファイルから呼び出す方法

普通にcoffeescriptを書くとglobal汚染を防ぐためにfunctionの中に入れられてしまうのでwindowに領域を確保してそこに格納しておく必要がある。HogeClassの前にHogeProjectを定義しているのはnamespaceみたいなもので他のjsがHogeClassを定義している時のた…

redis-mutexで排他制御

例えばサーバが2台あったとして同じ時間に全く同じ内容のcronスクリプトが実行されるとする、その処理がDBのバッチ処理など大きなコストを必要とするなら両方のサーバで実行されるのは無駄でしかないし場合によってはデータの不整合なども発生するかもしれ…

事前にprecompileしたassetsをS3に配置してdeployを高速化する方法

Railsで作られているサービスとおもわれるbasecampやgithubはassetsファイルをアプリケーションサーバとは別のCDN(akamaiやCloudFront)サービスから配信している。CDNに配置する事のメリットとして世界中のEdgeサーバからassetsを配信できるのでどこからアク…

active_adminにロック機構を導入する

active_adminをインターネットに公開する場合にアカウントロックを設けたいなぁと思った。いろいろ調べていたらdeviceでアカウントロックを後から追加するの記事がとても参考になりました。 要約するとactive_adminはdeviceという認証フレームワークを使って…

active_adminのassets precompileが失敗する

active_adminのprecompileが失敗する。 環境 Mac OS X 10.8.2 ruby-1.9.3-p125-p194 rails-3.2.11 active_admin-0.5.1 プリコンパイルしてみると.. $ bundle exec rake assets:precompile /Users/hakutoitoi/.rbenv/versions/1.9.3-p194/bin/ruby /Users/hak…

protect_from_forgeryが何をやっているのか調べた

Rails3でCSRF対策としてApplicationControllerにデフォルト指定されるprotect_from_forgeryですが、実際のところ何をやっているのかわからなかったのでコードリーディングしてみたメモ。 環境 Mac OS X 10.8.2 ruby-1.9.3-p125 rails-3.2.9 処理の流れ 0. Ap…

capistrano-unicornでハマった

capistrano-unicornはその名の通りcapistranoでunicornを扱う便利なgemです。 早速Railsのサービスに導入してみた。試した環境は ruby-1.9.3p194 rails-3.2.9 capistrano-2.13.5 capistrano-unicorn-0.1.6 githubの使い方を参考にGemfileに下記を追加してbun…

EC2にMonitをセットアップする

Monitとは指定したプロセスを監視して落ちていた場合に再起動を行なってくれるデーモンプロセスです。 DaemontoolsとSuperVisordと比べると設定が一番シンプルな気がします。 yumからインストール $ sudo yum install monit # 確認 $ yum list installed | g…

検索条件をWHEREで指定する場合とJOIN ONで指定する場合の違い

mysqlにおいてWHEREとJOIN ONで条件を指定した場合の違いがよくわかっていなかったのでまとめておく。映画を表すmoviesテーブルと映画の日毎の再生回数を表すplaycountsテーブルがあるとする。 moviesテーブル +----+------------+ | id | title | +----+---…

rakeで引数を受け取る

demo.rake desc "task to receive args" task :demo, :arg1, :arg2 task :demo => :environment do |t, args| puts args[:arg1] puts args[:arg2] end 実行例 rake "demo[aaa,bbb]" もうちょっと普通に引数を渡したいものです。

railsでnamespaceの中にあるModelのObserverの設定方法メモ

RAILS_ROOT/app/model/page/count.rb class Page::Count < ActiveRecord::Base end RAILS_ROOT/app/model/page/count_observer.rb class Page::CountObserver < ActiveRecord::Observer def after_save(model) logger.info "Saved!" end end RAILS_ROOT/conf…

Rails3で1つのアプリケーション内に複数ドメインのサービスを提供させる方法

PCとモバイルでドメインを別にしてサービスを提供することもあると思う。 その場合アプリケーションを別にしてもいいのだがモデルを共有したい場合もある。 そういう時はconfig/routes.rbでconstraints指定をしてrequestされたhost名でコントローラを出し分…

Action Mailerでエクセルを添付する方法

環境 rails 3.2.8 ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0] actionmailer 3.2.8 rails3のaction mailerでメールを送る際にエクセルを添付したいケースがあると思う。 Rails Guideにならって書くとこうなる。 # -*- coding: utf-8 …

turbo-sprockets-rails3を試してみた

Rails3といえばasset pipeline。 賛否両論ありますが僕はそのコンセプトが好きです。 ただ欠点があってCPUの性能が低いマシン(EC2 smallインスタンスなど)ではasset precompileがくそ遅い。 仕事で運用しているあるサイトでは大体150秒くらいかかってしまっ…

httpステータスコードをチェックしてからXML解析

c xml

前回の記事で使ったlibxml2はhttpレスポンスヘッダのステータスコードの取得ができない。 まずCURLでhttpのヘッダ情報と本文を取得して、ヘッダのチェックをしてステータスコードが200なら本文をlibxml2に渡してパースするようにした。 yahoo!掲示板のRSSのi…

C言語のlibxml2を使ってwebAPIのXMLを解析

c xml

apacheモジュール内でwebAPIを呼んでXMLを解析する必要があるため、C/C++で利用できるXMLパーサを調べてみた。Cだと expat libxml2 C++だと tinyXml Xerces などなど他にもさまざまなライブラリがあるようだが今回はlibxml2を使ってパースしてみる事とした。…

telnetを使ってみる

とりあえずtelnetでhttpリクエストしてみる。 ヘッダ情報を取得する $ telnet www.yahoo.co.jp 80 Trying 124.83.139.192... Connected to www.yahoo.co.jp. Escape character is '^]'. HEAD / HTTP/1.1 Host: www.yahoo.co.jp HTTP/1.1 200 OK Date: Fri, 0…

w3mをfirefoxぽく使う

firefoxで利用しているキーバインドとemacs-w3mキーバインドを合わせてみた。alt-tで新規タブ作成 ctl-tabで次のタブに切り替えをできるようにした。 .emacs-w3m (setq browse-url-browser-function 'w3m-browse-url) (global-set-key "\C-xm" 'browse-url-a…

phpの連想配列

php

perlのhashにforeach()でアクセスする場合、格納した順番は保持されない。 でもphpの連想配列にforeachでアクセスする場合は格納した順番でアクセスされるみたいだ。これはとても重要なことだと思う。 初めてのPHP5 のp56に載っていた。web検索のクエリを投…

php-modeのコメント行シンタックスがおかしい

emacsのphp-mode-1.5だとコメント行にある >func() >var 等がコメントとして認識されずに色付きで表示されてしまうのが気持ち悪い。たとえばdoxgenとかでありがちな以下のようなコメント行だと色が付いてしまう。 /** * 検索 * * 検索して結果を返す * * exa…

初めてのperl

初めてのPerl作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪出版社/メーカー: オライリージャパン発売日: 2003/05メディア: 単行本購入: 14人 クリック: 420回この商品を含むブログ (293件) を見る 3年前にぱらぱ…

emacs上でリージョンを選択して実行する

PERL HACKSを立ち読みしてたら発見。 これも必須だな。 (defun perl-eval (beg end) "Run selected region as Perl code" (interactive "r") (save-excursion (shell-command-on-region beg end "perl")) )