南極の図書館

ペンギンが寝ていた…。

「スティーブ・ジョブズ1」読了

1を読み終わった。ジョブズの伝記ではあるが、私はウォズニアックが出てくる度に興奮した。
残念ながら、後半ではウォズはほとんど出てこない。その役割はジョン・ラセターが代わって引き受ける。
大きく見ると、前半はウォズのパトロンとして、後半はラセターのパトロンとして活動したことがジョブズの成功の素だった。
おそらく2ではそういう色が薄まり、ジョブズ自身の活動がメインとなっていくのだと思う。
ここでは、本筋とは違うが主にウォズに関する箇所について書いていく。

アタリのボーナス

ウォズは親から、エンジニアリングが世界で最も重要なものであること、正直であること、そして中庸が一番だということを教えられて育つ。
最初の有名なエピソードは、アタリでジョブズの仕事をウォズが手伝うシーンだろう。
ウォズは「複数のエンジニアが2〜3ヶ月かけてつくるゲーム」をたった1人、4日完徹で完成させる。
ただその天才性よりも「そのボーナスをジョブズがちょろまかした」というエピソードの方が有名で、それについてP101にいろいろと書かれている。
ウォズは「正直に言ってくれたらよかったのにとは思うよ。お金が必要だと言ってくれればぼくの分はあげたのに。彼は友達で、友達は助け合うものなんだから」と言っている。後述のIPOの件も含め、ウォズの人柄が表れている。

アップル設立

アップルIを作ったときも、ウォズはみんなにタダで配ろうと思っていた。
そこでジョブズが「売ったほうがいい」と言い、会社を作ることになる。
ウォズは当時貧乏だったが、お金が儲かるかどうかよりも、自分の会社が持てることに興奮する。

「自分たちがそんなことをすると思っただけで元気が出たよ。親友とふたりでいっしょに会社をはじめる。すごい。すっかりその気になったよ。やるしかないよね」


そしてウォズは電卓を売り、ジョブズは車を売ってアップルを設立する。
当時の二人がどんなものかはP115でロン・ウェインがこう言っている。

「まったく似てないふたりでしたが、パワフルなチームでした」
ジョブズは悪魔が憑いているのではないかと思うような言動をすることがあったが、逆にウォズはナイーブで、天使とたわむれているような人間だった。


かといって、ウォズは決して自分の能力に無自覚なわけではなく、役割分担をわかっていた。
ウォズの父が、ジョブズに「おまえはたいしたことをしていない。なにも作っていないじゃないか」と言うシーンがある。
ジョブズは泣きながら、パートナーシップを解消してもいいとウォズに提案するが、ウォズはそのままで良いと言う。


一方、さすがにギークらしく、ジョブズを相手に強く意見をいうこともあった。
アップルIIのとき、ジョブズは拡張スロットを2本にすると言ったが、ウォズは8本を主張した。

「ぼくが人と争うことはめったにない。でも、このときだけは違った。『どうしてもそうしたいのなら、どこかほかでコンピュータを手に入れろよ』って言ってやったんだ。」


開発者としては気持ちの良い言葉だ。こんなに良いものは自分以外に作れるわけがないというわけだ。
ただ、それに続けて「あのころのぼくは、こう言えるだけの立場にいた。でも、ずっとそうだったわけじゃない」とも言っている。
結局、アップルIIの拡張スロットは8本になる。
アップルのIPOのときも、ジョブズはとてもシビアだったが、ウォズは自分の株式を職位が高くない社員40人に安く売った。それは家を買えるくらいの額になった。
IPOの後は、あまりウォズの話は出てこなくなる。

その後

アップルIPO後、ジョブズは紆余曲折がありつつもマッキントッシュを作ることになる。
ウォズはしばらくアップルIIの部署で開発を続けるが、退職する(結局、アドバイザーとして留まることになる)。
ジョブズはアップルを追い出され、NeXT、ピクサーと活動の場所を変えていく。
NeXTでは結果的に失敗に終わり、ピクサーで資金が底を付きそうになる。
それでもジョブズはジョブズでありつづけ、ラセターとともにトイ・ストーリーを成功させる。
その間に結婚もするし、子供も生まれる。
そこまでが「スティーブ・ジョブズ1」で書かれている。


率直な印象を言うと、ジョブズはLSDもやるし風呂には入らないし嘘はつくし人の話を聞かない。
どうにもこうにもダメ人間という印象が拭えないが、強さがある。
ここぞというときの強さ、それに人を惹きつける力がある。
2は、アップルに戻るところから。ここからが本番だと思っているので、続けて、楽しく読んでいきたい。


「スティーブジョブズ」を読みはじめた

とても良い本だと思う。雰囲気としては「福翁自伝」のようだと感じる。
常識や決まりなどには捕われず自分がやりたいことをやる。その快活さと大きな志とが、福沢諭吉にも、ジョブズにもある。


読んでみて、私が意外だなと思ったのは大きく二つ、まずは「天才」では無かったこと。
リード大に入った頃はカリスマ性というほどのものは無く、後天的なものだということが書かれている。
もうひとつは、感情表現が下手だということ。
これは、意外ではないという人も多そうだが、ウォズのおやじにいろいろ言われて泣いてしまうところなど、クールとは程遠い人物であったようだ。
また、読んでいるとジョブズよりもウォズの方に感情移入してしまうところが多いのだが、エンジニアの大半はそうなんじゃないかなと思う。


ジョブズ関連の本を多く読んでいる人には「新しい内容はない」とも言われているようだが、私はそういう本は読んでいないし、楽しく読めている。
もちろん例の「祝辞」や、いくつものプレゼンテーションは見ているが、ちょうどそれが前提となって、すんなり読めている。
逆に、それらを見ていないのなら、その都度Youtubeを見ることになるのだろう。


あーだこーだ言わずに、まずは読んでおこうという本だと思う。


iPhone買ったら30番目くらいに入れるべき無料アプリ

勧められてるところを見たことがなくて、最近入れた。
いろんな意味でキラーアプリ。見るのが怖い。


iTunes App Store で見つかる iPhone、iPod touch、iPad 対応 iMisawa

Eclipseをvimっぽく使うVrapperプラグインを入れた

「イージーモードが許されるのは小学生までだよねー。」

という有名なネタがある。
それはゲームの話なわけだが、仮にゲームはそうだとして、現実は、

「イージーモードに入れるのは工夫をした人間だけだよね。」

というのが正しいと思っている。
何かをやりとげなければならない。その志が高いほど、何も考えずにぶつかっていけば難易度が高くなっていく。
ゲームでいえばハードモードとかルナティックとかいうものになる。


私は最近、膨大な量のコードを読んでいて、もともと作業量が限界に近かった。
ジリ貧になっていたところ、今週から更に忙しくなり、これはもう絶対無理という感じに。
その一番大きな原因はEclipseの習熟度の低さというか、思うような移動ができないことだ。


「もうちょっとVimみたいに動いてみろよ!」


そんなことも言いたくなる。
ああ、そうだ。
考えてみたら「もうちょっとVimみたいに動いてみろよ!」と思う人はいくらでもいるだろう。
なら、解決策もいくつかあるだろう、と検索すると出てくる。


いくつかあったが、Vrapperというのを選んだ。
Vrapper — Vim-like editing in Eclipse
Eclipseの更新サイトに入れるならこれ。
http://vrapper.sourceforge.net/update-site/stable


いくつか設定をしたけどそれは今度書くので割愛。
結果だけ書くと、超便利。
今までハードモードを強制されていたゲームがイージーモードになった。
ゲームじゃなくて仕事だけど。


こうなるともう楽しくなってくるもので、今日はたっぷりと働いてきたし、明日からのスケジュールにも光が射した。


「イージーモードの入り方を探さないなんて、小学生までだよね。」

SoftbankからauのiPhone4Sに乗り換えた感想

数日使ってみたので、つらつらと書いていく。
主にezwebメールに対する不満だが、考えると最初はSoftbankもそうだったし、Androidも各社どうしようもなかったので、やむなしとも思う。

3GSと4Sの違い

ファミコンスーパーファミコンくらい違った。特に画面。


デザインは背面カーブの方が好きなんだけど、これでもさすがAppleというくらいはカッコイイ。
持ってはじめて気づくのは、4Sは一回り小さい。3GSは太ってるなという感じ。
それと、ホームボタンと画面の感触が良くなった感じ。気のせいかもしれないけど柔らかい。

結局、Softbankとauどちらがいいのか

電波が悪すぎるSoftbank、メールがひどすぎるauということで、引き分け。

電波

期待したほどの差は無かった。(私の活動範囲では。)
ただ、山手線を移動してる最中でもガンガン切れるソフトバンクと違って「入るべき」ところではきっちり入るのがau。
地下鉄などはあまり変わらない。旧800MHz帯が使えないとこんなもんだよね、という感じ。


それより、Softbankを使っていると「ソフバンだから入らなくても仕方ないか」とか「電話したいけど、ここってソフバンの電波入るかな」などと考え、実際に電波が入らない辛さよりも精神的な苦痛の方が大きかったので、それが無くなっただけで十分価値があった。

ezwebメール

3つ文句がある。

自動受信は15分に1回だけ

まず「自動受信は15分に1回」しかできない。
そのため「ezwebメアド取得→me.comに転送設定」する人が多いと思うけど(店頭でも勧められた)、それってただの転送だから。
me.comにメールが来る→手動でezwebを受信する→返信、という手順が必要。
怠慢、短気、傲慢なプログラマにこんな手順やらせたら精神崩壊してもおかしくない。
me.comにきたものをそのまま「返信」したい。むしろ何も考えないで返信したらそうなって「あれ?違うアドレスで来ましたよ」と言われた。
もうezweb要らないんだけど、1月までガマンできるならキャリアメールの方が何も言われなくていいし、耐えるしかない。(「me.comって何?」とか言われるのが面倒。)

絵文字

絵文字が使えない。おそらく全部。
他社に使えないだけならともかく、ezweb同士でも使えない。なんだこれ。
iPhone4Sにして、しかもauだからモテる!!なんて考えてたら、絵文字も使えないダメ野郎に。
これは絵文字アプリを入れればなんとかなりそうなので、どうしても絵文字送りたくなったら探してみる。(結構どうでもいい。)

iMessage未対応

MMSもダメ。1月対応予定とか。
既に解約したiPhone3GSでiMessageが出来るだけに、なんだかなぁと。


などと文句ばかりですが、私は性格上、Softbankのまま機種変更したら「auにしていたらどうなっていたか」と考え、比較記事を読んでも「そんなこと言っても体験してみないとわかんないよな」とモヤモヤしていたことは間違いないので、乗り換えは必然でした。
結論は最初に書いたとおり現時点では引き分けですが、来年1月頃からauの方が良くなるんじゃないかと思います。

Redmineプラグインチュートリアルについて

Redmineのプラグインを作ろうと思い、redmine.jpを調べてみた。
探してみると「その他の文書」に「プラグインの開発」の項目がある。
プラグインの開発 | Redmine.JP
そこからredmine.orgのチュートリアルの日本語訳を見つけたのでやってみた。
プラグイン チュートリアル - r-labs

チュートリアルの実施

結論から言うと、プラグインを:project_menuにする箇所でエラーとなってしまった。
「メニューを拡張する。」の「プロジェクトメニューを拡張する。」にあるこのコード。

def index
  @project = Project.find(params[:project_id])
  @polls = Poll.find(:all) # @project.polls
end

controllerでvoteを呼んだときにparams[:project_id]に何も入っていないので、エラーとなる。

  @project = Project.find(params[:project_id])
  rescue ActiveRecord::RecordNotFound
    render_404
  end

ちなみに、こうするとちゃんと404が出る。(Redmine本体のコードがこうだった。)
チュートリアルで見落としたところは無いようだったので、自分で書いてみた。
毎回パラメータで渡すのは嫌な感じもあるけど、どうなんだろう。
もっと本家のコードを見て書き方を覚えていかないと。

差分

チュートリアルに記載されているコードとの差分を置いておきます。
vendor/plugins/redmine_polls/app/controllers/polls_controller.rb

class PollsController < ApplicationController
……
  def vote
    poll = Poll.find(params[:id])
    poll.vote(params[:answer])
    if poll.save
      flash[:notice] = 'Vote saved.'
-     redirect_to :action => 'index'
+     redirect_to :action => 'index', :project_id => params[:project_id]
    end
  end
……
end

vendor/plugins/redmine_polls/app/views/polls/index.html.erb

<h2>Polls</h2>
 <% @polls.each do |poll| %>
  <p>
  <%= poll[:question] %>?
-  <%= link_to 'Yes', {:action => 'vote', :id => poll[:id], :answer => 'yes'}, :method => :post %> (<%= poll[:yes] %>) /
-  <%= link_to 'No', {:action => 'vote', :id => poll[:id], :answer => 'no'}, :method => :post %> (<%= poll[:no] %>)
+  <%= link_to 'Yes', {:action => 'vote', :id => poll[:id], :answer => 'yes', :project_id => params[:project_id]}, :method => :post %> (<%= poll[:yes] %>) /
+  <%= link_to 'No', {:action => 'vote', :id => poll[:id], :answer => 'no', :project_id => params[:project_id]}, :method => :post %> (<%= poll[:no] %>)
  </p>
<% end %>