Git(Hub) の使い方

レポジトリの作成・管理

  • まだどこにも存在しない新規 git レポジトリをローカルに作成
    • $ cd ディレクトリ名; git init
  • GitHub 等に存在する(自分の・他人の)リモートレポジトリをローカルにコピー
    • $ git clone URL
    • submodule も一緒に取得したい場合は--recursiveをつける
  • 現在のリモートリポジトリ一覧表示
    • $ git remote -v
  • リモートレポジトリを追加
    • $ git remote add エイリアス名 URL
    • URLhttps プロトコル (例: https://github.com/ユーザ名/レポジトリ名) か ssh プロトコル (例: git@github.com:ユーザ名/レポジトリ名) のどちらか
      • ssh プロトコルだと git push した際にパスワード認証が不要
      • ~/.gitconfig に以下のように記述しておくと、URL のプロトコルを自動で https から ssh に変えてくれる
[url "git@github.com:"]
        insteadof = https://github.com/
  • リモートレポジトリの URL を変更
    • $ git remote set-url エイリアス名 URL

レポジトリの状態の管理

  • 変更状況を確認
    • $ git status
  • ログツリーを表示
    • $ git log --oneline --graph --decorate
    • .bash_profile に以下のように記述しておくと $ git log だけで済む
git() {
    if [[ $@ == "log" ]]; then
        git log --oneline --graph --decorate
    else
        command git "$@"
    fi
}
  • ブランチの一覧表示
    • $ git branch

変更の反映

  • ローカル上の変更をリモートレポジトリに反映
    • $ git add .; git commit -m "コミットメッセージ"; git push
    • fatal: The current branch master has no upstream branch. と表示されたら $ git push origin master
  • リモートレポジトリを指定してプッシュ
    • $ git push -u エイリアス名
  • リモートレポジトリ上の変更をローカルに反映
    • $ git pull (origin master)

ブランチ

  • 新規ブランチの作成
    • $ git branch ブランチ名
  • ブランチの移動
    • $ git checkout ブランチ名

サブモジュール

  • サブモジュールの追加
    • $ git submodule add URL
  • 最新の commit に更新
    • $ cd サブモジュールディレクトリ名; git pull origin master
    • $ cd レポジトリルート; git add/commit/push (これをするまでstatusは更新されない)

SSH接続

  • ~/.ssh/configGitHub に登録した公開鍵に対応する秘密鍵を指定しておく
Host github.com
     User ユーザ名
     HostName ssh.github.com
     IdentityFile ~/.ssh/秘密鍵ファイル名
     ServerAliveInterval 60
  • Gtk-WARNING **: cannot open display と表示されたら$ unset SSH_ASKPASS

.gitignoreファイル

  • 複数のディレクトリに置くことができる
  • 深い階層の.gitignoreに書かれた指定の方が優先順位が高い
  • 以下の上の行から順に解釈される
    • /を含まない、もしくは末尾以外にのみ/を含む行(e.g. file, /file, path/to/file, /path/to/file)
    • 末尾が/の行(e.g. /path/to/directory/, path/to/directory/)
    • !で始まる行(e.g. !/path/to/file)
      • !以降のパターン文字列が示すファイルまたはディレクトリを無視しない
      • 前の無視指定を上書きする
      • 以降の無視指定に上書きされうる
    • 空行もしくは#で始まる行
      • 解釈されない
  • ワイルドカード(*, ?, [0-9]など)も使える

Wordに貼り付けたPDFがベクトル形式ではなくなってしまう現象

タイトルの通り。外部のPDFからWordに貼り付けたPDFは、大抵はそのままベクトル形式で配置され、拡大・縮小しても綺麗なまま保たれる。

しかし、たまにこれがうまく行かず、貼り付けたその時点は綺麗に写っているものの、一度ファイルを閉じて再度開くと(!)荒くぼやけたサムネイルになってしまうことがあった。

色々試してみて分かったことは以下の通り。

  • ある特定のPDFファイルをIllustrtorを使って編集すると起こる(AcrobatKeynoteで編集すると大丈夫だった)
  • それぞれを別々に貼り付けても大丈夫だったものが、複数を(Illustrator, PowerPoint, Keynote等で)1枚のPDFにまとめてから貼り付けるとダメ
  • PDFを経由しないでPowerPointオブジェクトを貼り付けるとうまくいく

結局解決できずPowerPointからオブジェクトを直接コピーして貼り付けることにしたのだが、謎すぎる。Wordが勝手にサイズを圧縮していると思ってそれ関連と思われる色々な機能をオフにしてもダメ。

普段はWord (というかOffice全体)なんて使わないのだが、今回は様々な兼ね合いで使わざるを得ず仕方なくdocxを用意した。途中、何度嫌になったことか。。この手のソフトウエアは、便利さを謳いながら、その実制限された機能を詰め込んでいるだけで、自由度が低く結局やりたいことなんかできないというのが個人的な印象だ。タダ飯は無いのである。

2017/5/22追記

おそらく原因が判明したので追記。Keynoteからオブジェクトをコピーする時に、どうやらベクトル形式のオブジェクトであってもラスター形式でクリップボードに保持されるらしい。。

以前はベクトル形式のままできたと思うのだが(ググるクリップボード経由でpdf保存みたいな記事がいくつか出てくる)。。。

PowerPointは大丈夫。謎仕様だ。Keynoteの株は自分の中で大暴落。(2017/7/5追記: どうやらこのKeynote由来の現象は全体の一部らしく、Keynoteを使わなくても起こるらしい。昔のMavericksとかも引っ張り出して近いうちに原因をちゃんと調査したい。)

画像の一部分の比較

画像処理というには簡単すぎる内容かもしれないが、画像の一部分を切り出してすでにあるものと比較、という処理。最近やっていないのにブックマークが邪魔だったので、ここにまとめようと思い立った。

簡潔にまとめると以下の通り。

画像切り出し

  • $ convert -crop 横ピクセル数x縦ピクセル数+横始点ピクセル+縦始点ピクセル 元画像 出力画像名
    • 例: $ convert -crop 960x720+160+0 src.png dest.jpg
    • ピクセル指定のところは代わりに50%のような割合指定も可能

画像比較

  • $ perceptualdiff -threshold 閾値ピクセル数差 画像1 画像2
    • 例: $ perceptualdiff -threshold 100 fig1.png fig2.png

参考文献

programmer-jobs.blogspot.jp

画像比較 with perceptualdiffkazucocoa.wordpress.com

Rust

最近流行っているらしいRustの解説動画。半分くらいまで視聴。

Ownership/Borrowingという概念でポインタ周りの(潜在的)バグをコンパイル時に見つけたりできるようにしたらしい。発想としてはshared reference (SR; 共有参照?不変参照?とでも言うべきか)/mutable reference (MR; 可変参照?とでも)をうまく使い分けることでC++では未定義動作だった解放済みのアドレス参照を防いでるようだ。1つのオブジェクトに対してshared/mutableを同時に両方は使えないようにして、オブジェクトの参照と変更がお互いを気にしないで行われることを防いでいる(と自分は受け取った)。

また、Ownership概念を使うと、スレッドのmutationを明示的に行わなくてもよくなる?(Ownershipは非同期なスレッドであっても同時にはどちらか一方にしか与えられないから)。いちいちOwnershipのやり取りをしないといけないので実行速度が少し気になるが、どうなのだろうか。

そもそもOwnershipがどのようなものか、どのように付与しているのかがまだよく分かっていないので、機会があれば使用を検討して実際に使いながら理解していきたい。

英語学習

英語力を向上させたい。ので、以下の方針で鍛えていこうと考えている。

ちなみにインド人留学生からは「日常会話を鍛えたいなら Friends (ドラマ)を字幕なしで内容が理解できるまでひたすら繰り返し見ろ」 と言われた。

  • VoiceTube
    • 和訳付き動画
    • TEDやCNN 10も包含していて、洋楽もあるらしい
    • 現状での有力候補少し使ってみたが、かなり良い。TEDを英語+日本語字幕で見られたり、speakingやディクテーションのクイズもあってオールインワンという感じ。

jp.voicetube.com

  • Voice of America
    • アメリカ英語を原稿付き+ゆっくり発音で聞ける

learningenglish.voanews.com

  • English Listening Lesson Libary Online
    • 音声や動画でのレッスンが豊富らしい

www.elllo.org

  • Listen and Write - Dictation
    • ディクテーションの練習ができるらしい

www.listen-and-write.com

* Lang-8 * 外国人と文章の相互添削ができるらしい * 相手もユーザーなので正確ではない可能性がある lang-8.com

-> 現在はHiNativeというサービスに移行しているらしい。が、そちらがどうにも微妙そう(機械翻訳精度が上がれば不要になりそう?)なのでおそらく使わないだろう。

hinative.com

  • Sciwrite Stanford
    • 科学論文の書き方
    • 説明そのものについてもyoutubeの字幕生成が使える

www.youtube.com

参考文献

www.stay-minimal.com

‘Mobilome’ Study of Antibiotic Resistance Implicates Transposon Activity

www.pacb.com

PacBioで高品質なプラスミドのアセンブリ -> 抗生物質耐性遺伝子(ARG)のより良い特徴付け -> ARGの細菌間伝播メカニズム解明、という話。対象としている細菌はNIHで単離培養されたEnterobacteriaceae。Susu Heさんがリーダー。

  • 感染が広がった細菌を数年間に渡ってシークエンシングして、プラスミド中のtarget site duplication (TSD; ゲノム中のある特定のコンテキストにtransposable elementが挿入されること)を追跡した。

https://image.slidesharecdn.com/bacterial-transposons-1235039960223797-2/95/bacterial-transposons-26-728.jpg?cb=1235018415

(https://www.slideshare.net/guest06ad101/bacterial-transposonsより引用)

  • ARGに対抗する手段が見つかる、、かもしれない。

  • PacBioのmultiplexed sequencingを使えば非常に安価にどんどん読めるだろう。

ファージやプラスミドは最近流行りつつあるように思うので、自分の論文も通るといいな。。