Hatena::ブログ(Diary)

130単位

2011-05-31

利用中のGoogle Chrome拡張機能 2011年5月

現在利用している拡張機能とUserScriptの紹介です。各リンク先からインストールすることができます。

拡張機能

常用18個
あると便利5個

UserScript

常用11個

関連リンク


4844328468
Google Chrome OS ~最新技術と戦略を完全ガイド~

関連記事

2011-05-30

4月分の読書記録

定例エントリです。今年は非常に停滞しております。『日経マネー』で緊急時の対応とその備えについて確認できました。

3月分読書データ

期間 : 2011年04月
読了数 : 2 冊
日経マネー 2011年 06月号 [雑誌]
★★★☆☆ 読了日:2011年4月24日
次なる似た状況に備えるために振り返りは必要。分散とキャッシュ大事
NARUTO―ナルト― 55 (ジャンプコミックス)
岸本 斉史 / 集英社 (2011-04-21)
★★★☆☆ 読了日:2011年4月24日
キャラ一挙再登場だけど死者というのと連合軍多すぎでワンピほどワクワク感なかった

メディアマーカー

3月分の読書記録 - 130単位 (一ヶ月前)

4月分の読書記録 - 130単位 (一年前)

2011-05-26

Rails3でSSL Requirementを使う

Rails3でSSL対応可能にするライブラリです。forkされたもののようです。

Powは現時点ではSSLには対応していない*1ので、Passengerでローカルでの動作確認をしました。

環境

使いかた

Gemfile
gem 'bartt-ssl_requirement'

これでbundle installによりインストールはされますが、動きません

Routing Error

uninitialized constant SslRequirement

このようなエラーになります。正しい記述は以下です。

gem 'bartt-ssl_requirement', :require => 'ssl_requirement'

ruby - Alternative for ssl_requirement plugin for Rails 3? - Stack Overflow

ライブラリ本体との名前が異なるため、「:require」を追加する必要があります。これがわからなくてしばらく悩みました。

Controller
class ApplicationController < ActionController::Base
  include ::SslRequirement
end

class AccountController < ApplicationController
  ssl_required :signup, :payment
  ssl_allowed :index

  def signup
    # SSLアクセスのみ
  end

  def payment
    # SSLアクセスのみ
  end

  def index
    # SSL/通常アクセスどちらも可
  end

  def other
    # 通常アクセスのみ
  end
end

ApplicationControllerでSslRequirementをincludeして、各Controllerでアクションを指定すればokです。

Apache+PassengerSSL

MacPortsApacheであればデフォルトで有効になっていると思われますが、SSLモジュールmod_sslが必要です。鍵と証明書の作り方は以下参照ください。

Passengerと80番ポートの設定は済んでいるものとして、以下SSLを動作させる最小限の設定です。

Listen 443
NameVirtualHost *:443 #VirtualHostを複数利用する場合
<VirtualHost *:443>
    ServerName myapp.dev
    DocumentRoot "/path/to/myapp/public"

    SSLEngine on
    SSLCertificateFile "/opt/local/apache2/conf/server.crt"
    SSLCertificateKeyFile "/opt/local/apache2/conf/server.key"
</VirtualHost>

これで設定を再読込(sudo apachectl graceful)すればSSLの確認ができます。


ちなみにRails3.1からはもともとSSL対応になっているようです(アクションごとの振り分けはできないかも?)。


4774146633
Ruby on Rails 3 アプリケーションプログラミング

4873112567
Apacheセキュリティ

関連記事

2011-05-25

サブディレクトリ型マルチサイト内でWordPressでないサブディレクトリの有効化

要件

public_html
├── static_site
│   └── index.html
├── wp-admin
├── wp-content
├── wp-includes
├── .htaccess
├── index.php
└── ...

public_htmlがDocumentRootで、static_siteを静的サイトとして扱いたいってことですね。

サブディレクトリ型マルチサイトを導入してしまうと、.htaccessに書かれたRewriteRuleの影響で、普通にはサブディレクトリはアクセスすることができません。

対策

(別の) .htaccess を利用します。

ディレクティブは現れる 順番に適用されます。ですから、あるディレクトリ.htaccessディレクトリツリーのより上の階層の .htaccess ファイルの 設定を上書きするかもしれません

Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ

つまり、該当サブディレクトリ.htaccessを設置すれば、そちらが優先されるということです。

上記の例だと、static_site/.htaccess に以下のように記述します。

RewriteEngine off

これでサブディレクトリstatic_siteにアクセスできます*1

ちなみにこの方法を利用すれば、サブディレクトリ型マルチサイトWordPress内に全く用途の異なる別の単体WordPressを設置することも可能です。

*1:当然ながらWordPress側ではstatic_siteという名前は使えなくなります

2011-05-19

AWS EC2 カスタムAMI(S3/EBS)作成手順

AWSでの環境構築をスムーズにするため、AMI(起動用イメージ)をはじめて作ってみました。

EBSタイプのAMIを作りたかったのですが、最初よくわからなくてインスタンスストアタイプのものを作ってしまいました。おかげでどちらの手順も試せたので、メモっておきます。OSAmazon Linuxで、Microインスタンスで作業しました。

AMIの種類

インスタンスストアタイプ

イメージ作成
  • インスタンスAMIにしたい状態までセットアップを進める
  • Account > Security Credentials > Access Credentials > X.509 Certificates
  • 新規作成して証明書と秘密鍵ダウンロード
    • 対象のサーバーへ転送
    • /mnt以下はイメージに含まれないためそこに置くとよい
  • Account > Security Credentials > Account Identifiers
    • AWS Account IDを確認
ec2-bundle-vol -c /mnt/cert-xxx.pem -k /mnt/pk-xxx.pem -u 000000000000 -r i386

ERROR: can't modify frozen string

  • ツール自体のコードを修正する*1か、一時的にでもRuby1.8系に切り替える
S3アップロード
ec2-upload-bundle -b BUCKET_NAME -a ACCESS_KEY_ID -s SECRET_ACCESS_KEY -m /tmp/image.manifest.xml --location ap-northeast-1

You are bundling in one region, but uploading to another. If the kernel

or ramdisk associated with this AMI are not in the target region, AMI

registration will fail.

You can use the ec2-migrate-manifest tool to update your manifest file

with a kernel and ramdisk that exist in the target region.

Are you sure you want to continue? [y/N]

  • リージョンが合っていないという確認が出る場合がある
  • 日本リージョンインスタンスから、--location指定なしかつバケットが存在しない状態でやったらUS Eastにアップロードされた
  • あらかじめS3のコンソールからバケットを作成しておくのがいいと思われる
  • 転送に時間がかかるためscreenしてからやるとよい
AMI登録
  • Web Console > S3 > Buckets
  • manifest.xmlのファイルを選択してProperties
  • Linkを確認
  • Web Console > EC2 > AMIs > Register New AMI
  • AMI Manifest PathにxmlファイルのLinkを入力

HTTP 301 (Moved Permanently) response for URL http://bundle_name.s3.amazonaws.com:80/image.manifest.xml: check your manifest path is correct and in the correct region.

EBSタイプ

【追記】Consoleから一発でAMI作成できました。

AMI作成

f:id:deeeki:20110521073042p:image

【追記】以下はひと手間かかります*2

スナップショット作成
AMI登録
  • コマンドから登録
  • X.509 Certificatesの証明書と秘密鍵が必要
ec2-register -C cert-xxx.pem -K pk-xx.pem --region ap-northeast-1 -s snap-xxxxxxxx -a x86_64 -n AMI_NAME
  • 以下のように表示されたら成功

IMAGE ami-xxxxxxxx


手順はこれ以外にもあると思います。おかしな点ありましたらご指摘いただけると助かります!


4774146072
WEB+DB PRESS Vol.62

4844329804
Amazon Web Services ガイドブック クラウドでWebサービスを作ろう!

関連記事

*1:/opt/aws/amitools/ec2-1.3.66634/lib/ec2/amitools/xmlbuilder.rb L182

*2:ちなみに原因はよくわかりませんがうまく起動しませんでした

2011-05-11

『Ruby on Rails 3 アプリケーションプログラミング』の感想とメモ

http://instagr.am/p/Dn66U/

Twitter上での告知をたまたま拝見して応募させていただいたところ、献本(プレゼント)していただきました。ありがとうございます!予想よりも早くGW前に届き、おかげでじっくりと読み進めることができました。

目次

第1章 イントロダクション

第2章 Ruby on Railsの基本

第3章 Scaffolding機能によるRails開発の基礎

第4章 ビュー開発

第5章 モデル開発

第6章 コントローラ開発

第7章 ルーティング

第8章 テスト

第9章 Railsの高度な機能

Ruby on Rails 3 アプリケーションプログラミング:書籍案内|技術評論社

感想

自分自身は本格的にRailsを触り始めて2ヶ月程度です(バージョンは3がメイン)。その中で苦労した点は以下のようなことです。

  • Web上に日本語の情報が圧倒的に少ない
  • Railsがフルスタックなぶん、全体像を理解するのに時間がかかる

これらをまとめて解決してくれるのが、『Ruby on Rails 3 アプリケーションプログラミング』といえると思います。

まずはインストール/Scaffoldがあって、View→Model→Controllerの順で書籍の半分以上がMVCの丁寧な解説になっています。主にメソッドごとに見出しが設けられており、構文、引数の説明、使用サンプル、結果をまとめて確認することができます。application.rbの設定パラメータマイグレーションrakeコマンドなど、項目が多岐にわたる場合は表形式で網羅されており、リファレンスとしても活用できます。

個人的に得るものが多かったのは、第7章のルーティングと第9章のメール/キャッシュの解説です。ルーティングはRESTfulインターフェイスの概念とそのカスタマイズが優先的に解説されており、(Railsでは)リソース中心のURL設計がいかに大事か再考するきっかけになりました。またRailsでのメール/キャッシュはほぼ知識ゼロの状態だったので、細かな解説で飛躍的に理解が深まりました。第9章では国際化やjQueryでのAjaxにも触れられており、初級者以上には有用な内容かと思います。

ひとつ注意点としては、全くのプログラミング初心者がこれ1冊で学ぶのは難しいと思います。ただし他の分野への参考書籍やWebのリンクも載っており、合わせて読むことでカバーできるような配慮もされています。

メモ

はじめて知ったことについて少しメモです。

  • 2章 p35
    • ERBで空白の制御
      • -を付けることで後方スペースを除去
<%= @msg -%>
module Railbook
  class Application < Rails::Application
    config.author = 'YAMADA.Yoshihiro'
    • 呼び出しはRailbook::Application.config.author
      • #もう少し簡潔に呼び出せたほうがいいかなと思ったりする
<title><%= @title ? @title : 'Rails 3入門' %></title>
  • 5章 p225
    • Modelで指定カラムの値をインクリメント
Model.increment(attr, num)
  • 5章 p236
    • 空白入力時に検証スキップ
      • :allow_blankとすることで長さのエラーはスキップされる
validates :isbn,
  :presence => true,
  :length => { :is => 17, :allow_blank => true }
  • 7章 p363
    • ルーティングのnamespace/scopeブロック
#URL/Controllerともに階層化
namespace 'admin' do
  resources :books
end
#Controllerのみ階層化
scope 'admin' do
  resources :books
end

そんなわけで、まもなく発売されます。AmazonにてITカテゴリ予約ランキング1位を獲得もしているようです*1。Rails3をしっかりと習得したい方にはおすすめの一冊です。

4774146633
Ruby on Rails 3 アプリケーションプログラミング

書籍サポートページは以下です。サンプルコードのダウンロードもできます。

Ruby on Rails 3 アプリケーションプログラミング - WINGS
http://www.wings.msn.to/index.php/-/A-03/978-4-7741-4663-8/

関連リンク

関連記事

2011-05-07

Rails3初心者と最先端gemライブラリの付き合い方

Rails3でデファクトになりつつある認証ライブラリのDeviseを使って開発していて、ちょっとしたことでかなり時間を浪費してしまいました。

no title

大元はライブラリバグだったにせよ、自分の経験不足も少なからず影響はしてるので、同じ轍を踏まないためにメモを残しておいてみます。

現象

  • パスワードリセット機能
  • 正しい手順を踏んでるのに「トークンが不正」と出る
  • ログにあるトークン付きSELECT文は問題なくレコード取得できてる

原因と解決

  • コードを追いつつ原始的なデバッグをしてたら原因っぽい部分を発見した
  • 原因らしきフレーズ「reset_password_sent_at」でググったらissueやpull requestが出てきた
  • 最近追加された仕様で、要はreset_password_sent_atカラムがない場合に発生するバグ
  • 使っているバージョンが悪く、すでに修正されていた
  • 最新バージョンにしたら問題なくなった
    • 1.3.1 → 1.3.4
  • generate機能の仕様変更もすこし関係していた
  • 設定ファイルも最新版でgenerateしたものをベースに差し替えた

デバッグでわかったこと

  • まずはプレーンな状態で新規アプリをつくって不具合が再現するか確認する
  • 糸口がなければコードを追って愚直にデバッグしてみる
  • gemライブラリでもlogger.debug()は効く
    • log/以下のログファイルに出力される
    • 使いかた:logger.debug variables
    • オブジェクトはinspectするといい:logger.debug object.inspect
  • ただしサーバー(Rails)を再起動させないと反映されない
    • Powはtouch tmp/restart.txt

まとめ

  • 利用実績のあるgemライブラリでもバグがあるかもしれないことを覚悟して使う
  • ドキュメント等は基本的に英語を読まないといけないので苦手意識をなくす
  • GitHubリポジトリをWatch、またはフィードをチェックする
  • 未リリースの開発中であれば頻繁にbundle updateして最新版を使うようにする
  • generateで生成されるファイルの変更も確認する

そんなわけで、先端をゆくWAFによる開発は面白くもあるけど大変というおはなしでした。もっといい方法があるということでしたら教えていただけるとありがたいです!


4774146633
Ruby on Rails 3 アプリケーションプログラミング

2011-05-03

PowとApacheを共存させる方法

Pow: Zero-configuration Rack server for Mac OS X

Mac用の簡易Rackサーバーとして話題のPowをインストールしてみました。が、今まで使えていたApacheが使えなくなってしまいました。localhost127.0.0.1がすべてPowで処理されてしまうようです。

f:id:deeeki:20110504015256p:image

f:id:deeeki:20110504015255p:image

参考リンク

no title

こちらを参考にしました。Apache側でIPv6を使うといいみたいです。

環境

Apache設定ファイル編集

/opt/local/apache2/conf/httpd.conf (MacPorts)
/private/etc/apache2/httpd.conf (Macデフォルト)

#Listen 80
Listen [::]:80

hostsファイル編集

/etc/hosts

#127.0.0.1  localhost #コメントアウト 
::1               localhost
::1               phpapp.dev
  • localhostの行はもともと存在してた
  • 別のローカルなVirtualHostで動かしたい場合は追記
  • 元のlocalhostコメントアウトはマシン再起動が必要かもしれません

VirtualHost設定

NameVirtualHost *:80
#localhost
<VirtualHost *:80>
	ServerName localhost
	DocumentRoot "/path/to/your/htdocs"
	<Directory "/path/to/your/htdocs">
		Order allow,deny
		Allow from ::1
	</Directory>
</VirtualHost>
#CakePHPのアプリ例
<VirtualHost *:80>
	ServerName phpapp.dev
	DocumentRoot "/path/to/phpapp/app/webroot"
	<Directory "/path/to/phpapp/app/webroot">
		Options FollowSymLinks
		AllowOverride FileInfo
		Order allow,deny
		Allow from ::1
	</Directory>
</VirtualHost>
  • VirtualHostを有効に
  • 自分のみアクセス許可する場合は「Allow from ::1」

編集完了したらApache再読み込みします(sudo apachectl graceful)。※できなければ再起動を試してください

わかったこと

  • ::1はIPv4でいうところの127.0.0.1
  • IPv6へのpingはping6コマンドを使う
  • 「NameVirtualHost [::]:80」「VirtualHost [::]:80」とはしなくてもいい
  • IPv4ではhttp://localhost/alias/でAliasが効かなかったが、IPv6だと効く

これでPowとApacheを共存させて開発ができます。※ApacheがListenするポートを80番から変更する方法もあります

関連リンク

4798122300
独習 TCP/IP IPv6対応

2011-05-01

『SlideFinder』リリース直後の振り返り

no title

HTML5やCSS、jQueryなど、Web制作に関する日本語スライドを集約したSlideFinderが便利っぽい | かちびと.net

公開翌日にかちびと.netさんで紹介され、生涯初はてブホッテントリになったりしました。

f:id:deeeki:20110502023629p:image:w200

特に予定のない休日だったこともあり、1日張り付いて細かい改修などしてました。突発的かつ一時的ではありますが、広まったからこその貴重な経験ができたりしたので、それを振り返ってみたいと思います。

アクセス

f:id:deeeki:20110502022607p:image

特にモニタリングとかはしてませんが、ServersMan@VPS(最安Entryプラン)とCakePHP(DBなし)で大丈夫だったみたいです。

公開後にやったこと

特にFacebook周りは地道に調べて多少ノウハウたまった気がします。

公開前にやっておいたほうがいいこと

やはり公開後に変えづらいものは、しっかり決めておくのがいいと思います。また、紹介されてすぐにSlideShareAPIが落ちてたときがあったのですが、取得結果をキャッシュしてたおかげでほぼ影響なしで済みました。これ以外の1つ前の見出しで書いたようなことは、あとからでもいい気がします。

まとめ

  • (最低限は押さえて)とりあえず公開する
  • ソーシャル系サービスのレスポンスをチェックする

何かつくるのであればとりあえず公開を目標に、まずは0を1にすることが大切かと思います。それがなければ何も起きませんでした。そして、運良く注目されたらレスポンスになるべく耳を傾けること。貴重なフィードバックには改善のヒントや成長のチャンスがあると思います。

関連記事

第2回「開発コンテスト24」で作ったSlideShareの何か - 130単位