YAPC::Asia 2009で聞く予定のセッション

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

明日はPerl Mongersの祭典YAPC::Asia 2009です。明日と明後日は仕事を休ませてもらって(!)、フルに参加したいと思ってます。というのも、今年のYAPCは本当に聴きたいセッションばっかりなのです。

というわけで、当日なるべくスムーズにセッションに参加できるようにめぼしいものをメモしておきます。はー、やばい楽しみ過ぎる!

9/10(木)

  • 10:50 PSGI – Perl Server Gateway Interface
  • 11:40 シックス・アパート・フレームワーク‎
  • 13:45 API Design‎
  • 14:30 modern Catalyst‎か分散ファイルストレージ‎
  • 14:50 ark – framework inspired by Catalyst‎
  • 15:20 優しいモダンなWAFの作り方‎
  • 15:40 Booking.com & Perl‎
  • 16:10 Key Value Store with O/R Mapper‎
  • 16:30 simple or mapper DBIx::Skinny‎
  • 17:00 『Ficia』インフラとPerlにまつわるエトセトラ‎
  • 17:20 Perl database test using MySQL::Sandbox‎
  • 18:00 Lightning Talks (1)‎
  • 19:30 懇親会(たぶん)

9/11(金)

  • 9:45 DeNA loves Perl‎
  • 10:35 endeworksでのWebAppの作り方‎
  • 11:25 ‎大規模画像配信を支えるPerl‎
  • 11:55 Asynchronous Database Queries with Perl‎
  • 13:30 Asynchronous Programming for (A)synchronous Communication‎
  • 14:20 ‎Perl? Which Perl?‎
  • 15:10 ‎はてなブックマークのシステムについて‎
  • 16:00 記憶
  • 16:50 Lightning Talks (2)‎
  • 17:25 基調講演
  • 18:15 Closing Ceremony‎
カテゴリー: 日記 タグ:

MySQL 5.1の最新版のdebパッケージを作成する方法

2009 年 8 月 30 日 oinume コメント 2 件

Ubuntu 9.04にはMySQL 5.1のパッケージが用意されているのですが、バージョンが5.1.31であり最新ではないので(現時点で最新は5.1.37)、最新版のdebパッケージを作成する方法を紹介します。debを作成するといっても、開発中のUbuntuに入っているmysql-server-5.1のソースを持ってきてビルドするだけなので、比較的お手軽にできます。

debを作成するための準備

まずはビルドする人間のメールアドレスと名前を環境変数で設定しておきます。

$ export DEBEMAIL="hogehoge@foo.com"
$ export DEBFULLNAME="Your Name"

次にパッケージをビルドするために必要なものをインストールします。

$ sudo aptitude install dh-make devscripts debhelper fakeroot lintian sudo pbuilder piuparts dpatch

ソースの取得

“mysql-dfsg-5.1” source package in Ubuntuよりdevelopmentのkarmicの方のリンクをクリックして、その先の画面で以下の3つのファイルをダウンロードします。

  • mysql-dfsg-5.1_5.1.37.orig.tar.gz – ソースtarボール
  • mysql-dfsg-5.1_5.1.37-1ubuntu2.diff.gz – debを作成するためのdiff
  • mysql-dfsg-5.1_5.1.37-1ubuntu2.dsc – パッケージングのルールを記載したファイル

今回は ~/deb というディレクトリを作成してその中で作業するので、debディレクトリにダウンロードしておきます。

mysql-dfsg-5.1のビルド

mysql-dfsg-5.1のビルドに必要なパッケージをインストールしておきます。

$ sudo aptitude build-dep mysql-server-5.1

次にソースを展開します。dpkg-source -x を実行するとソースを展開するだけはなく、パッチも自動的に当ててくれます。

$ dpkg-source -x mysql-dfsg-5.1_5.1.37-1ubuntu2.dsc
dpkg-source: warning: extracting unsigned source package (mysql-dfsg-5.1_5.1.37-1ubuntu2.dsc)
dpkg-source: extracting mysql-dfsg-5.1 in mysql-dfsg-5.1-5.1.37
dpkg-source: info: unpacking mysql-dfsg-5.1_5.1.37.orig.tar.gz
dpkg-source: info: applying mysql-dfsg-5.1_5.1.37-1ubuntu2.diff.gz

そしていよいよビルドです。(私はAthlon X2 5050eの環境で約2時間かかりました)

$ cd mysql-dfsg-5.1-5.1.37
$ debuild -us -uc

場合によっては「”hardening-wrapper”というパッケージがないよ」というエラーになってビルドできないかもしれないので、このパッケージをaptitudeでインストールしておきます。

完了すると .deb パッケージが~/deb/配下に作成されているので、必要なものをdpkg -iしてインストールします。ただし、依存関係が若干複雑なのでエラーが出たら依存しているものを先にインストールすると良いでしょう。

$ sudo dpkg -i mysql-common_5.1.37-1ubuntu2_all.deb ¥ 
 libmysqlclient16_5.1.37-1ubuntu2_amd64.deb ¥
 mysql-client_5.1.37-1ubuntu2_all.deb ¥
 mysql-client-5.1_5.1.37-1ubuntu2_amd64.deb
 
$ sudo dpkg -i mysql-server-core-5.1_5.1.37-1ubuntu2_amd64.deb ¥
 mysql-server-5.1_5.1.37-1ubuntu2_amd64.deb ¥
 mysql-server-5.1_5.1.37-1ubuntu2_amd64.deb

なお、5.0から5.1にアップグレードするような場合、my.cnfに使えなくなったオプションを書いていたりするとmysqldの起動に失敗するので、エラーログを見て適切に対処しましょう。例えば私の場合は –skip-bdb というオプションが使えなくなっていてエラーになっていました。

無事にインストールできれば、これでmysql-server-5.1が最新版になっています。mysqlコマンドでSQLを発行して動作を確認してみて下さい。

$ mysql -uroot -pxxxxx
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 68
Server version: 5.1.37-1ubuntu2-log (Ubuntu)

補足

今回はUbuntu 9.04で試しましたが、Debianでも同じ手順でパッケージを作成することができるはずです。また、debパッケージの作成にあたってDebianパッケージ60分クッキング(PDF)を参考にさせて頂きました。

カテゴリー: Debian, MySQL タグ: , ,

LLTVにちょっとだけ行ってきました

2009 年 8 月 29 日 oinume コメント 2 件

毎年やっているLL系のカンファレンスであるLLTVに今年も行ってきました。といっても今回は時間の都合で参加したのは渡る世間は雲ばかりだけでしたが… というわけで簡単ながらレポートします。

Windows Azure – 荒井省三さん(マイクロソフト)

MSの人なのにMacBook使っていたのが印象的。いろいろ図を用意してくれていたのですが、Windows Azure自体が複雑そうであまり深く理解できなかったのが正直なところ。ストレージとしてはTable(Key Value Store)とSQL Azure(RDBMS)というものがあるのが興味深かったです。AmazonはSimpleDB、Google App EngineはBigTableと、Key Value Storeは用意しているものの、スケール可能なRDBMSを用意しているところがないのですが、AzureではTable(Key Value Store)とSQL Azure(RDBMS)を用意しているとのことで、そこがユニークだなぁと感じました。(RDBMSはそのうちOracleもクラウド環境に参入したら提供しそう)

Slim3 – ひがやすをさん

Slim3はTDDベースでの開発をサポートしているのが一番の特徴、とのこと。簡単にSlim3を説明した後は、twitterライクなサービスをSlim3で作るデモをコードを書きながら淡々と行なってました。時間過ぎてたんですが、「あと5分下さい」とかなりフリーダムな雰囲気。

最後に作ったアプリをGoogle App Engineにディプロイしていたのですが、Eclisepのボタン一つでディプロイが完了していて、あれはすごい便利だなぁ!と思いました。

JRuby on GAE – 高井直人さん

  • JRuby – JVMによる高い性能
  • RubyのWAF – rails, merb, sinatra etc…
  • JRuby-Rack – JRuby + Railsだと多層構造過ぎるので、JRubyとRack層を統合したものを作った
  • wabler – railsアプリをWARファイルにパッケージングするための自動化スクリプト
  • appengine-jruby – GAE APIのJRubyラッパー。Googleの人が作っているらしい
  • GAEでrailsアプリを動かすのはけっこうしんどい
  • Engine Yardでもクラウドみたいなことをやるだろうから、そっちでやるほうが時間を有意義に使えるんじゃないか。

Kay Framework – 松尾貴史さん

  • GAEのPython APIについては日本で一番詳しいかも
  • GAEで動くPythonフレームワークは色々あるけど、無駄が多かったりパッチ当てなくてはいけなかったりで、GAEに特化したFrameworkを作った
  • 息子の名前をつけたかった
  • sphinx – pythonのドキュメント生成ツール。これでドキュメントを作っている
  • GAEのAPIはHTTPで叩けるので、wxPythonでGUIアプリからもAPIを叩ける

発表の中で「Pythonistaとしては」と言っていて、Python使いのことをPythonistaっていうんだなぁと学びました。PerlはPerl Monger、RubyはRubyistというように、言語によって言い方違うんだなぁと。

まとめ

Amazon EC2は有料でサーバ1台を丸ごと貸してくれるので自由にできる一方、Google App EngineはRDBMS使えないとか言語の制限(今のところPython, Java)があったりでかなり性質が違うのかなと。ただ、GAEは500万リクエストまでは確か無料なので、画像やスタティックなファイルを置いたりして、CDN的な使い方してもいいんじゃないかなぁと思いました(ただし、データセンターがどこにあるのか次第)

カテゴリー: 日記 タグ:

bashでコマンド履歴を残さない方法

2009 年 8 月 15 日 oinume コメントはありません

bashには過去に実行したコマンドを履歴として残しているので、CTRL+pなどでその履歴をさかのぼり過去に実行したコマンドをそのまま実行したり、ちょこっと直して実行することができます。しかし、この便利な機能は一方で、 rm などのファイルを削除したりするような危険なコマンドを、履歴からいとも簡単に実行してしまい、結果として大切なファイルを消してしまったりするようなミスを誘発する恐れがあります。

そんなことを考える人に「特定のコマンドだけ履歴に残したくない(=.bash_historyに残さない)という技を紹介したいと思います。具体的には

export HISTIGNORE='rm*:mv*'

のように、環境変数HISTIGNOREに履歴に残したくないコマンドを設定します。:(コロン)でコマンドを区切ることで複数のコマンドを設定することが可能です。上記の例では rm と mv を履歴に残さないようにしています。

実際に試してみると

$ touch hoge
$ rm hoge
$ history
   ...
   98  touch hoge
   99  history

のようにrmコマンドはhistoryには残っていません。実行前にコマンドを確認しないで、うっかり履歴からrmコマンドで必要なファイルを消してしまった、というようなオペレーションミス対策になると思うので、重要なサーバではぜひ設定してみると良いと思います。

カテゴリー: Linux タグ:

「謀略法廷」を読みました

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

ジョン・グリシャムの最新作が文庫本で発売になっていたので、すごく久々に小説を読みました。今回のこの小説は法廷モノというよりかは裁判の外での駆け引きがメインなので、いわゆる「弁護士と検事の闘い」というものではありません。

しかし、発癌性物質を垂れ流した企業の責任を問うための裁判に、原告として関わると一体どういうことになるのか、ということが赤裸々に表現されていてその切り口が素晴らしいと感じました。

一つ気になったのは、企業のトップが裁判の和解について、マスコミを情報操作して株価を操作し、株を買い漁る描写があるのですが、これってインサイダーになったりしないのかなという点。日本だったら確実にインサイダー取引で捕まってそうですが、どうなんでしょう…

Now Loading...

Now Loading...

カテゴリー: タグ:

モバイル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 コメント 6 件

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によるアジャイルWebアプリケーション開発

著者/訳者:Sam Ruby David Heinemeier Hansson Dave Thomas

出版社:オーム社( 2009-12 )

単行本 ( 675 ページ )


カテゴリー: Rails タグ: , ,
Pages: << 1 2 3 4 5 6 7 8 ...18 19 20 >>