mizdra's poem

雑なこと (日記/技術ポエム/メモ/…) を書くブログです.

2018-08-29

シェルのカスタマイズ

最近でかいプロジェクトで開発していてGit関連の操作が辛くなってきたので, シェルの設定を見直すことにした. とりあえず以下のようなaliasやキーバインドを張ってみた.

[alias]
    CLEAR = reset --hard HEAD
    co = checkout
    sclone = clone --depth 1
    pu = !git push -u origin $(git symbolic-ref --short HEAD)
    refresh= !git fetch origin && git remote prune origin
# zsh
function peco-select-branch () {
    local branch=$(git branch -v  --sort=-authordate | peco | cut -c 3- | awk '{ print $1 }')
    if [ -n "$branch" ]; then
      if [ -n "$LBUFFER" ]; then
        local new_left="${LBUFFER%\ } $branch"
      else
        local new_left="$branch"
      fi
      BUFFER=${new_left}${RBUFFER}
      CURSOR=${#new_left}
    fi
}
zle -N peco-select-branch
bindkey '^b' peco-select-branch

それぞれのコマンドの使い方と役割は次の通り.

  • git CLEAR
    • ステージ及び作業ディレクトリの状態を HEAD と同じにする
    • ゴミが残っていて他のブランチにチェックアウトできない時に便利
    • 作業ディレクトリの変更が吹き飛ぶ非常に危険なコマンドなので, 大文字にした
  • git co <branch>
    • ただの checkout のalias
  • git sclone <repository>
    • 最新のコミット以外は取得しない点以外は git clone <repository> と同じ
    • サンプルリポジトリなどをcloneするとき, 最新のコミットだけ見れれば良くて過去のコミットは不要なため, こういうコマンドがあると便利
    • scloneshallow clone から
  • git pu
    • カレントブランチを origin に同じブランチ名で push し, トラッキングする
    • 一度トラッキングするように設定すれば, 以降は git push だけでよくなる
  • git refresh
    • origin から fetch した後, origin から既に削除されたブランチをローカルリポジトリから削除する
    • リモートリポジトリで削除したけどローカルリポジトリでは削除せず放置しているとブランチが溜まるので, 定期的にこのコマンドで整理すると良い
  • peco-select-branch()
    • ^b でpecoを使ってブランチを検索できる
    • ブランチは
    • gitのbranch選択をpecoで楽にする。をベースにカスタマイズしている
      • 最近作成したブランチが上に来るようにした
      • ブランチの最新のコミットのハッシュとコミットメッセージを表示するようにした

youtu.be

2018-08-14

京都

これするために昨日から京都に来ています. 最高の夏をやっていきましょう.

食事

家から離れている間に体調を崩すと大変なので, 京都に来てからはちゃんと食べるようにしている. 具体的に言うと朝食は普段の1.5倍くらい食べてる. 健康対応人間です.

2018-08-10

今日の電車

  • 行き: 勝ち
  • 帰り: 勝った気持ち

大学

来週から関東からしばらく離れるので, その前にと大学でやならければならないことを色々済ませておいた. これで安心.

Rust

オライリー・ジャパンからPrograming Rustの日本語訳が今日発売されたので買った. 明日届くらしい. 来週関東離れるときに余裕があったら持っていこうかな〜.

2018-08-07

気温

朝起きたら周りが涼しすぎて寝ている間に南半球に移動したのかと思った. 明日もこれで頼んだ.

X11

大学のサーバにアクセスして課題を進めていたのだけど, X11で表示しているアプリケーションで特定のアクションをすると, そのウインドウが画面の外の領域に吸い込まれる挙動に悩まされていた. 解決に1時間くらい掛かったのだけど, CLIからアプリケーションを上手いこと制御して特定のアクションを回避してやることで, ウインドウを虚無領域へと飛ばさずに済むようにできた. もしどうにも出来なかっったら大学へ行く羽目になっていたので, 何とかなって良かった.

2018-08-06

Golang

A Tour of Go の Concurrencyの章を読んだ. 「goroutineによるランタイムレベルの軽量スレッド」と「channelによるスレッド間通信」がGolangの平行処理サポートの特徴という印象を受けた. 雑に扱っても良い感じに動いて便利.

これで A Tour of Go を読み終わったので, 以前体系的に学んだ言語 (JavaScript/TypeScript/Java/Scala/Rust) と比較しつつ, A Tour of Go を読んで感じたGolangの特徴を纏めてみた.

  • GCがある
  • interfaceによる構造的部分型のサポート
  • 静的型付け
  • スタックやヒープを意識しなくて良い
  • (メモリ安全な) ポインタがある
  • null安全でない
  • ジェネリクスがない
  • 式指向でない
  • Errors are values
  • ランタイムレベルの軽量スレッド
  • channelによるスレッド間通信

最近の言語で一般に良しとされているもの (静的型付け/(Errors are valuesによる)例外の排除) がある一方で, 一般に良しとされてないもの (null安全でない/ジェネリクスがない) もある. この辺はGolangの思想が影響しているのかな.

2018-08-05

Golang

インターンシップの事前課題でGolangを学んでいる. とりあえず「A Tour of Go」をベースに, 必要に応じてググりながら勉強している.

言語を学ぶのは時間は掛かるけど, とても楽しくて, いつも新しい発見がある. 色んな言語を学んでいると, 「Aという機能はScalaよりGolangのほうが優れているなあ」とか「GolangのBというシンタックスはScalaやRustに似ている!」とか「GolangにあるCとDという機能を実装している言語は今まで学んだことなかったな〜」とか比較ができてとっても便利. 比較によって初めてその特徴を認識でき, 言語の思想の理解に繋がる場合もある. だから, 言語を学ぶ時は言語同士の比較を意識するようにしている.

Golangを学んで思ったことは「非知的なプログラマのためにデザインされている*1」という点. 実際, 高度な型システムが無いこと, ジェネリクスが無いこと, GCがあること, シンタックスがシンプルなこと, などから難しさを上手く排除しているように感じる.

食事

昔から痩せ気味で食べられる量が少なくて, 食事に結構苦労している. 自分でも何故こんなに食べられないのかよく分かってない.

最近分かったとして, 食べる前はお腹は空いていて食欲はあるが, 食べ始めるとすぐに食欲がなくなり, 食べ物を口に運んだり飲み込んだりする気力がなくなるということ. つまり, お腹は空いているのに食事が喉を通らない状態になる. 一応, こういう状態になっても食べれることには食べれるが, 食べ物を飲み込むのに凄く気力を使うし, 疲れてしまう. なので食べるペースを落として, 体力と相談しながら食べるようにしている.

外出先で食事する際にはメニュー選びに苦労する. 雑に頼むと量が多すぎて食べきれないことが往々にしてある. 最近の知見としては, そのお店のメインメニューの内, 1〜3番目くらいに安いものを頼むと大体丁度良い量になるということ. 皆さんも参考にしてみて下さい *2.

*1:http://www.yunabe.jp/docs/why_golang_is_good.htmlより

*2:少食の人でないと参考にならないと思いますが…