自分のダメっぷりを思い知れる本。「エンジニアとしての生き方」

エンジニアとしての生き方  IT技術者たちよ、世界へ出よう! (インプレス選書)

エンジニアとしての生き方  IT技術者たちよ、世界へ出よう! (インプレス選書)

内容紹介
■推奨文(書籍オビより)
【梅田 望夫】
この本には「豪速球の正論」がぎっしり詰まっている。
読みながらどんな感情が湧き上がるか、身体はどう反応するか。
読後感であなた自身を知ることができるだろう。

【小飼 弾】
Windows 95IEの生みの親は、なぜ今iOSWebKitに夢中なのか。
中島聡はなぜこれほど自由なのか。その答えがここにある。
エンジニア諸君、社を捨てて世に出よう。

有名ブログLife is beautifulをまとめた本で、私も以前から読んでたので買ってみたら‥結果、もうへこむへこむ。
基本的にブログをまとめた本でほぼ読んだことある内容なんだけれども、ブログで少しづつ読むのとまとめて読むのではパワーが違います。
基本若いエンジニアへのエールというか忠告的な内容なので、あんま若くない自分としては20代でこの本読んでたらなぁ…と思っちゃいますね。
でもそんな事言っても仕方無いので、少しでも取り入れるために英語力と文章力をつけるように頑張るとします。
手始めに紹介されている

理科系の作文技術 (中公新書 (624))

理科系の作文技術 (中公新書 (624))

この本を買ってみた。

20代のエンジニアの方超オススメ。30代以降でもやる気を出すには良い本だと思います!…へこむけど。

VLC Media Playerで動画を見るときに役立つショートカット厳選9個

前のエントリFedora14でPT2対応ハマったことまとめ - 凡人プログラマのときからPT2を使って録画してるのでPCを使ってテレビ視聴する機会が激増しました。
で、通常Windws時代からずっと愛用しているド定番VLC使ってて、しばらくほぼマウスで使ってましたけど、操作性、特に細かい早送りや戻しがすげー不便だったのでメニューで機能調べてたら実はキーボードショートカットがすげえ便利だったのでまとめてみました。
Macで検証、表記してますが、Winだとopt→alt、cmd→ctrlだと思います。

続きを読む

yokohama.rb#07に行ってきました。

すでに4回ぐらい行ってますが、やっと重い腰上げてレポートを書きました。

yokohama.rbとは?

名前の通り。横浜近辺技術者のRuby勉強会。
Google グループ
主に毎月第二土曜17:00〜21:00開催。
特徴としては内容が…

オープンセッション形式です。
その場で興味のあるセッションに参加するか、自分でネタを持ってきてください。

ということでバラバラに色んなことをやります。
人によって初心者向けセッション(読書会とかテーマ決めてコーディングしたり)に参加したり、もくもく勉強やったり…という形式初心者でも上級Rubyistでも楽しめるんじゃないかと。
個人的にはちょこっとscaffoldをしたぐらいの経験のrailsをもうちょっとちゃんとやろうと思ってもくもく勉強をやる…つもりでしたが、技術系雑談会と化しましたw
主催者の@dan5yaさんの初心者セッションは今回は「ボウリング計算ロジックの実装」で大半はそちらに参加。そっちも楽しそうでした。

得た情報まとめ

一部Ruby関係無いけど気にしないw

できたこと

昔作って放置してたrails環境を復活させ、mysql2対応でアプリ作成、unicornで起動できるようにした…
4時間あんのにこんだけ!?と我ながら悲しくなるけど、mysql2インスコで小ハマリやったりunicornとかpowとか新単語聞く度に調べてたので…
とはいえ、「unicornは本番で使っててレベル高いですよー」とか。「rvm無いと不安になるレベルで重要」とかリアルに仕事でやってる人の温度感込みの情報とか聞けたので良しとしよう。

懇親会

近くに腹一杯飲み食いして3000円前後で10人程度なら飛び入りでも入れるという素晴しく勉強会向きな中華料理屋さんがあるので大体そこで飲み会となります。当然今回も。今回は9人参加でこちらも盛り上がりました。

まとめ

自分勉強ときどき技術談義ってスタイルがとても楽しかった。主に技術談義につきあってくれた@1syoさん、@kei_qさんありがとうございました。
主催してる@dan5yaさんや運営されてる方々もありがとうございました!

git-mergeで--ff(デフォルト)と--no-ffと--squashの違い

きっかけ

A successful Git branching model » nvie.com
ここらあたりを見て、--no-ffつけときゃいいんだなーと深く考えずに使ってたら、--squashつけると安全とかなんとかチラ聞きして混乱しまくったので調べてみた。
とりあえずman。

man git-merge
...
--ff, --no-ff
Do not generate a merge commit if the merge resolved as a fast-forward, only update the branch pointer. This is the default behavior of git-merge.
With --no-ff Generate a merge commit even if the merge resolved as a fast-forward.
...
--squash, --no-squash
Produce the working tree and index state as if a real merge happened (except for the merge information), but do not
actually make a commit or move the HEAD, nor record $GIT_DIR/MERGE_HEAD to cause the next git commit command to
create a merge commit. This allows you to create a single commit on top of the current branch whose effect is the
same as merging another branch (or more in case of an octopus).

With --no-squash perform the merge and commit the result. This option can be used to override --squash.
...

んー、なんとなくわかるような気もするけど、イマイチよくわからんので試してみた。
英語がダメなだけとも言う。

試してみた

「2」というコミットメッセージのログを持つmasterからb1ブランチを作ります。
fast-forward*1な状態でb1からmergeしたいので、適当に1ファイルaddして、「4」とメッセージを入れます。
コミットメッセージの数字が連番じゃないのは他の動作検証もしてたので…メッセージ簡略化しすぎてむしろわりづらかったかも。
(ログはユーザ名削除とかで整形してるので実際の表示とは異なります)

マージ前

masterブランチ

* 2f1eea2 2011-03-10 | 2 (HEAD, master) 

b1ブランチ

* 28031c0 2011-03-10 | 4 (HEAD, b1)
git merge b1でマージ (--ff動作)

ログ

* 28031c0 2011-03-10 | 4 (HEAD, master, b1)
* 2f1eea2 2011-03-10 | 2
git merge --no-ff b1でマージ
*   54627d3 2011-03-10 | Merge branch 'b1' (HEAD, master) 
|ヽ 
| * 28031c0 2011-03-10 | 4 (b1)
|/  
* 2f1eea2 2011-03-10 | 2 
git merge --squash b1でマージ
* 2f1eea2 2011-03-10 | 2 (HEAD, master) 

あれ?ログがマージ前と変わらない。
git statusしてみると…Changes to be committed:にコミットメッージ「4」で修正したファイルがあった。
ということで、--squashはマージした結果、コンフリクトが無くてもワークツリーに展開して、その後自分でコミットする模様。
ちなみに複雑になるので上でパターンには入れてないけど、以下動作も留意の事。

  • コンフリクトがあるときはオプションに関わらず自動的にコミットされない。(--squash相当の動作)
  • --ffでもfast-forwardじゃないときはマージコミットができる。
  • --no-ffでマージコミットを作っておけば「git revert HEAD」や「git reset HEAD^」でマージを無かったことにするのは簡単。
まとめ

ということで…

  • ちょっとした取り込みにはオプション無し(--ff)
  • 戻す恐れがあるマージでマージコミットを必ず作りたいときは--no-ff
  • 改変して取り込む必要があるときに--squash

というように使い分けると良い。と理解。違ったら指摘ください。

gitは機能豊富で概念も複雑で嫌気がさす事もあるけど、理解するとホントに便利ですよ!
まだまだたくさん知らない機能あると思いますけどね…

*1:マージ対象ブランチが自ブランチのコミットを全て持っている=マージせず単純に取りこむのみ

tmux設定をもうちょっとvimらしくしてみた

ぼくもscreenからtmuxに乗り換えました! - 寄り道ばかりの お勉強日記★
screenからtmuxに乗り換えたら快適!(二点除く) - 凡人プログラマで書いた私の設定使ってくれたみたいですね。ありがとうございます。
で、トラバ返しがてらこちらの改善設定が気に入ったので取り入れてみました。

copy-modeで「v」でマーク開始、「y」でヤンクする

C-t y で copy-mode に入り、vi風の操作で選択範囲の決定などができるわけだが、デフォルトの状態だと、

マーク開始: Space
コピー(ヤンク): Enter
と普段Viで使ってるかんじと違う。

これを「v」でマーク開始、「y」でヤンクとするため、 .tmux.conf に以下設定を追加

# vでマーク開始
bind -t vi-copy v begin-selection
# yでヤンク
bind -t vi-copy y copy-selection

screenで慣れてたので気にしてなかったんですが、ここもカスタマイズできるんだ!
素晴らしい。やっぱv→yが落ちつきますよね。

3/11のある帰宅困難者の帰宅記録


断わっておきますが、東北や北関東の方々と比べれば被災というレベルではないです。
ちょっと帰るのが大変だった程度ですし、おそらくその中でも大してキツい方でも無かったとは思うけど、ちょっと記録しておきたかったので書いてます。

14:46 地震発生時

座って仕事中、ぐらっときて、よくある地震だなーと動じず仕事しようとしてたらまったく終わらなかったので立って避難するか迷ってたら部長から避難するよう声があったので階段で下り、近くの靖国神社へ避難。
途中、歩いてたら靖国神社の人から「そこは通らないで!」と指示があったので見たら5mぐらいある灯籠が欠けて破片が散乱してた。ここで初めて、結構大事かな…と思いだす。
地震情報とかぐぐるgoogleの検索結果に出るニュースで東北が震源震度7ってことが判明…震度7!?検索結果のサイトはまったく開かず、twitter見ると結構情報が。M8.1とか言ってる…やべえんじゃないの?

14:56 嫁からのメール

嫁に連絡しなきゃ…と思ったが、ドコモで発信もできないし、どうしようかと思ってたら嫁からメール。自分も無事だし、子供のいる保育園に連絡通じて無事だとのこと。良かった…
携帯全滅だが固定電話は生きてたらしく嫁の会社は避難遅かったが、社内にいたから電話できたららしい。嫁GJ。
まわり見ると家族と連絡取れてるのは極少数。どうやらウチは嫁も自分もgmailだったのが良かったらしい。携帯電話は発信もできず、携帯キャリアのメールは遅延。ソフトバンクに至っては靖国の人が多過ぎたのかネットすら普通だったらしい。
ドコモ回線++、Gmail++,twitter++。

15時頃 避難中の靖国神社

10分ぐらいして一回会社に戻ろうとするものの、余震が来たので再度靖国へ。避難直後はまばらだったが、人がどんどん増え、見渡すかぎりの人人人。花見の時並の人。
このときの写真はあるけど、適当に上にあげて撮ったら同僚の顔が大写しだったので掲載はやめときます…とにかくすごい人だった。

15時半頃 帰宅開始

30分ぐらいして、社長が解散を決断。「タクシー使ったら領収書貰って!会社で出すから!」素晴らしい。
会社のビルが結構古いので数人ずつ別れて荷物を回収し、方向が同じ人で集まって、帰宅開始。
この頃まだ電車止まってるからしかたねーからタクシー使うかー程度の認識。俺甘すぎるよ…
タクシー拾うのは厳しそうだなーと思ってたら同僚の提案でレンタカー屋に。よく気づいたなGJ!レンタカー並んでたけどどうにか確保。クラウンしか無かった。高い…
時間どうしますか?って言われて3時間は無理かなぁ、6時間じゃ店空いてないのか。24時間だと、約2万5千円!?高っ!とか言ってた。6時間で戸塚(同乗したメンバーの一番遠いところ自分はセンター北)まで行けるとか思ってたんだよ、このときのバカな自分は。

16時頃 レンタカー乗車

出発した瞬間、車がどんどん増えてきて、やばいな裏道通るぜーと裏道へ…
でも裏道もダメ。まったく進まない。
最初に休憩で止まった半蔵門のコンビニまで徒歩10分の道でかかった時間はまさかの1時間。
この時点で見通しの甘さを痛感。
ちなみにこの時点でコンビニの棚におにぎり、サンドイッチ、弁当類は全滅。
狼狽してカップラーメンと各種お菓子数種確保。
大通りは全滅だし、裏道も中途半端なとこは同様。大通りより道が狭いぶん、止まるとまったく動かなくてむしろ危険、かなりマイナーな裏道ならどうにか流れるという状況。
車のナビはガン無視でandroid携帯のGoogleMapで地図見ながら頑張ってナビ。

19時半頃 レンタカー乗車中

今だ麻布十番。通常なら車なら15分ぐらいの場所かな…
嫁から保育園の子供と合流したとの知らせ。ホッと一安心。
嫁もタクシーに乗ったけどもまったく動かず、10キロぐらいを走ったり歩いたり、ちょっとバスで辿りついたらしい、偉い!

21:40 歩くことを決断

想像よりかなり長くかかったのでスマートフォン組の電池が無くなってきた…同乗してた後輩は一回充電器を買ってたのに無くなった。まさかこんな長期化するとは…
既にコンビニでは充電器が売ってない状況。
ここで普段はほぼ電子書籍専用となっているiPadの存在を思いだす。
プリペイドプランにしてて、半年以上使ってなくてすっかり忘れてたけど3Gモデルじゃん!
速攻アカウント登録する。iPadはバッテリー持つから安心感あるわ…
溝の口住人の後輩がもう歩きます!でも地図が無いんですよね…と言いだす。
まだ結構距離あるので迷ったがiPadで地図提供するから一緒に歩こう!と提案して歩くことを決断。
この時点で品川の手前。自宅まで約19キロ。すげー寒いし35のおっさんにはちょっとキツいがこのペースだと朝につくかどうかだったし、家族心配なので頑張ろうと思った。
夜中の3時ぐらいには着くかな…

22時頃 浅草線運転再開!

1キロ歩いたかどうかで高輪台の駅前を通った。
立て看板があって、どうせ今日は運転しませんってとこかなーと思ってよくみたら
一部運転再開してんじゃん!西馬込まで行ける!これで5キロ短縮できる!
地図見ると残り14キロ弱。まあ現実的になったな…
浅草線はまあ朝のラッシュぐらい。混んではいるが殺人的では無い感じ。
アナウンス「地震の影響でダイヤが乱れております。ご迷惑をおかけして大変申し訳ありません」…いやいや、こんなときに謝る必要無いから!動かしてもらってすげー助かりますよ!浅草線GJ!

22時15分頃 西馬込出発

さーこれから長丁場。焦らず行こう。
大通りは朝の通勤時のような人の量。地図のナビに従い人気の無さそうな住宅街に入るも、結構歩いてる。同じ境遇の人多いんだな…
歩きだしたらやっぱ寒い。自転車用に持ってた手袋、イヤーガード等を迷わず装着。
しかし朝だけ結構暖かったからマフラー置いてきた事に気づく。若干持つか心配。最悪溝の口に泊めてもらおう…

23時頃 東急運転再開!

歩いてたら前の方に電車の姿が…あれ?あの路線どこだっけ?
とネット見るとまさかの東急。東急なら溝の口通るし、ウチのすぐ近くまで行くじゃねーか!!
低速運転とはいえ、全線で運転再開したらしい。東急偉い!
運良く御嶽山駅のすぐ側なので飛び乗る。今度もフツーのラッシュぐらい。まあ首都圏のラッシュがひどすぎるだけかw
池上線、大井町線田園都市線とぐるーっと回るが1時間程度で最寄りの江田に到着。

24時過ぎ頃 帰宅!

電車に乗ればいつも通り。あっさりと帰宅。
子供は熟睡してたが、嫁は怖くて起きてた。そりゃそーか…
結局帰るまでお菓子しか食ってなかったのでカップヌードルを食べた。
ここ数年で一番美味いカップヌードルだよ…染みる…

おわり

結局帰宅に8時間ほどかかったけど、5キロも歩かずにすみました。
おそらく東京中心部に勤務してる中ではわりと運が良い方だったんじゃないかと思う。
帰るの諦めたり、数十キロ歩いたり、夜中3時に帰宅という人も多かったし。
まとめると、

  1. google,twitterの安定っぷりが素晴らしく、完全にインフラです。
  2. スマートフォンiPadすげー役に立った。但しバッテリー注意。
  3. 当日復活した東急、浅草線等の電車関連の方本当に頑張って頂きありがとうございました!

帰宅困難だった方々本当にお疲れさまでした!

最後ですが、自分の東北、北関東の方々は本当に大変だと思います。
自分も微力ながら寄付や節電に協力するつもりです。
一人でも多い方が助かるよう幸運を祈っています。

screenからtmuxに乗り換えたら快適!(二点除く)

ずっとscreen使ってたけど、
時代はGNU screenからtmuxへ - Gマイナー志向
のタイトルにやられて変えてみた。

個人的screenの利点

  • ネットワーク切っても別のクライアントからでも同じ状態から再開できる。
  • ネットワーク切ってもプロセス止まらない。nohup要らず。

基本同じことだけどもこれがとても素晴しい。
ということでちゃんとこれができるか確認すると、あっさりできた。
screenの場合は設定が必要だったdetach操作せずにネットワークを切ったときに自動的にデタッチする(autodetach on)もデフォルトで動作。
(tmuxだとdetach-on-destroy)

.tmux.conf

.screenrcにあたるものは~/.tmux.conf
基本的な説明とかは以下リンク参照。
.tmux.confをごにょごにょする - mizchi log
以下、自分の設定

# Prefix
set-option -g prefix C-q
# デフォルトのPrefix(C-b)を解除
unbind C-b

# View
# ステータスライン更新間隔(秒)
set -g status-interval 5
set -g status-left-length 100
set -g status-right-length 50

set-option -g set-titles on
# www1.hoge.com→www1のみ表示。
set-option -g set-titles-string "@#(hostname | sed 's/\\\\..*//')"

# ステータスラインカスタム関連
set -g status-bg black
set -g status-fg white
set -g status-attr dim
# 左部:whoami@hostname
set -g status-left '#[fg=green,bold][#20(whoami)@#H]#[default]'
# 右部:[2011/03/06(Sun)20:21]
set -g status-right '#[fg=green,bold][%Y/%m/%d(%a)%H:%M]#[default]'
set -g message-attr bold
set -g message-fg white
set -g message-bg red

set -g pane-active-border-fg white
set -g pane-active-border-bg black

set-window-option -g mode-bg white
set-window-option -g mode-fg black
set-window-option -g window-status-bg black
set-window-option -g window-status-fg white
set-window-option -g window-status-current-bg green
set-window-option -g window-status-current-fg black
set-window-option -g window-status-current-attr bold

# Option
# utf8有効
set-window-option -g utf8 on
# コピー、選択モードのキーバインドvi/emacs
set-window-option -g mode-keys vi
# マウス有効。MacのTerminal.appでは効かず…
set-option -g mouse-select-pane on
# ウィンドウ等の番号基準値
set-option -g base-index 1

# KeyBindings
# 直前のウィンドウ
bind C-q last-window
# 設定リロード
bind r source-file ~/.tmux.conf
# ウィンドウ選択画面
bind Space choose-window
# 新ウィンドウ作成
bind c new-window
# 分割していたペインそれぞれをWindowに
bind b break-pane
# ペインの縦分割
bind h split-window -v
# ペインの横分割
bind v split-window -h

# ペインリサイズ関連vi風
bind -r C-h resize-pane -L 6
bind -r C-l resize-pane -R 6
bind -r C-j resize-pane -D 6
bind -r C-k resize-pane -U 6
bind -r s swap-pane -U

# ペイン終了
bind k kill-pane
# ウィンドウ終了
bind K kill-window
# ペイン番号表示
bind i display-panes
# コピーモード突入
bind y copy-mode
# ペースト
bind p paste-buffer

ファイルはここGitHub - u1tnk/dotfiles
基本vi慣れした体にわかりやすそうにしてみた。
変わってるのはPrefixキーがctrl+qにしてるとこかな。
普通だとctrl+tらしいけど、screenのときに遠くて使い辛いと思ってたので変えてみた。
かぶったりして困ってはいないが、emacsの人とか困るのかな??

未解決事項

以下のページを見て設定した「ログイン時自動起動かつ、セッションがあったらアタッチ、無かったらデタッチ」にすると固まることがある。

http://meme.biology.tohoku.ac.jp/students/iwasaki/tmux
どうも複数クライアントで使ったときがダメなようで一回固まるようになるとずっとダメ。
zshrcに入れてたからログインできなくなって散々でした。
それぞれのコマンドを手で入力すると固まらないんですが、zshrcにコマンド定義するとダメでした。
固まったときにps見るとtmux ls のプロセスが複数あって全部終わらない…
screenだったら

screen -D -R   

で一発なんですけどね。
tmux は

tmux attach

だと既存セッションが無いときはエラーになるので…
まあ、ほとんどは既存セッションがあるので、ほぼ変わらないのですが。
で、やっぱ.zshrcとかで自動起動するのはログインできなくなるのが怖いのでやらない方が良いですね。
ということで

alias ta="tmux attach"

で、ログインするごとに入力してる。対処はできるけど、めんどくさいので…
ちなみに前回のsshしか使えないマシンで.xxrcのせいでログインできなくなったときの対処法 - 凡人プログラマはこの現象が原因で調べました…

Macのローカルで使用するとvimでコピペできない。

yとかpのコピペだけ動きません。

  • 最新のMacVim-Kaoriyaはダメ
  • 最新のMacPortsで入れたvim7.3もダメ
  • デフォルトの/bin/vimはok

以下の件かと思い
vim - copy-paste not working in MacVim when launched in tmux - Super User
以下のパッチあててみたけどダメ。
Fix tmux bootstrap · GitHub
結局デフォルトの7.2を使うようにして回避。
個人的にローカルだとMacVim-KaoriyaのGUIでほとんど済ますので、これで妥協できましたが、ローカルでもCUI版を使いまくる人だと致命的だと思います…

うーん、こいつら解決したいんだが力不足で…解決した人いたら教えてください!

まとめ

最初からウィンドウのタイトルが実行中コマンドになってたりデフォルトで結構便利になってるし、カスタマイズもscreenに比べて簡単(screen使った後で慣れてるからかもしれませんが)だったので好印象。
但し、当然ながらscreenより枯れて無いので、上記のような問題点が残ると完成度はもうちょっと無いと安心して移行できないかも。
screenを極めてるわけでは無いですが、頻繁に使う機能に絞るとscreenでできない事も見あたらないのは事実。
ということでscreenを使いこなしている人が今無理に移行する必要はありませんね、正直^^);
screen系のアプリ自体を今から使う人や新しいものじゃないとガマンできない人は使うと幸せになれるかも。