HerokuとGitで、2台のPCによる共同開発をやる
なにがしたいのか
自分が会社のPCと、ノートPCの両方で開発したいだけなんですがね。
技術者なんか俺だけですので。
Heroku関連は過去記事参照のこと。
最初に、railsプロジェクトの作成とHerokuへのcommit
会社でプロジェクトを作成して、手元のgitにcommitする。
rails myapp cd myapp git init git add . git commit -m "first commit hogehoge"
次に、ディレクトリはそのままで、Heroku側にアプリを作成する。
heroku create myapp git remote add heroku git@heroku.com:myapp.git git push heroku master
ここまでは、Herokuインストールして「heroku」だけ入力すると同じのが出ますので。
次に、ノートPC側でrailsプロジェクトを共有する
事前準備
ノートPCにも、予めGit&Herokuはインストールされているものとします。
鍵も作成&Herokuに送付しておくこと。分からない場合は、以下参照。
参考:Deploying with Git | Heroku Dev Center
こんなカンジで鍵を作りました。
ssh-keygen -C "xxx@example.com" -t rsa
Herokuのmyappをgitでpullする
ノートPCの任意のディレクトリで以下を実行する。
git clone git@heroku.com:myapp.git
そうすれば、任意のディレクトリ以下にmyappディレクトリ以下の全ファイルが作成される。
git initあたりもやってくれる。
手元のgitにherokuのリポジトリを登録する
cd myapp
git remote add heroku git@heroku.com:myapp.git
Herokuにpushする
# add とか、commitとかしたら...
git push heroku master
ActiveRecordでのdistinctについて
- あるModelから、
- user.idで抽出し、
- field_nameでDistinctしたレコードを、
- created_atの降順で、
- 5つ欲しかった
ので、以下のように実装してみた。
models = SomeModel.find(:all, :select => "distinct field_name", :limit => 5, :order => "created_at desc", :conditions => ["user_id = ?", user.id])
ローカル環境(MySQL)では、こいつでもまあ良かったのだが、
公私共にお世話になっているHerokuではPostgresqlを使っている様子で、
Distinct の文法が若干異なるのでエラーを出された。
なんで、以下のようにして解決した。
if connection.supports_count_distinct? select_str = connection.distinct(:field_name, "created_at desc") models = SomeModel.find(:all, :select => select_str, :limit => 5, :conditions => ["user_id = ?", user.id]) end
細かい点
connection.supports_count_distinct?
こいつは、各データベース用のアダプタでDistinctが実装されているか確認するメソッド。
connectionってのは、以下を参照のこと。
参考:
Ruby on Rails - ActiveRecord -
—
ありえるえりあ
connection.distinct(:field_name, "created_at desc")
こいつで、各データベースがDistinctを拡張しているので、
言われたとおりにデータを渡す。
というカンジ。
ついでに
なお、Distinctが実装されていない場合も考えて
以下の実装も追加した。
temp_models = SomeModel.find(:all, :order => "created_at desc", :conditions => ["user_id = ?", user.id]) models = temp_models.map{ |i| i }.uniq[0..5]
まとめ
最終的にはこんなカンジ。
class SomeModel < ActiveRecord::Base def self.recent(user) if connection.supports_count_distinct? select_str = connection.distinct(:field_name, "created_at desc") models = SomeModel.find(:all, :select => select_str, :limit => 5, :conditions => ["user_id = ?", user.id]) else temp_models = SomeModel.find(:all, :order => "created_at desc", :conditions => ["user_id = ?", user.id]) models = temp_models.map{ |i| i }.uniq[0..5] end end end
rubyの自己代入擬似演算子について
あまりにもブログ書いてないので、適当に書いてみる。
自己代入擬似演算子
x += y # => x = x + y x -= y # => x = x - y x *= y # => x = x * y x /= y # => x = x / y x %= y # => x = x % y x **= y # => x = x ** y x &&= y # => x = x && y x ||= y # => x = x || y x &= y # => x = x & y x |= y # => x = x | y x ^= y # => x = x ^ y x <<= y # => x = x << y x >>= y # => x = x >> y
取り急ぎ。
即視力回復した...!?
仕事柄ずっとモニタとにらめっこなので、さすがに最近は視力の低下を感じる。
そんなとき、下記の「眼筋トレーニング」を読んだので、さっそく今朝、通勤時にやってみた。
涙が出るまで遠くを見る眼筋トレーニングの効用 | Lifehacking.jp
たとえば遠くにある建物の表面がタイル状だったりすると、このとき端から端までタイルがいくつあるのか数えたりします。また、遠くに木立があると、ほとんど見えるはずもない木の葉の一枚一枚が見えるようになるまで目を見開いて見つめます。夜なら一目でわかる一等星など無視して、暗い等級の星を探します。
ということなので、駅から仕事場まで歩いてるときに、正面に見えるビルのタイルで試した。
書いてあった通り「このとき眉間に力をいれず、目をしかめず、カッと見開いて」見てみた。
すると、やはり目が潤んできたので、そこで中断した。
何度かまばたきをして、再度タイルを眺めると、なんとさっきより、大きく、鮮明に見えた。
タイルの枚数も数えることが出来た。
「こんなにすぐに効き目がでるとは。」と、驚きだった。
が、直後、自分の頭の悪さに笑えた。
まだ寝ぼけていたようだ。
一般的なID/クラス名の例のまとめ
いつも忘れて本を開くので、自分用のメモ。
転職後、WEBデザイン全般も担当するようになり、XHTML&CSSもガツガツ書くようになったが、
なにぶん、ID名とかクラス名が思いつかないことが多いので、以下表の名称を頻繁に使わせて貰っている。
部品例 名称例 本文全体を囲むコンテナ container, wrapper, page, pagebody, all ヘッダー header, header-area ナビゲーション nav, navi, navigation グローバルナビゲーション global_nav, gnav ローカルナビゲーション local_nav, lnav 補足ナビゲーション assist_nav, utility, utility_nav パンくずナビゲーション topicpath, breadcrumbs コンテンツ全体 content(s), container, wrapper メインコンテンツ main, maincontent(s), content(s), alpha, primary サブコンテンツやサイドバー sub, subcontent(s), sidebar, bate, secondary 見出しと本文のまとまり section, entrybody, article(s) 記事単体 article(s), entry(-ies) フッター footer, footer_area, copyright, publication ロゴ logo メインの絵 keyvisual, mainvisual 画像や写真、グラフなど image, photo, fig, figure 検索 search, search_area, search_box 注釈、ヒント、本題から外れた補足や囲み記事 aside, hint, note 商品一覧 products, item_list, shopitems
- 作者: 益子貴寛,堀内敬子,小林信次,千貫りこ,伊藤学,山田あかね,西畑一馬,CSS Nite
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 610回
- この商品を含むブログ (62件) を見る
この本、ホントに良いのでオススメです。
また、HTML5のサイトなども確認すると良いとのこと。
HTML 5 における HTML 4 からの変更点
http://standards.mitsue.co.jp/resources/w3c/TR/2008/WD-html5-diff-20080122/
RubyにおけるFizzBuzz
ブラウジングしてたら、ひさびさに読んだ。
どうしてプログラマに・・・プログラムが書けないのか?
かなりの試行錯誤の末に、コードを書こうともがいている人たちというのは、単に大きな問題に対して苦労しているのではないことがわかった。やや小さな問題(連結リストを実装するというような)に対して苦労するということでさえない。彼らはまったくちっぽけな問題に苦労しているのだ。
それで、そういった類の開発者を見分けるための質問を作り始め、私が「Fizz-Buzz問題」と呼んでいる問題のクラスを考え出した。これはイギリスの学校の子供たちがよくやっている遊び(というかやらされている遊び)にちなんで名付けた。Fizz-Buzz問題の例はこんな感じだ。
1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、
3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
で、やってみた。記録は2分ジャストくらい。
「ちゃんとしたプログラマ」認定は頂けませんでしたww
for i in 1..100 str = "" str << "Fizz" if i % 3 == 0 str << "Buzz" if i % 5 == 0 str << i.to_s unless i % 3 == 0 || i % 5 == 0 puts str end
もっとスマートに書けないかなぁ、と思ってググッたら、
こんな感じのワンライナーを発見。
Rubyの最短FizzBuzzの解説、の補足 - バリケンのRuby日記 - Rubyist
1.upto(?d){|i|i%3<1&&x=:Fizz;puts i%5<1?"#{x}Buzz":x||i}
うはは。
いまの俺じゃさすがに2分以内にここまではできねぇや。
精進が足らないみたい。