ちょーシンプルtwitter client 作った

Standard
ちょーシンプルtwitter client 作った

最近なんか知りませんが職場のネットワーク環境でいろんなサイトがブロックされていってます。Googleカレンダーまでブロックされたので、さっさと自前クラウドでオリジナル開発して公開しろっていう思いでいっぱいおっぱいです。

twitter公式はもちろんアクセスできないですけど、いま職場でtweetするときにはiGoogleのTwitterGadgetっていうのを使ってます。iGoogleのガジェット経由だとgmailも使えてたんですが、ついに今週からアクセスできなくなったみたいです。そのうち iGoogleもアクセスできなるんじゃないかって感じだったので勉強もかねてついったーくらいあんとを作ってみました。とりあえず自分のタイムライン(過去300件まで)の取得とtweetのポストしかできないα版だけどもう公開してます。firefoxとchromeとsafariとie8では表示の確認してます。ie7で変だったら教えてください。ie6はもう知らん。これから少しずつ変更していこうと思います。Basic認証でアクセスしているので気になる人は使うのやめといてください。

bugtterTL
ソース

Ruby on Rails で作ってherokuにのせて動かしてます。herokuすごい!マジ簡単。git pushしただけでgemのインストールとかデプロイとか全部やってくれる。以下、herokuにのせる時のメモ。この通りに実行すれば、http://bugtter.heroku.com/と同じものが自分のherokuアカウント上にできるはず。#{yourapp}とか#{newappname}とかは適宜変えてください。ちなみに環境はVMwareのubuntu8.04。

herokuに登録

ココから

アプリを作る

  • git clone git://github.com/bugcloud/bugtterTL.git #{yourapp}
  • cd yourapp
  • rm -fr .git
  • git init
  • git add .
  • git commit -m ‘first commit.’

必要かよくわかんないけど、herokuのコマンドはgitと連携してるっぽいのでgit initはやり直したほうがいいかも。

2009/11/1 追記
わきげさんのコメントにあるようにcreate herokuはremote addしてるだけなので、git init のやり直しは必要なし。プッシュするときに、git push heroku master ってとこだけ注意すればOK
 
2009/11/19 再追記
人ん家でやってて気づいたけど、create herokuではherokuっ側にアプリ作ってて、git と heroku が1対1になりたがって怒られたりするので、git init し直したほうが早い。
 

heroku にプッシュ

  • sudo gem install heroku
  • heroku create
  • git push heroku master

git remote add までやってくれるっていう気の利いたやつです、herokuさん。

アプリのリネーム

たぶん最初はsimple-beach~とか適当なアプリ名なのでリネーム。

  • heroku rename #{newappname}
  • git remote rm heroku
  • git remote add heroku git@heroku.com:#{newappname}.git

で、http://#{newappname}.heroku.com/ にアクセスするともう動いてます。

gemのインストール

herokuの環境にデフォルトで入ってるgemはココ
足りないときは「.gems」っていうファイルを作ってその中にgemの名前書いてgit pushするだけでOK

  • cd #{yourapp}
  • vim .gems
  • 必要なgemの名前を書く。(bugtterTLには「rubytter」と「oauth」の2行だけ書いてます)
  • git push heroku master

herokuにはadd-on追加したりできるみたい。アプリを公開する敷居がどんどん下がってくのでうれしいっすね!RTとか返信とか検索とかの機能を追加し終わったら【急募っと】とコラボするbotを作るんだオレ!

P.S.
http://bugtter.heroku.com/ でカーソルの左(←)押すと背景の色変わるので好きな色にして使うとよいと思う!

P.S.2.
mixiの日記も転載しよ。
mixiユーザにはtwitter使ってる人少ないかも知れないけど、ボクの中でtwitterの位置づけは最速の話題提供 + 新しいコミュニケーションツールって感じです。仕事では一日中パソコンに張りついてるので、たぶん違う仕事の人よりはネットから情報を仕入れる機会が多いと思うんだけど、 twitterで流れる情報が一番早いかなーと思います。twitterで誰かがつぶやいてた話が一日たってニュースサイトにアップされることとかよくあります。口コミの力だよなって思います。たとえば急募っと。twitterの世界ではつぶやきの最初に「急募:/【急募】」っていう言葉をつけると自動でそのつぶやきを転送(retweet)してくれるbotと呼ばれるプログラムが情報の海を巡回してます。ボクが「【急募】いま目の前に捨てられてる子猫を飼ってくれる人」っていうつぶやきをしたとしたら、急募っとのフォロワーは約2700人ぐらいなので、2700人が子猫が捨てられてて里親を探しているっていうことを知る可能性があります。急募っとにretweetされたつぶやきを誰かがさらにretweetすればその輪はさらに広がります。「twitterなんて何年も前からあったサービスだし」っていう意見はまさにその通りなんですが、NHKで紹介されたり、mixiからもアメブロからもパクられたりして、以前とはユーザの数も種類も全然違う今だからこそ情報を広げるツールとしての価値があるんじゃないかと思います。

あと、新しいコミュニケーションツールっていう点だと、昨日スバツイっていうイベントで登壇された@shumaiさんのプレゼンがいい感じでした。「非コミュをこじらせる前に」っていう言葉がジュンと来たなと。リアルライフでも知り合いっていうのが前提のmixiとかアバターとかださいとはぶられる他のSNSとかと違って、twitterのコミュニケーションの中心は発言であることが肝なんだろうと思いました。一言だから知らない人にもつぶやけるし。なんか一人ぼっちでさみしい人とかとりあえずtwitterやっとくべき!キーワードは「【急募】これから飲める人」ですよ!ちなみにボクは twitterの中の人に招待してもらってGoogle waveのアカウントを取得できました。

とまー、よくわからないtwitterへの思いをつづってしまって恥ずかしいのでもう寝よう。
これ読んだ人はhttp://twitter.com/からアカウントを取得してhttp://twitter.com/bugcloudをフォローすればいいと思うよ!

[memo][git][cygwin]cygwin+gitkでハマった。

Standard
[memo][git][cygwin]cygwin+gitkでハマった。

1時間以上かかってしまった。。。
以下メモ。
 

cyg-aptインストール

そもそも gitk が入ってなかったのでそこから。cygwinのSetup.exeからパッケージをインストールっていうのはテンション下がりまくるので、apt-get風(あくまで風)の”cyg-apt”というパッケージマネージャをインストールした。ココを参考にしました。
 
 

  • cd /usr/local/bin
  • wget http://www.xs4all.nl/~jantien/software/cyg-apt
  • vim cyg-apt

 
以下のように修正

@@ -22,7 +22,7 @@
 if 'ABI' in os.environ.keys ():
        ABI = os.environ['ABI']

-root = '/cygwin'
+root = '/cygdrive/C/cygwin'
 NETREL = '/netrel'
 EXTRA = NETREL + '/extra'
 # PATCH = NETREL + '/patch'
@@ -31,8 +31,8 @@

 os.environ['PATH'] = NETREL + '/bin:' + os.environ['PATH']

-mirror = 'ftp://mirrors.rcn.net/mirrors/sources.redhat.com/cygwin'
-mirror = 'http://mirrors.rcn.net/pub/sourceware/cygwin'
+mirror = 'ftp://ftp.jaist.ac.jp/pub/cygwin'
+mirror = 'http://ftp.jaist.ac.jp/pub/cygwin'

 
※リンク先には「cyg-apt用のsetup.iniを/etc/setupディレクトリの下に用意~」とあるけど、ここんとこを飛ばしてみた。インストールできたけど、「cygcheck gitk」で”gitk見つからない”って言われるのはそのせい?よくわかりません。
 
 
スクリプトの修正が終わったら

  • cyg-apt setup
  • cyg-apt udpate

 
“cyg-apt” でコマンドの使い方が出てくる。
 

gitkインストール

  • cyg-apt install gitk

 
ここでとりあえず叩いてみる

  • gitk
  • /usr/bin/sh: /usr/bin/wish: No such file or directory

 
あん?
 

gitkの修正

ハマったし。シンボリックリンク貼ってみたりしちゃったし。
/bin/gitk を以下のように修正すればOKだった。
 

@@ -1,7 +1,7 @@
 #!/bin/sh
 # Tcl ignores the next line -*- tcl -*- \
 argv0=`cygpath --windows --absolute "$0"`; \
-exec wish "$argv0" -- "$@"
+exec wish84 "$argv0" -- "$@"

 
 
VMwareでubuntu動かせれば楽なのになー。低スペックPCで仕事なんてストレス溜まるー!黒いパーカーで会社行っちゃうよ、そのうち。
 

 

[memo][Rails]連携先テーブルの条件を指定してfind

Standard
[memo][Rails]連携先テーブルの条件を指定してfind

Railsで多対多の関係を持ったテーブル間で、連携先のテーブル側の条件を指定してfindしたかったんだけど、1時間ぐらいググった挙げ句わきげさんに先を越されたのでメモ。
 

やりたいこと

—————
dinner
—————
id  | name
—————
1  | にくじゃが
2  | シチュー
3  | チキンカレー
 
 
—————
foodstuff
—————
id  | name
—————
1  | にんじん
2  | たまねぎ
3  | 牛肉
4  | とり肉
 
 
—————————
dinners_foodstuffs
—————————
dinner_id  | foodstuff_id
—————————
1       | 1
1       | 2
1       | 3
2       | 1
2       | 2
2       | 3
3       | 1
3       | 2
3       | 4
 
 
みたいなテーブルとデータがあるとしたら、
Dinner.find(:all,:conditions => ‘とり肉が入ってる料理’)
みたいなこと。
 

正解

Dinner.find(:all, :include => :foodstuffs, :conditions => ["foodstuffs.name = ?", 'とり肉'])

 

ためす

  • rails mytest
  • ./script/generate model dinner name:string
  • ./script/generate model foodstuff name:string

 
 
mytest/models/dinner.rb編集

class Dinner < ActiveRecord::Base
  has_and_belongs_to_many :foodstuffs
end

 
mytest/models/foodstuff.rb編集

class Foodstuff < ActiveRecord::Base
  has_and_belongs_to_many :dinners
end

 
mytest/db/migrate/xxxxx_create_foodstuffs.rb編集

class CreateFoodstuffs < ActiveRecord::Migration
  def self.up
    create_table :foodstuffs do |t|
      t.string :name

      t.timestamps
    end

    # join table を作る
    create_table "dinners_foodstuffs", :id => false do |t|
      t.integer "dinner_id", "foodstuff_id"
    end
    add_index "dinners_foodstuffs", "dinner_id"
    add_index "dinners_foodstuffs", "foodstuff_id"
  end

  def self.down
    drop_table :foodstuffs
    drop_table :dinners_foodstuffs
  end
end

 
マイグレート実行

  • rake db/migrate

 
テストデータ作成
mytest/test/fixtures/dinners.yml編集

肉じゃが:
  id: 1
  name: にくじゃが

シチュー:
  id: 2
  name: シチュー

チキンカレー:
  id: 3
  name: チキンカレー

 
mytest/test/fixtures/foodstuffs.yml編集

にんじん:
  id: 1
  name: にんじん

たまねぎ:
  id: 2
  name: たまねぎ

牛肉:
  id: 3
  name: 牛肉

とり肉:
  id: 4
  name: とり肉

 
mytest/test/fixtures/dinners_foodstuffs.yml作成

one:
  dinner_id: 1
  foodstuff_id: 1

two:
  dinner_id: 1
  foodstuff_id: 2

three:
  dinner_id: 1
  foodstuff_id: 3

four:
  dinner_id: 2
  foodstuff_id: 1

five:
  dinner_id: 2
  foodstuff_id: 2

six:
  dinner_id: 2
  foodstuff_id: 3

seven:
  dinner_id: 3
  foodstuff_id: 1

eight:
  dinner_id: 3
  foodstuff_id: 2

nine:
  dinner_id: 3
  foodstuff_id: 4

 
 
 
テストデータ投入

  • rake db:fixtures:load FIXTURES=dinners,foodstuffs,dinners_foodstuffs

 
 
Railsコンソールから確認

  • ./script/console

 
 

Loading development environment (Rails 2.3.4)

>> Dinner.find(:all, :include => :foodstuffs, :conditions => ["foodstuffs.name = ?", 'とり肉'])
Dinner.find(:all, :include => :foodstuffs, :conditions => ["foodstuffs.name = ?", 'とり肉'])

=> [#<dinner id: 3, name: "チキンカレー", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">]

>> 
?> 
?> 
?> Foodstuff.find(:all, :include => :dinners, :conditions => ["dinners.name = ?", 'にくじゃが'])
Foodstuff.find(:all, :include => :dinners, :conditions => ["dinners.name = ?", 'にくじゃが'])

=> [#<foodstuff id: 1, name: "にんじん", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">, #</foodstuff><foodstuff id: 2, name: "たまねぎ", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">, #</foodstuff><foodstuff id: 3, name: "牛肉", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">]

>> 

おっぱいバレーを観た

Standard
おっぱいバレーを観た

近所のTSUTAYAに行ったらおっぱいバレーのDVDあったので借りてきました。 
 
原作が好きなので観たんけどハズしてしまったと思った。育夫の賢さとか靖男の男気とか全然描かれてなかった。映画のCMのときなぜか号泣してた少女、今からでも原作を読むといいと思う。100倍ぐらい笑えるし泣けるから。鳥肌が立つシーンがない映画は2時間返してと思ってしまう。
 
あ、ダメだ。「否定しない」がモットーだった。一番最初の手のアップはよかったと思います!
 
 
P.S.
石田卓也はぼくたちと駐在さんの700日戦争とまったく同じキャラじゃないかw
 
 
 

Cover image is not found
amazon.co.jpで詳細情報を見る



 
Cover image is not found
amazon.co.jpで詳細情報を見る



 
Cover image is not found
amazon.co.jpで詳細情報を見る


ギットギトにしてやろう

Standard
ギットギトにしてやろう

twitterでエロそうな人をひたすらfollowしたらTLがえらいことになりました。
 
 
職場でバージョン管理システムをやっと導入するとかしないとかな話があがったのでGitを提案しようと思ったらCVS以外の選択肢なんてないよって一蹴されてしまいました。理由は周りがみんなCVSだからだそうで。もうっ、いじけてやるんだからっ!って思いながら途中まで作っていた提案書のような資料を最後まで作ったので公開しようと思います。ひどいです、構成が、われながら。結論もいきなりだし。自分のハートをココに込めたとわからせるって難しい。ちなみにターゲットは「バージョン管理システムを形式上なんか使うかって思ってるマネージャーとバージョン管理システム触ったことない or ちょっと使ったことある開発者」です。
 
 

 
なんかひどい感じにずれまくってます。。ファイルはココ
 
 
disってほしいです。会社の人に公開して説明しても「ふーん」で終わる気がするので。これじゃ導入するほど魅力が感じられないっていう指摘がほしい。
 
 
つぎはgit超入門、「ボブとアリス ~Love is 福神漬け~」を執筆します。
 

 
追記

なんかポーってなって資料作って仕上がったと思ったけど、改めて見てみるとものすごく薄っぺらな資料。客観的に見たら全然何にも伝わってこなかった。これじゃ誰の心も揺さぶれんわ。。。
 
 

Cover image is not found
amazon.co.jpで詳細情報を見る



 
 

Technorati Tags: