| @WWW

まさか自分がこの手の被害に遭うとは思ってなかったんだけど、日曜日にSkypeアカウントが乗っ取られてログインできなくなり、少額だけどSkypeクレジットが知らない外人に使われてた。

ことの経緯

日曜未明、Skypeからメール送信されてた。メールは以下のような内容だった。

  • Auto-Rechargeを有効にしてくれてありがとう。Skypeクレジットが300円以下になったら自動的に3500円チャージするよ。
  • Skypeクレジットの通貨が円からUS$に変更されたのでお知らせしときます。

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クレジットを使えない状態)して、僕がパスワードを再設定をできる状態にしてくれたので、新しいパスワードに変更してログインしてみると、通話履歴にインドネシアへの発信記録が。

1135_skype_account_hacked.png

正直なところ、いつどのタイミングでパスワードを盗まれたのか分からない。Skypeを騙ったメールとか届いてないし、WebからSkypeアカウントにアクセスするのはSkypeクレジットをチャージするときくらいなので、怪しいサイトにIDとパスワードを入力した覚えもない。

しかし「自分は情報弱者じゃないからフィッシングには引っかからないよ」とか「Mac使ってるから安全なはず」みたいな油断というか慢心があったのかも。

金銭的な被害は200円くらいだけど、すごく気持ち悪い出来事だった。と同時に、セキュリティの重要性が身にしみて分かった。Skypeのサポートはオートリプライメールとかじゃなくて迅速に対応してくれたけど、なんかしばらくSkypeは使いたくなくなってしまった。

| @Mac/iPhone

プログラミングっぽいネタだけど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を選びたい。

| @技術/プログラミング

『Railsによるアジャイル〜』とかのコードはViewの部分がスゲーシンプルで、ロジックがほとんど書いてない。これに慣れると、CakePHPに戻って自分が作ってるウェブアプリを見たときに、Viewに結構ロジックが書いてあって愕然とする。例えばフラグをたてて条件にマッチすれば日付を表示し、マッチしなければ表示しないとかしたいとするじゃないですか。Controllerでそういう設定できなくないけど長くなる。Viewの中に書いてしまったら数行で済むし。

だから僕の作ってるCakePHPアプリはMVCとか名ばかりでViewのコード超きたない。入れ子になったif文がたくさんあるし、正規表現で日付の書式変更とかまでやってる。さすがに関数とかは定義してないですけどね。

そもそもCake FoundationのCakeBookも結構Viewにロジックが書いてあったりする。というかかなりハードに書いてある。CakePHPってViewとロジックを分離させるのが難しいのかな。

加えて、Controllerも結構ひどいことになってる。本当はModelに書くべきことを結構Controllerに書いている気がしないではない。サイト検索のためのメソッドとか200行近くあるし、joinとかしまくり。

MVCでロジックとヴューを分離することでデザイナーがViewを触れるようになって分業が進むかもとか思ってたけど、到底そんな状況にないですね。

| @散財

iPhoneはSkypeが使えて便利なのは皆さんご存じの通りだと思います。いままでSkypeつったらパソコンの前に座っていなきゃいけなかったけど、iPhoneでSkypeできたら普通に携帯で電話するみたいにふとんに寝っ転がって話とかできて便利です。また自室はSoftBank携帯の電波の入りが悪いのでWi-Fi経由で話ができるSkype(Skypeout)はその点でも便利です。

そういうわけで昨夜Skypeoutで話してたんですけど、通話料金は1分3円くらいなはずなのに1000円近く残ってたクレジットが一瞬でなくなってしまった! どういうことかなと思ってびっくりしたんですけど、こういうことでした。

Skypeout

NTTの固定電話とIP電話だったらIP電話の方が安いだろうと050の番号にかけてたんだけど、よくよく見てみるとSkypeoutのIP電話向け通話料は携帯向けと同じ! ぎゃふん。

そういうわけなので、よい子の皆さんはSkypeで遠くに住んでるお友達や家族と話すときは固定電話にかけましょう。間違っても050のIP電話にかけてはダメです。