<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel rdf:about="http://blog.livedoor.jp/sasata299/">
<title>(ﾟ∀ﾟ)o彡 sasata299's blog</title>
<link>http://blog.livedoor.jp/sasata299/</link>
<description>
</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="http://blog.livedoor.com/?v=2.0" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51781499.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51771229.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51717651.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51737472.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51735703.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51727020.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51718602.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51713910.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51712409.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/sasata299/archives/51711587.html" />
 </rdf:Seq>
</items>
</channel>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51781499.html">
<title>急にターミナルが動かなくなっちゃったよ＼(^o^)／</title>
<link>http://blog.livedoor.jp/sasata299/archives/51781499.html</link>
<description>今日の話なんですけど、Macで作業しているときに chown とか chmod で権限まわりをごにょごにょしていたら、変えちゃいけない権限を変えちゃった？のか、ターミナルを新規に立ち上げようとするとこんなエラーが出て強制終了するようになってしまいました・・



(((ﾟДﾟ))) ﾋ...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2012-01-25T22:31:47+09:00</dc:date>
<dc:subject>その他</dc:subject>
<content:encoded><![CDATA[今日の話なんですけど、Macで作業しているときに chown とか chmod で権限まわりをごにょごにょしていたら、変えちゃいけない権限を変えちゃった？のか、ターミナルを新規に立ち上げようとするとこんなエラーが出て強制終了するようになってしまいました・・<br>
<br>
<a href="http://livedoor.blogimg.jp/sasata299/imgs/d/6/d6e515f9.png" title="エラーメッセージ" target="_blank"><img src="http://livedoor.blogimg.jp/sasata299/imgs/d/6/d6e515f9-s.png" width="500" height="58" border="0" alt="エラーメッセージ" hspace="5" class="pict"  /></a><br>
<br>
<div style="font-size:200%;font-weight:bold">(((ﾟДﾟ))) ﾋｨｰ</div><br>
<br>
と思って必死でググり何とか元に戻せてよかった。。（あまりいないとは思いますが）同じ問題にハマってしまう方もいるかもしれないのでやり方を共有しときますね！！<br>
<br>
まず、Applications > Utilities > Disk Utility を起動します。<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/9/7/97a4214b-s.png" width="500" height="442" border="0" alt="ディスクユーティリティ" hspace="5" class="pict"  /><br>
あとは Repair Disk Permissions をクリックして修復するだけです。簡単ですね。<br>
<br>
【参考】<a href="http://forums.macrumors.com/showthread.php?t=1197937" target="_blank">Odd Lion Terminal Problem MBP 2011 - MacRumors Forums</a><br>
<br>
<br>
<br>

<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51781499" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51771229.html">
<title>年末なのでそろそろ2011年を振り返ってみよう</title>
<link>http://blog.livedoor.jp/sasata299/archives/51771229.html</link>
<description>

恒例の振り返りをやりましょうか～。今年はビーチエンジニア何やってたかなぁ。
あ、去年 はこういう目標を掲げてたんですが、、、

&gt; 来年の目標はズバリ「今まで経験したことの無いことを一つやってみる」です。

達成しますた！！実は今年は初めて本を執筆させていただ...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-12-28T08:59:14+09:00</dc:date>
<dc:subject>振り返り</dc:subject>
<content:encoded><![CDATA[<img src="http://livedoor.blogimg.jp/sasata299/imgs/4/d/4d5d73d8-s.jpg" width="612" height="406" border="0" alt="ビーチエンジニア" hspace="5" class="pict"  /><br>
<br>
恒例の振り返りをやりましょうか～。今年は<s>ビーチエンジニア</s>何やってたかなぁ。<br>
あ、<a href="http://blog.livedoor.jp/sasata299/archives/51521301.html" target="_blank">去年</a> はこういう目標を掲げてたんですが、、、<br>
<br>
> <span style="font-weight:bold">来年の目標はズバリ<span style="font-size:1.2em;color:red">「今まで経験したことの無いことを一つやってみる」</span>です。</span><br>
<br>
達成しますた！！実は今年は初めて本を執筆させていただいたのです。<a href="http://blog.livedoor.jp/sasata299/archives/51645652.html" target="_blank">NoSQLデータベースファーストガイド</a> という本なので、もしよかったら<s>買ってください</s>読んでください (´∀｀*)<br>
<br>
たいやきを作ったのも初めての経験でしたｗ 味もなかなかでした。<br>
<br>
<img src="http://snapdi.sh/photo/4ef2e60464525d0e8d00000c" /><br>
<br>
それ以外にも Regional RubyKaigi 等でちょこちょこ発表させてもらったり (´・ω・`)<br>
<br>
<blockquote><ul style="line-height:1em"><br>
<li><a href="http://jp.makezine.com/blog/2011/09/cooking_for_geeks_event.html" target="_blank">料理とプログラミング、テクノロジーの関係を考える「Cooking for Geeks!」</a></li><br>
<li><a href="http://regional.rubykaigi.org/tokyu04" target="_blank">TokyuRuby会議04 </a></li><br>
<li><a href="http://regional.rubykaigi.org/kansai04" target="_blank">関西Ruby会議04</a></li><br>
<li><a href="http://regional.rubykaigi.org/tochigi04" target="_blank">とちぎRuby会議04</a></li><br>
<li><a href="http://atnd.org/events/23056" target="_blank">第1回 EMR勉強会(Hadoop on AWS)</a></li><br>
</ul></blockquote><br>
道頓堀のグリコ兄さんも激写してきた！！<br>
<br>
<img border="0" src="http://distilleryimage0.s3.amazonaws.com/c6f5b6be0c6b11e19896123138142014_7.jpg"  /><br>
<br>
そうそう。<a href="http://techlife.cookpad.com/2011/11/18/1yeartalk/" target="_blank">入社しました忘年会</a> では初めて司会もやらせてもらいました。司会ってむずかしいんですよみなさん！＞＜<br>
<br>
広島までカープの試合も見に行ったりもしましたね～♪ いやぁ、開放感があって素晴らしいスタジアムでした。９回裏、石原のサヨナラデッドポールが見れたのは良かった！興奮した！<br>
<br>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/uoCWYnzWhgI&feature=youtube_gdata_player"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/uoCWYnzWhgI&feature=youtube_gdata_player" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="350"></embed></object><br>
<br>
<img border="0" src="http://distillery.s3.amazonaws.com/media/2011/05/12/fa22f7e094144a17bbef57c82b7ae8be_7.jpg"  /><br>
<br>
一時期は「くろたつ」になってて、黒い発言が多く関係各位から心配されたりしましたが（参考：<a href="http://togetter.com/li/209500" target="_blank">sasata299さんの闇 - Togetter</a>）、今は浄化されたので大丈夫です。(∩´∀｀)∩ﾜｰｲ<br>
<br>
あと、今年は色んな人と知り合えた一年でした。今まで一方的にしか知らなかった人と実際に会って話すのはすごく楽しい。来年も色んな人とお会いしてｷｬｯｷｬｳﾌﾌしたい。<br>
<br>
・・・とまぁ色々ありましたねぇ。でも駄目なところもいっぱいあった。。その反省をふまえて来年は<span style="font-weight:bold;font-size:130%">「webサービスを立ち上げる！」と「もっとgithubにコードを上げる！」</span>の二本立てで頑張ります。よろしくお願いします～ :-)<br>
<br>
<img border="0" src="http://distillery.s3.amazonaws.com/media/2011/10/25/b9e52b3831e34b9b95d6dd57c1cd4248_7.jpg"  />
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51771229" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51717651.html">
<title>Herokuって便利だし利用までたった3ステップですお！！</title>
<link>http://blog.livedoor.jp/sasata299/archives/51717651.html</link>
<description>Ruby Advent Calendar jp: 2011 : ATNDの20日目の記事です。19日目はtamootさんでWindows環境で torquebox + JRuby + #tDiary を動作させる - 会長@腹部日記(2011-12-19)でした。

さて、ブログ書くのちょーひさびさですが、今日は Heroku について書きます＞＜
# ちなみに去...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-12-20T00:10:44+09:00</dc:date>
<dc:subject>Ruby</dc:subject>
<content:encoded><![CDATA[Ruby Advent Calendar jp: 2011 : ATNDの20日目の記事です。19日目はtamootさんで<a href="http://www.tamoot.net/d/20111219.html#p01" target="_blank">Windows環境で torquebox + JRuby + #tDiary を動作させる - 会長@腹部日記(2011-12-19)</a>でした。<br>
<br>
さて、ブログ書くのちょーひさびさですが、今日は Heroku について書きます＞＜<br>
<span style="color:gray"># ちなみに去年の Ruby Advent Calendar では<a href="http://blog.livedoor.jp/sasata299/archives/51518381.html">こんな記事</a>を書きました</span><br>
<br>
プログラマたるもの、Webサービスを作りたいと考えるのは自然なことでしょう。ただ問題は作ったものをどうやって公開/運用するか、です。自宅サーバやレンタルサーバでももちろん良いのですが、Ruby の場合だと Heroku を利用する、という選択肢もあります。<br>
<br>
Heroku は Ruby / Rails をクラウド上で動かすことのできるホスティングサービスです。しかも<span style="color:red">基本的な機能であれば無料で利用することが可能</span>です（有料だとさらに高機能になります）。なんてすばらしい！（´∀｀*)<br>
<br>
以下のような機能が無料で提供されています。<br>
<br>
<blockquote style="font-weight:bold"><ul><li>Webアプリケーションサーバの1プロセス (1dyno) を利用できる</li><li>DB として PostgreSQL が利用できる (5MBまで)</li><li>ソースコードのやりとりに git が利用できる</li></ul></blockquote><br>
ちょっとしたWebサービスであれば無料でも十分に捌けます！ありがたいですねぇ。<br>
<br>
ではさっそく使い方を説明していきましょう～<br>
<br>
<div style="font-size:1.2em;font-weight:bold;padding-left:10px;color:#3c3c3c;border-left:4px solid #3c3c3c;color:gray">0. 準備</div><br>
まずは何も言わずに heroku という gem をインストールしてください。この gem をインストールすることで コマンドラインから heroku コマンドが使えるようになります。<br>
<br>
<pre class="brush:bash;toolbar:false">gem install heroku&#10;</pre><br>
<div style="font-size:1.2em;font-weight:bold;padding-left:10px;color:#3c3c3c;border-left:4px solid #3c3c3c;color:gray">1. Herokuのサイトでユーザ登録</div><br>
まず、<a href="http://www.heroku.com/">heroku.com</a> でユーザ登録をしてください :-)<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/4/8/486c914f-s.png" width="500" height="312" border="0" alt="heroku_スクリーンショット" hspace="5" class="pict"  /><br>
 <br>
<div style="font-size:1.2em;font-weight:bold;padding-left:10px;color:#3c3c3c;border-left:4px solid #3c3c3c;color:gray">2. アプリの作成</div><br>
で、次は適当なアプリを作って、commit します。これも特に問題ないですよね。<br>
<br>
<pre class="brush:bash;toolbar:false">rails new [app_name]&#10;cd [app_name]&#10;git init&#10;git add .&#10;git commit</pre><br>
<div style="font-size:1.2em;font-weight:bold;padding-left:10px;color:#3c3c3c;border-left:4px solid #3c3c3c;color:gray">3. Herokuにデプロイ</div><br>
ssh の公開鍵を登録します。これは ssh で Heroku にソースコードを push する際に必要です。<br>
<br>
<pre class="brush:bash;toolbar:false">heroku keys:add</pre><br>
Heroku に新たなアプリを登録します。ちなみに、heroku create したときには heroku という名前のリモートリポジトリが自動で設定されますが、git clone などでソースコードを取ってきたときには明示的に git remote add してあげる必要があります。<br>
<br>
その後、git push heroku master するとソースコードが Heroku に送信され、そのままデプロイまで行われます。<br>
<br>
<pre class="brush:bash;toolbar:false">heroku create [heroku_app_name]&#10;&#10;# git clone とかして持ってきたときには明示的に追加する&#10;# git remote add heroku git@heroku.com:[heroku_app_name].git&#10;&#10;git push heroku master</pre><br>
デプロイされたWebサービスはこのコマンドで確認できます（ブラウザで開きます）。<br>
<br>
<pre class="brush:bash;toolbar:false">heroku open</pre><br>
これで Heroku を利用してWebサービスを公開することが出来ました！自分で作ったWebサービスがこんなにも簡単に公開できてしまうなんてビックリです。<br>
<br>
興味のある方は他にもいろんなコマンドがあるので heroku help して確認してみてください～<br>
<br>
明日は <a href="https://twitter.com/#!/todesking" target="_blank">@todesking</a> さんです。楽しみですね！
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51717651" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51737472.html">
<title>ネットで知ってるあの人とリアルで会える！？ つながり短冊をリリースしました</title>
<link>http://blog.livedoor.jp/sasata299/archives/51737472.html</link>
<description>急に寒くなってきましたが、みなさまいかがお過ごしでしょうか。さてさて、いきなりですが先日 つながり短冊 というfacebookアプリをリリースしました！



なぜ作ろうと思ったのか
忘れもしない、あれは7月の暑い日のことでした…。あれ、8月だっけ？まぁ細かいことは良いで...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-09-20T21:36:21+09:00</dc:date>
<dc:subject>Facebook</dc:subject>
<content:encoded><![CDATA[急に寒くなってきましたが、みなさまいかがお過ごしでしょうか。さてさて、いきなりですが先日 <a href="http://tanzaku.heroku.com/" target="_blank">つながり短冊</a> というfacebookアプリをリリースしました！<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/6/6/662cdede-s.png" width="500" height="410" border="0" alt="つながり短冊" hspace="5" class="pict"  /><br>
<br>
<div style="font-size:1.4em;font-weight:bold;color:gray">なぜ作ろうと思ったのか</div><br>
忘れもしない、あれは7月の暑い日のことでした…。あれ、8月だっけ？まぁ細かいことは良いではないですか。<br>
<br>
練馬で RubyKaigi2011 (FinalRubyKaigi) という Ruby のイベントが行われていたんです。で、僕も参加してたんですよ。もちろんセッションも聞いてたんですけど、それ以外にもロビーみたいなところで他の参加者の人と話したり、ジュンク堂書店の出張所のところで「買ってください＞＜」とかやって（販促活動）たりしてました。<br>
<br>
そういうときにたいやき部の部長でもある <a href="http://twitter.com/ktou" target="_blank">@ktou</a> さんと一緒にいる時間が結構あって、「誰か会ってみたい人いる？紹介するよ」みたいなことを言ってもらいました。いろんな人を紹介してもらって、ほんとにありがたかったです（あ、これこの前の記事でも書いたな…）。ネット上での関係も楽しいですが、リアルで実際会うとやはり嬉しいものです（よね？）。<br>
<br>
で、思ったんです。日頃から「あの人に会いたい」って言っとけば <a href="http://twitter.com/ktou" target="_blank">@ktou</a> さんのように紹介してくれる人もいるんじゃないだろうか、って。でも「僕○○さんと会いたいんですよ。紹介してください」って直接相手に言うのは気が引けます。相手の負担になったら嫌だし、「えっ、君をあの人に紹介？いや、それは、、」みたいになったらと考えると…… (///)<br>
<br>
でもあなたが誰と会いたがってるかなんて<span style="font-weight:bold;background-color:lightyellow;color:red">言わなきゃわかんない</span>じゃないですか。それに、言うだけなら自由なんですよ！そこで、「○○さんに会いたい」というのを気軽に伝えられるサービスを作ろうと考えました。ちなみにつながり短冊という名前は、お願いはするけど叶うかどうかはわかんないよ、というところが短冊っぽい、というところから名付けてますｗ<br>
<br>
会いたいって言われた方も、自分の知り合い同士が会いたがってるんだったら紹介してあげようって思う人も多いと思うんですよね。それに、実際に紹介するかどうかは自由なので負担にもならないかなぁと。<br>
<br>
<div style="font-size:1.4em;font-weight:bold;color:gray">技術的な話について</div><br>
ハマったこと、困ったことはたくさんありました…。<s>が、いざ書こうと思うといろいろあって面倒なのでまた今度書きます (ｷﾘｯ</s><br>
<br>
やってることは、あなたの友達と、あなたが会いたいと思っている人（仮にAさんとします）の友達から、共通の友達をランダムにひとり探し出してあなたがAさんに会いたがっていることを伝えるだけです。共通の友達がいなければ何もしません。<br>
<br>
とりあえずコードはこちらにあるので興味がある方は見てみてください～<br>
 <a href="https://github.com/sasata299/tanzaku" target="_blank">https://github.com/sasata299/tanzaku</a>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51737472" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51735703.html">
<title>Sinatra on Heroku で静的ファイルを扱う</title>
<link>http://blog.livedoor.jp/sasata299/archives/51735703.html</link>
<description>実はこのブログではシンタックスハイライトを使ってコードに色づけしてるんですが、そのために js と css を 自宅サーバでホスティングしてます。

ただ僕の場合、自宅サーバだと稼働させるのが難しいときがあり、非稼働時には js と css の読み込みが出来ずシンタックスハイ...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-09-02T14:35:09+09:00</dc:date>
<dc:subject>heroku</dc:subject>
<content:encoded><![CDATA[実はこのブログではシンタックスハイライトを使ってコードに色づけしてるんですが、そのために js と css を 自宅サーバでホスティングしてます。<br>
<br>
ただ僕の場合、自宅サーバだと稼働させるのが難しいときがあり、非稼働時には js と css の読み込みが出来ずシンタックスハイライトが効かない、とか、ずっと読み込み中になっててレスポンスが遅い、みたいな問題がありました。これではいろいろと不便です。。<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/c/c/cc1e78c9.png" width="320" height="90" border="0" alt="sinatra" hspace="5" class="pict" /><br>
<br>
そこで、解決策として Sinatra を使って js と css を返す簡単なプログラムを作って、それを Heroku 上で運用することにしてみました。<span style="font-size:1.4em;font-weight:bold">何と言ってもタダですからね！！</span>ちなみに初めて Sinatra を使ってみたわけなんですが、本当に簡単ですな～<br>
<br>
まず適当なファイルを作成します。ここでは app.rb としましょう。<br>
<br>
# app.rb<br>
<pre class="brush:ruby;toolbar:false">require 'rubygems'&#10;require 'sinatra'&#10;&#10;get '/' do&#10;  'Hello, world'&#10;end</pre><br>
このように書いて、ruby app.rb するだけでサーバの完成です（ http://localhost:4567/ にアクセスすると「Hello, world」と表示されます）。パターンを増やして行けばいろいろなリクエストに対してレスポンスが返せるようになります。<br>
<br>
パターンにマッチしないときには、js や css といった静的ファイルを探してくれます。静的ファイルは public ディレクトリがベースになるので、例えば hoge.css というファイルを public/hoge.css と置いた場合には http://localhost:4567/hoge.css でこの css にアクセスできます。<br>
<br>
あとは必要な gem を Gemfile で管理します。最低限だとこんな感じでしょうか？<br>
<br>
<pre class="brush:ruby;toolbar:false">source :rubygems&#10;gem 'sinatra'</pre><br>
開発時に手元で動かす分にはこれだけでもいいのですが、実際には Sinatra の起動スクリプトとして config.ru というファイルも用意してあげましょう。<br>
<br>
<pre class="brush:ruby;toolbar:false">require './app' # 最初に作ったファイル名を指定する&#10;run Sinatra::Application</pre><br>
ひとつだけ気を付けることがあります。ローカルだと config.ru で require 'app' とすれば良いのですが、Heroku 上で動かすには require './app' とする必要があります。またひとつバッドノウハウが増えましたね！<br>
<br>
（追記）※これは Heroku 上で動いている Ruby のバージョンがデフォルトだと 1.9.2 なのが原因のようですね。
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51735703" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51727020.html">
<title>facebookアプリで access_token を取得する流れ</title>
<link>http://blog.livedoor.jp/sasata299/archives/51727020.html</link>
<description>最近はfacebookアプリを作ろうと思ってちょこちょこやってます。こんにちわ。



で、やっぱりソーシャルなデータを利用したいわけですよ。facebook にはそのために Graph API というものが用意されていてさまざまな情報を取得することができます。Graph API ではユーザやfac...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-08-03T19:14:40+09:00</dc:date>
<dc:subject>Facebook</dc:subject>
<content:encoded><![CDATA[最近はfacebookアプリを作ろうと思ってちょこちょこやってます。こんにちわ。<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/0/d/0d8c0f34-s.jpg" width="200" height="66.4" border="0" alt="facebook_logo" hspace="5" class="pict"  /><br>
<br>
で、やっぱりソーシャルなデータを利用したいわけですよ。facebook にはそのために Graph API というものが用意されていてさまざまな情報を取得することができます。Graph API ではユーザやfacebookページの情報程度であれば誰でも取得できますが、「いいね！」の情報や友達情報などはデータを取得するために認証が必要となります。<br>
<br>
認証は OAuth 2.0 という仕組みが使われていて、認証が通れば access_token というトークンが取得できます。これを使うことでデータにアクセスできるわけですね。<br>
<br>
というわけで、認証が必要なデータ取得時の流れをまとめてみました。<br>
<span style="color:red;font-size:0.9em">※<a href="https://developers.facebook.com/apps" target="_blank" style="color:red">アプリの登録やサイトURLの設定</a>が事前に必要ですが、それはできているものとします</span><br>
<div style="font-weight:bold"><br>
1) ユーザがアクセスする<br>
　　<span style="font-weight:normal;color:gray"><i>http://localhost:3000/</i></span><br>
2) サーバ側では Graph API にユーザデータなどをリクエストする<br>
　　<span style="font-weight:normal;color:gray"><i>https://graph.facebook.com/me</i></span><br>
3) OAuthException が返されたら authorize メソッドを叩く（アプリ認証画面に飛ばされる）<br>
　　<span style="font-weight:normal;color:gray"><i>https://graph.facebook.com/oauth/authorize?client_id=xxx&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2F&scope=</i></span><br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/1/f/1f7348fb-s.png" width="500" height="270" border="0" alt="facebookアプリの認証画面" hspace="5" class="pict"  /><br>
<br>
4) 許可するとアクセス元に code というパラメータ付きでリクエストが来る<br>
　　<span style="font-weight:normal;color:gray"><i>http://localhost:3000/?code=xxx</i></span><br>
5) code というパラメータを付けて access_token メソッドを叩き、access_token を取得する<br>
　　<span style="font-weight:normal;color:gray"><i>https://graph.facebook.com/oauth/access_token?client_id=xxx&client_secret=xxx&code=xxx&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2F</i></span><br>
6) access_token を引数として再度 Graph API にリクエストする<br>
　　<span style="font-weight:normal;color:gray"><i>https://graph.facebook.com/me?access_token=xxx</i></span><br>
</div><br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/b/4/b4502689-s.png" width="500" height="182" border="0" alt="処理の流れ" hspace="5" class="pict"  /><br>
<br>
少しだけ補足も書いておくと、<br>
<br>
3) で認証画面に飛ばされるのは初回だけで、アプリが認証されれば、次回からは 3) の処理で認証画面には飛ばされずに自動的に 4) の処理に飛ばされます。<br>
<br>
もしくは access_token をクッキーなどに保存しておけば、それをパースすることで 2) のアクセス時に access_token を引数として付けてあげることもできます。そうすれば何度も何度もやり取りをする必要はありませんね :-)<br>
<br>
ただし、access_token には expires が設定されていて（権限として offline_access を取得すれば expires は基本的には無くなるようですが）、しばらくすると使えなくなります。expires が切れると、access_token を引数として渡してあげても OAuthException となることがあるので、再度 access_token を取得してください。<br>
<br>
ちなみに expires が切れるまでは何度でも同じ access_token が取得できます。<br>
<br>
---<br>
ま、rest-graph などのライブラリを使えばこの辺の処理はほとんど自動でやってくれるわけなんですが、何が行われているのかはある程度知っておきたいですよね＞＜
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51727020" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51718602.html">
<title>Railsエンジニアならこれだけは知っておけっていう便利メソッド</title>
<link>http://blog.livedoor.jp/sasata299/archives/51718602.html</link>
<description>Object#presence と Object#try という便利なメソッドがあることをご存知ですか？この２つのメソッドはとっても便利なのでちょっと紹介してみます。

Object#presence メソッド
これは以下のような定義となっています。

def presence
  self if present?
end

present? メソ...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-07-26T13:29:40+09:00</dc:date>
<dc:subject>Ruby</dc:subject>
<content:encoded><![CDATA[Object#presence と Object#try という便利なメソッドがあることをご存知ですか？この２つのメソッドはとっても便利なのでちょっと紹介してみます。<br>
<br>
<div style="font-size:1.4em;font-weight:bold;padding-left:10px;color:#3c3c3c;border-left:4px solid #3c3c3c">Object#presence メソッド</div><br>
これは以下のような定義となっています。<br>
<br>
<pre class="brush:ruby;toolbar:false">def presence&#10;  self if present?&#10;end&#10;</pre><br>
present? メソッドというのはみんな大好き blank? の反対のメソッド (!blank?) です。<br>
<br>
つまり、nil, false, [](空配列), {}(空ハッシュ), ""(空文字列), " "(半角スペースだけの文字列)であれば false、それ以外であれば true になります（blank? って半角スペースだけの文字列を true と判定するの知ってました？）。<br>
<br>
で、この presence メソッドというのは present? メソッドで評価した結果が true であれば self を、無ければ nil を返します。こんな感じ。<br>
<br>
<pre class="brush:ruby;toolbar:false">"foo".presence #=&gt; "foo"&#10;[].presence    #=&gt; nil&#10;" ".presence   #=&gt; nil&#10;</pre><br>
これで何が嬉しいのかっていうと、こういうのをすっきり書けるんですよね。<br>
<br>
<pre class="brush:ruby;toolbar:false"># こういうのが…&#10;name = params[:name].present? ? params[:name] : '名無し'&#10;&#10;# presenceを使うとこうなるよ!!&#10;name = params[:name].presence || '名無し'&#10;</pre><br>
<div style="font-size:1.4em;font-weight:bold;padding-left:10px;color:#3c3c3c;border-left:4px solid #3c3c3c">Object#try メソッド</div><br>
もう一つは Object#try メソッドです。これは ActiveSupport 2.3 から導入されました。<br>
参考：<a href="http://guides.rubyonrails.org/2_3_release_notes.html" target="_blank">http://guides.rubyonrails.org/2_3_release_notes.html</a><br>
<br>
これは、user.name としたいときに user.try(:name) みたいにして使います。<br>
<br>
というのも、実は user.name としたときに user が nil の場合があるじゃないですか。そういうときには nil.name となり NoMethodError になってしまうのでチェックが必要なわけですが、Object#try メソッドを使えばすっきり書くことができます。<br>
<br>
<pre class="brush:ruby;toolbar:false"># こういうのが…&#10;user ? user.name : '名無し'&#10;&#10;# tryメソッドを使うとこうなるよ!!&#10;user.try(:name) || '名無し'&#10;</pre><br>
これ、実は単なる Object#send メソッドの alias で、加えて NilClass#try メソッドが定義されてます。たったこれだけですが意外と便利なんですよ。<br>
<br>
<pre class="brush:ruby;toolbar:false">class NilClass&#10;  def try(*args)&#10;    nil&#10;  end&#10;end&#10;</pre><br>
ということで、Object#presence メソッドと Object#try メソッドでした。よく似てるけど、値の有無をチェックするときは Object#presence メソッドを、メソッド呼び出しでは Object#try メソッドを使うって感じでコードをすっきりさせましょう～ (＊ﾟ∀ﾟ)
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51718602" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51713910.html">
<title>&quot;最後の&quot;RubyKaigiは&quot;最高の&quot;RubyKaigiだった</title>
<link>http://blog.livedoor.jp/sasata299/archives/51713910.html</link>
<description>練馬で 7/16 (土) から3日間にわたって行われた年に一度のイベント、RubyKaigi2011 に参加しました。しかも RubyKaigi は今年で最後 (The Final RubyKaigi) です！！



で、感想。もちろん登壇者の方々の講演自体も素晴らしかったのですが、今回は割愛。

こういった勉強会...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-07-18T21:28:23+09:00</dc:date>
<dc:subject>勉強会</dc:subject>
<content:encoded><![CDATA[練馬で 7/16 (土) から3日間にわたって行われた年に一度のイベント、<a href="http://rubykaigi.org/2011/ja" target="_blank">RubyKaigi2011</a> に参加しました。しかも RubyKaigi は今年で最後 (The Final RubyKaigi) です！！<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/f/1/f1cb1043.png" width="260" height="80" border="0" alt="RubyKaigi2011" hspace="5" class="pict" /><br>
<br>
で、感想。もちろん登壇者の方々の講演自体も素晴らしかったのですが、今回は割愛。<br>
<br>
こういった勉強会ではそれ以外にも参加することで得られる素晴らしいメリットがあります。それは<span style="font-weight:bold;color:red">ネット上でしか知らない人（しかも全国、というか全世界の）とリアルで会える</span>ことです。<br>
<br>
今回のような規模の集まりだと、最近では Ustream で放送されていることがほとんどです。そのため、Ustream を見ていれば講演内容は概ねわかります。ではなぜわざわざ現地に行こうと思うのでしょうか。<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/6/a/6a0b912b-s.jpg" width="300" height="300" border="0" alt="RubyKaigi2011名札" hspace="5" class="pict"  /><br>
<br>
現場の空気を味わいたい、など色々な理由があると思いますが、僕の場合は「○○さんと会いたい」というのがモチベーションだったりします。<br>
<br>
今回の RubyKaigi では、現地には居ても講演を聞いてない（ロビーみたいなところをうろうろしてる）時間が結構ありました。が、そういった時間にいろんな人と会ったり話をしたりした時間が非常に楽しかったんです。<b>そういった時間こそが、と言ってもよいかもしれません。</b><br>
<br>
今回、ほんとうにたくさんの人と話すことが出来ました。いろんな人を紹介してくれた @ktou さんにはほんとに感謝！！それだけでも十分に RubyKaigi に参加して良かったなぁと思います。Ruby札幌 とか Ruby関西 の方とも話すことができたし。ぜひ行ってみたいです！<br>
<br>
あ、ポップも書かせてもらえたので凄く嬉しかったです～。朝会場に着いていきなり書くことになったので焦ってこんな謎なポップになってしましましたが、、後悔はしてません。期間中はささたつ本のところにこのポップが置かれてたんですよ。気付きました？ (｀・ω・´) ｷﾘｯ<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/3/4/343e0c11-s.jpg" width="300" height="300" border="0" alt="RubyKaigi2011ポップ" hspace="5" class="pict"  /><br>
<br>
そうそう。最後には @maicos 先生にお願いして、名札に素晴らしいお言葉とアイコンをいただきました。ちょー記念になりました（感動）。ありがとうございます！！<br>
<br>
今年は色んな勉強会にこの名札持ってってドヤ顔で参加したいわー。<br>
<br>
<img src="http://livedoor.blogimg.jp/sasata299/imgs/b/2/b23d2de1-s.jpg" width="300" height="300" border="0" alt="RubyKaigi2011名札with@maicos" hspace="5" class="pict" /><br>
<br>
ということで、振り返ってみると今までの RubyKaigi で（といっても3回目ですが）、一番楽しめた RubyKaigi でした。スタッフのみなさま、参加者のみなさま、ありがとうございました！
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51713910" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51712409.html">
<title>ActiveRecord で flag を扱う冴えたやりかた</title>
<link>http://blog.livedoor.jp/sasata299/archives/51712409.html</link>
<description>flag の on / off をする機会ってちょいちょいあるじゃないですか。管理画面とかで設定するたびに flag が off → on に変わったり off → on に変わったりするような。

そういう処理をするときに今まではこんな風にやってました。うーん、イマイチです。。

@user = User.f...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-07-15T00:35:41+09:00</dc:date>
<dc:subject>Ruby</dc:subject>
<content:encoded><![CDATA[flag の on / off をする機会ってちょいちょいあるじゃないですか。管理画面とかで設定するたびに flag が off → on に変わったり off → on に変わったりするような。<br>
<br>
そういう処理をするときに今まではこんな風にやってました。うーん、イマイチです。。<br>
<br>
<pre class="brush:ruby;toolbar:false">@user = User.find(params[:id])&#10;&#10;if @user.target_flag&#10;  @user.target_flag = false&#10;else&#10;  @user.target_flag = true&#10;end&#10;&#10;@user.save&#10;</pre><br>
でも、これ、、こんなきれいに書けるんだぜ。嘘みたいだろ…。<br>
<br>
<pre class="brush:ruby;toolbar:false">@user = User.find(params[:id])&#10;@user.toggle :target_flag&#10;@user.save&#10;</pre><br>
toggle メソッドのソースはこんな感じ。引数として渡す column は boolean で評価され、その反対の boolean 値となります。true → false に、false → true に。<br>
<br>
# activerecord-3.0.7/lib/active_record/persistence.rb<br>
<pre class="brush:ruby;toolbar:false">def toggle(attribute)&#10;  self[attribute] = !send("#{attribute}?")&#10;  self&#10;end&#10;</pre><br>
注意点としては、flag じゃない column（例えば name とか age とか）をこの toggle メソッドで扱ってしまうとおかしなことになってしまいます。気を付けてください。<br>
<br>
（追記：2011/07/15 08:45）<br>
<a href="http://d.hatena.ne.jp/tokuhirom" target="_blank">id:tokuhirom</a> さんから指摘していただいたんですが、これはアトミックな処理では無いので、リクエストが連発されるような状況では意図しない結果となる可能性があります。今回は管理画面での使用を想定していたので特に問題無いですが、リクエストが多発するような状況では注意が必要です。
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51712409" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/sasata299/archives/51711587.html">
<title>すぐに出来る!! vundleでモダンなvim環境を作ろう</title>
<link>http://blog.livedoor.jp/sasata299/archives/51711587.html</link>
<description>「みなさん、vim ってますかぁ？」
と、つい言いたくなるくらい毎日暑いですが、皆様いかがお過ごしでしょうか。

さて、今日は久しぶりに vim について書いてみようかと思うんです。えぇ、あの vim です。最近は新しいプラグインとかを入れるのもおっくうになっててあまりカ...</description>
<dc:creator>sasata299</dc:creator>
<dc:date>2011-07-14T11:32:55+09:00</dc:date>
<dc:subject>vim</dc:subject>
<content:encoded><![CDATA[<div style="font-size:1.4em;font-weight:bold">「みなさん、vim ってますかぁ？」</div><br>
と、つい言いたくなるくらい毎日暑いですが、皆様いかがお過ごしでしょうか。<br>
<br>
さて、今日は久しぶりに vim について書いてみようかと思うんです。えぇ、あの vim です。最近は新しいプラグインとかを入れるのもおっくうになっててあまりカスタマイズもしてなかったんですが、最近もの凄い便利なプラグインが出てきたではありませんか！それが今回紹介する vundle です。Rails3 で使われている Bundler にインスパイアされた vim のプラグイン管理ツールなので、Rails を使っている人にとってはおなじみな名前ですね。<br>
<br>
この子はほんとデキるんですよ。さっそく vundle の使用前と使用後とでディレクトリ構成を比較してみましょう。<br>
<br>
使用前：<br>
<pre class="brush:plain;toolbar:false">.vim&#10;  ├── autoload&#10;  ├── doc&#10;  ├── ftplugin&#10;  `-─ plugin&#10;</pre><br>
これだけ見るとすっきりとした構造で素晴らしいんですが、実際には autoload とか ftplugin とか plugin  とかのディレクトリの中に自分の使いたいプラグインのファイルを正しく置いてあげないといけないんです。めんどくさい…。しかもディレクトリの中は<span style="font-weight:bold;color:red">各プラグインのファイルが混在する状態</span>となります。プラグインが増えてきたらもうごちゃごちゃです。<br>
<br>
そのため、「あのプラグインもう使わなくなったから消そう」と思ってもどのファイルを消したらいいのかよくわからなかったり。結果としてゴミファイルが溜まるし、新しいプラグインの導入も気が重くなってしまいます。。<br>
<br>
<span style="color:darkgreen">・・・そこで vundle ですよ！！ (*´Д｀*)</span><br>
<br>
使用後：<br>
<pre class="brush:plain;toolbar:false">.vim&#10;  |-- bundle&#10;  |     |-- AutoComplPop&#10;  |     |     |-- README&#10;  |     |     |-- autoload&#10;  |     |     |-- doc&#10;  |     |     `-- plugin&#10;  |     |-- ZenCoding.vim&#10;  |     |     |-- README&#10;  |     |     |-- autoload&#10;  |     |     |-- doc&#10;  |     |     `-- plugin&#10;  |     |-- rails.vim&#10;  |     |     |-- README&#10;  |     |     |-- autoload&#10;  |     |     |-- doc&#10;  |     |     `-- plugin&#10;  |     |-- snippetsEmu&#10;  |     |     |-- README&#10;  |     |     |-- doc&#10;  |     |     `-- plugin&#10;  |     |-- surround.vim&#10;  |     |     |-- README&#10;  |     |     |-- doc&#10;  |     |     `-- plugin&#10;  |     `-- vim-fugitive&#10;  |           |-- README.markdown&#10;  |           |-- doc&#10;  |           `-- plugin&#10;  `-- vundle.git&#10;</pre><br>
ぱっと見た感じ長くなっているように見えますが…違うんです。誤解です！！<br>
<br>
実際には .vim ディレクトリの中に bundle というディレクトリが作成され、その中に利用しているプラグイン毎にディレクトリが勝手に作られてファイルが置かれます。いちいちファイルを正しい場所に置いたりとかもしなくていいんです！各プラグインのファイルがどこにあるかは一目瞭然だし、使わなくなったときに削除するのも超簡単です。<br>
<br>
<div style="font-size:1.4em;font-weight:bold">どうやったら使える？</div><br>
インストールと使い方もすごく簡単です。まずインストールは git clone するだけです。.vim の下に clone してあげてください。<br>
<br>
<pre class="brush:bash;toolbar:false">git clone http://github.com/gmarik/vundle.git ~/.vim/vundle.git&#10;</pre><br>
ただ dotfiles をすでに git で管理しているような環境だと vundle は外部リポジトリとして追加してあげた方が良さそうです。こんな感じですかね。<br>
<br>
<pre class="brush:bash;toolbar:false">cd dotfiles # リポジトリに移動する&#10;git submodule add http://github.com/gmarik/vundle.git .vim/vundle.git&#10;git add .&#10;git commit -m "add vundle submodule"</pre><br>
あとは使いたいプラグインを .vimrc にちょろっと書いてあげるだけで使えるようになります。プラグインは .vimrc にこのように Bundle "plugin_name" と記述するだけ。.vimrc で使っているプラグインが一元管理できるのはすごく楽ですね～。<br>
<br>
あ、4, 5行目はおまじないです。詳しくは <a href="http://vim-users.jp/2011/04/hack215/" target="_blank">こちら</a> を参照ください。<br>
<br>
<pre class="brush:plain;toolbar:false">set nocompatible&#10;filetype off&#10;&#10;set rtp+=~/.vim/vundle.git/&#10;call vundle#rc()&#10;&#10;" vim-scripts リポジトリ (1)&#10;Bundle "rails.vim"&#10;&#10;" github の任意のリポジトリ (2)&#10;Bundle "tpope/vim-fugitive"&#10;&#10;" github 以外のリポジトリ (3)&#10;Bundle "git://git.wincent.com/command-t.git"&#10;&#10;filetype plugin indent on&#10;</pre><br>
使いたいプラグインを指定するわけですが、プラグインの置かれている場所によって3つの方法があります。vim-scripts リポジトリ (<a href="http://vim-scripts.org/vim/scripts.html" target="_blank">http://vim-scripts.org/vim/scripts.html</a>) に置かれていれば (1) のようにプラグイン名を、github の任意のリポジトリであれば (2) のようにリポジトリ名とプラグイン名を、github のリポジトリでは無い場合には (3) のようにフルパスで指定します。<br>
<br>
で、最後に vim 上で :BundleInstall することで、プラグインが .vim/bundle 以下にさくっとインストールされます。あっという間です。<span style="font-weight:bold;color:red">もう使えます！！</span><br>
<br>
これらのプラグインは .vimrc の記述を消せば読み込まれません。ただ、.vim/bundle 以下のディレクトリは残ってしまうので、それは :BundleClean plugin_name して削除しましょう。ただこれはディレクトリを削除するだけのコマンドなので手動で削除した方が簡単かも。。<br>
<br>
あ、ちなみにプラグインが vim-scripts リポジトリにあるかどうか調べるのめんどくさいなーっていうめんどうくさがりな人には :BundleSearch というコマンドがあるのでこれで :BundleSearch plugin_name して検索しちゃうのがオススメです。<br>
<br>
最後に vundle の利点をまとめておきます。良い vim ライフを！<br>
<br>
<blockquote><b>・ディレクトリ構造が直感的なので扱いやすい（削除とか）<br>
・プラグインの導入がとっても簡単<br>
・.vimrc で使っているプラグインを一元管理できる</b></blockquote>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1970244&name=sasata299&pid=51711587" width="1" height="1" />
]]>
</content:encoded>
</item>

</rdf:RDF>

