2012年11月5日月曜日

rhodecode1.4.4を試してみた #tokyomercurial

世の中GithubEnterpriseでpullrequest方式での開発が
一部では標準化しているんじゃないかと思われる今日この頃いかがお過ごしでしょうか?

とは言うものの、いくら有用性を語ってもそうそう導入されるような世界じゃないですよね?高いし。
せめてGithub/Bitbucketの有料アカウントを…と思ってもそれもねぇ…って世界ですよね(´;ω;`)

そんな僕達がPullRequest方式で開発したい!!そうだRhodeCodeがあるじゃないか!!
という私やあなたみたいな方にお届けするエントリーですw

あ、ちなみに件名に#tokyomercurial を追記した理由は特にありません。
あえていうなら、このツイートがあったので…ぐらいかな?



あ、ちなみに長いのでご注意ください


試した環境はこんな感じ

  • CentOS6.3 64bit minimal状態から
  • VirtualBox上で

すげー大雑把にやりますので、必要な部分は適宜脳内補完でお願いします

実験用なのでselinux/iptablesは無視

最初は…
とりあえず入れましょう。
使わないのもあるけど。


python周り入れましょう。
最初から入っているのは2.6系のはずですし、別にそのまま使ってもいいですが…
pythonbrewという流行りに乗っかっておきましょう。
→ それだったら pythonz で入れろって話しなんでしたっけ?
下記はちょっと時間かかるので、コーヒでも入れましょう。


おまたせ、rhodecodeです。時間かかります。
なぜならいっぱい一緒に入りますから。当然Mercurialもこの時入りますので。
さっき作ったコーヒでも飲みましょう。


使用するwebサーバでも入れましょう。
rhodecodeのドキュメントにはapacheとnginxのサンプル設定が乗ってますので、テキトーに。
ここではnginx入れます





さて、rhodecodeの設定をやりましょう。
まあrhodecodeのドキュメントままといえばそれまでですが…



これで設定ファイルができたので…試しに動かしてみます


ブラウザで確認するとこうなっているかと。
/etc/hosts にvm2って名前で仮想マシンのip書いているのでurlはそんな感じ


さっき作ったadminユーザでログインしてみます

とりあえず3名ほどユーザを追加してみましょう
まあLDAPが使えれば、こんなこといらないんだろうけど…
Admin > Users > Add New User




時にログイン画面の下に小さくDon't have an account? という項目ありますが、
こちらから誰でもアカウント作成が可能です。
が、こちらで作ると初期の状態だとログイン出来ません。
 管理者にActiveにしてもらう必要性があります。


 各自が作成した時に最初からActiveにするためには
Adminユーザで
Admin > permissions で Registration を変更すればいけます。


次にとりあえずAdminユーザでrepository groupを作っておきます。
実際に仕事で使う…とかになると、プロジェクト単位で切ることになるのかな?
もちろん作らなくてもOKですが、とりあえず。

Admin > repositories groups > ADD NEW GROUP


作ったらパーミッションを設定します。
ここでは太郎くんにadmin権限を渡してみます。


さて、太郎くんでログインしてテキトーに作ります

ご丁寧にQuick Start ってありますね。



この通りやってみましょう。


結果

当然反映してますね。

続いて二郎くんでフォークしてプルリクエストを出してみます。
まず二郎くんでログイン
そしてhellorepoを選択し OptionsからForkを選びます

すると、repositoryを作成した時のような画面になります。

Fork結果

fork-hellorepo-jiroの詳細を見てみるとClone urlってありますね。

手元にcloneして作業してみます。


作業に満足したらプルリクエストしましょう
Options > Open new pull request を選択します



結果こんな感じ


ソースにコメントも可


実際にレビューした結果を選択
change status にチェックを入れて、レビュー結果OKかどうか選択しましょう。

全員がレビューしたと仮定


あとは誰かがComment and closeを押せばいいわけですが…
現状で自動でこのリクエストは取り込まれない…よね?
→間違っていたらご指摘ください。
なので手動で太郎くんがpullしてマージしてpushすることになります。


うーん、メンドイ。
何よりせっかくApproved とフラグをつけた内容なのに、結局fork元repository上では当然それがなくなっているわけで…
更にPullRequestを取り込んだからといって、PullRequestが閉じられるわけでもない。
→ Forkしたrepositoryを閉じれば(削除すれば)消えます。
もっというと手動で取り込む=結局approved/reject関係なく取り込む人次第なので、
このへんは運用ルールでどうにかするしか無さそうです。

ちなみに上記はbranch切ってやりましたが、別にbookmarkでもいけます

その辺も運用ルール次第なのかな?

ただBitbucketみたいに、「こう言うふうにコマンド叩いて取り込めるよ!!」とかの表記がないので、
リビジョン指定よりもブランチ/ブックマークで取り込むことを前提とした運用のほうが無難だと思います。


多分gitでもそんなに操作変わらんだろう
ということで次。

まずnginxを使ってアクセスできるようにしましょう

ってもドキュメントのサンプルから大きく逸脱しなければ大丈夫なはずです


あくまで動作確認なので自分は本当にほぼ上記ドキュメントのまま。



このあと service nginx start で ipaddressであたりにいけるはずです


clone url もport番号がなくなったのが確認できるはず。

なおこの段階で、rhodecodeの設定ファイルであるproduction.iniのhostを「127.0.0.1」に直しても問題ありません。
nginxで飛ばすわけだしね。
むしろしたほうが、ipaddress:5000でアクセスできなくなるし、いいんじゃまいか。

ただし
full_stack = false
にすると、repositoryをcloneする際にこの症状にハマります。
まあ httpのままでなければいいのかもしれないけど…

また
static_files = false
にすると、自分の場合web表示が崩れました。



あとはサービス化
このあたりを参考にしました
きっとこんなのを作ればいいんだろう…




シェルスクリプトとか詳しくないし、このへんはそんなに突っ込まないでほしいw

あとは
chkconfig rhodecode on
で登録しておけばOKですね。

とりあえずこれで「最低限」使うことは可能になると思います。
ローカル内でしかアクセスされないなら、まあセキュリティとかそこまで考えなくてもいいでしょうし、
レビューツールとしてはありだと思います。

ただ、その他のツールと連携していくこととか考えたらここでAPI見てなんか書いたり、
もしくはincoming hook書いて直接repoの中においてきたり…とかになるんでしょうか。

rhodecodeを使うとなると、issue trackerを外部に依存することになるでしょうし、
それ+CIサーバと連携…とか考えると、ちょっとめんどいですね。
個人でやる分には多少失敗しようがそれなりに動けばいいんですけど…ってか
個人だったらGithub/Bitbucketで事足りるし、ウムム…
この手の構築が好きで得意な人がいるような会社だったら、検討の余地は十分あると思います。

そういえばLDAP連携で @usaturnさんが悩んでいた記憶が…



つまり @usaturnさんがrhodecodeを使った素晴らしい開発環境構築を年内にまとめてくれるはず…!?


Admin > Settings に hgsubversion extension を設定できる箇所が有りました。
これにチェックを入れたら、最初にrepository作るときのclone先にsvnのrepositoryを指定できるかも?




補足 会社でrhodecode使い始めました。
Gitに関して追加設定が必要だったり、HGで日本語コメントがちゃんとrhodecode上で表示されるようにしたり…
みたいな設定をお隣の席の人がやってくれました
詳細は以下
http://htn.to/TAKNVB




2012年11月3日土曜日

自転車買ったよ〜

Wiggle で自転車買いました。

え、購入理由?
1年半共に過ごしたロードがパクられたからだよ(´;ω;`)

で、まあ自転車ないと通勤が必然的に電車になります…
電車辛い…

で、知り合いにWiggle勧められて買いました、と。


届くとこんな感じ



開けてみる



取り出してみる



組み上げて出来上がり






ということで、こいつで今週から通勤しております。
快適快適〜
送料込みで7万ちょっとはお買い得だったと思うなぁ…

次はパクられないように、こいつとこいつで地球ロックしてます。

過去にバイク盗まれたときはこいつバッツリ切られてましたけど…
さすがに車両金額的に大丈夫だと思いたい…


しかしお買い得と言えども予定外の出費だったので、予定していたサスペンション購入はまた今度だな。

2012年10月1日月曜日

Playframework2.0 + mongo(salat) でのUnitTestに関するメモ

conf/application.confに書かれた設定値は

FakeApplication(additionalConfiguration = Map("key名" -> "値"))

で置き換えられます
ですので、mongoを使っている場合

FakeApplication(additionalConfiguration = Map("mongodb.default.db" -> "dummy_db_name"))

とかで"mongodb.default.db"を書き変えてテストを実行することで、テスト用のDBが使えます



事の経緯






ということで開催されました、第一回詳しい人が誰もいないScala勉強会@Hangout




こんなかんじで みやびさん まで巻き込まれた結果がこれ。





documentにも
「このフェイクアプリケーションに対して追加の設定値を渡す (または上書きする) したり、プラグインをモックすることも可能です。例えば、 default という名前の インメモリデータベースに接続された FakeApplication を起動する場合は、次のように書きます」

FakeApplication(additionalConfiguration = inMemoryDatabase())

とありますが、inMemoryDatabaseは次のようになっています

  def inMemoryDatabase(name: String = "default"): Map[String, String] = {
    Map(
      ("db." + name + ".driver") -> "org.h2.Driver",
      ("db." + name + ".url") -> ("jdbc:h2:mem:play-test-" + scala.util.Random.nextInt)
    )
  }

早い話がinMemoryDatabaseを使っても、「mongodb.default.db」を書き換えられるわけないってことでした
残念!

なお、database cleaner 的なものがパッと調べた感じでは見つからなかったので、
上記ではbeforeでテスト用のDBごとdropしてます

参考にしたのはこちら

上記のような方法でとりあえずは気兼ねなくテストケースが書けそうで何よりです。
ただ、毎度毎度書くのは面倒なので、「Specification」を拡張してどっかに置いておくとかのほうがいいと思います。




「いやそもそもこういう便利な方法あるしwww m9。゚(゚^Д^゚)゚。プギャーッハハハハヒャヒャヒャヒャ」

的なツッコミありましたら、教えてください♥





参考
http://playdocja.appspot.com/documentation/2.0.3/ScalaTest
http://modalsoul.github.com/Programing/2012/07/31/Getting-Started-with-Play2-Scala-and-Squeryl/
https://github.com/mongodb/casbah/blob/master/casbah-core/src/test/scala/ConversionsSpec.scala
https://github.com/leon/play-salat
http://stackoverflow.com/questions/10760131/using-specs2-and-fakeapplication-to-test-database-fails-evolution-inserts
等

サンプルとひな形を兼ねて、githubに上げています
g8 daneko/play-salat
で作成した後、play test で動くはずです。



今後も 詳しい人が誰もいないScala勉強会@Hangout をテキトーに開くと思いますw

2012年9月10日月曜日

Scalaのカリー化とか部分適応とかの俺メモ

別になんにも難しい or 怖いお話はありません



上記は問題ない。
全く問題ない。

問題は下



一旦部分適応やらで作成したメソッドを再度カリー化したり
一旦カリー化されたメソッドを更に部分適応したりするときは _ が不要
というかつけると怒られる

とりあえずはそういうものって覚えればいい?

環境は
Scala2.9.2
MacOSX10.7


2012/09/12 追記
defで宣言した関数名の後ろに「_」をつけると、「関数オブジェクト」になる
なので、一回関数オブジェクトに変わっている → 次は変える必要はない(というか既に変換済み)
ということでいいんでしょうか?


2012/09/13 追記
http://togetter.com/li/154007
このあたりかな?

2012年9月6日木曜日

Intellij Idea で eclipse の saveアクション的なことをする

参考URLというか答え
http://stackoverflow.com/questions/946993/intellij-reformat-on-file-save

マクロにやりたい処理を追加して、そのマクロにショートカットキーを割り当てるだけ

saveアクション的なことをするためには、
Command+sに保存処理を含んだマクロを割り当てればまさにそれっぽい


でもこれVimPlugin使っている俺はどうやって割り当てればいいんだろうねぇ…
(とりあえずCommand+sに割り当てたけど…)

マクロの存在に気がつけたのでまあいいやw