Date:  Wed, 16 Sep 2009 17:03:44 +0900
Subject:  【オブジェクト倶楽部: 2009-31号】
X-Mail-Count: 00306

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.296 2009/09/16

■ I N D E X
┃
┣【プログラミング】SproutCoreでカッコイイ
┃                  Webアプリケーションを作りたい [9]
┣【PF】現場リーダーの心得 [20]
┗【アンケート】気になるシステム業界 ホントのところ

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┣【プログラミング】SproutCoreでカッコイイ
┗                  Webアプリケーションを作りたい [9]

こんにちは、ursmです。

前回はSproutCore1.0の概要を簡単にご紹介しました。今回はRistを1.0で動作
するようにしましょう。幸いにもRistのコードベースはごく小さいので、テン
プレートから作り直すことにします。まずは1.0のインストールです。

$ gem uninstall sproutcore
$ gem install sproutit-sproutcore --source http://gems.github.com/

sc-initやsc-gen、sc-serverなどのコマンドは今までと同じように使えます。
アプリケーションの雛形とモデルを生成しましょう。

$ sc-init rist
$ cd rist
$ sc-gen model Rist.Backlog

モデルを定義します。0.9ではスキーマレスでしたが、1.0では属性のデータ型
を定義するよう変更されています。

--  apps/rist/models/backlog.js --
Rist.Backlog = SC.Record.extend({
  title: SC.Record.attr(String)
});
----

フィクスチャも作成します。

-- apps/rist/fixtures/backlog.js --
sc_require('models/backlog');

Rist.Backlog.FIXTURES = [
  {
    guid: 1,
    title: 'hoge'
  },
  {
    guid: 2,
    title: 'fuga'
  }
];
----

特に変わったところはありませんね。次はコントローラです。

$ sc-gen controller Rist.backlogsController SC.ArrayController

-- apps/rist/controllers/backlogs.js --
Rist.backlogsController = SC.ArrayController.create({
  add: function() {
    // (1)
    backlog = Rist.store.createRecord(Rist.Backlog, {
      title: 'New Backlog'
    });

    // (2)
    this.pushObject(backlog);

    list = Rist.mainPage.getPath('mainPane.backlogsView.contentView');
    item = list.itemViewForContentIndex(list.length - 1);

    // (3)
    if (item) {
      item.invokeLater(item.beginEditing, 200);
    }

    return YES;
  }
});
----

処理は今までと変わりません。
Backlogオブジェクトを生成し(1)、コントローラに追加して(2)、編集状態にし
ています(3)。SC.CollectionViewのitemViewForContentメソッドがなくなった
ため、代わりにitemViewForContentIndexメソッドを使っています。

初期化時にモデルオブジェクトをコントローラに紐付けます。

-- apps/rist/main.js --
Rist.main = function main() {
  Rist.getPath('mainPage.mainPane').append();
  Rist.backlogsController.set('content', Rist.store.findAll(Rist.Backlog));
};

function main() { Rist.main(); }
----

最後はビューです。

-- apps/rist/english.lproj/main_page.js --
Rist.mainPage = SC.Page.design({
  // (1)
  mainPane: SC.MainPane.design({
    childViews: 'backlogsView toolbarView'.w(),

    // (2)
    backlogsView: SC.ScrollView.design({
      // (2')
      layout: { top: 0, bottom: 36, left: 0, right: 0 },
      backgroundColor: 'white',

      contentView: SC.ListView.design({
        contentBinding: 'Rist.backlogsController.arrangedObjects',
        selectionBinding: 'Rist.backlogsController.selection',
        contentValueKey: 'title',
        canEditContent: YES,
        canDeleteContent: YES,
        destroyOnRemoval: YES
      })
    }),

    // (3)
    toolbarView: SC.ToolbarView.design({
      layout: { bottom: 0, left: 0, right: 0, height: 36 },
      anchorLocation: SC.ANCHOR_BOTTOM,
      childViews: 'addButton'.w(),

      addButton: SC.ButtonView.design({
        layout: { centerY: 0, height: 24, left: 12, width: 100 },
        title: 'Add',
        target: 'Rist.backlogsController',
        action: 'add'
      })
    })
  })
});
----

(1) ページ全体を表すビューです。これ自体は単なるコンテナで、他のビュー
    を包含する役割を担います。
(2) バックログの一覧です。contentViewプロパティでbacklogsControllerをバ
    インドしています。
(3) ツールバーです。中にバックログを追加するボタンを配置しています。

1.0はビューのスタイル指定がより柔軟に行えるようになりました。例えば(2')
ではバックログ一覧のサイズをウィンドウ四辺からの距離で指定しています。
これだけでウィンドウサイズに追随してリサイズする処理が実現できます。

● まとめ
今までのコードをSproutCore1.0にガツンと置き換えました。次回はそろそろモ
デルの永続化に取り組みます。(id:ursm)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
/community/object_ml/estimate?vol=E0015-08&choice=0
普通:
/community/object_ml/estimate?vol=E0015-08&choice=1
イマイチ:
/community/object_ml/estimate?vol=E0015-08&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【PF】現場リーダーの心得 [20]

オブジェクト倶楽部メルマガ読者のみなさん、こんにちは。
岡島です。

早いもので、この連載も20回目となりました。ありがとうございます。
今回は今まで書かせてもらった記事のうち、アンケート結果で反響が多かった
ものを幾つかピックアップし、それぞれ振り返ってみましょう。

●「対応力と主体性」
第4回 /ml-arch/magazine/216.html

『対応力とは、お客さまやチームのメンバーに対する「おもてなし」や「おも
  いやり」の心から発揮されることが良く分かった瞬間でした。
  そしてリーダーは、自分だけがお客さまに対応していると思ってはいけませ
  ん。実はチーム全体の力で対応しているのです。そのことをメンバーにも伝
  え、対応力の強いチームを育てましょう。』

対応力と主体性がテーマの記事でした。私が新幹線の中で身動きが取れないと
き、メンバーの対応力と主体性に助けられた経験について書いています。
(ちなみに、他にも何回か新幹線での出来事をネタにしています)
「主体性」は、今でも私がよく口にする言葉の一つです。プロジェクトが混と
んとしたときやチームがまとまらないとき、周りの環境からの影響に過剰反応
せず、自分が良いと思ったことをやり遂げるには主体性が必要なのです。

●「受託開発の極意と生業」
第9回 /ml-arch/magazine/235.html

『私は「生業」という言葉を重く受け止めます。生業とは、簡単にやめること
  のできない、まさに一生物の仕事のことだと思います。
  あなたはソフトウェア開発という仕事を生業だと思えますか?』

この回は、私の2冊目の著書『受託開発の極意』のまえがきを引用し、ソフト
ウェア開発という仕事を「生業」にしたいならば、開発者は技術だけでなく、
それを活かす主体性が必要であることを説いています。

●「リーダーと委譲」
第2回 /ml-arch/magazine/205.html

『リーダーになって一番難しいと感じるのは、人に仕事を委譲することです。
  ここはプロジェクトのポイントだ!と思うほど、「万全を期して一番経験が
  ある自分がやるしかないな」と思ってしまいます。一番難しい(そして、たい
  がい一番面白い)部分の作業まで自分でやってしまいたくなるのです。』

特に現場リーダーにとって難しいのは、仕事をメンバーに委譲することだと感
じます。ついつい「俺がやったほうが早い!」と、自分でやってしまいがちだ
からです。
しかし、それを繰り返してはメンバーやプロジェクト全体の為になりません。
大事な仕事をメンバーに任せるのは不安かもしれませんが、取り越し苦労に終
わることも多いのです。

●「ベストを尽くすこと」
第11回 /ml-arch/magazine/253.html

『心をこめたお礼は「義理」に陥いることはないんだな、と実感しました。今
  回の私のようなケースは日常あまりないかもしれませんが、皆さんも感謝の
  気持ちをベストを尽くして表現してみてはいかがでしょう。ほんの少し、今
  までの自分から変われる気がしますよ。』

これは私が生まれて初めて書いた「お礼状」に関するエピソードです。この記
事で本当に伝えたかったのは、ベストを尽くすためには主体性と勇気が必要で
ある、ということです。こうすればいいかもなぁ、と考えているだけでは意味
がありません。実際に行動し結果を出すために勇気を出すこと!

● フィードバックの大切さ
こうやって振り返ってみてわかったのですが、私のお気に入りの記事と、よく
読まれている記事が一致するとは限りません。正直いまいちだなぁ、と感じた
記事の評判が良いこともあります。やはり外部評価は重要ですね。

では、今後とも「現場リーダーの心得」よろしくお願いします。(岡島)

● 『ソフトウェア開発を成功させるチームビルディング』
  現場リーダーの仕事術をチームビルディングの観点から説明しています。
  http://www.amazon.co.jp/exec/obidos/ASIN/4797352434/xpjp-22

● 『受託開発の極意〜変化はあなたから始まる。現場から学ぶ実践手法』
  受託開発の手ほどきと現場をよりよく変えていくための実践手法です。
  http://www.amazon.co.jp/exec/obidos/ASIN/4774134538/xpjp-22

● 私のブログです。リーダーネタと少々の技術ネタを扱ってます。
  http://d.hatena.ne.jp/HappymanOkajima/
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
/community/object_ml/estimate?vol=M004-19&choice=0
普通:
/community/object_ml/estimate?vol=M004-19&choice=1
イマイチ:
/community/object_ml/estimate?vol=M004-19&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■ 
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「シルバーウィークの予定は?」のホントのところ。
シルバーウィークが近づいていますね!次に9月の大型連休が出現するのは現行
法では2015年とのことで、この機会に旅行などを計画されている方も多いので
はないでしょうか?みなさまのご予定を教えてください!

  海外旅行。
     /special/kininaru/vote?vol=262&choice=0
  国内旅行。
     /special/kininaru/vote?vol=262&choice=1
  旅行はしないけどちょっとお出かけ。
     /special/kininaru/vote?vol=262&choice=2
  おうちでのんびり。
     /special/kininaru/vote?vol=262&choice=3
  仕事です・・・。
     /special/kininaru/vote?vol=262&choice=4
  それは秘密です。
     /special/kininaru/vote?vol=262&choice=5
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「9月9日は何の日?」の結果は公開中。ぜひご覧下さい。
⇒/special/kininaru/vol261/PlonePopoll_results2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人のナガタユウコです。アンケートにもありますが、今週末
からシルバーウィークですね。私は前半は旅行、後半はおうちでのんびりする
予定です。来週のメルマガは秋分の日でお休みになりますが、十分休養しリフ
レッシュして、その次の週のメルマガ以降もまたがんばります!

今週の強引な一言
*** 一を知りて二を知らず(ことわざ) ***
知識・見識が浅薄で真理を知らないこと。
分からないことを調べていて、最初の疑問が解決したら今度は別の疑問が浮か
んできた・・・なんて経験はないでしょうか?物事は単体ではなく必ず何かと
関連があるもの。最初の疑問だけで止めるのではなく、常に目的の一歩先まで
理解するよう心がけ、広く深い知識を身に付けましょう!
出典参考:故事ことわざ辞典 東京堂出版
(ナガタユウコ)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒/community/object_ml/help/
〇 免責事項、過去の記事は   ⇒/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://ObjectClub.jp/
Copyright (c)2003-2009 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.