なんじゃそれ! 『Railsによるアジャイル〜』の15章 P239〜P240を読んでいてクリヴィッツテンギョウ!!! app/controllers/admin/book_controller.rb
ということができるらしい! んで、そのときのクラス宣言は
class Admin::BookController < ActionController::Base
となるらしい! 変態だ!! ぜったい変態だ!!!
なんじゃそれ! 『Railsによるアジャイル〜』の15章 P239〜P240を読んでいてクリヴィッツテンギョウ!!! app/controllers/admin/book_controller.rb
ということができるらしい! んで、そのときのクラス宣言は
class Admin::BookController < ActionController::Base
となるらしい! 変態だ!! ぜったい変態だ!!!
CakePHPはなんも考えなくてもテキトーにやってたらサイトできてたんだけど、Railsはそんな風にはやらしてもらえない。Railsのサイト作んの自体の効率性が悪い訳ではもちろんないんだけど、レールに乗るためにはそれなりに知っとかなきゃいけないことが多い感じ。『Railsによるアジャイル〜』はいま14章まで読んだ。14章はテストの章だったんだけど、初めてテストに触れた感じ。CakePHP 1.2の公式ガイドにもテストについての章はあったけど、後ろの方でおまけみたいな感じだったから飛ばしちゃってた。たまたま先月の頭に買ってた『WEB + DB Press 56』がRubyでのテストを紹介してて、そこを読みながら14章のコードを写経していったけど、わりと早い段階でテストの重要性が説いてあって、アジャイル本はしっかりしてるわと思った。
まさか自分がこの手の被害に遭うとは思ってなかったんだけど、日曜日にSkypeアカウントが乗っ取られてログインできなくなり、少額だけどSkypeクレジットが知らない外人に使われてた。
日曜未明、Skypeからメール送信されてた。メールは以下のような内容だった。
Auto-RechargeはSkypeクレジットが残り少なくなったらオートチャージする機能。使いすぎて危ないので普段はオフにしてる。Skypeは数日使ってなかったのでおかしいと思い、日曜の昼間にSkypeにログインしてAuto-Rechargeを無効にしようとした。
が、「パスワードが違う」と出てログインできない。しょうがないのでパスワードの再設定を行おうとしても「内部エラーが起きました」と出る。この時点ではアカウントが乗っ取られたと思いもよらなかったんだけど、どっかの外人が乗っ取ってすでにパスワードを変更してたみたい。
パスワードの再設定トークンの発行回数が上限に達したため、「一時的なエラーでも起きてるのかな」と諦めて翌日もう一度パスワードの再設定を試みることにした。
結局月曜日になっても内部エラーが出続けるので、Skypeのサポートに問い合わせてみた。するとすぐ返事が来て、
It seems that a third party might have gained access to your account. To ensure that you are the only one who can access your account, we advise you to change your password as soon as possible.
この時点で初めて誰かに乗っ取られたんだということに思い至った。サポートの人がアカウントをロック(Skypeクレジットを使えない状態)して、僕がパスワードを再設定をできる状態にしてくれたので、新しいパスワードに変更してログインしてみると、通話履歴にインドネシアへの発信記録が。
正直なところ、いつどのタイミングでパスワードを盗まれたのか分からない。Skypeを騙ったメールとか届いてないし、WebからSkypeアカウントにアクセスするのはSkypeクレジットをチャージするときくらいなので、怪しいサイトにIDとパスワードを入力した覚えもない。
しかし「自分は情報弱者じゃないからフィッシングには引っかからないよ」とか「Mac使ってるから安全なはず」みたいな油断というか慢心があったのかも。
金銭的な被害は200円くらいだけど、すごく気持ち悪い出来事だった。と同時に、セキュリティの重要性が身にしみて分かった。Skypeのサポートはオートリプライメールとかじゃなくて迅速に対応してくれたけど、なんかしばらくSkypeは使いたくなくなってしまった。
プログラミングっぽいネタだけどMacの話なのでこっちに書きます。
僕はちゃんとしたプログラミングの勉強をしたことがないので、いつも行き当たりばったりでサイト作り始めます。でもさすがにこういうのの非効率性が分かってきたので、最初に必要なデータベースのテーブル数くらいを大まかに決めることにしました。そんでそのイメージ図みたいのを描くのにMindNodeというアプリケーションを使ってみた。
MindNodeはマインドマップを描くためのソフトです。マインドマップの描き方とか知らないし、キャンペーンかなんかで安かったのでとりあえず買っておいたソフトですが、思いの外良い感じに描けました。
そんでこれをThe Hit Listでアウトライン風に書き下してみた。
開発の初期段階でやることが視覚化できてとっても良いと思いました。
それにしてもThe Hit ListはiPhoneアプリ出なさそうですね。Google Groups のユーザーフォーラムでは「出す出す詐欺」の作者にみんなあきれ果ててThingsに戻ったり別のソフトを物色してるみたい。
The Hit List自体はとてもUIも機能もとても良くできているだけに大変残念ですね。
この前大阪で第二回アメ村ブルゾンの会をやったんですけど、そこで日夜ネットストーキングプログラミングにいそしんでおられる皆さんとお会いして、TwitterのStreaming APIの使い方を教えてもらいました。なんか自分でやろうとしてたんだけど、全然見当違いなところを見ていたみたいで、僕もStreaming APIでネットストーキングできるようになりました。pokutunaさんにもらったコードと "Twitter Streaming APIをRubyで試してみる - しばそんノート":http://d.hatena.ne.jp/shibason/20090816/1250405491 を参考に、以下のような感じにしてみました。
#!/usr/bin/env ruby
# coding: utf-8
require 'net/http'
require 'uri'
require 'rubygems'
require 'json'
USERNAME = 'morygonzalez'
PASSWORD = '***'
uri = URI.parse('http://chirpstream.twitter.com/2b/user.json')
begin
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth(USERNAME, PASSWORD)
http.request(request) do |response|
raise 'Response is not chunked' unless response.chunked?
response.read_body do |chunk|
#空行は無視
status = JSON.parse(chunk) rescue next
#eventを含まないものは無視
next unless status['event']
source = status['source']
if status['target_object']
target_obj = status['target_object']
target_user = target_obj['user']
puts "#{status['event']}: #{source['screen_name']} -> #{target_user['screen_name']}: #{target_obj['text']}"
elsif status['target']
target = status['target']
puts "#{status['event']}: #{source['screen_name']} -> #{target['screen_name']}"
end
end
end
end
rescue Timeout::Error => ex
p "<-----!!!! Timeout::Error!!!!----->"
retry
end
教えてもらったコードではTweetの内容を垂れ流しにするやつだったんですけど、自分でちょこっといじってTweet以外のステータスを表示するようにしてみた。しかしなんか調子悪いっぽくて、完全にはStreamを取れてないっぽいです。
でもまぁ一歩前進したことは確か。Rubyがんばるぜ。
レンタルサーバーみたいな共有サーバーとか sudo
権限のないサーバーで動かしてるRailsアプリケーションを再起動したくなることがある。でもApacheをリスタートする権限がない。じゃあどうするかとググっていたらこういう記事にたどり着いた。
To restart your rails app do a "ps x" to get the pid of your dispatch.fcgi process(let's say it's 1234) then do a "kill 1234". This will kill the running process and a new one will be automatically spawned and you should now see your changes. How do I restart rails app? - DreamHost Forum
要するに ps x
でRailsアプリケーションのプロセスIDを調べ、 kill #pid
しちゃうというわけ。 kill
できんのかなと半信半疑だったけどちゃんとできた。
他のレンタルサーバーには当てはまらないかもしれないけどメモっときます。
ちょっとCakePHPで作ってるサイトでRSSフィードを配信したいと思ったのでやってみたんだけど、思いの外面倒くさくてびっくりした。『RailsによるアジャイルWebアプリケーション開発』を読みながらRails 2.3.5でRSSフィード作るときは結構簡単だった気がするので、正直これはないわと思った。
『Railsによる〜』で作ってるデモプロジェクトのdpeotのコードを見てみると、RSSを配信するときはControllerに以下のように記述し、
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @products }
end
config/routes.rb
に
map.connect ':controller/:action/:id.:format'
と書いたあと、RSS用のViewを用意してやるだけだ。ものすごくシンプルで簡単だった。
CakePHPで同じことをやるためには以下の手順が必要。
ちょっと面倒くさすぎてやる気にならなかった。どうせいま僕が作ってるサイトなんてRSSリーダー使うような人が見るサイトじゃないし、フィード配信機能の実装はそんなにプライオリティ高くないので他にやることがなくてどうしようもなく暇なときにでもやろう。
Railsは最初のとっかかりのハードルは高いけど、使い方を覚えていったらやっぱりCakePHPとかよりも全然簡単かつ高速に開発できる気がする。レールに乗ってる感強い。このMephistoの設置もすごく楽だった。ただTerminalを使い慣れた人や、サーバーにSSHでアクセスできる環境じゃないとRailsアプリケーションを使うのは難しい。CakePHPは反面、全部FTPでアップロードすれば良いのでサーバーに標準的な構成でPHPがインストールされてりゃ環境構築でつまずくことはない。どっちをとるかって話ですよね。
僕はファッションの観点からRailsを選びたい。