詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

YAPC::Asia 2014 で「Git によるツール開発」というタイトルで話しました #yapcasia

Git を使ったツール開発 - YAPC::Asia Tokyo 2014

YAPC::Asia 2014: Writing tools with Git // Speaker Deck

後半駆け足になりましたが、Git のサブコマンドを活用して Git のツールを作る話をしました。自分がこれまでツールを作ってきた上で、Git とのやりとりを行うにはどういった方法を取ればいいのか調べてきた話を盛り込んでます。お越しになったみなさま、ありがとうございました。

トークにそなえて Git のドキュメントやソースを読んでいたら、またいろいろと発見があって楽しかった。Git の話しましょう。

ghq v0.5-pre1 をリリースしました(`ghq import` が変わります)

https://github.com/motemen/ghq/releases/tag/v0.5-pre1

ようやく重い腰をあげ、ghq に、懸案であった ghq import への変更をいれました。

このバージョンでは以下の非互換なものを含む変更が入ります:

  • ghq import はサブコマンドを取らず、標準入力から URL のリストを受け取り、それぞれに ghq get を行うコマンドになります。
    • それに伴い、ghq import starred および ghq import pocket は廃止されます。
    • 副次的な効果として、Mercurial がインストールされていなくても go get で ghq をインストールすることができます。(わらい)
  • リリースにより配布されるコンパイル済バイナリが環境によりうまく動かなかった問題が修正されます。

そもそもこんな変更でいいのか、など特に反応がなければこれをバージョン 0.5 としてドキュメントを整備してリリースしたいと思います。

ghq import starredghq import pocket を使っていたみなさまにおかれましては、以下のような代替策を用意してあります。

GitHub でスターをつけたリポジトリをクローンする

github-list-starred を使います。

% go get github.com/motemen/github-list-starred
% github-list-starred motemen | ghq import

Pocket に追加した GitHub のリポジトリをクローンする

go-pocket を使います。

% ghq get https://github.com/motemen/go-pocket
% ghq look motemen/go-pocket

% go install -ldflags "-X main.consumerKey '<YOUR_POCKET_CONSUMER_KEY>'" ./cmd/pocket
% cp pocket 
% exit

% pocket list --domain=github.com | ghq import

go-pocket は現在鋭意開発中なのでもうちょっといい感じになる予定です(物理的な理由で push できてない)。


そのほかご意見ご感想などお気軽に Issue によろしくお願いいたします。エゴサーチが壊滅してるので……

『Write Great Code: Volume I: Understanding the Machine』を読んだ

Write Great Code: Volume I: Understanding the Machine』を読んだ。副題に注目。予想していた以上にマシンの話だった。

自分たちが書くあらゆるプログラムは、それが現実界で動いている以上、必ず物理的な実体を持つコンピュータの上で動いている。こう動いてほしいと願って書いたコードがどんな風に解釈され、表現され、実行されるかということを、この本ではごくごくマシンの側から描いてくれる。C言語が一種の高級言語という範疇に収められているところから、その立ち位置を想像されたし。

今自分が書き、走らせているプログラムは様々な抽象の上に構築されているのだけれど、それらのあらゆる抽象化を取り去って、数値や文字列といった、プログラムが扱うデータはどんな風にメモリ上に配置されるのか。CPU への命令はどんな風にビット列として表されるのか、それを CPU はどんな風に処理するのか。メモリやディスクへの IO はどんな風に行われ、どんな風に高速化が試みられているのか。一台のマシンの中ではどんな機器が協調して働いているのか。などなど、もちろん知らなくてもプログラムを動かすことはできるが、知っていれば効率のよいコードを書けるだろう知識を広く扱っている。

プログラミングに欠かせないプロセスとして抽象化された概念が、実のところどのように現実的・物理的に実現されるか、垣間見ることができたのはとてもおもしろかった。特に CPU の働き、キャッシュの仕組みを見ると、ものすごく複雑な仕組みの上で自分のプログラムが動いていることを知って、感謝の念が湧いてくる。マシンの歓声を聞くことも、もしかしたらできるのかもしれないという気がしてくる。

この本では、こういったマシンの働きを知ることがグレートなコードを書くことにつながると言っている。実際のところ、現在のかなり抽象度の高い環境でこの知識たちが直接活用できるとは思えないけれど、例えば OS の働きを知るのにこういった土台のことを知っていることは重要だろう。出版年が古く(2004 年)、扱われるトピックも具体的な名前は古いところが時おり見られるが、本質的な部分はまだまだ通用するはず。

最近日本語訳も Kindle化 されたらしいです。洋書はこのボリュームで 2000 円しなくて安い。

Write Great Code: Volume I: Understanding the Machine: 1

Write Great Code: Volume I: Understanding the Machine: 1

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く

  • 作者: Randall Hyde,鵜飼文敏,まつもとゆきひろ,後藤正徳,トップスタジオ
  • 出版社/メーカー: 毎日コミュニケーションズ
  • 発売日: 2005/12
  • メディア: 単行本
  • 購入: 2人 クリック: 129回
  • この商品を含むブログ (105件) を見る

この本の次によむならこの本でもよく挙げられているパタヘネか Linux カーネル(再読)かネットワーク低レイヤの本かな(どんな本がいいのか知らない)。

コンピュータの構成と設計 第4版 上 (Computer Organization and Design: The Hardware/Software Interface, Fourth Edition)

コンピュータの構成と設計 第4版 上 (Computer Organization and Design: The Hardware/Software Interface, Fourth Edition)

  • 作者: デイビッド・A・パターソン,ジョン・L・ヘネシー,成田光彰
  • 出版社/メーカー: 日経BP社
  • 発売日: 2011/11/17
  • メディア: 単行本
  • 購入: 7人 クリック: 19回
  • この商品を含むブログ (8件) を見る

Linuxカーネル2.6解読室

Linuxカーネル2.6解読室

はてなで一緒に働きませんか?