モバイルSuicaにして良かったと思う5つのこと

2009 年 7 月 6 日 oinume コメントはありません

先月ぐらいにやっとこさ携帯のモバイルSuica(とEdy)を導入してみました。年会費が1000円かかりますが、もう本当にこれなしでは生きていけないぐらい便利なものなので、具体的にどこが便利かを淡々と説明します。というかさせてください。

1. Suicaは意外と色々なところで使える

「自分の行動範囲の店がカバーされてる」これが一番重要だと思います。とりあえずJRの駅構内および大体のコンビニはSuica対応です。Suicaが使えるお店検索でSuica対応の店がわかるので、見てみると良いでしょう。

2. 小銭を出す時の煩わしさから解放される

後ろにたくさんの人が並んでいる状態で、1円玉などの小銭がうまく出せない時のストレスを感じたことはありませんか?モバイルSuicaやEdyなどの電子マネーであれば、携帯やカードをかざすだけなのでこのような煩わしさから解放されます。また電子マネーで会計を済ませる人が増えれば、順番待ちの列の回転も早くなることでしょう。

3. クレジットカードのポイントが貯まる

モバイルSuicaではクレジットカード(または銀行振込)でチャージするので、Suicaを使えば使うほどクレジットカードのポイントが貯まっていきます。

4. 定期券を定期販売機で買う必要がなくなる

自分は忘れっぽいので、定期券が有効期限切れの状態で通勤してしまい無駄な交通費を支払ってしまうことがよくあります。これは改札を入ったり出たりしたタイミングで、近くに定期券の販売機が近くにないことが影響していると思いますが、モバイルSuicaにすれば、駅の外であれば「買おう」と思ったタイミングで定期券を購入することができます。自分はモバイルSuicaにしてから定期券の買い忘れがめっきりなくなりました。

さらに定期代もクレジット払いになるので、カードのポイントがたまります。

5. ATMに行く回数が減る

モバイルSuicaの利用頻度次第ですが、電子マネーを使い始めると当然現金を使わないので、ATMに行ってお金を下ろす機会が減ります。自分は感覚値で大体半分ぐらいになりました。コンビニでお金は下ろせますが、正直あんな色んな人が出入りするところでお金なんて下ろしたくないので、個人的には非常に嬉しいです。

というわけで、皆さんもモバイルSuicaを導入して現金から解放された生活を送ってみてはいかがでしょうか?それにしても日本って本当便利な国ですわ。

Now Loading...

カテゴリー: モバイル タグ:

RailsでTwitterのOAuthを試す

2009 年 6 月 21 日 oinume コメントはありません

OAuthが前々から気になっていたので、RailsでTwitterのOAuthを使うサンプルを作成しました。OAuthについてはここでは詳しく説明しませんが、

の記事がよくまとまっているので、目を通してみるとよいでしょう。OAuthを一言でいうと、サードパーティのアプリケーション(Consumer)をサービスプロバイダ側(Service Provider)で認可するという仕組みで、端的に言えばサードパーティ側でサービスプロバイダのアカウント情報を保持する必要がなくなるというメリットがあります。

たとえば、今回の例だとTwitter(=Service Provider)のデータを利用するので、Twitterから認可を受ける必要があります。これをOAuthという仕組みを使って、サンプルアプリケーション(=Consumer)ではTwitterのアカウント情報を一切入力させないようにします。

Twitter API WikiにOAuth Example – Rubyという素晴らしいページがあるのですが、これが最新版の仕様に対応してなさそうなので、上げてみました。

railsやoauthなどのライブラリのインストール

必要なものは以下になるので、rubygemsでインストールしておきます。

  • rails 2.3.2
  • oauth 0.3.5
  • json
$ sudo gem install rails
$ sudo gem install oauth
$ sudo gem install json

Twitterでアプリケーションを登録

サンプルを作る前にTwitterのOAuthのページでアプリケーションを登録します。

Twitterでアプリケーションを登録

Callback URLは http://localhost:3000/oauth_callback とか書くとエラーになるので、http://example.com/ のように適当なURLを記載しておきます。(実際にここで設定したURLがコールバックされるわけではありません)

全て記入して登録すると、Consumer keyとConsumer secretが発行されるのでこれを記録しておきます。後述する IndexController でこれらを使用します。

サンプル作成

サンプルアプリの雛形を作成します。

$ rails twitoauth
$ cd twitoauth
$ script/generate controller index

IndexControllerの作成

app/controllers/index_controller.rbを編集して、IndexControllerを実装します。Consumer key、Consumer secretは先ほどTwitterから発行されたものを使用してください。

require 'oauth'
require 'json'
 
class IndexController < ApplicationController
  def self.consumer
    OAuth::Consumer.new(
      "Consumer key",
      "Consumer secret",
      { :site => "http://twitter.com" }
    )
  end
 
  def index
  end
 
  def oauth
    # :oauth_callbackに認証後のコールバックURLを指定
    # この場合だとこのコントローラー内の oauth_callback メソッドが実行される
    request_token = IndexController.consumer.get_request_token(
      :oauth_callback => "http://#{request.host_with_port}/oauth_callback"
    )
    session[:request_token] = request_token.token
    session[:request_token_secret] = request_token.secret
    # twitter.comで認証する
    redirect_to request_token.authorize_url
    return
  end
 
  def oauth_callback
    consumer = IndexController.consumer
    request_token = OAuth::RequestToken.new(
      consumer,
      session[:request_token],
      session[:request_token_secret]
    )
 
    access_token = request_token.get_access_token(
      {},
      :oauth_token => params[:oauth_token],
      :oauth_verifier => params[:oauth_verifier]
    )
 
    response = consumer.request(
      :get,
      '/account/verify_credentials.json',
      access_token, { :scheme => :query_string }
    )
    case response
    when Net::HTTPSuccess
      @user_info = JSON.parse(response.body)
      unless @user_info['screen_name']
        flash[:notice] = "Authentication failed"
        redirect_to :action => :index
        return
      end
    else
      RAILS_DEFAULT_LOGGER.error "Failed to get user info via OAuth"
      flash[:notice] = "Authentication failed"
      redirect_to :action => :index
      return
    end
  end
end

完了したら、indexアクションに対応するViewである app/views/index/index.erb を作成します。これは単純に /oauth に飛ばすだけのテンプレートです。

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>OAuthのサンプル</title>
</head>
<body>
<a href="/oauth">OAuthで認証</a>
</body>
</html>

config/routes.rb を修正

次に IndexController に定義されているアクションが呼び出されるようにURLとのマッピングをします。具体的には config/routes.rb の

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

となっている箇所の上に下記を追記します。

  map.root :controller => 'index'
  map.connect ':action', :controller => 'index'

OAuthを試してみる

とりあえず9割方準備が整ったので、サーバを起動して http://localhost:3000/ にアクセスします。

$ script/server

OAuthで認証のリンクをクリックすると、下記のようにTwitterにリダイレクトされたでしょうか?(うまくリダイレクトされない場合は index_controller.rb の index アクションのコードに問題がある可能性が高いです)

TwitterでOAuth認証

ここでTwitterのアカウントを入力して”Allow”をクリックすると、「アプリに転送します」というメッセージが表示され、サンプルアプリに遷移します。具体的には、index_controller.rb のoauthアクション内のget_request_tokenメソッドで登録したコールバックURLにリダイレクトされています。

ただ、現状だとコールバック先の画面で使用するテンプレートファイルを作成していないため

Template is missing
Missing template index/oauth_callback.erb in view path app/views

というエラーになるので、次はこのテンプレートを作成します。

最後の仕上げ

/oauth_callback のテンプレートを下記の内容で作成します。やっていることは単純で、/account/verify_credentials.json のAPIで取得した情報を表示しているだけです。

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>TwitterからOAuthで認証してもらったよ!</title>
</head>
<body>
<h1><%= @user_info['name'] %>さんの最新のつぶやき</h1>
<%= @user_info['status']['text'] %>
</body>
</html>

これを app/views/oauth_callback.rb として保存したら、もう一度 http://localhost:3000/ にアクセスして最初から認証をやり直します。下記のようにTwitterの情報が取得できれば、OAuthでの認証+APIの呼び出しは成功です。

OAuthでログインしてTwitterのデータを取得

まとめ

ライブラリを使えば少しの労力でOAuthでTwitterに認証してもらえることが伝わったでしょうか?OAuthを使えば、サービス側(Consumer側)でTwitterのアカウント/パスワードを保持しなくて済むので、よりユーザに安心を提供できるはずです。現状、コールバックURLを使う方法はPCのブラウザでしか実行できませんが、モバイルやデスクトップアプリのためにPINコードを発行する方法も用意されているので、より詳しく知りたい人は本家のドキュメントを読んでみると良いと思います。

カテゴリー: Rails タグ: , ,

Redmine勉強会に参加してきました

2009 年 6 月 14 日 oinume コメントはありません

Redmineのヘビーユーザではないのですが、Redmine勉強会に参加してきました。「ブログに書くまでが勉強会」ということで、雑記ながらログを残しておきます。それにしても大き過ぎず小さ過ぎずのいい勉強会でした。

30分ぐらい遅刻したので最初のyandodさんの発表は聞き逃してしまいました。

Redmine活用術 - 孤独なシス管の記録

kirara_397さん

  • Tracはプロジェクトが複数ある場合に管理が大変だったのでRedmineに移行した
  • 「トラブル」「要望」「タスク」等にカテゴライズ
  • rails環境を構築するまでがそこそこ大変
  • カレンダーやガントチャートがプロジェクト毎でしか表示できない→統合表示したい…
  • Excel管理に慣れている人には壁があって理解されない…

活用する上で工夫したポイント

  • 用語を分かりやすくした(チケット=課題など)→Redmineの日本語化ファイルを変更するだけ
  • ActiveDirectoryアカウントでログインできるようにした→LDAPでもログインできる
  • Windowsなのでサービス化した(mongrel_service)

人生も1つのプロジェクトである

  • RedmineでGTD
  • 【元ネタ】Web2.0ナビ:意外と使われていない「個人用trac」活用のすすめ
  • 「世界Redmine」構想→”Redmedia”

Redmineの現実的な利用法

tsuyoshikawaさん(資料)

  • 全工程の一元管理
  • アジャイル

現実

  • 工程管理には向いてないので、そこは結局Excelでガントチャート
  • PukiWIki書いてた
  • 使ってたのはプログラマだけ

Redmineはコミュニケーション促進ツール

  • チケット
  • 文書
  • ニュース
  • Wiki
  • リポジトリ
  • 通知
  • メール、RSS

チケット

  • 「分類」って属性だけ追加
  • チェンジセットまぁ便利 (ref #n, fix #n)
  • カスタムクエリまあ便利

ニュース

  • リーダーとしての方針を伝える
  • プロジェクトの大きな変化(遅延など)を知らせる

文書

  • 運用の取り決め
  • コーディング規約とか

Wiki

  • いらない子w
  • PukiWiki記法に慣れてるし
  • ソースのせる用のテンポラリ領域として使用

リポジトリ

  • 空気。とまっててもコミッタ以外は気付かない

活動

  • 全ての活動ログ
  • 一番大事
  • アクティビティ・ストリーム
  • さぼっている人が一発でわかるw

まとめ

  • ウォーターフォールの工程管理には向いていない
  • 使い方はかなり自由度が高いので、ルール最低限でとにかく使わせてみましょう
  • 大事なのは活動をRSS登録すること

完璧なRedmineなど存在しない

junoさん(資料)

18 projects
1,696 tickets
22 users

なぜTracをやめたか
→管理画面の機能が貧弱

Redmine移行にあたってやったこと

  • マニュアルの作成
  • 段階的な導入(走っているプロジェクトはTracのまま)
  • 自分が率先して使う

Textile記法ないわー

  • Markdownが使いたい(WordPressでも使ってる)
  • Markdown Extraが使いたい。redmine_markdown_extra_formatterというのがある

CSVで一括インポート

  • PMからの要望 (Excel派)
  • redmine_importer
  • ExcelRedmineAddIn

楽しく利用してもらうための細工

  • ユーザーアイコン
  • Gravatarを利用する。デフォルトで使える。ユーザが自由に画像を変更できる。ただしメールアドレスをGravatarに登録する必要がある
  • Local avatars Pluginを利用する。これだと画像はRedmineサーバ上に格納される

他にも

  • favicon.icoをちゃんと作る
  • グラフィカルなプラグイン(Gompertanなど)
  • スニペット共有プラグイン(redmine_codebook)→検索の対象にならないのがネック

パッチのプラグイン化

  • 通知メールのSubjectを変更する。UTF-8で長いSubjectのメールが文字化けする
  • バージョンアップのたびにソースを直す必要がある
  • 参考文献:Plugin Tutorial、Plugin Internals(こっちがいい)
  • alias_method_chainを使いこなすことがポイント

LT – CSVユーザー一括登録プラグインを作ってみた話

shrkwさん(資料)

BTS使用歴

  • Trac
  • GLPI
  • Backlog

Ruby歴2日目だったが、Redmineのほうがrailsにのっかっている分、Tracよりプラグイン作りやすい。

ってかRedmineでCSVのユーザ情報をまとめて登録するスクリプトのエントリーが紹介されていた!!

ユーザを一発で登録できるプラグインを作成したので、そのデモ。

懇親会

中華料理屋にて懇親会。自分たちのテーブルはおそらく一番Redmineを使っていない人たちが集まったテーブルのようでした。「言語は何使ってる?」「DBはMySQL派?ポスグレ派?」「OSは?」「バージョン管理は?Git?SVN?」みたいな会話が飛び交い、Redmineの話はほとんどしませんでしたw あと、意外に影舞ユーザが多いことが判明したのも大きな収穫でした。ほら、任天堂でも影舞が使われているらしいし…やっぱりシンプルなものが受け入れられるのだなぁと。

雑感

  • 「活動」は自分の作業報告をする上でうまく使えたらいいなぁと
  • みんなRedmineを改造して使っているということがわかって、それが邪道な使い方じゃないんだなぁとわかったのがよかったです。そういう意味では、「モンキーパッチをプラグイン化してRedmine本体のバージョンアップに備える」というjunoさんの路線はすごくいい気がしました。
  • Redmineはデザインにもっと良くした方が… ってことを言っている人がいて全く同感でした
  • あとはRedmine本家の開発体制が「独裁主義なんじゃ」という話がありました。実際のところメインの人以外でコミッターっているのでしょうか…
カテゴリー: 勉強会 タグ: ,

BOSE サウンドドック シリーズIIを買いました

2009 年 6 月 13 日 oinume コメントはありません

そろそろCD-MDのコンポを処分したいなぁと思ったので、iPodを乗せられるタイプのスピーカーを探していたら、なんやかんやでBOSEがやっぱり音が良さそうということで買いました。

自分は家では爆音でライブ音源をきいたりするので、それなりの音に耐えうるスピーカーが必要だったのですが、まぁいい買い物だったと思います。

操作方法はとてもシンプルでリモコンはなんと8つのボタンしかありません。iPodのドックがある他、インターフェースとしては外部入力端子を一つ備えているので、CDプレーヤーなどをつなぐことも可能です。

メーカーの商品ページ

カテゴリー: 日記 タグ:

WordPressを2.8にアップグレード

2009 年 6 月 13 日 oinume コメントはありません

WordPress 2.8がリリースされていたのでアップグレードしてみました。

自分の場合は

  1. データベースとファイルをバックアップ
  2. zipファイルをダウンロードして解凍
  3. rsync -Cavz wordpress/* path-to-wordpress/ してファイルをコピー
  4. wp-admin の管理画面にアクセス。Database Upgrade Required と言われるのでアップグレード
  5. 完了

という手順です。

まず何より最初に、2.8はいままでよりもずいぶんスピードアップしています。

とのことだったので、TOPページのレスポンスをYSlowで測ってみたのですが、

  • 2.7: 平均2.11秒
  • 2.8: 平均2.11

で変わってなかったです。もちろんテーマとか使っているプラグイン、ウィジェット次第だと思うので、自分の場合は変化がなかったというだけの話です。

ちなみに管理画面のトップページがなんかおかしい気がします。ナビゲーションの▼クリックしても何も反応しない…

カテゴリー: WordPress タグ:

Apacheが”Couldn’t create accept lock”で起動しない場合の対処方法

2009 年 6 月 10 日 oinume コメントはありません

これの続編なのですが、複数人が共同で使っているサーバなどで、Apacheのプロセスを何個も起動していると、使えるセマフォがなくなるという事態に遭遇することがあります。対処方法は、Apacheを止めるか

$ for semid in `ipcs -s | grep www-data | cut -f2 -d" "`; do ipcrm -s $semid; done

としてセマフォを削除すれば解決しますが、どうしてもたくさんのApacheのプロセスを立ち上げたい場合は、kernelパラメータのkernel.semの値を大きくしてみると良いでしょう。

Ubuntu 9.04 Server版の kernel.sem のデフォルト値は

$ cat /proc/sys/kernel/sem
250     32000   32      128

となっていて、この4つの数値は左から

  • SEMMSL: セマフォ集合ごとのセマフォ数の最大値。
  • SEMMNS: システム全体での、全てのセマフォ集合におけるセマフォ数の制限。
  • SEMOPM: semop(2)コールに指定されるオペレーション数の最大値。
  • SEMMNIシステム全体でのセマフォ識別子の最大値。

というものらしいです。

今回はためしにこの4つの数値を倍に設定してみましょう。設定するには /etc/sysctl.conf に以下の行を追加します。

kernel.sem    = 500 64000 64 256

完了したら

$ sudo sysctl -p

を実行するとすぐに反映されます。これでApacheが意味不明な”Couldn’t create accept lock”というエラーを吐かなくなるはずです。

カテゴリー: Linux タグ: ,

MacBookのDVDドライブが故障

2009 年 5 月 19 日 oinume コメントはありません

昨年10月に購入したMacBookアルミニウムMB466J/AのDVDドライブが、先週の日曜日に突然DVDを読めなくなってしまいました。DVDを入れると「ウィーン、ウィーン」と何か頑張ってる感じがして「先生、もう駄目です」みたいな感じでイジェクトされるという現象。

ネットで調べたらおそらくドライブの故障っぽかったので、その日のうちに渋谷のApple Storeに行ってみたところ、速攻で入院決定。「明日には引き取れるようになってますんで」ということだったので、家に帰ったら修理に出してから3時間足らずで「修理完了しました」の電話が…

というわけでApple StoreのサポートのあまりのGJさにちょっとビビりましたが、そもそも半年でパーツが壊れるっていうところにApple製品の闇を見たような気がします。今回は購入から1年経ってなかったので保証がききましたが、保証が切れている場合¥45,000の修理代金がかかるらしく背筋がぞっとします。「Apple Care(¥31,500)に加入せよ」というありがたい神のお告げが聞こえてきますが、本当悩ましいです…

カテゴリー: Mac タグ:
Pages: << 1 2 3 4 5 6 7 8 ...16 17 18 >>