プログラミングでメシが食えるか!?

Cでのソケットプログラミングの本が良かったのと、ブログが面白いので買って読んでみた。

僕の場合はPerlからプログラミングの世界に入ったので、Cが主戦力の著者の話は参考になった。 大雑把に処理を書いてみてどういうメソッド名にしたら良いかとか考えるのは大体どの言語でも共通なのかもしれない。それから「普段と違うことをする場合にコメントを残しておく」とか。

一方、自作のライブラリを揃えておいたりサンプルソースを流用っていうのはCPANのような巨大なリポジトリを持っているperlの文化とはちょっと異なるかなと。

想定読者はプログラマーなりたてのひとかな。

冬のスマタ

やたらと鉄分が高い息子のために、大井川鉄道の一泊付きSL乗車プランに行ってみた。ネーミングがいいですね。SL降りてからのバス道が怖かったけど。

駅の向かいにSLを展示しているので早めに付いても飽きない。

1326795242

1326795245

このSLに乗った。ただゆられるだけじゃなくて色々と趣向が凝らしてあるので楽しい路線の旅だった。

1326795247

翠紅苑という宿に泊まった。温泉がなかなか気持ちよかった。料理は値段相応かな。

1326795249

1326795251

1326795253

1326795255

1326795257

ホテルの隣に元大間小学校っていうのがあって、僕の小学校もあんな感じ(田舎に住んでた)だったのでちょっと懐かしかった。

1326795259

1326795261

楽しい旅だった。

クライアントサイドのMVCを考える本

Spineっていうクライアント側でMVCを実現するWebフレームワークが面白かったので、そのライブラリの作者が書いたJavascript Web Applicationsっていう本を読んでいる。

ProductName JavaScript Web Applications
Alex Maccaw
Oreilly & Associates Inc / 3020円 ( 2011-08-30 )


先週末の温泉旅行と、今日の出張の新幹線の行き帰りで7章まで読んだので感想をちょっと書いておくが、サイ本に対してフクロウ本って言われるようになるのかなぁって感じの内容だと思うがどうなんだろう。

手を動かしながら学ぶという本ではなくて、クライアント側でMVCを実現するにはどうしたらよいかという方法論を学ぶ本なので、写経して覚えるというより、自分の中の知識を統合して一つ上のレベルに昇格する感じ。

  • Spineを一通り使えるようになっていること
  • JGPの内容を理解していること
  • Javascriptパターンを理解していること

は必須な感じ。副題がjQuery developer's Guide to Moving State to the Clientと書いてあるんだけどjQueryの知識はあんまり必要でなくて、ググッて理解できるか、該当するソースコードを読めればOKだと思います。それよりもなぜそういう実装にしないといけないのか?っていうことを考えることを求められますね。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


ProductName JavaScriptパターン ―優れたアプリケーションのための作法
Stoyan Stefanov
オライリージャパン / 2940円 ( 2011-02-16 )


静岡 もう一度泊まりたくなる宿100選

修善寺のあさばはいつか行ってみたい。

ProductName 静岡 もう一度泊まりたくなる宿100選
マイルスタッフ
マイルスタッフ / 1575円 ( 2011-03 )


風の森 秋津穂純米

無濾過生なのでシュワシュワする。さらにキリッとしていて残らない感じでさくさくいける感があるのにアルコール度17%なのでかなり酔う。

1326711381

燗付けしないタイプのなかでは好みだな。

「勉強しろ」と言わずに子供を勉強させる法

前半は体験談でないので面白くなかった。体験談である3章は参考になった。というかこれだけかな、この本は。

ProductName 「勉強しろ」と言わずに子供を勉強させる法 (PHP新書)
小林 公夫
PHP研究所 / 735円 ( 2009-05-16 )


  • 「親がなぜ?、何?」君になる
  • 子供を導くため、親も勉強しよう
  • 「ソースを頭にかければいいのかな」

二番目は背中を見てるってことですな。

アドレナリンジャンキーを読むと晴れるモヤモヤが結構あるよ

うまく言語化されて86のパターンとして収められているので「あるある!度」は高い。本で言語化されて名付けられたチームの状態や行動をどうすんのか?っていうのは読者に委ねられているので、これを読んだからといって解決するわけではない。

アドレナリンジャンキー

アドレナリン中毒組織は、考えずに反応する。そのせいで、たいていのことは流動的で、はっきりしたものや長期的なものは何もない

猛烈に働けば偉いっていう組織文化はいやですね。

ダッシュボード

強いチームと弱いチームはダッシュボードを使うが、並のチームはほとんど使わない。

失敗を個人のせいにするカルチャーだと使いにくいですね。

  • 情報を示すだけでなく判断をうながす
  • チームが主観的な報告をしないといけないときに、比較をするための枠組みがある

かかし

クライアントは、実物を見るまで、そして「これは違う」と思うまで、自分が何を欲しいのかわからない

これは個人的には経験ありすぎ。ほかでもありすぎるんだろうけど。

他に面白かったパターン

  • 「どうしてミケランジェロになれないんだ?」
  • 残業に見る予兆
  • 裸の組織
  • 身につかない教訓

茅乃舎だしが旨い

実家からもらったので使っているんだけど、これはオススメです。

CoffeeScriptでObserverパターン

javascriptパターンの7章のサンプルをCoffeeScriptでかきなおしてみた。オリジナルのコードはこれ

コンソールログを開くと実行されていることがわかる。

ProductName JavaScriptパターン ―優れたアプリケーションのための作法
Stoyan Stefanov
オライリージャパン / 2940円 ( 2011-02-16 )


CoffeeScriptで書きなおしたほうの実行結果。ターミナルで確認できるので楽ですね。

$ coffee pubsub.coffee 
Just read big news today
Just read big news today
Just read big news today
About to fall asleep reading this interesting analysis

コード。デバッグ用にprintSubscribersっていうメソッドを付けた。それからオリジナルコードはmix-inしていたので最初はfor-of文でそのとおりに書いたんだけど、for-of文でtypeof methodするとfunctionじゃなくてstringが返ってくるのが嫌だったので、継承を使って実装してみた。

class Publisher
  constructor: ->
    @subscribers = { any:[] }

  subscribe: (fn, type) ->
    type = type or 'any'
    @subscribers[type] = [] unless @subscribers[type]?
    @subscribers[type].push(fn)

  unsubscribe: (fn, type) -> @visitSubscriers('unsubscribe', fn, type)

  publish: (publication, type) -> @visitSubscriers('publish', publication, type)

  visitSubscriers: (action, arg, type) ->
    pubtype = type or 'any'
    subscribers = @subscribers[pubtype]
    for subscribe,i in @subscribers[pubtype]
      switch action
        when 'publish' then subscribe(arg)
        else @subscribers[pubtype].splice(i,1) if subscribe is arg

  printSubscribers: -> console.log(@subscribers)

class Paper extends Publisher
  daily: => @publish('big news today')
  monthly: => @publish('interesting analysis','monthly')

class Subscriber
  drinkcoffee: (paper) -> console.log('Just read '+ paper)
  sundayPreNap: (paper) -> console.log('About to fall asleep reading this '+ paper)

paper = new Paper
joe = new Subscriber
paper.subscribe(joe.drinkcoffee)
paper.subscribe(joe.sundayPreNap, 'monthly')
#paper.printSubscribers()
paper.daily()
paper.daily()
paper.daily()
paper.monthly()

この本どうなんだろう、一度読んでおくべきなのかな?

ProductName CoffeeScript: Accelerated JavaScript Development
Trevor Burnham
Pragmatic Bookshelf / 2355円 ( 2011-08-03 )


javascriptにおけるホイスト(まきあげ)

javascriptパターンの5章までで気になったとこのメモ

ProductName JavaScriptパターン ―優れたアプリケーションのための作法
Stoyan Stefanov
オライリージャパン / 2940円 ( 2011-02-16 )


new Array()の振る舞い

引数が一つの場合には配列の長さがセットされる

>var ar = new Array(5);
undefined
>ar
[]
>ar.length
5

関数のホイスト

関数宣言はホイストされるが、関数式は変数のみがホイストされる。

(function(){
  console.log(typeof hoisted); // function までhoistされる
  console.log(typeof notHoisted); // 変数のみhoistされるのでundefined

  var notHoisted = function(){
  };

  function hoisted(){
  }

}());

実行してみる

$ node t.js
function
undefined