| Subcribe via RSS

PHPで2-legged OAuth( GDD Devquiz )

8月 26th, 2010 | No Comments | Posted in Diary, programming, web | このエントリをはてなブックマークに登録

Google Developer Day 2010 は、参加するためにDevquizっていう問題がいくつか出て、それを解いた点数の高い人から参加できるっていう仕組みなのです。

いくつか問題があって、

・簡単なgoogleのサービスに関する問題

・html5の文法間違い探し

・2-legged OAuthをやる

・Google Map APIを使ってTSP

・しりとりで相手に勝つ

・PACMAN

なんかがあったような気がします。

それぞれ

  • 簡単なgoogleのサービスに関する問題
  • 普通にググって考える。

  • html5の文法間違い探し
  • 自分で見ても間違いが分からなかったからHTML5の文法チェックツールが早くも登場 ? Publickey を使った。

  • 2-legged OAuth
  • ググって近いプログラムを見つけて、それを元にプログラム書いた(後述)。
    しかし、OAuthの仕様について 〜署名?それっておいしいの?〜 (Yahoo! JAPAN Tech Blog) の最後にある確認ツールを使えば簡単にできるらしい。

  • Google Map API
  • javascript書いてレベル2まで普通に解けたのに、レベル3でうまく行かず、面倒だったのでやめた。

  • しりとり
  • 辞書の解析だけプログラムでやって、手動で解いた。レベル3は何度か負けたけど、相手の戦術を逆に使う方法を考えてできた。

  • PACMAN
  • 時間がなくてやってない。

これじゃ合格点に行かないような気もする。


以下はPHPで2-legged OAuth。
PHPを選んだ理由は、書ける言語の中で一番最初に、よさそうな参照できるコードが見つかったから。

指定されたのは、CONSUMER KEY、 CONSUMER SECRET、POSTするメッセージボディ、realmとターゲットURLで、あとHMAC_SHA1を使うことも指定されたような。



<?php
require_once 'OAuth.php';
define('CONSUMER_KEY', 'your consumer key');
define('CONSUMER_SECRET', ''your consumer secret);

function OAuthConsumerRequest($method, $url, $data=NULL) {
    $consumer = new OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
    $signature_method = new OAuthSignatureMethod_HMAC_SHA1();

    //与えられたメッセージボディ
    $params = array("hello" => "world");
    // access protected resources
    $oauth_request = OAuthRequest::from_consumer_and_token($consumer,
                                       NULL,
                                       $method,
                                       $url,
                                       $params);

    $oauth_request->sign_request($signature_method,
                                 $consumer, '');

//与えられたrealmはここで使う
    $headers = $oauth_request->to_header('devquiz');
    $prequest = "hello=world";

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array($headers));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $prequest);
    curl_setopt($curl, CURLOPT_POST, TRUE);

    $result = curl_exec($curl);
      if ($result === FALSE) {
         return curl_error($curl);
    }
    curl_close($curl);
    return $result;
}

//与えられたURLはここで使う
$ret = OAuthconsumerRequest('POST', 'target url';);
print($ret);
?>

を参考にしました。


このエントリをはてなブックマークに登録

Tags: ,

VLDB09報告会で聞いた話

12月 12th, 2009 | No Comments | Posted in db | このエントリをはてなブックマークに登録

先週のことですが,VLDB報告会というのに行ってみました.

最初は原先生のワイアレスセンサネットワークの紹介のお話.

残念だったのは,「キラーアプリケーションはどんなものがありますか?温度とか明るさとか取って何ができますか?」と聞かれて,現状ではキラーアプリケーションというものはなく,火災検知だとか侵入者検知に利用できる,というような答えだったこと.

次は川口先生の無線LAN情報や加速度情報を集めている話.いろいろデータを集めて,実際にサービスにつなげている点が面白かった.



あとはVLDB2009の話.

VLDB2009
論文
発表スライド(一部)
論文の紹介は VLDB2009勉強会であったので(参加してないから分からない)今回はキーノートやパネルディスカッションなど参加しなければ分からない部分の説明でした.

keynote1
Cloud Data Serving: key-value stores to DBMSs
Raghu Ramakrishnan


この人の他の会議でのkeynoteと資料を見ることができます.
- Data Serving in the cloud

http://www.bigredbits.com/?p=175


http://www.cs.cornell.edu/projects/ladis2009/program.htm#keynote1

- Cloud Computing at Yahoo

http://www.cse.iitb.ac.in/~comad/2008/keynoteSpeakers.html

上に挙げた他のkeynoteと同じ話ということで,その資料を見ればいいそうです.
たぶんyahooのクラウドとDBの話.

スライドのComparison MatrixというページがいろいろなDBの比較がまとまっていました.

聞いたことがある名前と思ったら,勉強のために読んでいるDB本の著者でした.

keynote2
Bringing Database Research to Computer Games and Simulations
Johannes Gehrke

コンピューターゲームにDBの技術を利用したらとてもよかったという話?
自分は興味がなかったのであまり聞いていなかったが,面白いkeynoteだったらしい.

パネルディスカッション
How Best to Build Web-Scale Data Managers?

ウェブのようなスケールが必要とされる分野において利用されるデータ管理技術が,これまでDB屋が研究してきたものではなく,他のところで発表されていることに対して,議論しましょう,という感じなのか.RDBMS vs MapReduce

以下適当に抽出.

・なぜDBを使わずKVS?スケールさせるためにはACIDを犠牲にするしかないのか

・Google規模,ではなくもっと小さい規模のtwitterのようなサービスの規模でもその規模でもDBがスケールしないのが問題

・webでDBが使われなくなってきており,RDBの問題を認めてなくてはならない.我々はRDB中毒.

・ACIDやトランザクションがいるかいらないか,は用途による.アプリケーションが負担する部分を増やしていくことでスケールするシステムが作れる

・パラレルDBは無限にスケールすべきだが,スケールしない

・SQLは分散を意識していない.だからSQLでなくてもいいのでは.REST的なAPIがあればいいんじゃないか

・やっぱりトランザクションはいるよ.データを問い合わせるのにMapReduce書かなきゃならないなんて面倒

などなど.面白かった.

HadoopDB

そのあと少し論文の紹介があったけど,自分が聞きたかったこれだけ紹介.

HadoopのスケーラビリティとパラレルDBのパフォーマンスのいいとこ取りをすれば,いいものができるはず!という感じ.
パラレルDBの方がパフォーマンスがいいというのはSIGMOD2009の A comparison of approaches to large-scale data analysisで発表されていて,同じ人たちがHadoopDBを作ってベンチマークしてみた,という発表.

スライドはDetailed Program | VLDB 2009にあるので,それを見ればなんとなく分かります.評価は微妙かも・・・という感じ.

その他メモ

Hive:HadoopのSQLラッパー
Vertica: カラムストアのクラウドエディション?
MonetDB: カラムストアDB.10年前のVLDBで発表されて,今回10-year Award(10年前に発表されて,その後影響を与えた論文)に選ばれた.

大島さんの発表は面白く聞けてよかったです.


このエントリをはてなブックマークに登録

Tags: , ,

MacにMySQL入れた

12月 3rd, 2009 | No Comments | Posted in db, mac | このエントリをはてなブックマークに登録

ちょっと必要があったのでMySQLをMac Bookに入れました。

いろんな手段があると思うけど、port使って入れた。
自分で言うのもなんだが、適当なのであまり参考にしない方がいいかもです。

$ sudo port install mysql5

これだけだとmysqlのコマンドが使えなかったので

sudo ln -s /opt/local/bin/mysql5 /opt/local/bin/mysql

をやります。

どうやって起動するのかよくわからなかったが、なんかさっき入れたのはサーバじゃないかも、と思い、

$ sudo port install mysql5-server

をやったところ、少しメッセージが出ました。

# A startup item has been generated that will aid in
# starting mysql5-server with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:

# sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

起動時にMySQLサーバも起動したいならこれをやるといいらしいが、たまにテストでつかうだけなのでスルー。
* In order to setup the database, you might want to run
* sudo -u _mysql mysql_install_db5
* if this is a new install

こんなメッセージも出たので実行
$?sudo -u _mysql mysql_install_db5

またいくつかメッセージが出る。
You can start the MySQL daemon with:
cd /opt/local ; /opt/local/lib/mysql5/bin/mysqld_safe &

sudoがいるのでそのままコピペしてもだめです。あとcdはいらないような。
$ cd /opt/local ; sudo /opt/local/lib/mysql5/bin/mysqld_safe &

これで起動できたっぽい。
mysqlのrootパスワード初期化するのもさっきのメッセージにあったのでやる

To do so, start the server, then issue the following commands:
/opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'
/opt/local/lib/mysql5/bin/mysqladmin -u root -h *****.local password 'new-password'


これでok.
つないでみる
mysql -u root -p

さっき設定したパスワードを入れてやると接続できた。
ここまでやってから調べてみたが、最初から

Mac Leopard に MySQL をインストールする – yuru-sawaの日記
あたりを参考にするとよかったと思います。


このエントリをはてなブックマークに登録

Tags: , ,

プログラムの行数をかぞえる

12月 3rd, 2009 | No Comments | Posted in linux, mac, programming | このエントリをはてなブックマークに登録

忘れていたのでメモ。

たとえばc言語で,ディレクトリに**.hだとか**.cだとかを複数おいているときに,

ターミナルで

$ wc -l *.[hc]
とやると複数のプログラムの行数をまとめて数えることができる。.

c言語じゃなければ,
$ wc -l *.java
とか.

wcはワードカウント. -l(小文字のエル)オプションは行数だけ,という意味だと思う.今度からたまに使ってみる.


このエントリをはてなブックマークに登録

Tags: ,

Database Management Systems 9章: Disks and Files

11月 10th, 2009 | No Comments | Posted in db | このエントリをはてなブックマークに登録

データベースの本を読んでまとめる作業のついでにブログに書いちゃいます。
読んでるのはこの本



データベースの基本がしっかりと書かれている有名な本。らしい。結構でかいです。
いきなり9章から始めます。

自分の理解は間違ってるかもしれません。あまり自信なし。

9章:Disks and Files

DBMSではデータをどうやって蓄えるか。ディスクマネージメント,バッファマネージメントなどの話.

■メモリー階層

(CPU )- キャッシュ – メインメモリ – 磁気ディスク – (テープ)
アクセス:  速い→遅い
容量当たりの値段: 高い→安い
電源切ったら: データ消える→消えない(不揮発性)

DBMSを使うことで,データがメモリにあるのかディスクにあるのか,などを意識しなくてよくなる.
メモリだけでは全てのデータを格納しきれないから,ディスクが必要.

■磁気ディスク

いろいろな部分の名前がややこしい。図を見て理解する

http://images.google.co.jp/images?gbv=2&hl=ja&q=disk+track+block+sector+platter&sa=N&start=20&ndsp=20

  • データはディスクブロックという単位でディスクに読み書きされる。ディスクブロックは連続したバイトの並び
  • これがトラックと呼ばれるプラッター上の輪っかに並ぶ(図参照).プラッターはハードディスク内の円盤上のやつで,両面にデータを持てる.
  • 同じ直径を持つトラックのセットをシリンダーという.(=シリンダーはプラッターの表面にトラックを持つ)
  • トラックは,セクターとよばれる固有の単位に分けられる.ディスクブロックは,セクターn個分と最初にサイズが決められる.
  • ディスクヘッドとは,データの読み書きのときブロックの頭に位置する.プラッターの両面の数だけ存在し,一体となって動く(図参照)
  • チェックサムは,セクターがおかしかったり読み込みに失敗したりするのをチェックするのに用いられる.
  • データを処理するには一度ディスクからメモリに置く必要がある。
  • I/Oは,たとえアイテム1つのためでもブロック単位で行われる.

・ディスクアクセスに要する時間とは,seek time + rotational delay + transfer time

  • seek time: ディスクヘッドが目的のブロックがある「トラックの位置」まで動くのにかかる時間。プラッタがでかいとその分かかる
  • rotational delay: ブロックがディスクヘッドのところに来るまで回ってくるのにかかる時間.平均で半周回る。seek timeより短い。
  • transfer time: データのブロックへの読み書きにかかる時間.
だから,読み書きにかかる時間を減らすには,データをディスクのどこに置くのか,というのが重要.
同時に読み書きされるものは,固めておいておくべき.
データの近さは
同じブロック > 同じトラック > 同じシリンダ > 近いシリンダ

シーケンシャルに読み書きされるデータはシーケンシャルに置いておけ.

■データストライピングと冗長化

ストライピングするとI/Oが速くなって,冗長化すると信頼性が上がる.
RAID: redundant arrays of independent disks

ストライピング

  • データを同じサイズに分割して複数のディスクに分散.このサイズをストライピングユニットという.
  • ラウンドロビンで分散.

冗長化

ディスクのMTTF(平均故障寿命)が5年で100枚ディスクがあれば21日に1つ壊れる.
- 冗長化情報を持つことで,データの再構築ができる.冗長化情報はいくつかのディスクに置いておく
- パリティ情報を蓄える
RAIDではデータディスクとチェックディスクを作る.チェックディスクの数はRAIDレベルによる.

RAID0はパフォーマンスがあがるだけ.
RAID0+1はあまりストレージがいらないシステムや書込が多いアプリケーション向け
RAID2とRAID4はRAID3,RAID5に劣る
RAID3はまとまったブロックの読み書きが多い場合によい
RAID5はいろんな用途につかえる
RAID6はより信頼性が欲しいとき

■ディスクスペースマネージメント

  • ページ単位でデータを扱い,ディスクスペースの割り当て,解放,読み書きを行う.
  • ページの読み書きが一度のディスクI/Oに対応するため,ページの大きさはディスクブロックに等しく,ディスクブロックとして書き込まれる
  • ディスクスペースマネージャによって,これより上の層はハードのことは気にせずページの読み書きをやっていればよい
  • データの読み書きを繰り返していると,ディスクスペースにデータのない部分(holes)ができてしまう
  • フリーなブロックのリストを作るか,それぞれのブロックが使用かどうかのビットマップを持つかして,このfree blocksの管理をする.

・OSも連続したバイトをファイルとして扱うことができる

ファイルf の i バイト目を読む = ディスクd のシリンダーc のトラックt のブロックm を読む と対応させる.
ディスクスペースマネージャはOSのファイルを使ってつくることができる.

多くのデータベースはそうしないで,ディスクスペースマネージャを自前で用意するか,OSの機能を拡張するかして実現する
なぜなら,多くの環境で動くものにしたいから,自己完結するコードにしたい,32ビットシステムでは4GBまでのファイルサイズしか扱えない,ディスクをまたがってデータを扱いたい,などの理由がある.

■バッファマネージャ

必要な分だけディスクからメモリにデータを持ってくる.メモリ上(バッファプールと呼ばれる領域)をページ単位で区切って,ページを読み込んだりする.バッファプール内のページ単位のスロットをフレームという.
これより上の層はページがメモリ上にあるかどうかを気にしなくていい.問い合わせ,返還,変更の通知 を行うだけ.

それぞれのフレームに対してdirtyとpin count という2つの変数を持つ.
  • dirty:ページに変更があったかどうか
  • pin count:最初0.その時のページのリクエストの数
  • ページリクエストがあると,まずはフレームから代わりに出て行って貰うモノを探し,pin countをふやす(pinning)
  • dirtyビットがonならディスクに書く
  • あけたところにページを読み込む
  • そのページを持つフレームのアドレスを返す
  • 解放されたらpin countを減らす(unpinning)
  • 修正したらunpinでdirty on
  • pin countが0でなければページはそのままフレームにとどまる
  • pin countが0のなかで,どのフレームを入れ替えるかはルールがある
  • 修正されていないもの:ディスクに書き込む必要がないからフレームに上書きできる
  • pin count =0 がないなら,待つか,トランザクションを禁止して割り当てる
  • 異なるトランザクション:衝突(不整合)を生み出すから,同時には割り当てない(排他的ロック)

・フレーム入れ替えルール

  • LRU: least recently used
pin count0のフレームへのポインタのキュー
  • clock: キューではなくて,時計のような円にフレームをみなし,pinが0のものはリファレンスビットが1になっている
時計の針のようなもので見ていく.pinが0でビットが1なら0にする.pinが0,ビットも0なら入れ替えへ.これは最近参照されたページはなるべく残すため
  • FIFOやmost recently used もある

■バッファマネージメント vs OS

バッファマネージメントとOSの仮想メモリは似てる
なぜ仮想メモリを使わないかというと,DBMSは次に参照されるデータなどをある程度予測し,先に読み込んでおくといったことをやることで,より速くデータを用意でき,また同じページに対する参照をまとめることもできるので,仮想メモリより高速なデータの参照を実現できる.また,CPUも先にディスクI/Oを指示して次の仕事に回れる

また,ディスク上のページをメモリ上のページに同期させておきたい

■file of records

ファイル:ページのセット,コレクション
ファイルの中には同じサイズのページが並び,レコードはそれぞれridを持つ
ファイルに対しての作成と削除,レコードの挿入と削除,ridを指定したデータの取得,全てのデータのスキャン ができる

それぞれのファイルのページと空きスペースを含むページを把握する必要がある.
ページはファイルの中での索引付けのために2つのポインタを記憶する必要がある.

■ページ管理手法

・線形リスト:双方向の線形リストとしてページを管理,全てのページのリストとフリースペースを持つページのリストの2つのリストを持つ.
DBMSはヒープファイルの名前とそのヘッダファイルへのアドレスを記憶している.
新たなページが必要になる場合,ディスクスペースマネージャにリクエストして得たページをリストに追加する.
可変長のレコードの場合ほとんとのページがフリーリストに行ってしまうという欠点がある.

・ディレクトリ
ページのコレクション(セット)がディレクトリで,それがリストを作る.ディレクトリのエントリはそれぞれがページを示す.
DBMSはそれぞれのファイルの頭のディレクトリを把握している.
フリースペースの把握には,エントリ毎の空きスペースのあるなしのビット,あるいはフリースペースの量を示すカウントを保持する.

■ページフォーマット

ページはレコードを持つスロットのセット
レコードはページのidとスロットナンバー(rid)で特定できる.

・固定長のレコード

固定長であればレコードのあるなしの管理だけ.あいてるところを探して新たなモノをいれる.あいてるスロットの管理が重要.
1つめの方法:前からつめていく.途中があいたら一番後ろのレコードをそこに移す.それぞれのレコードがオフセットで表現可能.
動いたレコードにアクセスがくるとよくない

・可変長のレコード

  • ページ内の空きスペースをつなげて連続させる.どうやってレコードを移動するかが大事.
  • ページ毎のスロットディレクトリ(レコードオフセットとレコードの長さ)を持つのがいい.
  • レコードオフセットはレコードへのポインタ.消すのはポインタを-1にする.
  • ページ内ではridは変わらないので自在に動かせる.
  • フリースペースの管理には,フリースペースの頭へのポインタを持つ.
  • スロットの途中が消えても,スロットナンバーの入れ替えが必要になるならそのままスロットディレクトリには残る.次にきたレコードに使う.

■レコードフォーマット

  • レコードも固定長と可変長で扱いが異なる.
  • どちらの場合もフィールド数は固定
  • フィールドの情報はシステムカタログに置いておく

固定長レコードの場合

  • 長さとフィールド数が固定
  • フィールドの長さから各フィールドへのアドレスが分かる

可変長レコードの場合

  • レコードフォーマットフィールド数は固定,いくつかが可変長のフィールド
  • フィールドをデリミタで区切る
  • レコードの頭にフィールドへのオフセット配列を持つ(レコード終端へのオフセットも入る)
オーバーヘッドがあるが後者の方がダイレクトにアクセスできるのでよい
ヌルはスペースを使わない(2つのフィールドへのポインタが同じになる)


このエントリをはてなブックマークに登録

Tags:

rubyからtwitter APIを利用してbotを作る

9月 10th, 2009 | No Comments | Posted in ruby, twitter | このエントリをはてなブックマークに登録

rubyからtwitter APIをたたくbotを作ります。

今回は、

「受け取ったダイレクトメッセージを、そのままpostするbot」

を作ります。

以前はtwitter4Rというgemを使っていたけど、それが正しく動かなくなったので、

Ruby Twitter Gem by John Nunemaker

を使います。

ドキュメントは

rdoc.info :: twitter

に詳しいです。

で、ソースコード。

require 'rubygems'
require 'twitter'

#twitter conf
username = ''
password = ''
httpauth = Twitter::HTTPAuth.new(username, password)
client = Twitter::Base.new(httpauth)

client.direct_messages.each{ |msg|
  post_msg = msg.text.strip
  client.update(post_msg)
  client.direct_message_destroy(msg.id)
}

これをcronで毎分動かしてやります.
以上です。今のところ正しく動いています。

— 2010/07/10 追記 —
この記事は古いですが、今ならOauthの認証を使うべきです。

この記事なんかが参考になります。


このエントリをはてなブックマークに登録

Tags: ,

mysqlのテーブルの保存とコピー

4月 21st, 2009 | No Comments | Posted in db | このエントリをはてなブックマークに登録

MySQL
Image via Wikipedia
たまにやるのにやり方いつも忘れるから自分用にメモ.

テーブルをそのまま別のPCのデータベースに移したいときに使います.
別のやり方もあると思うけど,個人的にはテーブルの作成からやってくれるこの方法が好き.

mysqldump --u [user_name] --p --database [db_name] --tables [table_name]
> output.sql

これでテーブルの内容を,output.sqlというファイルに出力することができます。

ファイルをlessなどで見れば,内容がわかると思います。

これを他のデータベースに挿入するには,
mysql -u [user_name] -p [db_name] < output.sql

でOK。


Reblog this post [with Zemanta]


このエントリをはてなブックマークに登録

Tags: ,

Rubyプログラムの高速化

1月 19th, 2009 | No Comments | Posted in ruby | このエントリをはてなブックマークに登録

Hard Core Ruby
Image by rbieber via Flickr
Rubyは便利だけど遅い.

実行が遅い分,プログラムを書くコストは下がるので,それはトレードオフだが,それでもRubyのプログラムをできるだけ速く動かしたい時はそのプログラムの性能を評価する必要があります.




参考にしたのは,
まつもと直伝 プログラミングのオキテ 第13回 プログラムを高速化する

まつもと直伝 プログラミングのオキテ 第18回 プログラムを高速化する(その2)

詳しいことは上記のページを見れば丁寧に説明してあります.

基本的には
$ time ruby hoge.rb
でかかる時間が測定できる.値が結構変わるので,何回かやっていい値で評価するのがいい.
で、どの辺で時間を食ってるのか、ボトルネックを知るためには
$ time ruby -rprofile hoge.rb
で,見れます.

でもこれよりも,
$ ruby-prof hoge.rb
のほうが測定が早くできてよいみたい.

ubuntuであれば
$ sudo apt-get install ruby-prof
でインストールできます.

詳しいことは上記のサイトを見てもらうのがよいので省略.

Reblog this post [with Zemanta]


このエントリをはてなブックマークに登録

Tags: , ,

twitterのダイレクトメッセージを受信するプログラムをrubyで

1月 15th, 2009 | No Comments | Posted in ruby, twitter | このエントリをはてなブックマークに登録

この記事は古いので、プログラムが使えない可能性が高いです。
今ならrubygemのtwitterライブラリを使うのがよいと思います。Oauthも必要です。



こないだ,twitterにくだらないギャグをpostするプログラムを書いたので,今度は他の人からの投稿を受け付けて,ギャグリストに追加するプログラムを書きました.



これで誰でも思いついたくだらないギャグをsubetterに言わせることができます.

進化したsubetter

ついでに,ギャグをテキストファイルに保存するのはなんかかっこ悪いので,MySQLにも入れることにしました.いずれMySQLに完全に移行したいですが,まだ両方やってます.

まだいくつか問題があって,MySQLにそのままじゃ入れられない文字の処理とか,全然よく分かってないのでその辺から修正しなきゃと思っています.

プログラムはこんな感じ.

require('rubygems')
gem('twitter4r','0.3.0')
require('twitter')
require "mysql"

flag = 0
msg = nil

my = Mysql::new("localhost", "user", "passwd", "db_name")

client =Twitter::Client.new(:login => 'subetter',:password => 'passwd')

client.messages(:received).each do |msg|
#メッセージのテキストを取得,改行文字を省く
joke = msg.text
joke = joke.strip

#メッセージの送り主を取得
user_name = msg.sender.screen_name

que = "SELECT * FROM jokes WHERE joke='" + joke + "'"
res = my.query(que)
res.each do |row|
flag = 1
end
#p flag

if flag == 0
sql = "INSERT INTO jokes VALUES ('','" + user_name + "','" + joke + "')"
#mysqlにギャグを登録
my.query(sql)
#テキストファイルにもギャグを登録
file = open("/home/jun/Dropbox/cyg/work/ruby/twitter/jokes.txt", 'a')
file.puts joke
file.close
else
flag = 0
end
end

exit


このエントリをはてなブックマークに登録

Tags: ,

Ubuntu8.10でRuby on Railsとmysqlとtwitter4rの環境を整える

1月 13th, 2009 | No Comments | Posted in ruby, twitter, ubuntu | このエントリをはてなブックマークに登録

なかなか苦労しました.

一番参考になったのは,

Ubuntu 8.04.1 に Ruby on Rails 2.1.0 を入れる – neconnect.net

です.

やること

$ sudo apt-get install ruby rdoc irb ruby1.8-dev rubygems libopenssl-ruby
$ sudo gem update --system
$ sudo apt-get remove rubygems
$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
$ sudo gem install rails
で,Ruby on railsの環境ができます.古いgemを入れてからアップデートして,古いgemを削除して新しいgemへのリンクを作るようです.

自分はMysqlを使いたいので,
$ sudo apt-get install mysql-server libmysql-ruby1.8 libmysqlclient15
$ sudo gem install mysql
をやって,起動時には
rails -d  mysql
をやるとデータベースをmysqlにしてrailsを実行できます.

これを毎回やるのは忘れそうなので,~/.zshrc(bashなら~/.bashrc)に
alias rails="rails -d mysql"
を追加しました.

で,twitter4rを使うには,
$ sudo gem install json
$ sudo gem install twitter4r
たしかこんな感じでいけると思います.

2010/07/09 追記
今rubyでtwitterアプリを作るなら、gemのtwitter4rではなくtwitterというのがいいです。

$sudo gem install twitter
でいけます.


このエントリをはてなブックマークに登録

Tags: , ,