anywhere-chatというものをつくってみた
MSペイントの文字入力をリアルタイムで共有できるみたいなものです。
複数ブラウザひらいてためしてみてください。
クリック→入力→エンター。
anywhere chat
とても公開できるようなものではありませんが、ソースはとりあえずgithubに置いてます。
marutanm/anywhere-chat · GitHub
原動力となったり参考になったりしたもの
ベータテストをさせていただき、ただならぬ刺激をうけました。
画面のどこかでなにかしたのがリアルタイムでどうにかなるという点が似ているかもしれません。(比べものにならないほど、及びませんが)
浜辺氏によるNodeでのチャットのサンプルなど。
- ネット上に散見されるPusher+Herokuの情報
- CoffeeScriptへの興味
構成しているもの
- Sinatra
- CoffeeScript
- Puhser
- Heroku
感想など
- WebSocketでリアルタイム、面白い
- でも、使いどころが思いつかない
- ソースもっと綺麗にしないと
- フロントエンドをどうにかする技術力がなさすぎる
実践!Pull Request対応
Ginatra というものがあります。SinatraとGritでできたGitリポジトリビューアです。Githubクローンというよりは、進化版gitwebといった感じ。
機能は良いのですが、いかんせん見た目が今一歩。これをforkして、Twitter Bootstrapを使って簡単によさげな見た目にしていたわけです。
marutanm/ginatra · GitHub
見た目のほかには、erbだったのをhaml化したりとか、ちょっとルーティング変えたりとか。
そうこうしていたらPull Requestがきたのです。なぜか本家のほうではなく、こっちに。なんとも喜ばしいですね!!
せっかくなので、Pull Requestがきたときにどう対応するか、まとめてみましょう。
Auto merging
一番かんたんなのは、 Merge Buttonを使うことですね。
画像の右下にあるのが、それ。これを押すとPull Requestをマージして、クローズまで自動でやってくれます。
コミットログもよきにはからってくれます。ファッキン便利ですね!!
もちろん、Pull Requestに含まれるコミットがどんな変更なのかは事前に確認しましょうね。もちろん、github上で見られます。
pull and push
上記ボタンはGithubが提供してくれる機能ですが、Git単体でリモートリポジトリのコミットを取り込む手段があります。それがgit-pullです。
Pull Requestの内容を確認、問題なければpullします。そしてpushすれば完了ですね。結果的には上記と同じことなので、せっかくgithubを使っているならMerge Buttonを使ったほうがシンプル簡単でいいですね。
fetch and merge (and push)
場合によっては、コミット内容に問題がありそうで素直にPullできないことや、手元で動作確認したいことがあります。そんなときはひとまずfetchし、その後でよろしくmergeしてやりましょう。
コマンドがよくわからなくても、問題なし。よくあるi印をおすとgithubが教えてくれます。
新しくブランチを切って、そこにマージ対象(Pull Requestされたもの)をpull。確認なりしたあとで、masterからmergeしてやります(そしてgithubにpush)。
こんな感じ。
# masterからdocunext-masterブランチを作成、同時にチェックアウト $ git checkout -b new-branch master # githubからpull $ git pull remote/repos.git master # masterに戻ってマージ、githubにpush $ git checkout master $ git merge new-branch $ git push origin master
fetch and mergeと題しましたが、正確にはブランチをきってpullしていますね。
さて、単純にmergeしたくない場合はどうしましょう?適切にコミットが分割されていればgit-cherry-pickなりできるのですが、必ずしもそうではありません。hunk単位でmergeしたい、どうする?
とりあえずmergeしちゃいましょう、--no-commit指定で。
$ git merge --no-commit --no-ff new-branch
これで、準備完了。あとは、コミットしたくない点をunstageなり何なりしてcommitしましょう。
ちなみに、今回の場合はfast-forwardでマージできてしまうので--no-commitだけ指定だと自動的にコミットされてしまいました。そこで--no-ffも併せて指定して、マージだけをするようにしました。
さて、うまいことマージできたら普段通りにpushしましょう。githubはマージコミットを認識して自動的にPull Requestをクローズしてくれます。便利ですね!
--no-ff
-
- no-ffはマージコミットを作成するかどうかの指定なのですが、普段どうするかはリポジトリの方針次第ですよね。今まではあまり気にせずgitまかせでmergeしていたのですが、トピックブランチで機能追加した場合はマージコミットを残したいですが、トピックブランチとするほどではない細かい修正なんかはfast-forwardで一本道にしたいですね、なんとなく。
fast-forwardマージが可能なときに、--no-ff指定あり/なしでマージをしてみると違いはすぐに理解できると思います。git-reset --hard HEAD^ なんかですぐにマージ前の状態に戻せますし。
まとめ
Pull Requestをもらえるとか、とても喜ばしいことですよね。ささやかな修正でもいいので、どんどんコミットを送り付けて互いに幸せになれるといいですね!!(リポジトリによっては指針があって、テスト通したりとか必要なことはもちろん予めやらなくてはなりませんけれども)
せっかくもらったPull Requestには最大限に敬意をはらいつつも、自分にいちばん都合がいいようにマージしたいですね。
gitそしてgithubという素晴らしいツールを最大限に利用し、望ましい形にコミットログを残せるよう、うまいことやりましょう。
おまけ
BEFORE: lenary/ginatra · GitHub
AFTER: marutanm/ginatra · GitHub
tcommentメモ
Vimテクニックバイブル が手に入ったので、読みながらVim環境をカイゼンしていっている。
今まで、コメントアウト/アンコメントにはNERD Commenterを使っていたんだけど、tcommentというのが紹介されていたので乗り換えてみた。
:TCommentはデフォルトだと
その他、gccでカレント行のコメントするしないトグル、gc{motion}でモーション範囲のコメントするしないトグル。このあたりをとりあえず覚えておきたい。
あとは、使っていきつつ適宜キーバインド設定していく。
デモ動画とか
vimsomnia: The tcomment vim plugin
Vimテクニックバイブル ?作業効率をカイゼンする150の技
- 作者: Vimサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2011/09/23
- メディア: 単行本(ソフトカバー)
- 購入: 16人 クリック: 564回
- この商品を含むブログ (33件) を見る
homebrewで入れたreadlineを使いつつruby-buildでruby入れてみた
ローカルのruby環境を管理するのにrbenvを使っているのですが、こういう場合はrvmを使ったほうが簡単です、たぶん。
rbenvは複数バージョンのrubyをすぐ切り替えられるということのみにフォーカスしてて、ruby本体をインストールするのは自前でmake等します。毎回それは面倒すぎる。そこで、ruby各バージョンのビルド内容のレシピをもっててコマンド一発でやってくれるよう、補助的に用意されているのがruby-buildなわけです。わー、ruby-build便利!
ところが、ruby-buildのREADMEのまま、なにも考えずにいれた1.9.2ではreadlineが有効になっておらず、earthquake.gemがちゃんと動いてくれませんでした。
現状、ruby-buildではconfigure時のオプションを指定できないので、お勉強も兼ねてソースを少し書き換えて動かしてみました。
手順
readline
Homebrew+RVMでreadline/iconvを使う - どっかのBlogの前置きのような
こちらを参考に、brew-linkを忘れずに。
まとめ
ruby-buildにモンキーパッチをあてて、configureオプションを指定してrubyをビルドしたわけです。
問題は、これをもとにruby-build本体にどう貢献するか。
こういうIssueもありますが、そもそもruby-buildの便利なのはレシピの内容を気にしなくていいってことなんです(と思っています)。
configureオプションを指定しようとした時点で嫌が応にもそれは崩壊します。それなら、ruby-build使わずとも自分でソースからビルドすればいいわけですよ。
というわけで、はたしてconfigureオプション指定できるようになっていくのか?しばらく見守りつつ、なにか貢献できるか考えてみます。
pow-indexをrubygem化しました
旅の恥はかき捨てといいますが、エンジニアのコードは書き捨てるべきではありません。断じて。
DRYに、わかりやすく、再利用しやすい良質なものとするべきです。
そういったことを考えると、ここ最近の活動がエンジニアとしての価値を高めているのか、それとも恥を全世界に大公開し続けているのかがわかりません。
はい、公開できる品質なのか甚だ疑問ではあるのですが、gem化しました。
pow-index | RubyGems.org | your community gem host
それによって、導入が簡単になりました。
$ gem install pow-index
下記コマンドで~/.powにシンボリックリンクが作成されます。linknameは指定しなければindexとなります。
$ pow-index [linkname]
少し機能も追加して、cleanupボタンでリンク先のないシンボリックリンクをまとめて消したりできます。
ソースはこちらです。
あとは特に機能追加をするつもりはなく、せいぜい見栄えをよくしたり、最終更新日やリンク先パスの表示、それから表のソートができるようにするかもくらいですね。
前述のようにソースは汚い。主にjQueryの素人っぷりがひどい。
フィードバックなり、pull-requestなりいただけると、私の勉強になるだけではなく、gemをダウンロードしてくれた誰かも幸せになれるかもしれません。
Powにはindexが必要だと思うんです
Rackアプリをつくっては放置つくっては放置していると、ローカルにPowでアクセス可能なものが散乱していくんですよねー
そこでこれです。
marutanm/Pow-index · GitHub
これはなに?
Powでアクセス可能なプロジェクトの一覧ページを提供してくれます。
どうやって使うの?
git-cloneしてシンボリックリンクをはりましょう。
$ git clone git://github.com/marutanm/Pow-index.git
$ ln -s Pow-index ~/.pow/index
あとは、http://index.dev にアクセス。
仕組みは?
Sinatraで~/.powにあるシンボリックリンクの一覧を取得・表示しているだけです。hamlテンプレ含めてソース25行。
Twitter Bootstrapを読み込んでみているんですが、むしろ読み込みで遅くなっているかも。
デジャヴ?
Powderをもっと便利にしようとしています - Meltdown Countdown で書いたindexサブコマンドがさっぱりマージされる気配がないので、独立してつくりました。
cleanupのほうはマージされたので、そのうち配布版のgemに含まれると思います。
rbenvのサブコマンドを補完したい
はい、あります → rbenv/completions at master · sstephenson/rbenv · GitHub
zsh用はv0.1.2から追加されています。
homebrewでrbenvをインストールした場合、/usr/local/Cellar/rbenv/0.1.2/completions/ あたりにあるかと思います。
使い方
環境変数${fpath} に入っているディレクトリに、上記補完設定ファイルを置いてやります。
たとえばこんな感じ。
% ln -s /usr/local/Cellar/rbenv/0.1.2/completions/rbenv.zsh .zsh/functions/_rbenv
すると、こうなります
% rbenv [TAB] commands exec help init prefix rehash set-default set-local version version-name version-origin versions whence which
サブコマンドが出てくれるだけでもとても助かりますね。