Upgrade to Pro — share decks privately, control downloads, hide ads and more …

勉強会発表資料_130222_改.pdf

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

 勉強会発表資料_130222_改.pdf

第51回 Smalltalk 勉強会 発表資料

Avatar for Hide H A G A

Hide H A G A

February 22, 2013

Other Decks in Programming

Transcript

  1. F-Script 第2回 Mac OS X が Smalltalk になっちゃう! hide H

    A G A 芳賀 秀雄 Twitter: @hid2718 E-mail: [email protected] 第51回 Smalltalk 勉強会 発表資料 2013-02-22
  2. 本日の概要 • F-Script 日本語サイト F-Script-ja の紹介 動機/立ち上げまでの経緯/サイトマップなど • F-Script 基礎編

    林 徹也さんの第1回資料をベースに基礎知識を復習 • F-Script 実践編 実際に動かしてみよう!! • 本家ドキュメントに載っていないTipsの紹介 IB で創った nib ファイルを F-Script から使うには - Let's enjoy Cocoa Scripting !!
  3. F-Script とは • Smalltalk+α(APL 風味)な仕様のスクリプト言語 • Mac OS X Cocoa

    フレームワークを 直接利用 • オブジェクトブラウザというツールで   Cocoa オブジェクトを直接、参照/操作可能 • ネイティブ Cocoa アプリをコンパイル無しで創れる • 公式サイト : http://www.fscript.org/ • 作者   : Philippe Mougin http://www.fscript.org/prof/prof.htm • F-Script-ja: http://www-fscript-ja.github.com/
  4. F-Script-ja の紹介 1/2 • 動機 2012年7月のSmalltalk勉強会の後の林さんとの会話 日本語情報がもっと増えれば、日本でも F-Script ユーザーが増えるのではないか •

    経緯 08月 :ドキュメント翻訳を開始 11月 :翻訳の公開方法を梅澤さんに相談 12月 :Philippe Mougin に翻訳公開の確認 → 快諾 年末 :git/GitHub + iWeb で公開サイト制作 01月 :Mountain Lion での不具合対策 → 公開開始 • F-Script-ja: http://www-fscript-ja.github.com/
  5. F-Script-ja の紹介 2/2 • サイトマップ Welcome F-Script-ja のトップページ Documents 本家サイトの主要ドキュメントの翻訳公開目録

    Blog 実際の使用経験に基づく F-Script 情報の発信 Contact サイト立ち上げの動機/連絡先情報 • F-Script-ja: http://www-fscript-ja.github.com/
  6. 配布物 • 公式サイトからダウンロード • OS X 10.6~対応版 2.1: F-Script20100614.zip •

    IB コンポーネント版 F-Script • F-Script.app 本体 • ドキュメント一式 • F-Script Anywhere 等 • フレームワーク版 F-Script • ソース一式 • 読んでね/ライセンス • このバージョンは Mountain Lion では不具合あり! F-Script-ja では独自に改修したバージョンを配布中 → チュートリアル 6. → チュートリアル 6. → チュートリアル 6.
  7. 本日の概要 • F-Script 日本語サイト F-Script-ja の紹介 動機/立ち上げまでの経緯/サイトマップなど • F-Script 基礎編

    林 徹也さんの第1回資料をベースに基礎知識を復習 • F-Script 実践編 実際に動かしてみよう!! • 本家ドキュメントに載っていないTipsの紹介 IB で創った nib ファイルを F-Script から使うには - Let's enjoy Cocoa Scripting !!
  8. F-Script の二つの側面 • OOPAL という革新的な言語環境の具体的な提案 Object-Oriented Programming and Array programming

    Language integration • マイナーかつ強力な言語2つをハイブリッド!! • Smalltalk に似た構文 • APL に似た配列操作機能 • Cocoa オブジェクトスクリプティング環境の提供 • Cocoa オブジェクトを動的に操作できる • Cocoa オブジェクトのクラスも動的に定義できる → F-Script Guide 1 - 16, 21 - 27節 → F-Script Guide 17 - 20節 → チュートリアル 4 → チュートリアル 1~7 ↑今日は こちらを中心に★!
  9. • Cocoa オブジェクトを対話操作  チュートリアル 1. 2. 3. 4. 7. •

    フレームワークの学習/実験 • プロトタイピング • Cocoa スクリプティング チュートリアル 3. 4. +α • 小規模アプリをスクリプトだけで創る • Objective-C アプリに組み込んで利用 チュートリアル 6. • FSInterpreter オブジェクトを Obj-C プログラム内部から利用 • アプリケーションを統合/連携 チュートリアル 5. • AppleScript と同様のことができる ← SBApplication を利用 利用シーン ↓今日は ここを中心に★!
  10. ツール/環境 • Console • 対話処理環境 • Workspace として Browser から参照される

    • Browser • Smalltalk のブラウザと違い、ソースコードのツールではない • オブジェクトの属性やメソッドを参照/実行するツール • Inspector • オブジェクトのアドレスを見る - Inspector • ブロックの中身の参照/編集/実行 - BlockInspector • 配列の中身の参照/編集 - ArrayInspector • コアデータの中身の参照/編集 - CoreDataInspector
  11. Console • スクリプトを入力して、Return キーで実行する • 複数行スクリプト入力時の「改行」は、ctrl + Return 直接日本語を入力しようとすると、変換確定の Return

    で実行されてしまう コピペによる日本語の転記なら問題ない • ヒストリー/補完機能あり → F-Script Guide 3節の表
  12. Browser • Workspace ボタン • Workspace 変数とバインドされたオブジェクトを参照 • Classes ボタン

    • 現在利用可能な全てのクラスオブジェクトを参照 • リンクされているフレームワークで定義された全クラス • F-Script 上でユーザーが定義した全クラス • SelectView ボタン • F-Script から起動中の GUI オブジェクトを画面上から選択 • Name ボタン • 選択中のオブジェクトに変数名を付けてWorkspaceにバインドできる
  13. 編集/実行:3つの方法 • Console • 編集: ヒストリー/補完が使えるラインエディタ • 実行: Return キー

    • BlockInspector • 編集: ソースを[]で括り、変数にバインドして inspect • 実行: 起動した BlockInspector の Run ボタンを押す • Emacs メジャーモード:f-script-mode.el • 編集: M-x fs-mode で F-Script 編集モードに入る • 実行: C-cC-c で実行される 注)この f-script-mode.el は以下から入手できます。     2013-02-22 現在   https://github.com/mkhl/emacs/tree/master/emacs.d/site-lisp/modes
  14. 保存の方法 • Console • オブジェクトのアーカイブ保存/読み出しは可能 > myObject save: 'ファイル名' >

    myObject := sys load: 'ファイル名' • 入力内容(ソース)をテキストのまま保存する機能は無い • 入力内容をヒストリーで呼び出し[]で括って変数に代入 • 入力内容を、BlockObject としてアーカイブ保存すれば良い > myBlock := [ソース]. myBlock save: 'ファイル名' • BlockInspector • 編集/実行の機能はあるが、保存の機能はない • 上記の方法で、BlockObject をアーカイブして保存する ※ Macintosh HD の直下に保存されます
  15. OOPAL言語 1/2 クラス定義 • Objective-C • コンパイル前に定義 • 既存クラスにメソッド追加が できる(カテゴリー)

    • Song.h @interface Song : NSObject { NSString * name; NSString * artist; } - (NSString *)name; - (void)setName:(NSString *)newName; - (NSString *)artist; - (void)setArtist:(NSString *)newArtist; @end • Song.m #import “Song.h” @implementation Song - (NSString *)name{ ... @end • F-Script(OOPAL) • 実行時に動的に定義可能 • 既存クラスに動的にメソッド を追加できる • Song.fs Song : NSObject { name artist - name { ^name. } - setName: newName { name := newName. } - artist { ^artist. } - setArtist: newArtist { artist := newArtist. } }. “クラス定義は F-Script の実行文!” → チュートリアル 4
  16. OOPAL言語 2/2 実行環境 • Objective-C • F-Script(OOPAL) Fullspec C 言語

    Fullspec C 言語 配列操作言語 Subset Smalltalk [   ] + Fullset(Dialect) Smalltalk + Cocoa Frameworks Cocoa RunTime 捨てられた仕様 • 二項メッセージ式 • ブロック • 代入 ... CでできることはCで • 二項演算(二項メッセージ式) • 制御構造(ブロック) • 代入 ... [コンパイラ] [インタプリタ]
  17. Objective-Cとの比較 • F-Script の作者による F-Script 概説のプレゼン資料 • fscriptGoogleTechTalk2007.pdf を参照 http://www.fscript.org/documentation/fscriptGoogleTechTalk2007.pdf

    • チュートリアル 1.「F-Script で Cocoa 探検」 • 中程の「F-Script 速成講座」「ブロック」の節を参照 2013-02-22 現在 翻訳未公開 Coming soon ! :-) • チュートリアル 2.「F-Script を20分で学び ...」 • 前半の「F-Script の構文」の節を参照 2013-02-22 現在 翻訳未公開 Coming soon ! :-) 結城 浩さんが開発/運用されている「YukiWiki」に、この Wiki のユーザーの方が 書き込まれた「F-Script を20分で学び ...」の前半部分の翻訳が公開されています。
  18. Smalltalkとの比較 1/3 • 配列のリテラル表記 は {} aFSArray := {1, 2,

    'bill'} • Dictionary のリテラル表記が可能 aNSMutableDictionary := #{'one' -> 1, 'two' -> 2} • Point オブジェクトは <> • @は配列操作の特殊な演算子として利用している aNSPoint := 2<>3. aNSRect := 0<>0 extent:50<>50. • nil はオブジェクトでない • nilに対して何かメッセージを送っても常にnilが返るだけ
  19. Smalltalkとの比較 2/3 • Boolean のリテラル表記 は true,false 及び YES,NO >

    true not → NO > true == YES → YES • 文字オブジェクトが無い • '文字列'の要素は 文字 ではなく 文字列! > 'abcdefg' at:1 → 'b' • シンボルに相当するものが無い • #文字列 はメソッドそのものを表す • 数値リテラルは 同一性 が保証されない > a:=2. b:=2. a = b → YES > a:=2. b:=2. a == b → NO
  20. Smalltalkとの比較 3/3 • 文字列、配列の連結は ++ > 'ab' ++ 'cd' →

    'abcd' > {1, 2} ++ {3, 4} → {1, 2, 3, 4} • コレクションは Array, Dictionary, Set のみ • 配列のソートは OOPAL 配列操作の機能 を使って行う > ar := {8, 2, 4, 1, 2} > sorted := ar at:@(ar sort) → {1, 2, 2, 4, 8} > sorted reverse → {8, 4, 2, 2, 1} • Set の使い方: 重複要素を省く > set := NSSet alloc initWithArray:{1, 2, 2, 2, 4, 8} > set allObjects → {8, 2, 1, 4}
  21. 本日の概要 • F-Script 日本語サイト F-Script-ja の紹介 動機/立ち上げまでの経緯/サイトマップなど • F-Script 基礎編

    林 徹也さんの第1回資料をベースに基礎知識を復習 • F-Script 実践編 実際に動かしてみよう!! • 本家ドキュメントに載っていないTipsの紹介 IB で創った nib ファイルを F-Script から使うには - Let's enjoy Cocoa Scripting !!
  22.   デモ 1/2 • FollowingCircleView.fs • Processing.js のサンプルプログラムの F-Script 版

    → ウィンドウの外に出してあげよう! • チュートリアル 基礎 4. PsychedelicCircleView の応用 → ★印の部分の知識は別途 • ポイント • タイトルバーの無い透明なウィンドウの出し方 • NSView のサブクラスの作り方 • NSTimer と NSView の drawRect: を使ったアニメーション • マウストラッキングの方法 → 参考)マウス移動のトラッキング • easing 処理 → 書籍)Getting Started with Processing Cocoa Scripting ★ ★
  23.   デモ 2/2 • F-Script で F-Script 自身を 操作/改造する •

    インタラクティブな スクリプティング セッションの例 → 以下の様に、コンソールに順に入力して、起こることを見て下さい • app := NSApplication sharedApplication. • win := (app windows) at: 0. • win setAlphaValue: 0.5. • win setAlphaValue: 1. • slider := NSSlider alloc initWithFrame:(0<>200 extent: 200<>50). • slider setFloatValue: 1.0. “スライダの初期値を設定” ここで、ブラウザの SelectView ボタンで、コンソールのビュー(テキストエリア)を捕捉する。 そして、このオブジェクトを選択して、Name ボタンで sview という変数名にバインドする。 これで、コンソールから、変数名 sview でコンソールのビューにアクセスできるようになった。 その上で、続けて以下のように入力する。 • sview addSubview: slider. • slider setTarget: [:sender | win setAlphaValue:(sender floatValue)]. • slider setAction: #value: Cocoa Scripting Step 1 Step 2 Step 3 Step 4 Step 5
  24.   必要な知識 1/3 • Cocoa Scripting に必要な知識 • F-Script の知識 →

    F-Script-ja の Documents ページを参照 • F-Script Guide • チュートリアル 基礎:1〜7 • Cocoa framework の知識 • Cocoa 基礎ガイド(日本語版) (pdf) • Cocoa リファレンス + Cocoa Browser Air • Objective-C + Cocoa 開発に関する各種文献 • 市販の入門書:Learning Cocoa with Objective-C など • ネット上の各種解説記事 Cocoa Scripting
  25.   必要な知識 2/3 • F-Script Guide • 使い方の体系的解説 • 01節〜16節:

    Smalltalk 関連の構文規則/例題 • 17節〜21節: 配列言語 関連の構文規則/例題 • 22節〜27節: F-Script 全体に関する事項 • 独自クラス/カテゴリーの網羅的解説 • 28節〜57節: F-Script 独自の拡張 API リファレンス • F-Script が独自に Cocoa に追加している機能の網羅的な解説 • FSNS〜という名称は、既存のNS〜クラスに追加されたカテゴリー • FSクラス名という名称は、F-Script で独自に追加されたクラス Cocoa Scripting
  26.   必要な知識 3/3 Cocoa Scripting • チュートリアル 基礎 1. F-Script

    で Cocoa 探検 オブジェクトブラウザの使い方/「Block」の簡単な解説 2. F-Script を 20分で学び、Core Image で遊んでみよう 前半:F-Script 構文の入門/後半:QuartzCore.frameworkを使った画像処理のデモ 3. F-Script で Cocoa スクリプティング IB を使わず、スクリプトだけで Cocoa アプリケーションを作る 4. F-Script で Cocoa クラスを創る カスタムクラスの作り方/NSTimer, mouse イベント処理, ... 5. F-Script で Mac の様々なアプリケーションを操作する SBApplication オブジェクトを使って AppleScript と同様に Cocoa アプリを外部から操作する例題 6. Cocoa アプリケーションに F-Script を埋め込む 読者自身の Objective-C プログラムの内部で F-Script コードを実行する具体的な方法の解説 7. F-Script で Mac OS X のフレームワーク群にアクセスする Cocoa フレームワークを F-Script で直接いじるデモ/F-Script に自動リンクされるフレームワーク一覧
  27. 実践: doit ! 1/2 Cocoa Scripting • 「St 勉強会 配付

    2013-02-22」フォルダの中身 • 本日のプレゼン資料 • F-Script ML 対応リビルド版 • FollowingCircleView.fs • 1-HelloWorld.fs • 2-Rectangle.fs • 3-DraggedDot.fs • F-Script Guide(原文).pdf • Cocoa 基礎ガイド.pdf
  28. 実践: doit ! 2/2 Cocoa Scripting • チュートリアルのサンプルを動かしてみよう! • チュートリアル

    3 : IB を使わずに GUI アプリを創る • チュートリアル 4 : カスタムクラスの作り方 • 本日の配付サンプルを動かしてみよう! • 1- HelloWorld.fs : ウィンドウに文字を描く • 2- Rectangle.fs : ウィンドウに図形を描く • 3- DraggedDot.fs : マウスイベントの処理 • コンソールウィンドウを あれこれ改造してみよう! • app := NSApplication sharedApplication → Window を捕捉 • オブジェクトブラウザの「SelectView」「Name」で捕捉 • setTitle: : タイトルバーの名前を変える • setAlphaValue: : ウィンドウの透明度を変える • setStyleMask: : ウィンドウのタイトルバーとボタンを...
  29. 本日の概要 • F-Script 日本語サイト F-Script-ja の紹介 動機/立ち上げまでの経緯/サイトマップなど • F-Script 基礎編

    林 徹也さんの第1回資料をベースに基礎知識を復習 • F-Script 実践編 実際に動かしてみよう!! • 本家ドキュメントに載っていないTipsの紹介 IB で創った nib ファイルを F-Script から使うには - Let's enjoy Cocoa Scripting !!
  30. additional Tips 1/2 • IB で創った GUI(nib)を F-Script から使うには → チュートリアル3では

    IB を使わずに GUI を作りましたが IB も使えます! 【手順】 • IB で GUI を創り、.nib 形式で保存する • F-Script のコードから NSNib を使って読み込む → nib が ~.app バンドル内部にあるかどうかで方法が違う → nib の Owner: を NSApplication オブジェクト に指定 • app から nib のオブジェクトを辿り、変数に捕捉 → プロトタイピングなら、ブラウザの「SelectView」+「Name」
  31. additional Tips 2/2 • NSNib を使った nib の読み込み方 • nib

    を F-Script.app バンドル内部に置いた場合 app := NSApplication sharedApplication. nib := (NSNib alloc) initWithNibNamed: 'nibName.nib' bundle: nil. result := nib instantiateNibWithOwner: app topLevelObjects: nil. • nib が .app バンドルの外(Desktop の例)にある場合 app := NSApplication sharedApplication. file := 'file://localhost/Users/userName/Desktop/nibName.nib'. url := NSURL URLWithString: file. nib2 := (NSNib alloc) initWithContentsOfURL: url. result2 := nib2 instantiateNibWithOwner: app topLevelObjects: nil.
  32. Future Work • Back to Jan. 2011 第28回 Smalltalk 勉強会

    by 林さん • Console の日本語入力対応 • ドキュメントの翻訳 【公開開始】 • 何かカッコ(イイ|ワルイ)サンプル 【制作開始】 • OOPAL を他の Smalltalk 処理系に移植する • 追加: Feb. 2013 第51回 Smalltalk 勉強会 by 芳賀 • Reflection Methods を追加する → 既にある!?