Skip to main content

ログ取得ツール

Category: Mac

Yosemiteと共に生きていく

会社のMBPもYosemiteにしました。昼休みに昼飯を食いにいっている間に終わっているつもりだったが、自宅のMBPと同じところで詰まっていた。適当にログを見ていると、JMicronのkextのロードが云々…で止まってた。まあ同じようにログを見ているうちに通過し、無事にYosemiteになった。JMicron? なんだろう。何かそんなものをインストールしたかな?? 覚えてないな。 通知の株価のところ、会社でやると日本市場のコードしか出てこなかったりする。プロキシで何か制限したりしているのかもしれない。それ以外は大したトラブルもなく進んだ。

Yosemiteが最高すぎて生きるのがつらい

どこを見ても、力に満ちている? こういうキャッチコピー考えてるの誰なんでしょうね。 現時点で実用的なUnixのデスクトップ環境としては唯一と言ってもいいくらいの地位を築いたMacOSだが、OSのアップデートはどうか。FedoraのpreupgradeやFedUpとくらべてどうなのか… アップデート中、残り1分の表示が出てから30分以上動きがなくて焦りました。適当に操作してたらいきなり画面上部にカーソルと近づけるとメニューが表示されることに気づいて、そこから「ログ表示」みたいにしたら何か動いているようで、ログの流れを眺めていたら再起動がかかって、そこからは無事に進みました。 今日の午前中、会社のMBP(自宅と会社で同じ機種を使ってます)でやるのを控えて良かったです。MBPの1台しか手元にないので、長時間仕事にならないところでした。しかも会社のは最近立て続けにSMCリセットをかけなきゃいけなくなったという不調なMBPなので。来週の帰り際か昼休み前にでもやろう。 まあハラハラドキドキさせてくれますよね。期待を裏切らない。 見た目のフラットデザイン(?)は違和感がありすぎる。システムフォントも変わった(よね?)。前のも悪くなかったけど、Yosemiteのフォントも嫌いじゃないですね。iTunesが赤くなったのも謎だ。何かの警告かと思っていろいろいじったりしてみたが問題はなさそうで、ぐぐったらこれ、「Appleが気の迷いで単に赤くしてみた」ってだけなのね…そう来たかよ。 通知のところに株価を表示できるようになったが、日本市場のticker codeは無味乾燥な数字なので、いまいち。米国だと会社名を推測できるのだが…まあ一応日本市場にも対応しているところは偉いな。たまたま私が務めている会社は東証とNASDAQに上げているので、並べて比べることができたりする。

Macでdrone

  • Macでdockerを使うことができる
    • boot2dockerを使う。VirtualBoxで上がるTinyCoreLinuxでdockerが動く
  • droneはdockerを使えれば使えるはず

というわけで、Macでdroneを使ってみよう。dronedはLinuxでサーバを立ててgithub APIと連携させればいいとして、Macではcommit/push前のチェックとして、コマンドラインのdrone buildを使えるようにしたい、と私は考える。

  • brew install boot2docker
  • brew install docker
  • boot2docker download
  • boot2docker init
  • boot2docker start
  • eval $(boot2docker shellinit)
  • もしどこかでパスワードを聞かれたら「tcuser」と答える

ここまででdockerを使える状態になる。

  • brew install go
  • export GOPATH=$HOME/go
  • go get -d github.com/drone/drone/cmd/drone
  • 現状だと少し変更が必要
    • $GOPATH/src/github.com/drone/drone/pkg/build/docker/image.go
      • github.com/dotcloud/docker/utils → github.com/dotcloud/docker/pkg/parsers
      • utils → parsers
    • $GOPATH/src/github.com/drone/drone/pkg/plugin/notify/irc.go
    • func (i *IRC) Connect()の中身を削除
  • go build github.com/drone/drone/cmd/drone
  • go install github.com/drone/drone/cmd/drone
  • export PATH=$PATH:$GOPATH/bin

これでdroneを使える。試しにこんな.drone.ymlを置いて、、、

image: bradrydzewski/base
env:
 - TZ=Asia/Tokyo
script:
 - date
  • drone build

まあ初回はイメージのpullに時間がかかりますが、2回目以降はなかなかいい感じになります。 ソースに修正が必要だったのはまあ困るよね。golangのimport文は読み込むモジュールのバージョンを指定できないから、常にmasterのHEADを使うことになる。そして使っているライブラリのバージョンが上がって互換性がなくなったときにコンパイルできなくなる。サードパーティでそれを解決するウェブサービスがあったような気もするが、広まってないし自分もそのサイトを忘れてしまった。 droneのソースはアレな面があって、作者のbradrydzewskiのイメージであればubuntuユーザで実行されるが、それ以外のイメージを使うとrootで実行される。この判定はハードコードされている。

column(1), colrm(1)

join(1)の衝撃いまだ冷めやらぬ中…column(1), colrm(1)っていうコマンドもありますね。 まあこれらの使い方を覚えようとする前にawkを使うでしょうね。しかしもっと凄いのは、これらのコマンドを涼しい顔で使っている人が会社にいること…かな。なんであんたこれを当然のように使ってんだよ、っていうね。

join(1)

SQLのJOINがどう…というエントリが続きましたが、Linuxのコマンドにもjoinがあり、これはテキストファイルでSQLのinner joinに似た操作ができるんです。私はcutは時に毎日のように使い、たまにpasteは使うことがあるけど、joinは使ったことがない。最近この操作が必要になり、一時的にSQLiteに入れてjoinさせるかawkで頑張るか、sortとuniqで2個カウントされたやつを選ぶか、どうするか熟慮した結果、awkのone-linerでしのいだことを思い出します。joinコマンドさえ知ってれば悩むことなんてなかったのに。 どうせ忘れるけどメモしておこう。MacOSにも入ってます。いやー便利な世の中に…いや、どうせ忘れると思うけどね。

MacOSのbashとshとPOSIXLY_CORRECT

Linuxでは/bin/shも/bin/bashも同じで/bin/shは/bin/bashへのシンボリックリンクですが、MacOSの場合、/bin/shと/bin/bashは微妙に異なっています。


# uname -a
Darwin mbp.local 13.1.0 Darwin Kernel Version 13.1.0: Wed Apr  2 23:52:02 PDT 2014; root:xnu-2422.92.1~2/RELEASE_X86_64 x86_64
# ls -l /bin/bash /bin/sh
-r-xr-xr-x  1 root  wheel  1228240 10 31  2013 /bin/bash
-r-xr-xr-x  1 root  wheel  1228304 10 31  2013 /bin/sh
# gsha1sum /bin/bash /bin/sh
5151b7973af09c094516a602efae96dd702a8424  /bin/bash
2ff0132fe784dcd3aeb1c258b064eb2592776652  /bin/sh

実体はどちらもbash-3.2です。意外と古いですね。


# sh
sh-3.2$ echo $BASH_VERSION 
3.2.51(1)-release
sh-3.2$ exit
# bash
bash-3.2$ echo $BASH_VERSION 
3.2.51(1)-release
bash-3.2$ exit

しかし、bashとshでは、初期設定が少し異なっています。大きく異なるのはPOSIXLY_CORRECTの値。shはPOSIXLY_CORRECT=yですが、bashは未設定です。この値が設定されているMacOSの/bin/shは、私が多用するecho -nが"-n\n"が出力されたりして、甚だ不便です。Linuxの場合はPOSIXLY_CORRECT=yでもecho -nは正しく改行なし-n抜きで出力してくれます。つまり、シェルスクリプトを実行するときに、Linuxであればsh hogehoge.shで良かったのが、MacOSではbash hogehoge.shとする必要があるわけです。これは忌々しい。/bin/echo -nなら問題ないが、echoごときにいちいち/binなんてつけてらんないし。

Homebrew Cask

Macのアプリ(.dmgや.zipの中に.appや.pkgが入っているもの)もやっぱりbrewでインストールするよね、という人が使っているのがCask。 Caskが用意されていないアプリも多いので、どう効率よくCask化するか、というのが問題になる。 私の場合は、自分のリポジトリがgithub.com/wtnb75/homebrew-testであって、ここをbrew tap wtnb75-testで持ってきている。 そうすると、/usr/local/Library/Taps/wtnb75-test以下にcloneされた状態になっているので、少々気持ち悪いところもあるが、ここのディレクトリをそのまま使っている。git remote set-url –push origin git@github.com:wtnb75/homebrew-test.git みたいなコマンドを実行しておくと後が楽になる。 例えばLego Digital Designerの場合、

ということがわかる。ダウンロードしてsha256を求めると、これがaeba6d0a2d0feb2bf6ce2c6be257a87caf6d51a4038e046d45568c8df7e3c6caであって、zipファイルの中にはLDD.pkgというファイルが入っている、と。ここまで分かればあとは書き下すのみ。 こうなる → https://github.com/wtnb75/homebrew-test/blob/master/Casks/ldd.rb あとはインストール(brew cask install ./ldd.rb)して動作を確認する。 確認できたら、これを/usr/local/Library/Taps/wtnb75-test/Cask以下にldd.rbとして置いて、git add,commit,pushする。何も考えずにやると2度ダウンロードすることになるが、キャッシュディレクトリの場所を知っていれば、それは実際は/Library/Caches/Homebrew/なのだが、ここに最初に(sha256やパッケージファイル名を知るために)ダウンロードしたzipファイルを、パッケージ名とバージョン、拡張子をまぜた「ldd-4.3.8.zip」として置けば、ダウンロードが一度で済む。 Macの場合はアンインストールもそれほどややこしくない(アプリはディレクトリの格好になっていて、アンインストールは単にディレクトリを削除するだけ)のだが、中央管理したがるのは習慣か。Linux使ってても、何かとspecファイル書いて野良rpmを作って管理したがる習性があるんですよね私。 しかしbrewはファイル名とクラス名が一致(ファイル名はlowercase, クラス名はCapitalize)してないとダメなのかな? それはあまりよろしくないんじゃなかろうか。こういう制約は毎日邪魔だと思う以上の意味がないよね。Javaじゃないんだから。

MacBook Pro

転職を期に、Macとgitの人になってみました。転職前はLinux/Windowsとmercurialだったんですけどね。40を目前にして、自分を取り巻くコンピューティング環境がだいぶ変わりました。

新しい職場ではMacを使っている人が多かったので、まあ月に1度くらいWindowsが必要なシステムを使うケースもあるんですが、その場合はVDIを利用させてもらうことにして、MacBookProのRetinaディスプレイモデルを買わせてもらいました。これが殊の外具合が良いので、自宅でも同じの買っちゃいましたよ。安いし。画面が異常に美しいです。壊れてるんじゃないかと思うくらいに。計算性能も良い。

プログラミング方面では、brewとかvagrantとかchefとか、Rubyで書かれているものが多いこともあり、仕事上でも関係するので意識的にRubyを使おうとしていますが、まだPythonを使ってしまう癖が抜けてません。自分ではRubyは避けてJavaScript(node.js)に行く予定だったんですが、どうもそうも行かないような気配。いずれにしてもC/C++からは離れていきそうです。せっかくMacはclang/LLVMでObjective-Cなのにね。