2008-09-11

Git で他の人と共同開発する

過去記事

git で個人プロジェクトは管理できているとする。

ストーリー

Bob が wonderland プロジェクトを開発している。貴方 (Alice) は Bob さんのプロジェクトを手伝う。

開発作業はかうなる。Alice は自分のリポジトリーに Bob のリポジトリーをコピーする。Bob 側で変更があったら、変更分を自分のリポジトリーに取り入れる (Subversion で言う所の svn update)。Alice が変更を加えたら、Bob に自分の変更分を取り入れてもらう (この作業は Bob が行なう)。Alice が Bob 側に変更分を投げつけることは (今回は) やらない。

Bob のリポジトリーは /home/bob/wonderland にあるとする。Alice は /home/alice/wonderland。

Pull を使う方法

まずは、リポジトリーのコピー。

$ cd ~
$ git clone /home/bob/wonderland

開発作業はいつも通り。

$ cd wonderland
$ vi foo.txt
$ git status            ; 変更分をファイル単位で確認
$ git diff              ; 変更分をコード単位で確認
$ git commit -a         ; 変更分をコミット
$ git log               ; ログを見る

Bob の変更分を取り込む

$ git pull
Bob が Alice の変更分を取り込む

Alice はメールか何かで変更をしたことを Bob に伝える。Bob は次のやうにして Alice の変更分を取り込む。

$ whoami
bob
$ cd ~/wonderland
$ git pull /home/alice/wonderland

Fetch を使う方法

pull を使う方法だと Bob の変更分だけ見たい時に困る。例えば Bob が危険な変更をここ 3 日間かけて行なっている。その変更分を取り込むのは時期尚早だけど、どう変更しているかは見ていたい。そういう時。

これは Fetch を使う。

$ whoami
alice
$ cd ~/wonderland
$ git remote add bob /home/bob/wonderland
$ git fetch bob
From /home/bob/wonderland
 * [new branch]      master     -> bob/master

出来たブランチ名は bob/master。ブランチを確認してみませう。

$ git branch
* master

自分のブランチに bob/master は出来ていない。

リモートのブランチを覗いてみる。

$ git branch -r
  bob/master
  origin/HEAD
  origin/master

bob/master が見つかった。

変更分の取得・参照

Alice は bob が変更を加えたという情報を入手した。さあ、変更分を見てみたい。まずは最新の Alice のリポジトリーを取ってくる。

$ git fetch

そしたら変更点を見てみましょ。

$ git log -p master..bob/master

Alice の最新ソース・コード一式が見たいなら、checkout する。

$ git checkout remotes/bob/master

この時、貴方 (Alice) は bob のリポジトリーを見ているだけなことに注意。編集とかしても反映されない。またこの状態で git fetch しても checkout したソース・コードには反映されない。一旦 master に戻って、もう一度 bob/master を checkout する必要がある。どうやら、これはあくまでスナップショットを見ているだけらしい。

マージする

Bob のリポジトリーが安定したとの話を聞いた。Alice は自分のリポジトリーに Bob の変更分を加える決意をする。

マージの方法は簡単。

$ git merge bob/master
Updating 8ed0b02..1939699
Fast forward
 foo.txt |   36 ++++++++++++++++++++++++++++++++++++
 1 files changed, 36 insertions(+), 0 deletions(-)

もしくは pull を使う方法もある。

$ git pull . remotes/bob/master

ディレクトリーにだけ実行属性を付けたい

Unix にて。ディレクトリー foo 以下の全てのファイルを誰にでも読めるやうにしたい。

ファイルを「誰でも読める」やうにするには、chmode を次のやうに使う。

$ chmod o+r foo.txt

o (other:全員) に r (read:読み込み属性) を与える。

ディレクトリー下、全てのファイルに適用するには -R (再帰) オプションを使う。

$ chmod -R o+r foo/

ただし、ディレクトリーには「読み込み属性 (r)」の他に「実行属性 (x)」もないと、ディレクトリー以下を読めないという制限がある。つまり、上のコマンドを実行しただけでは、foo/bar 以下は読めないかもしれないといふこと。ディレクトリーに実行属性も与えたい。かうしてみやう。

$ chmod -R o+rx foo/

今度は普通のファイルにも実行属性を付与してしまう。

やりたいことは、2 つ。

  1. 全てのファイルとディレクトリーに読み込み属性を与える
  2. ディレクトリーにだけ実行属性を与える

find を使う方法

find の type オプションでディレクトリー (d) を指定する方法。

$ chmod -R o+r foo/
$ find foo/ -type d -exec chmod o+x {} \;

find と xargs を使う方法

find の -exec が苦手な人に。。。

$ chmod -R o+r foo/
$ find foo/ -type d | xargs chmod o+x

chmod の X を使う

実行属性を x (小文字) でなく X (大文字) で与える。

$ chmod -R o+rX foo/

X は、ディレクトリーに対しては x と同じ。ファイルに対しては、実行属性を持つものにだけ実行属性を付与する。

$ ls foo.txt         ; foo.txt は x を一つも持たない
-rw-r--r-- 1 ataka 0 2008-09-12 foo.txt
$ chmod o+X foo.txt
$ ls foo.txt         ; o+X しても何も変わらない
-rw-r--r-- 1 ataka 0 2008-09-12 foo.txt
$ chmod 654 foo.txt
$ ls foo.txt         ; group に x を与える
-rw-r-xr-- 1 ataka 0 2008-09-12 foo.txt
$ chmod o+X foo.txt
$ ls foo.txt         ; どこかに x があると、o+X で x が付く
-rw-r-xr-x 1 ataka 0 2008-09-12 foo.txt

X は意図しないファイルにも実行属性を与えることがあるので、ケース・バイ・ケースでお使いあれ。

ref

2008-09-10

Greasemetal リリース -- Google Chrome 版 Greasemonkey

Google Ghrome 版の Greasemonkey がリリースされた。作者はサイボウズ・ラボの奥一穂氏。

ご存じの通り、Google Chrome では拡張機能 (アドオン機能) がまだない。なので Greasemetal は exe ファイルとして公開されている。

使い方

Greasemetal アプリを起動すると、Greasemetal が自動的に Google Chrome を開く。後は普段通り Chrome を使うだけ。

ユーザーとしては、今まで Google Chrome のデスクトップ・アイコンをダブル・クリックしてブラウザーを起ち上げていたのが、Greasemetal のデスクトップ・アイコンに変わるだけ。

Greasemetal のインストール

上記ページの「Using Greasemetal」セクションから、GreasemetalInstaller.exe をダウンロード。

ダブル・クリックするとインストール画面が起動するので、次へ次へと進んでく。

以上。

Userscripts のインストール

Userscripts には Greasemonkey のスクリプトがそのまま使える。使いたい Userscript をダウンロードして、「マイ ドキュメント」下の「userjs」というフォルダーに入れてやる。これでお終い。

Userscripts を入れたら、ブラウザーの再起動なしでスクリプトが使用可能になる!

Userscripts は Userscripts.org で沢山公開されている。

バージョン 0.1 の制限

  • Userscript を管理する UI がない (Userscript を一時的に無効にするには、その Userscript を userjs の外に出す。「ユーザースクリプトを実行するページ」は直接 Userscript をいじって変更する)
  • GM_* 関数はサポートしていない (GM_* 関数を使っている Userscript は須く動かない)

Technical Info

技術的な話は、奥さんの英語ブログに書いてある。

大ざっぱに言うとかうなるらしい。Greasemetal の実体はウェブのプロキシ・サーバー Automation Proxy。Google Chrome は、このプロキシ経由でウェブ・ページを GET する。プロキシは Userscript の「適用サイト」にマッチしたら、その Userscript をダウンロードするようページに <script> 要素を追加して Chrome に渡す。Chrome はページに埋め込まれた script 要素から Userscript を実行する。ほら! Chrome 版 Greasemonkey が出来てしまった。

※間違ってたら、ご指摘下さい

Repository

Subversion リポジトリーも公開中。

svn checkout http://kazuho.31tools.com/svn/chromemonkey/trunk/ chromemonkey

あとがき

これは熱いアプリが出て来た。脱帽! これからの開発にも期待大。

SimplifyMedia を Ubuntu 8.04 にインストールする

PC を音楽サーバーにするサービス兼アプリ Simplify Media。とても楽しい。Windows 版の他、Mac 版・Linux 版のアプリが出ていることも嬉しい。

ただし、このアプリ。Win/Mac 版はインストールが容易なのだけど、Linux 版だけ作業が必要。といふわけで、インストール方法をメモしておく。ちなみにぼくの環境は Ubuntu 8.04。

Simplify Media の準備

インストール方法は、パッケージ内の README ファイルに書いてある。ただし英語。

まずは Linux 用ダウンロード・サイトから simplifymedia.tar.gz をダウンロード。ダウンロードが終わったら、適当な場所に展開。

$ tar xzvf ~/download/simplifymedia.tar.gz

Simplify Media の設定方法には二種類ある。

一つは GUI ベースの Standard 設定。これは、アプリを起動後に「オプション設定」からアカウント、パスワード、共有ディレクトリーを指定する。

もう一つは CUI ベースの Server 設定。コマンド・ラインから simplify media を起動。起動時にオプション引数で、アカウント、パスワード、共有ディレクトリーを指定する。

Standard 設定

$ cd simplifymedia
$ ./SimplifyMedia

起動したら、アカウント (スクリーン・ネーム) とパスワードを入力。どのディレクトリーの音楽を共有するのか設定するのを忘れないやうに。

Server 設定

$ cd simplifymedia
./simplifyserver.sh -n スクリーン・ネーム -l コンピューターの名前 -p パスワード -s /home/music1:/home/music2

例えば、スクリーン・ネームが ataka で、コンピューター名が linux-aka、音楽を /home/ataka/music 以下に保存している場合は、次のやうにする。

./simplifyserver.sh -n ataka -l linux-aka -p *** -s /home/ataka/music

Rhythmbox の準備

Rhythmbox が入ってなかったら、インストール。

$ sudo apt-get install rhythmbox

Rhythmbox 用のプラグインをインストール

$ cd simplifymedia/rhythmbox_Ubuntu_8_04
$ ./install_rhythmbox_daap.sh

必要に応じて codec もインストールしておきませう。

$ sudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-plugins-bad-multiverse gstreamer0.10-ffmpeg gstreamer0.10-fluendo-mp3

Apple「Let's Rock」イベントのまとめ

寝すごした。起きたら 3 時だった。それから PC の前に座って、サイト探して、Steve Jobs のスピーチ終わってた。

とりあえず速報サイトに書いてあることを、自分用にまとめ。

新製品: イヤホン

アップデート: iTunes (ver.8), iPod nano (4G), iPod Touch (2G), iPhone firmware (ver.2.1)

iTunes 8

iTunes 8 リリースとのこと。まだ、ぼくのマシンでは最新版をダウンロードできない。

  • NBC のテレビ番組を HD 画質で販売。1 つ 2.99 ドル。
  • 新機能 Genius: iTunes 版 Last.fm ラジオ。購入履歴、音楽ライブラリー情報、再生履歴等から、好みのプレイリストを作成してくれる。Amazon のおすすめみたいに、曲のおすすめもしてくれるのかな?

iPod Classic

アップデート

  • 容量 120 GB
  • 値段 249 ドル

iPod nano

新 iPod nano (第 4 世代) 発表

  • Gizmode などでリークしていたものと同じ
  • iPod 史上最薄。アルミデザイン。ディスプレイは曲面ガラス。
  • 2 軸加速度センサー。縦横を認識 (横に倒すと、画面も横に切り替わる)。
  • ボイス・レコーダー付。
  • プレイリスト自動作成「Genius」塔載。
  • シャッフル機能 (本体を振るとシャッフル)
  • バッテリーは音楽 24 時間、ビデオ 4 時間。
  • 色は 9 色 (シルバー・グレイ・パープル・ブルー・グリーン・イエロー・オレンジ・レッド・ピンク)
  • 8 GB, 149 ドル
  • 16 GB, 199 ドル (本日発売?)

イヤホン・アクセサリー

新しいアクセサリー発売。iPhone のイヤホンに似ている。

  • ケーブルの途中にリモコン。
  • マイク付。
  • ボリューム・コントロールと再生/一時停止
  • ダブル・クリックで次の曲。トリプル・クリックで前の曲。
  • 79 ドル、10 月発売

iPod Touch

新 iPod Touch (第 2 世代) 発表。

  • Gizmode でリークしたデザイン。
  • ボリューム・ボタン追加
  • スピーカー追加
  • Nike+ 塔載 (靴にセンサーを入れると、走行距離や消費カロリーを iPod に無線で伝える?)
  • プレイリスト自動作成「Genius」塔載。
  • バッテリーは音楽 36 時間、ビデオ 6 時間。
  • 8 GB, 229 ドル
  • 16 GB, 299 ドル
  • 32 GB, 399 ドル (全て本日発売)

iPhone

iPhone 2.1 アップデート! 基本、バグ修正のみ。

  • 通話が切れにくくなった
  • バッテリー駆動時間が改善された
  • バックアップが速くなった。
  • パフォーマンスも向上
  • 13 日の土曜日 (アメリカは 12 日の金曜日) からダウンロード開始。無料。

あとがき

大きなびっくりはなかった。でも、リーク記事がなかったら、もう少し楽しめたんじゃないかと思う。最近、Apple の情報はリークが多くて、びっくり感が薄い。リーク情報が多いのは、Apple 側のコントロールがしにくくなってるのもあると思うけど、取材側のパワーが前より強くなったのが主因な気がする。

2008-09-09

Ruby で子プロセス

Ruby でコマンドを呼び出したい。子プロセスを作りたい。組み込み関数 system の使い方。

system(command)

コマンド一つで済む場合は簡単。

引数を取る場合は、コロンで区切る。

system(program, arg1, arg2,...)

ARG1 以降は省略可能。ARG1 以降を省略する場合は、一番最初の例と同じになる。

以下、落ち穂拾い

  • コマンドの終了ステータスが 0 ならば、true を返す
  • そうでなければ false を返す
  • 終了ステータスは $? で参照できる

サンプル

ファイルの中身を一行ずつコマンドに渡す場合は、こんなコードになるかな。

#!/usr/bin/env ruby

require 'fileutils.rb'

# Usege:
# foo.rb sample.txt /old/dir/

filename = ARGV[0]
old_dir = ARGV[1]

File::open(filename){|file|
  file.each {|path|
    path.chomp!
    old = old_dir + path
    new_dir = File.dirname(path) + "/"

    FileUtils.mkdir_p(new_dir) unless FileTest.exist?(new_dir)
    system("cp", old, new_dir)
  }
}

かなり適当だけど、旧ディレクトリーの中にあるファイルを新ディレクトリーにコピーするコマンド。旧ディレクトリーからコピーし忘れたファイルがあった時に使えるかな。

あとがき

system 関数には、コマンドの引数をカンマで区切って渡す。それなのに、(shell で渡すやうに) スペースで区切って渡そうとして、エラーが出た。

system("program #{arg1} #{arg2}");

一時間近くハマったので、自戒の意味を込めてエントリーにする。

最初のタイトルは「Ruby でシステム・コール」でした。はてブで、これはシステム・コールではないと教えてもらいました orz

2008-09-08

Google Analytics が Google Chrome を認識 -- 自サイトの統計を取ってみた

Google Analytics がブラウザー・タイプとして Google Chrome を認識するやうになった。

Google Chrome のリリースが 2008-09-03 で、上記エントリーが 2008-09-04。ほとんど間を合けずサポートした感じ。

さて、このニュースを受けて各ブログがブラウザー・シェアを報告している。お目当ては Google Chrome がどれ程のシェアを取ったか? といふところ。

各サイトのブラウザー・シェア

まずは TechCrunch。

Clickyが引き続き追跡しているChromeの利用状況は、対象の4万5000サイトで2~3%の範囲にある。TechCrunch読者のChrome利用率はずっと高い。火曜日以来6.23%で、これはTechCrunch読者のブラウザーの中で、Firefox、IE、Safariに続く第4位だ。

TechCrunch Japanese アーカイブ » Google AnalyticsがChromeを追跡開始。当サイトでのシェアは6.23% より引用

続いて Polar Bear Blog さん。

Chrome は6.45%で、Safari に次いで第4位。TechCrunch と同じような結果になっています。

中略

最もシェアを落としたのは IE。少なくとも Polar Bear Blog では、Chrome は IE からシェアを奪っている、という結果になっています。

POLAR BEAR BLOG: Chrome、シェアを IE から奪う(このブログに限り) より引用

もう一つ。Going My Way さん。

日本時間で、 9/3 から利用できましたので、それ以降現在までの状況です。
Internet Explorer → 41.08%
Firefox → 37.93%
Google Chrome → 9.25%
Safari → 8.23%
Opera → 2.5%

Going My Way: Google Chrome が出てからのブラウザーの利用状況内訳 より引用

clmemo@aka のブラウザー・シェア

まずは2006-12 の調査結果。1 位 Firefox (49.48%)、2 位 IE (38.47%)、3 位 Opera (4.97%)、4 位 Safari (3.77%)。

続いて、Google Chrome リリース前の金曜日。2008-08-29 のデータ。

Browser Share on 2008-08-29

1 位 IE (43.16%)、2 位 Firefox (42.28%)、3 位 Safari (10.63%)、4 位 Opera (1.77%)。シェアの一位と二位に差はほとんどない。2006-12 のデータと比べると、何気に IE のシェアが増えて、Firefox のシェアが減った。このブログから技術的な話題が減ったことを暗に指しているのかしらん ^^;。Safari のシェアは倍以上に躍進。MacBook を買って Apple ネタが増えたことと無関係ではないでせう。Opera の落ち込みはひどい。

最後に、Google Chrome リリース後のデータ。データ収録日は 2008-09-05。上のデータの一週間後。曜日によるデータのばらつきは最小限になってるはず。

Browser Share on 2008-09-05

1 位 Firefox (42.44%)、2 位 IE (39.15%)、3 位 Chrome (8.91%)、4 位 Safari (5.33%)、5 位 Opera (2.71%)。Chrome は 9% 弱のシェアを占めて 3 位。シェアを奪われたのは IE と Safari だった。Firefox のシェアは変わらず。

あとがき

IE のシェアを Chrome が奪ったのは、他のブログさんのレポートと同じ。てっきり Firefox のシェアが落ちるものと思っていたので、意外。

忘れてなければ、一か月後と Linux/Mac 版 Chrome が出た後にもブラウザー・シェアを調べてみたい。

2008-09-06

Amazon が iPhone に対応した

Amazon が、iPhone (含む iPod Touch) 用に最適化された。iPhone の Safari アプリでアクセスすると、自動的に iPhone 用のページが開かれる。

スクリーン・ショット

サイトの横幅が Safari にフィット。検索ボックスも大きくなって、クリックしやすくなった。

Amazon for iPhone 1

検索結果も iPhone に最適化されていて、見やすい。

Amazon for iPhone 2

「カートに入れる」ボタンも大きくなって、押しやすくなった。必要最小限の情報が表示されるのも嬉しい。

Amazon for iPhone 3

上の続き。カスタマー・レビューのタイトルをクリックすると、レビューが読める。スクリーン・ショットは、レビューを開いたところ。

Amazon for iPhone 4

iPhone - i.softbank.jp の設定方法

iPhone のデフォールト・メール i.softbank.jp は設定が面倒。設定方法の解説は、ソフトバンクのマニュアル より「iPhone - iPod touch ラボ」さんの記事が詳しい。

自分用の覚え書きを兼ねて、簡単にまとめとく。

設定方法

仮メール・アドレスとパスワードの保存
  1. SMS アプリを起動
  2. 「157」のメッセージを開く
  3. アカウント情報の「ログイン ID」と「パスワード」をメモ帳に書き写す
  4. SMS アプリを閉じる
My SoftBank にログイン
  1. Safari アプリを起動
  2. ブックマークを開く (ブラウザー下の「本」のアイコンをクリック)
  3. 「My SoftBank」をクリック (My SoftBank のページが開く)
  4. 黄色の @ マークをクリック (ログイン画面が開く)
  5. メモしておいた「ログイン ID」と「パスワード」を入力して、ログイン
メール・アドレスとパスワードを変更
  1. 「メールアドレス変更」をクリック
  2. 「新しいメールアドレス」に好きなメアドを入力する
  3. 同様に「パスワード変更」を行なう
  4. Safari アプリを閉じる
メール・アプリにアカウント登録
  1. 設定アプリを起動
  2. 「メール/連絡先/カレンダー > アカウントを追加」を選択
  3. 「その他」をクリック
  4. 「名前」はご自由に。
  5. アドレスに新しく設定したメール・アドレス (@i.softbank.jp を含めて)」を入力
  6. パスワードに新しく設定したパスワードを入力
  7. メールサーバーとの交信が始まる。「SSL で接続できません」とメッセージが (2 回?) 表示される。どちらも「はい」を押す
  8. 以上。

あとがき

本当に自分用のメモになっちゃった。

ちなみに、ぼくは設定しただけで全く i.softbank.jp を使ってない。携帯も Gmail アカウントで一本化した。PC でメールを確認する時、どちらのアカウントにあるメールか分からなくなるのは困るから。それと、Gmail で十分に携帯メールとしてぼくの役には立つから。

iPhone でスクリーン・ショットを撮る方法

iPhone でスクリーン・ショットを撮る方法。ついつい忘れてしまうのでメモ。

  1. 電源ボタンを押しながら
  2. ホーム・ボタンを押す

画面が一瞬ホワイト・アウトする。これで、画面のスクリーン・ショットが撮れている。撮ったスクリーン・ショットは「写真」アプリの「カメラロール」の中に保存されてる。

経路検索とスクリーン・ショット

ぼくは DoCoMo SH902i 時代に、経路検索の結果を「画面メモ」に撮っていた。スクリーン・ショットを使えば、同じことが可能になる (一画面分の情報しか保存できないけれど)。

例えば iPhone のアプリ「駅探」。アプリを閉じると、検索結果が消えてしまう。もう一度同じ結果を見直したい時は、履歴機能を使う。「駅探」の履歴機能は、検索条件を覚えていて再検索をかけるというもの。なので、地下鉄に乗ってたりして圏外になると、「もう一度同じ結果」を見ることができない。

そこで、経路検索したらとりあえず結果をスクリーン・ショットに撮っておく (iPhone の容量は大きいので、バンバン撮ってもさほど困らない)。検索結果を見直したくなったら、撮った写真を見る。これなら、iPhone が圏外になっても大丈夫。