トップ 最新 追記
RSS feed

ただのにっき


2009-03-31(火) [長年日記]

gist上のforkをmergeする

こないだ適当に書いたスクリプトno6vさんによってforkされた。せっかくなのでgitでのパッチの取り込みをやってみる。gistも普通のgitなリポジトリなので、操作は同じ。

リモートリポジトリを指定していきなりpullするのもいいのだけど、ちゃんと差分を確認してからmergeするなら、まずはremoteに加えてからfetchなんだろう。ということで、no6vという名前でremoteリポジトリを作成して、そこにfetch:

% cd src/mobile_supers
% git remote add no6v git://gist.github.com/87620.git
% git fetch no6v
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git://gist.github.com/87620
 * [new branch]      master     -> no6v/master

no6v/masterというブランチができて、gist上と同じ内容になった、ということ。これで手元で差分が見られる:

% git log -p master..no6v/master

ページャで差分が表示される。インデントがソフト2タブに変わってるので差分になってない! ><

……とはいうものの、内容に不満はない。というか、tapを使った配列の初期化とか、openのブロック引数の書き方とかカッケー。1.9スタイルをまざまざと見せ付けられたぜ。日ごろからちょっと古いrubyでも動くコードしか書かないだから新鮮だわ。

で、merge:

% git merge no6v/master
Updating e3bfa90..562ee0f
Fast forward
 mobile_supers.rb |   44 ++++++++++++++++++++------------------------
 1 files changed, 20 insertions(+), 24 deletions(-)

あとはcommitしてpushする:

% git commit -a -m "merged no6v's patch."
Created commit 8529945: merged no6v's patch.
 1 files changed, 30 insertions(+), 30 deletions(-)
 rewrite mobile_supers.rb (81%)
% git push
Counting objects: 8, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 1.19 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@gist.github.com:87404.git
   e3bfa90..8529945  master -> master

と、gist上のコードも新しくなってる。ふむふむ。gitの良さがわかってきた。

ついでにgist.rbプラグインのテスト。なんで3タブで展開しないのかと小一時間(ry:

Tags: git
本日のツッコミ(全2件) [ツッコミを入れる]

no6v [おぉ。gitの使い方とか勉強になります。 ソフト2タブなのはgit log -p -wで無視できると思います。]

ただただし [ほんとだ! > -w あるとは思ってたけど、慌ててmergeしてしまったのでした。]


2009-03-30(月) [長年日記]

RubyKaigi'08タンブラーが寿命を迎える

在りし日の姿(今日だけど) 昨年のRuby会議でノベルティにしたタンブラー、会社で使っていたんだけど、水漏れがひどくなってとうとう寿命に。まるで発表者の選考を待っていたかのようである。いや、水漏れは前からあったんだけど。

ノベルティが短命なのはしかたがないとはいえ、一昨年のバッグなんてまだ現役だしなー。せめて2009の本番くらいまでもって欲しかったぜ。

ちなみに後任は、以前かみさんがもらってきたAmazonのステンレス製タンブラーです。またノベルティか!


2009-03-29(日) [長年日記]

Jリーグの試合速報を携帯で見やすくする

スーパーサッカーの速報をスクレイピングして、シンプルなテキストを吐くスクリプトを書いただけなんだけど(ソース@gist→mobile_supers.rb)。相当シンプルにしてあるので、スタジアムの混雑した電波状態でも快適……なはず。来週の名古屋戦で試す。

自宅サーバが死ぬまでは別の(もっと泥臭い)スクリプトでやっていたんだけど、最近けっこうまともなHTMLになったようなので今回からちゃんとNokogiriを使った。

とはいえ、これを短間隔のcronで回すというのも芸がない。というか、試合やってないときまでアクセスさせたくない。かといって、CGIにして毎回動的に作らせるのも、相手サイトの負荷が高いときのレスポンスが気になる。で、

  • 最短5分間隔で最新情報を見られるようにする
  • それより短い間隔でアクセスしても静的ファイルが返るだけ

という運用方針のもと、実現するためにたつをさんのキャッシュ方式を参考にして.htaccessでmod_rewriteを設定した。まぁ、ほとんど丸写し:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/football/score\.txt$ /cgi-bin/update-score.cgi [L]

update-score.cgiはこんな感じ:

#!/usr/bin/ruby
require 'nkf'
require 'mobile_supers'
text = NKF::nkf( '-s -Z1', Jleague.miniscore2mobile )
open( '../football/score.txt', 'w' ) {|f| f.write( text ) }
print "Content-Type: text/plain; charset=Shift_JIS\n\n#{text}"

あとは5分間隔でcronを回して、score.txtを削除すればよろしい。あとやるとすれば、リンク先も同じように見られるように拡張するとか、そんなところか。

関連する日記: 2009-03-31(火), 2009-04-19(日)

単体ファイルのソース管理にGist + gistyを使う

上のような「プロジェクトにするほどでもない」プログラムを公開したり、ソース管理したいときにはGitHubのGistが便利なんだけど、gistyを入れるとさらに便利になる。

Gistの使い方やgistyのインストール方法はあちこちで書かれているので略。cloneされたGistのプロジェクト(?)は数字列で可読性が低いので、symlinkを張るといいね:

% echo $GISTY_DIR
/home/sho/src/gists
% cd ~/src
% ln -s gists/87404 mobile_supers

いつものように、防火壁の内側からproxy経由のsshでGistを使うためには、~/.ssh/configに以下を追加すれば良いようだ:

Host gist.github.com
HostName ssh.github.com
Port 443
ProxyCommand corkscrew YOUR_PROXY_HOST YOUR_PROXY_PORT %h %p

GistのリポジトリはGitHubそのものとはホストが違うからsshサーバも別かと思ったら、これは共通でいいようだ。Corkscrewの設定など、その他のノウハウは以前の記事を参照:

Tags: git
本日のツッコミ(全2件) [ツッコミを入れる]

no6v [日付の前にゴミが残るような場合があったので、ちょっとイジってみました。gist:87620]

ただただし [うお、Array#tapとか使っててカッコいい‼ あとでじっくり見てみます、ありがとう。]


トップ 最新 追記
RSS feed