git pullに関して思うこと

git pullに関していろいろと調べてみると、あれこれと書かれてるんですが、
正直まどろっこしいというかややこしいというか…。

git-pullは幸い(?)なことにシェルスクリプトなので、
echoを入れてコマンド見れば良いんじゃないかなと思うんです。

ということで、主によく問題とされている以下の2点について調べてみました。

  • git pull origin <branch>:<branch> をやってはいけない理由
  • git pullするとカレントブランチが更新される理由
    • さらに言うと、単純なgit pullだと追跡ブランチも更新される理由(「追跡ブランチ」は後述)

(本記事はgit version 1.9.5 (Apple Git-50.3)をベースとして記述しています)

以下のようなリポジトリ構成の場合、

1$ git branch -a
2  devel
3* master
4  remotes/origin/devel
5  remotes/origin/master

git pullは以下の結果となる。

1$ git pull origin devel:devel
2git fetch     --update-head-ok "origin devel:devel" || exit 1
3git-merge              "$merge_name" HEAD 312fc9f10fc4cba111d72f322d6a71147d34d976
1$ git pull origin
2git fetch     --update-head-ok "origin" || exit 1
3git-merge              "$merge_name" HEAD b909223d2d6094374e86bf32b036ff341ce149d6

git-merge

ここで注目するべきは2箇所。まず1つはgit-mergeの引数。
HEADにあるリビジョンをマージするから、 カレントのブランチにマージされるんです
git-pullのドキュメントにも

More precisely, git pull runs git fetch with the given parameters and calls git merge to merge the retrieved branch heads into the current branch.

となっている。
このことから、リモートブランチをpullすることを期待して、"git pull origin <branch>:<branch>"すると
カレントブランチにマージされてしまいます。
また、上記の事から"git pull"だけだとカレントブランチに対しての更新は、意図通りのものとなります。

git fetch

もう1つはgit fetchの挙動。
git fetchはoriginのみを指定した場合は、originの追跡ブランチをすべて更新し、さらに追跡ブランチに対応するローカルブランチを更新します。
詳細な説明は以下のとおり。

When git fetch is run without specifying what branches and/or tags to fetch on the command line,
e.g. git fetch origin or git fetch, remote.<repository>.fetch values are used as the refspecs---they specify which
refs to fetch and which local refs to update.
The example above will fetch all branches that exist in the origin (i.e. any ref that matches the left-hand side of the value,
refs/heads/) and update the corresponding remote-tracking branches in the refs/remotes/origin/ hierarchy.

git fetchだけを試しにやってみると

1$ git fetch origin
2remote: Counting objects: 3, done.
3remote: Compressing objects: 100% (2/2), done.
4remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
5Unpacking objects: 100% (3/3), done.
6From github.com:yasuharu/test
7   312fc9f..c1f1af3  devel     -> origin/devel

の通り、fetchだけでdevelは更新されます。
このことから、git pullするとカレントブランチ以外の追跡ブランチも更新されることがわかります。

追跡ブランチについて

以下のページが分かりやすかったです。

git pull しても更新されない

git pullしても以下のエラーで更新されない場合、追跡ブランチに登録されていないです。

 1$ git pull
 2There is no tracking information for the current branch.
 3Please specify which branch you want to merge with.
 4See git-pull(1) for details
 5
 6    git pull <remote> <branch>
 7
 8If you wish to set tracking information for this branch you can do so with:
 9
10    git branch --set-upstream-to=origin/<branch> devel

もし、リモートブランチが"origin"の場合、説明の通りにすればOK。

git branch --set-upstream-to=origin/devel devel

git pull時のmergeするリビジョン

リビジョンはgit fetchした後の、.git/FETCH_HEADから取得します。
「not-for-merge以外のもの」(=カレントブランチ)がmergeするリビジョンになります。

1$ git checkout devel
2Switched to branch 'devel'
3$ git fetch origin
4$ cat .git/FETCH_HEAD
5c1f1af3d7f4a02c252effb5ad8cdd390b541fff1                branch 'devel' of github.com:yasuharu/test
6b909223d2d6094374e86bf32b036ff341ce149d6        not-for-merge   branch 'master' of github.com:yasuharu/test
1$ git checkout master
2Switched to branch 'master'
3$ git fetch origin
4$ cat .git/FETCH_HEAD
5b909223d2d6094374e86bf32b036ff341ce149d6                branch 'master' of github.com:yasuharu/test
6c1f1af3d7f4a02c252effb5ad8cdd390b541fff1        not-for-merge   branch 'devel' of github.com:yasuharu/test
Posted at : 2015-11-03 09:46:16 / Category : none

NHK WORLD RADIO JAPANのScript

NHK WORLD RADIO JAPANのPodcastのscriptが無いと
以下の日記で書きましたが、実はほぼ同様のものがあることがわかりました…。

実はこの日記を書いたタイミングで、NHKの要望に「script公開してほしいなぁ」と
メールしまして、(日曜日にもかかわらず)1時間ほどで返事がかえってきました。
結論としては、NHK WORLD RADIO JAPANは以下のサイトで公開されている
原稿がもとになっているとのこと。

最新のNHK WORLD RADIO JAPANの配信と聴き比べてみたら、
確かに原稿の部分は全く同じものを流していました。
ただ、NHKからの回答によると以下のケースはあるらしい。

  • 配信時間の関係で一部カットされているもの
  • 掲載されている時間に制限がある(概ね最初のアップロードから48時間)

最後の制限は少し気になるけど、まぁ毎日聞くんであれば問題ないかな。

Posted at : 2015-10-18 17:21:30 / Category : none

transcript付きの英語学習向けpodcast

NHK WORLD RADIOを毎朝通勤の時間に聞いていて、内容は良い感じなんですが、
transcriptがないので聞き取れない単語があった場合、どうにもなりません。。。
ということで、transcript付きのものをいくつか探してみました。

おすすめはこのあたり。

以下は良いんだけど、Podcastで聞けないという難がある。
毎回ブラウザ開いて見れば良いんだろうけど…。

こちらはPodcastがある。興味とあわなさそうだったので保留

ちなみに、Androidの場合、おすすめのPodcastのアプリはPodcast Addictです。
気に入っているのは以下の点。

  • 再生速度が変更できる
  • N秒戻しができる(Nは自由に設定可能)
  • ロック画面で操作ができる
  • 自動ダウンロードに対応している
Posted at : 2015-10-18 17:04:59 / Category : none

ビジネスパーソンのための契約の教科書

仕事であれこれと契約書を読むことがあり、
契約書をどうするべきか?気になったので読んでみました。

ビジネスパーソンのための契約の教科書 (文春新書 834)
http://www.amazon.co.jp/gp/product/4166608347

重要なところをかいつまんで説明がなされていて良い本でした。
また、契約書がなぜ重要かという話も良かったけど、
それ以上に海外とのやり取りと日本の文化を比べながら
説明されているのが良かったね。

個人の契約でも、会社での仕事でも、一度読んでみると
契約書の大切さがわかって良いと思います。

Posted at : 2015-10-12 09:30:16 / Category : book

Dropboxへ直接アップロードするリンクを作る

大きなファイルをWeb上で公開する場合に、Dropboxへ直接アップロードするリンクが便利そう。

https://www.dropbox.com/developers/saver

上記の方法でリンクボタンを作った場合、
ファイルをダウンロードする際にローカルの保存先の選択をするように、
Dropboxの保存先を選択することができる。
保存しておくことが目的のファイルだと、結構便利。

Posted at : 2015-10-12 07:00:44 / Category : none

基板発注、その後

以前にピッチ変換基板を作ったと書きましたが、今週納品されるとのこと。
特に修正の指示とかなしできたけど、大丈夫なのかな…。
とりあえず見てからのお楽しみ。

ESP-WROOM-02用のピッチ変換基板を作る
http://yasuharu.net/diary/2820

Posted at : 2015-10-12 06:52:35 / Category : none

普段使いのMacBookAir(Mid 2011)をEl Capitanへ

普段使いのMacBookAir(Mid 2011)をEl Capitanへ変えてみた。
諸事情により、10.6からのアップデートになったものの、アップデート自体はとくに問題なく完了。
今日一日使ってみたところ、いくつかの問題に気づいた(10.6からアップデートしたことが問題かもしれないので、あしからず)。

  • VPNの設定がリセットされた
  • (アップデートした後に)現状でESETが対応していないことに気づいた

他にあれば加筆をしていきます。

Posted at : 2015-10-05 23:20:25 / Category : none

GENODE OSとGalliumドライバ

GENODE OS上でGalliumのドライバを動かせたという話
(記事を読む限りだと、4,5年前にはすでに実現していて
今でもメンテナンスされてますよ、って話なのかな)

Doing Graphics Hardware Acceleration With Microkernels
http://www.phoronix.com/scan.php?page=news_item&px=GPU-Microkernel-Support

まず、GENODE OSってのは知らなかった。
セキュアな環境を実現するためのMicrokernelなOS。
Microkernelにすることでカーネル自体のコード行数を減らし、
コードの検証をやりやすくする、ってことみたい。

まぁ、Micro kernelでもMonolithic kernelでも、
責任の所在がどっちになるかという問題のような気がしてて、
個人的にはどちらでも良いけど…。
(もちろん、見通しの問題もあるだろうけど、あまり利点があるとは思えない)

GalliumはLinuxのグラフィックスドライバのフレームワークの名称。
Mesa(Linux向けのOpenGLドライバ実装)の中に
このGalliumの仕組みを使ったグラフィックスドライバが実装されている。

この記事の面白いところは、Galliumの実行はLinuxでないと無理だろうなぁと
思い込んでいたけど、やろうと思えば他のOSでもできるという点。
ざっと見た感じだと、DRM(Direct Rendering Manager : Linuxカーネルドライバのうち
グラフィックスのリソースなどを管理するドライバ)に相当する部分を
Graphics Execution Managerという仕組みでユーザランドで実現している。
この辺りの話は2010年の以下の資料にのっていた。

http://genode.org/documentation/release-notes/10.08#Gallium3D_and_Intel_s_Graphics_Execution_Manager

極端な話、iTRONとか組み込み系のOSでもできなくはないんだろうな。

Posted at : 2015-09-25 11:48:22 / Category : none

ESP-WROOM-02用のピッチ変換基板を作る (3)

データをgithub上に上げてみました。
使ってみたい方はご自由にどうぞ〜

https://github.com/yasuharu/esp-wroom-02_conv_board

Posted at : 2015-09-24 11:37:11 / Category : none

ESP-WROOM-02用のピッチ変換基板を作る (2)

回路図、ボード図と実装完了したら、次にデザインルールのチェックをする。
EAGLE用のDRUファイルが以下にあるので、ダウンロードして使用する。

https://www.switch-science.com/pcborder/techguide/

最初はずらーっとエラーが出るので、一つ一つ対応していく。
今回作ったものだと、ほとんどがシルクとパッドが接触している、というエラーが多かった。
ライブラリの段階でダメなものが多かったので、
ライブラリをコピーして適当にシルクを修正した。

エラーが出なくなったら、最後に提出用データの作成。
上記のURLからCAMファイルをダウンロードしてきて、
CAM Processorからファイルを読みこませる。
(Mac版の場合、メニューバーからFile -> Open -> Job...を選択
上のメニューに出てると思わなかったので、一瞬わからなかった)
Proceed Jobを実行すると必要なファイルが出力される。

出力されたファイル

出力されたファイルで必要な物だけ取り出して、zipでまとめる。
これでデータの作成は完了。簡単にできるね…。

後はデータをアップロードして、先方からの確認がないか待つのみ。
ミスがないといいなぁ…。

Posted at : 2015-09-24 10:54:39 / Category : none

ESP-WROOM-02用のピッチ変換基板を作る (1)

ESP-WROOM-02というWifi付きのSoCが気になって、早速秋月で買ってきた。

Wi-Fiモジュール ESP-WROOM-02
http://akizukidenshi.com/catalog/g/gM-09607/

特徴は以下のとおり。

  • 安い(10個購入時で450円)
  • 技適に通っている
  • Wifi付きのSoCなので単体でいろいろとできる

ピンピッチが1.5mmなのでこれを変換する基板を用意する必要がある。
専用のものも探せば売っているので、それを使うのも一つの手。

と思ってたんだけど、そういえばこんなのあったな、と。

基板製造サービス「スイッチサイエンス PCB」ベータテスト開始 - スイッチサイエンス
https://www.switch-science.com/pressrelease/pcb_betatest/

9月中なら10枚たったの1713円で作れるという…。すごい。
今後使う可能性もあるので、ちょうど良いテスト基板として作ることにしてみた。

とりあえず、一通り作ったのがこんな感じ。

基板

Posted at : 2015-09-24 10:09:32 / Category : none

VPS再検討…が、現状のまま

今現在、VPSの契約が2つある

  • さくらのVPS / メモリ2GByte, HDDプラン
  • Conoha / メモリ1GByteプラン

どちらもそこそこ負荷はかかっているので、2つある事自体は問題なし。
ただ、気になってるのは、後者のほうの以下の点

  • メモリ1GByteだとたまに上限に引っかかる
  • ネットワークが遅い(というより、さくらが速いので相対的に感じる)

AWSにしようか、とか、いっそHerokuに一部移すかとかも
考えてみたけど、どちらもコスト的にいまいち。
動かしているサービスで利益が出ているのであれば、
投資と考えられるけど、現状は特に無いので最小限のコストで。
そうなると、現状のままでいっか…となりました。

Posted at : 2015-09-21 08:44:52 / Category : none

HTMLのnbspにはまった話

HTMLの&nbspが半角スペースだと思ってたんですが、実は違ったんだね…。
半角スペースはUnicodeでU+0020、対して&nbspはU+00A0となり、
別々の文字コードとなる。当然見た目は同じなんだけどね。。。

どういう状況でこれに困るかというと、スクレイピングしたデータをパースしたい場合。
Rubyで例えば、以下のようにsplitしたとき区切り文字がnbspだとうまくいかない。

1irb(main):001:0> s ="2503 Hoge Fuga"
2=> "2503 Hoge Fuga"
3irb(main):002:0> s.split(" ")
4=> ["2503 Hoge Fuga"]

じゃあどうするか?

1irb(main):003:0> s.split(/\u{00A0}/)
2=> ["2503", "Hoge", "Fuga"]

Unicodeを直接指定すればできる、と。
空白のはずなのにsplitできなくて小一時間悩んだ。

Posted at : 2015-09-05 15:41:40 / Category : none

DVDの画質にがっかりしたので、BDにしてみた

とある動画を作ってまして、Windows付属のツールでDVD焼いたんですがDVDの画質にがっかり…。
顔がぐちゃっとしちゃうのには参った。。。

まぁこの場合、大きな理由としては以下の3点。

・何度もトランスコードしてしまうこと
 iMovieでH.264で出力した後に、MPEG2に変換している。
 (さらに言うと、Windows付属ツールが一度WMVに変換している気がする…)
・そもそもWindows付属のツールのビットレートが低い
・DVDであること
 解像度720x480のNTSC映像

ということで、まず試したのはDVD Flickを使ってトランスコード&イメージを作成。
結果としてはまずまず。DVD Flickの設定でビットレートをおもいっきり上げれば悪くはない。

次にBlurayにしようと思い、multiAVCHDを使いBlurayの形式にトランスコード&データ作成。
ffmpegのpresetを1pass normalぐらいにしてやって、だいぶ良い感じになった。

iMovieが出力するする圧縮フォーマットがH.264、BDならトランスコード無しで
行けるだろうと思ったけど、いろいろと見てると不安な要素が多すぎて、
とりあえず推奨設定で置いておくことにした。まぁ綺麗だし、ね。

どうでもいいけど、見れば見るほど、BDプレーヤーの開発って面倒そうだだな、と思いました。
対応解像度がいくつかあったり、いろんなディスクフォーマットに対応したり。。。

Posted at : 2015-08-30 10:49:50 / Category : none

CATV回線でHulu、Chrome Castで見られた

先月からアパートにCATV回線がついてくるようになって、
12Mbpsの速度であれば家賃に含んだ形で使えるようになった。

このCATVの回線は実行速度が4Mbps台で、TTLが結構大きい。
一方でHuluの推奨は3〜5Mbps以上。すごい曖昧な表現だけど、
動画データのレートが1Mbpsぐらいでそれに幅をもたせた形かな…。

実際に試してみると、以下のようになった。

・Sonyのテレビ → ブチブチと途切れる
・Chrome Cast → 特に問題なく再生できる

以下推測にはなるけど、Sonyのテレビは元々バッファリングを
あまりしていないんじゃないかな。
対して、Chrome CastはSpec見る限り、512MByteのDDR3 SDRAMを積んでる。
これだけあれば、十分バッファリングできるだろう。

ということで、Hulu見ようとしてもテレビだとうまく再生できない場合、
Chrome Cast使うのも一つの選択肢としてありじゃないかなと思います。

Posted at : 2015-08-20 08:19:17 / Category : none

時差ボケ

19時頃になるとすごく眠くなる…。
ロサンゼルスの時間だと午前3時になるのだけど、
これは時差ボケなんだろうか(笑)

アプリケーションに組み込むためのJavaScriptのエンジンについて調べていた。
3年前ぐらいにV8を使ったことがあるけど、組み込み側の関数登録などの
手順がややこしかった印象。
ライセンスの問題も含めて考えると、以下のライブラリが良さそう。

まずは触ってみよう。

Posted at : 2015-08-16 21:34:09 / Category : none

海外の方は日本に訪れづらいのか?

個人的に気になるのは、各国の物価差を考えた時に、日本が来やすいのかどうか?
成田に到着して、都内に来るだけでも結構費用かかるよね…とか、今まで思ってた。

最近になって知ったのが、JAPAN RAIL PASSという切符。
実は海外からの方向けのチケットがあったんですね…。

JAPAN RAIL PASS | ジャパンレールパス
http://www.japanrailpass.net/index.html

7日間であれば約3万円で新幹線(ただし、のぞみなど一部例外あり)や特急列車に乗れる。
成田からであれば成田エクスプレスが定額で乗れるようになると。
実際、成田エクスプレスに新宿から乗ると、結構海外の人が多かった。
(対照的にスカイライナーはあまりいなかったように思えるが…)

若干高い気もするけど、まぁ正規の価格で買うのよりかはだいぶ安い。

Posted at : 2015-08-15 14:44:25 / Category : none

Los Angelsに来てます

SIGGRAPH 2015に参加するため、Los Angelsに来ています。
2日目にして、茶色ばかりの食事にそろそろ飽きてきて、
和食を食べたいなぁと思うようになってきた…。
どこ探しても、バーガー、サンドイッチ、バーガー…ステーキ、てな感じなんだよね。
Los Angels Convention Center周辺がたぶん居住地じゃないから、
というのもあるだろうけど、食べ物選択肢が少ない…。

Posted at : 2015-08-10 17:35:11 / Category : none

相模湖花火大会に行ってきました

夏といえばやっぱり花火、ということで行ってきました。
こちらの火大会は、連発して打ち上げるというより、
一つ一つの花火が大きめで、ある程度間隔を開けて打ち上げるという感じ。
一発あたりの迫力が大きいので、見応えはあります。
ぼーっと眺めながら、散ってくのをみるとやっぱり良いなと思いました。

花火

Posted at : 2015-08-02 13:15:50 / Category : none

AVRのクロック供給をまとめてみた

AVRを使ったボードの設計をしていて、クロックの供給方法がいくつかあり、どういう違いがあるのかまとめてみた。
ATMEL 8-BIT MICROCONTROLLER WITH 4/8/16/32KBYTES IN-SYSTEM PROGRAMMABLE FLASH DATASHEETを元にしています。

使用するクロックのデバイスごとに、以下のように設定を行う。
デバイスに対応する設定値は、データシートのTable 9-1を参照。

  • Low Power Crystal Oscillator
    • 外部の水晶発振子を接続。消費電力が少ない代わりに、外部のデバイスにクロックを供給したり、ノイズが多い環境では使えない
  • Full Swing Crystal Oscillator
    • 外部の水晶発振子を接続。消費電力が多分、上記の問題が解消される
  • Low Frequency Crystal Oscillator
    • 時計のクロック(32.768kHz)を使用する場合
  • Internal 128kHz RC Oscillator
    • 内部のRC発振回路を使用する場合。電圧、温度などにより変化する(この場合、キャリブレーションできないため、3V、25度で128KHzとなる)
  • Calibrated Internal RC Oscillator
    • 内部のRC発振回路を使用する場合。電圧、温度などにより変化する。キャリブレーションすることで、適切なクロックを得ることができる
  • External Clock
    • 外部の水晶発振器を接続する。この場合は、外部端子はXTAL1のみを使用する

ちなみに、水晶発振器、水晶発振子は違いがややこしい。
前者は発振回路を含んだパッケージになっているもの。製品によっては温度補償などもあるみたい。
後者はコンデンサなどを含む回路を接続する必要がある(マイコンの中に入っているものもある)。
AVRの場合は、Figure 9-2.にあるようにコンデンサを付ける必要がある。

上の表に戻って、上から3種類に関しては、さらにCKSEL[9]、SUT[0]、SUT[1]のそれぞれのビットで動作が変わる。
設定値で変わるのは、以下の2点。要はクロックが供給開始するタイミングからのdelay時間を規定している。

  • Start-up times from Power-down and Power-save
    • Power-down, Power-saveからの起動時間。(ここがあまり自身がなくて、おそらく、この時間までにクロックを安定させて欲しい、ってことだと思う)
  • Additional Delay from Reset
    • 外部のリセットからシステム内部のリセット(Internal Reset)の遅延時間。Figure 11-2.のT_TOUTに相当する

まとめは以上のとおり。

結局、どれが良いのか?という話になるけど、コストとかも考えると Low Power Crystal Oscillatorが 良いんだろうな。

Posted at : 2015-07-18 18:27:12 / Category : avr