Date:  Wed, 01 Jul 2009 17:15:02 +0900
Subject:  【オブジェクト倶楽部: 2009-21号】
X-Mail-Count: 00296

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.286 2009/07/01

■ I N D E X
┃
┣【Topics】「オブジェクト倶楽部2009夏イベント」はいよいよ来週7月7日!
┣【プログラミング】SproutCoreでカッコイイ
┣                  Webアプリケーションを作りたい [7]
┣【プログラミング】IzPackで作るクロスプラットフォームインストーラ [2]
┗【アンケート】気になるシステム業界 ホントのところ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 「オブジェクト倶楽部2009夏イベント」はいよいよ来週7月7日!
  〇 〇━━━━━━━━━━━━━ ━━・ 

オブジェクト倶楽部2009夏イベントはいよいよ来週7月7日火曜日開催です!お
申込みいただいた方へ入場チケットをお送りしましたので、当日はお忘れなく
お持ちください。
みなさまにお会いできますことを、スタッフ一同楽しみにしています!

● イベント詳細はコチラから!
→ /event/2009summer/

● イベントに関する情報はコチラのブログで随時ご紹介します!
→ http://d.hatena.ne.jp/objectclub/

● タイトル:オブジェクト倶楽部2009夏イベント
● 開催日時:2009年7月7日(火) 10:00開始
● 場    所:国立オリンピック記念青少年総合センター(代々木)
             http://nyc.niye.go.jp/
● 内    容:講演、ワークショップ
● 参 加 費:講演会3,000円、懇親会5,000円

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

こんにちは、ursmです。

前回はビューをHamlに置き換えつつ、バックログの追加と編集を実装しました。
現時点での画面イメージはこんな感じです。
http://dl.getdropbox.com/u/102724/rist/screen-capture-2.png

● バックログを削除する
追加・編集ときたら次は削除ですね。バックログを選択してから削除ボタンを
押すと消えるようにしてみます。

まずはビューを少し変えます。

-- clients/rist/english.lproj/body.haml --
:ruby
   backlogs_opts = {
     :content_value_key => 'title',
     :content_value_editable => true,
     :bind => {
       :content   => 'Rist.backlogsController.arrangedObjects',
       :selection => 'Rist.backlogsController.selection'
     }
   }

- content_for :body do
   - scroll_view :backlogs_scroll do
     = list_view :backlogs, backlogs_opts

   = button_view :title => 'Add', :action =>  
'Rist.backlogsController.add'
   = button_view :title => 'Delete', :action =>  
'Rist.backlogsController.delete'
----

backlogs_optsにselectionを追加しました。これでlist_viewの選択項目をアク
ションから取得できるようになります。また、一番下にDeleteボタンを追加し
ました。

ではdeleteアクションを実装しましょう。

-- clients/rist/controllers/backlogs.js --
require('core');

Rist.backlogsController = SC.ArrayController.create({
   add: function() {
     (snip)
   },

   delete: function() {
     var backlogs = this.get('selection');

     backlogs.forEach(function(i) {
       this.removeObject(i);
     }, this);
   }
});
----

コントローラのselectionプロパティで選択されたオブジェクトのリストが取得
できます(なぜリストなのかというと複数選択されている場合があるからです)。
それをforEachで回してremoveObjectで削除しています。

さて、これでバックログの削除ができるようになりました・・・いや、できて
いません。表示上は消えていますが、モデルそのものは削除されていません。
この問題はコントローラのdestroyOnRemovalプロパティを適切に設定してやれ
ば解消されます。

-- clients/rist/controllers/backlogs.js --
require('core');

Rist.backlogsController = SC.ArrayController.create({
   destroyOnRemoval: YES,

   (snip)
});
----

● Deleteボタンの有効/無効を切り替える
バックログを選択していない状態でDeleteボタンを押しても何も起こりません。
当たり前と言えば当たり前ですが、初めてこのアプリケーションを使うユーザ
は戸惑ってしまうでしょう。押せないときは押せないようにしておくのが筋と
いうものです。

-- english.lproj/body.haml --
:ruby
   backlogs_opts = {
     :content_value_key => 'title',
     :content_value_editable => true,
     :bind => {
       :content   => 'Rist.backlogsController.arrangedObjects',
       :selection => 'Rist.backlogsController.selection'
     }
   }

   delete_button_opts = {
     :title => 'Delete',
     :action => 'Rist.backlogsController.delete',
     :bind => {
       :enabled => 'Rist.backlogsController.hasSelection'
     }
   }

- content_for :body do
   - scroll_view :backlogs_scroll do
     = list_view :backlogs, backlogs_opts

   = button_view :title => 'Add', :action =>  
'Rist.backlogsController.add'
   = button_view delete_button_opts
----

DeleteボタンのenabledプロパティをコンロトーラのhasSelectionプロパティに
バインドしました。バックログが選択されていないときは、Deleteボタンがグ
レーアウトして押せないようになります。この程度ならイベントハンドラすら
必要ないというのは本当に良いですね。

● バックログの追加時に編集状態にする
前回実装したバックログの追加機能ですが、追加したバックログを、ダブルク
リックして編集しないといけないのがイマイチです。最初から編集状態になる
ようにしてみましょう。

-- clients/rist/controllers/backlogs.js --
require('core');

Rist.backlogsController = SC.ArrayController.create({
   destroyOnRemoval: YES,

   add: function() {
     var backlog = Rist.Backlog.newRecord({
       title: 'New Backlog'
     });

     this.pushObject(backlog);

     var list = SC.page.getPath('backlogsScroll.backlogs');
     var item = list.itemViewForContent(backlog);

     item.beginEditing();
   },

   (snip)
});
----

addアクションを変更しました。追加処理の後でモデルに対応するビューを取得
し、beginEditingメソッドを呼ぶことで編集状態にしています。

● まとめ
バックログの削除機能を中心に細々とした機能を作成しました。SproutCore1.0
の足音も聞こえる今日この頃、そろそろデカイことに取り組みたいものです。
(id:ursm)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
/community/object_ml/estimate?vol=E0015-06&choice=0
普通:
/community/object_ml/estimate?vol=E0015-06&choice=1
イマイチ:
/community/object_ml/estimate?vol=E0015-06&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【プログラミング】IzPackで作るクロスプラットフォームインストーラ [2]

こんにちは、村上です。前回はIzPackの概要とインストールまでを説明しまし
た。今回は、HelloPanelを使ってインストーラ作成方法を紹介します。

● インストーラ作成の流れ
まずはインストーラの作成の流れを説明します。作成のステップは下記のよう
になります。

 * インストーラの構成をXMLに記述する
 * インストーラで使用するファイルを用意する
 * compileコマンドでインスーラを作成する

IzPackではインストーラの構成はXMLで記述します。XMLファイルにはどのよう
な表示をするか、インストーラの実行中にユーザにどのような値を指定しても
らうかなど、インストーラの構成を記述します。またインストールされるファ
イルやインストール時に実行される処理を記述します。

compileコマンドはXMLファイルに記述された構成のインストーラを作成するた
めのコマンドです。コマンドを実行することで実行可能なjarファイル(インス
トーラ)を作成できます。

では早速、次から実際にインストーラを作成していきましょう。

● HelloPanel
新しいプログラミング言語を使うときの定番といえば、「"Hello World!"を出
力するプログラムを書く」だったりしますよね。そこでまずは、今回のインス
トーラ作成でもインストールするアプリケーションの情報を表示するだけのイ
ンストーラを作成したいと思います。(実際には何もインストールしないのでイ
ンストーラではないですが・・・)

HelloPanelはインストーラ実行中にユーザにインストールするアプリケーショ
ンの名前やバージョンなどの情報を表示するパネルです。

最初にインストーラの構成を定義するXMLファイルを用意します。ここではファ
イル名はinstall.xmlとします。

--- install.xml ---
<?xml version="1.0" encoding="UTF-8"?>
<installation version="1.0">
        <info>
                <appname>sample</appname>
                <appversion>1.0</appversion>
        </info>
        <guiprefs width="800" height="600" resizable="yes" />
        <locale>
                <langpack iso3="jpn" />
        </locale>

        <panels>
                <panel classname="HelloPanel" />
                <panel classname="FinishPanel" />
        </panels>

        <packs>
                <pack name="SamplePack" required="no">
                        <description>実際には何もインストールされません</description>
                </pack>
        </packs>
</installation>
------

install.xmlを作成したら、次はインストールするファイルを用意します。ただ
し、今回は何もインストールしないインストーラを作成するのでこの作業はな
しです。

最後にcompileコマンドでインストーラを作成します。compileコマンドは
C:\Program Files\IzPack\bin にあります。

 > compile install.xml -b . -o install.jar -k standard

compileコマンドを実行すると処理内容が出力され、カレントのフォルダに
install.jarが作成されます。
上記のcompileコマンドを実行した際の各オプションは次の内容を指定していま
す。
-b : インストーラの構成ファイルやインストーラに含めたいファイルなど、
     IzPackのコンパイラが処理するファイルのパスのベースとなるパスを指定
     します。今回はinstall.xmlのみを使用するのでカレントディレクトリを
     指定しています。
-o : 出力ファイルの名前を指定します。
-k : 作成するインストーラの種類をしていします。standardまたはwebのいず
     れかを指定します。今回は通常のインストーラを作成するのでstandardを
     指定します。

また、compileコマンドの使い方やオプションは次のように入力、実行すると表
示されます。

 > compile -?

では、作成されたインストーラを起動してみましょう。

 > java -jar install.jar

どうでしょうか?「sample 1.0のインストールへようこそ!」と表示されたイ
ンストーラが起動したはずです。このインストーラはメッセージを表示するだ
けですが、とりあえずはインストーラを作成できましたね。

● まとめ
今回は、最も単純なHelloPanelを使用したインストーラの作成方法をお送りし
ました。次回は今回作成したインストーラのinstall.xmlを元にIzPackのインス
トーラ構成ファイル、個々の機能の紹介をしていきます。
それでは、次回までさようなら。(村上)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
/community/object_ml/estimate?vol=E0018-01&choice=0
普通:
/community/object_ml/estimate?vol=E0018-01&choice=1
イマイチ:
/community/object_ml/estimate?vol=E0018-01&choice=2

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

今週は「iPhone3GS買いましたか?」のホントのところ。
先週発売された、iPhone3GS。購入を希望する方の行列や発売記念イベントの開
催などがニュースでも取り上げられていましたが、みなさまは購入されました
か?

  買いました!
     /special/kininaru/vote?vol=252&choice=0
  まだ買っていませんが買うつもりです。
     /special/kininaru/vote?vol=252&choice=1
  欲しいけど買えない・・・。
     /special/kininaru/vote?vol=252&choice=2
  今の携帯で十分なので買いません。
     /special/kininaru/vote?vol=252&choice=3
  iPhoneてなに?
     /special/kininaru/vote?vol=252&choice=4
  それは秘密です。
     /special/kininaru/vote?vol=252&choice=5
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「今年の七夕はどう過ごす?」の結果は公開中。ぜひご覧下さい。
⇒/special/kininaru/vol251/PlonePopoll_results2

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

こんにちは、編集人のナガタユウコです。今日から7月ということで、2009年の
半分がもう終わってしまったんですね。早い〜!元旦に一年の目標を立てたの
ですが、なにもできないまま半年が過ぎてしまいました。残り半年でがんばら
なくては!><
さて、夏イベントはいよいよ来週です!Topicsでもお伝えしていますが、入場
チケットを事前にお送りしておりますので、参加者のみなさまは当日忘れずに
お持ちくださいね。そして一日を十分に楽しんでいただけたら!と思います。
どうぞよろしくお願いします☆

今週の強引な一言
*** 噛む馬は終いまで噛む(ことわざ) ***
悪い癖はなかなか抜けないことのたとえ。
良い癖も悪い癖も、身についてしまうとなかなか抜けないものですよね。それ
以前に、自分に癖があることに気がついていない人も多いのではないでしょう
か。周囲の人に聞いてみると、自分でも気がついていない自分の癖を教えても
らえるかも!
出典参考:故事ことわざ辞典 東京堂出版
(ナガタユウコ)

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