SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Sugarcube
12年10月27日土曜日
http://www.slideshare.net/saishu/sugarcube




12年10月27日土曜日
自己紹介


                   元Apple製品開発者

               -SNAps 3270/5250
                日本語版製品責任者, メインプログラマー

               -DAL(Data Access Language)
               -Taligent
               -General Magic



12年10月27日土曜日
apple.com
12年10月27日土曜日
Taligent(タリジェント)は、1992年にアップルコンピュータとIBMが共同で設立した会社、お
      よびその会社の開発していたオブジェクト指向の次世代オペレーティングシステムの名称であ
      る[1][2][3]。これは1991年のIBMとアップルの包括的提携の実現化の1つ[4]で、1994年にはヒュ
      ーレット・パッカードも資本参加した[5]。

      アップル社内で進められていた次世代OS"Pink"のプロジェクトを引き継ぎ、PowerPCを搭載
      したオープンアーキテクチャ(PReP、後にCHRP)マシン、カレイダまたはスクリプトXと呼
      ばれた次世代開発環境とセットで、AIM連合の次世代環境として計画されていた[6]。

      タリジェントOSは、完全にオブジェクト指向のオペレーティングシステムで、マイクロカー
      ネルを採用してPowerPCやインテルなどのCPU上で稼働し、AIX、 OS/2、Windows NT、
      MacOSなどのパーソナリティ(マイクロカーネル上の互換環境)も同時に稼働できるとされ
      た。またIBM Workplace OS上で稼働するパーソナリティ(OS)の1つともされた。

      のちにタリジェントOSは、フレームワークCommonPointの開発に変更され、1994年に発表
      された[7]。CommonPointはC++で開発され、 AIX, HP-UX, OS/2, Windows NTに対応した。

      1996年にタリジェントはIBMに吸収され、プロジェクトは中止された[8][9]。IBMは
      CommonPointを1997年に販売終了した[10]。タリジェントの開発していたフレームワークの一
      部は、IBMオープンクラスライブラリ(IOCL)や、JDK (Java Development Kit)の国際化対応部
      分などに引き継がれた。
                                                         Wikipediaより

12年10月27日土曜日
使うは天国、作るは地獄
12年10月27日土曜日
使うは天国、作るも天国




12年10月27日土曜日
http://www.slideshare.net/saishu/sugarcube




12年10月27日土曜日
Rubymotionのメーリングリストで
                最近話題になっているSugarcube


               https://github.com/rubymotion/sugarcube




12年10月27日土曜日
あまあまな名前に、つい
                   「Sugarっち!」
               と言ってしまうワイルドなあなたも。




12年10月27日土曜日
12年10月27日土曜日
思わずにっこり




12年10月27日土曜日
SugarCube started out as a Fusionbox project
               (see the announcement), but as its popularity
               increased, the decision was made to offer it to
               the rubymotion community, in the spirit of
               open-source and collaboration. It is a great
               compliment to teacup, especially when paired
               with sweettea!




12年10月27日土曜日
Teacup
               A community-driven DSL for creating user interfaces on the
               iphone.
               Using teacup, you can easily create and style layouts while
               keeping your code dry. The goal is to offer a rubyesque (well,
               actually a rubymotion-esque) way to create interfaces
               programmatically.




               sweettea
               teacup	
  +	
  sugarcube	
  =	
  sweettea




12年10月27日土曜日
導入



12年10月27日土曜日
gem	
  install	
  sugarcube

               #	
  or	
  in	
  Gemfile
               gem	
  'sugarcube'

               #	
  in	
  Rakefile
               require	
  'sugarcube'



12年10月27日土曜日
Programming

                                          motioncast #4
                http://motioncasts.tv/4-sugarcube-and-geomotion/




12年10月27日土曜日
$motion create scrollview
               Create scrollview
               Create scrollview/.gitignore
               Create scrollview/Rakefile
               Create scrollview/app
               Create scrollview/app/app_delegate.rb
               Create scrollview/resources
               Create scrollview/spec
               Create scrollview/spec/main_spec.rb
        $


12年10月27日土曜日
$cd scrollview/
           $gem install bundler
           Fetching: bundler-1.2.1.gem (100%)
           Successfully installed bundler-1.2.1
           1 gem installed
           Building YARD (yri) index for bundler-1.2.1...
           $




12年10月27日土曜日
$bundle init
        Writing new Gemfile to /Users/saishu/Develop/scrollview/Gemfile
        $




12年10月27日土曜日
12年10月27日土曜日
Gemfile


               # A sample Gemfile
               source "https://rubygems.org"

               # gem "rails"
               gem 'rubymotion_generators'
               gem 'sugarcube'
               gem 'geomotion'



12年10月27日土曜日
$bundle
        Fetching gem metadata from https://rubygems.org/...
        Installing geomotion (0.0.2)
        Installing thor (0.16.0)
        Installing rubymotion_generators (0.0.3)
        Using sugarcube (0.11)
        Using bundler (1.2.1)
        Your bundle is complete! Use `bundle show [gemname]` to see where a
        bundled gem is installed.
        $



12年10月27日土曜日
MountainLionにUpdateした人は
                Command Line ToolsをXcodeから
               もう一度インストールすることを忘れずに


12年10月27日土曜日
Rakefile
         # -*- coding: utf-8 -*-
         $:.unshift("/Library/RubyMotion/lib")
         require 'motion/project'
         require 'bundler'
         Bundler.require

         Motion::Project::App.setup do |app|
          # Use `rake config' to see complete project settings.
          app.name = 'scrollview'
         end



12年10月27日土曜日
$rake
          Build ./build/iPhoneSimulator-6.0-Development
         Compile ./app/app_delegate.rb

               (途中省略)
        Simulate ./build/iPhoneSimulator-6.0-Development/scrollview.app
       (main)>




               本当はもっとたくさんコンパイルされます。

12年10月27日土曜日
12年10月27日土曜日
view controllerを作成



      $motion_g vc home
           create app/controllers/home_view_controller.rb
           insert app/controllers/home_view_controller.rb
      $




12年10月27日土曜日
class	
  HomeViewController	
  <	
  UIViewController
      	
  	
  def	
  viewDidLoad
      	
  	
  	
  	
  super
      	
  	
  	
  	
  scroll_frame	
  =	
  view.bounds

      	
  	
  	
  	
  scroll	
  =	
  UIScrollView.alloc.initWithFrame(scroll_frame)
      	
  	
  	
  	
  scroll.pagingEnabled	
  =	
  true
      	
  	
  	
  	
  scroll.contentSize	
  =	
  CGSizeMake(scroll_frame.width	
  *	
  3,	
  scroll_frame.height)

      	
  	
  	
  	
  3.times	
  do	
  |i|
      	
  	
  	
  	
  	
  	
  subframe	
  =	
  scroll_frame.right(scroll_frame.width	
  *	
  i)
      	
  	
  	
  	
  	
  	
  subview	
  =	
  UIView.alloc.initWithFrame(subframe)
      	
  	
  	
  	
  	
  	
  subview.backgroundColor	
  =	
  [rand	
  *	
  255,	
  rand	
  *	
  255,	
  rand	
  *	
  255].uicolor
      	
  	
  	
  	
  	
  	
  scroll	
  <<	
  subview
      	
  	
  	
  	
  	
  	
  header_frame	
  =	
  subview.bounds.down(30).right(30).width(150).height(20)
      	
  	
  	
  	
  	
  	
  header_label	
  =	
  UILabel.alloc.initWithFrame	
  header_frame
      	
  	
  	
  	
  	
  	
  header_label.text	
  =	
  "This	
  is	
  page	
  #{i	
  +	
  1}"
      	
  	
  	
  	
  	
  	
  header_label.backgroundColor	
  =	
  :clear.uicolor
      	
  	
  	
  	
  	
  	
  subview	
  <<	
  header_label

      	
  	
  	
  	
  	
  	
  sublabel	
  =	
  UILabel.alloc.initWithFrame(header_frame.below(100).width(200).centered_in(subframe))
      	
  	
  	
  	
  	
  	
  sublabel.text	
  =	
  "lorem	
  ipsum	
  dolor	
  amet..."
      	
  	
  	
  	
  	
  	
  sublabel.backgroundColor	
  =	
  :clear.uicolor
      	
  	
  	
  	
  	
  	
  subview	
  <<	
  sublabel
      	
  	
  	
  	
  end

      	
  	
  	
  	
  view	
  <<	
  scroll
      	
  	
  end

      	
  	
  def	
  viewDidUnload
      	
  	
  	
  	
  super
      	
  	
  	
  	
  #	
  Release	
  any	
  retained	
  subviews	
  of	
  the	
  main	
  view.
      	
  	
  end

      	
  	
  def	
  shouldAutorotateToInterfaceOrientation(interfaceOrientation)
      	
  	
  	
  	
  interfaceOrientation	
  ==	
  UIInterfaceOrientationPortrait
      	
  	
  end
      end




12年10月27日土曜日
include	
  SugarCube::Adjust

  class	
  AppDelegate
  	
  	
  def	
  application(application,	
  didFinishLaunchingWithOptions:launchOptions)
  	
  	
  	
  	
  @window	
  =	
  UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
  	
  	
  	
  	
  @window.makeKeyAndVisible
  	
  	
  	
  	
  home_controller	
  =	
  HomeViewController.alloc.init
  	
  	
  	
  	
  @window.rootViewController	
  =	
  home_controller
  	
  	
  	
  	
  true
  	
  	
  end
  end




12年10月27日土曜日
$rake
  	
  	
  	
  	
  	
  Build	
  ./build/iPhoneSimulator-­‐6.0-­‐Development
  	
  	
  	
  Compile	
  ./app/app_delegate.rb
  	
  	
  	
  Compile	
  ./app/controllers/home_view_controller.rb
  	
  	
  	
  	
  	
  	
  Link	
  ./build/iPhoneSimulator-­‐6.0-­‐Development/scrollview.app/scrollview
  	
  	
  	
  	
  Create	
  ./build/iPhoneSimulator-­‐6.0-­‐Development/scrollview.dSYM
  	
  	
  Simulate	
  ./build/iPhoneSimulator-­‐6.0-­‐Development/scrollview.app
  (main)>	
  




12年10月27日土曜日
12年10月27日土曜日
今日は時間がないので
               REPLの便利機能をちょっとだけ




12年10月27日土曜日
(UILabel(#9626020, [[30.0, 30.0...)>   tree
  0: . UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]])
  1: `-- UIView(#96239d0, [[0.0, 20.0], [320.0, 460.0]])
  2: `-- UIScrollView(#96240e0, [[0.0, 0.0], [320.0, 460.0]])
  3:      +-- UIView(#9625860, [[0.0, 0.0], [320.0, 460.0]])
  4:      | +-- UILabel(#9626020, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 1")
  5:      | `-- UILabel(#9628100, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...")
  6:      +-- UIView(#9628690, [[320.0, 0.0], [320.0, 460.0]])
  7:      | +-- UILabel(#96289f0, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 2")
  8:      | `-- UILabel(#9628c90, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...")
  9:      +-- UIView(#96290c0, [[640.0, 0.0], [320.0, 460.0]])
 10:       | +-- UILabel(#9629440, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 3")
 11:       | `-- UILabel(#9629750, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...")
 12:       +-- UIImageView(#9661670, [[0.0, 453.0], [320.0, 7.0]])
 13:       `-- UIImageView(#96617d0, [[313.0, 0.0], [7.0, 460.0]])

=> UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]])
(UILabel(#9626020, [[30.0, 30.0...)>




12年10月27日土曜日
UIWindow

    UIView

      UIScrollView




12年10月27日土曜日
(UILabel(#9626020,	
  [[30.0,	
  30.0...)>	
  superview
  =>	
  UIView(#9625860,	
  [[0.0,	
  0.0],	
  [320.0,	
  460.0]]),	
  child	
  of	
  UIScrollView(#96240e0)
  (UILabel(#9626020,	
  [[30.0,	
  30.0...)>	
  superview.superview
  =>	
  UIScrollView(#96240e0,	
  [[0.0,	
  0.0],	
  [320.0,	
  460.0]]),	
  child	
  of	
  UIView(#96239d0)
  (UILabel(#9626020,	
  [[30.0,	
  30.0...)>	
  




12年10月27日土曜日
(UILabel(#9626020, [[30.0, 30.0...)>   tree
  0: . UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]])
  1: `-- UIView(#96239d0, [[0.0, 20.0], [320.0, 460.0]])
  2: `-- UIScrollView(#96240e0, [[0.0, 0.0], [320.0, 460.0]])            superview
  3:      +-- UIView(#9625860, [[0.0, 0.0], [320.0, 460.0]])               superview
  4:      | +-- UILabel(#9626020, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 1")
  5:      | `-- UILabel(#9628100, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...")
  6:      +-- UIView(#9628690, [[320.0, 0.0], [320.0, 460.0]])
  7:      | +-- UILabel(#96289f0, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 2")
  8:      | `-- UILabel(#9628c90, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...")
  9:      +-- UIView(#96290c0, [[640.0, 0.0], [320.0, 460.0]])
 10:       | +-- UILabel(#9629440, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 3")
 11:       | `-- UILabel(#9629750, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...")
 12:       +-- UIImageView(#9661670, [[0.0, 453.0], [320.0, 7.0]])
 13:       `-- UIImageView(#96617d0, [[313.0, 0.0], [7.0, 460.0]])

=> UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]])
(UILabel(#9626020, [[30.0, 30.0...)>




12年10月27日土曜日
(UILabel(#9626020, [[30.0, 30.0...)> adjust self
=> UILabel(#9626020, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 1"), child of UIView(#9625860)
(UILabel(#9626020, [[30.0, 30.0...)> right 10
[[40.0, 30.0], [150.0, 20.0]]
=> UILabel(#9626020, [[40.0, 30.0], [150.0, 20.0]], text: "This is page 1"), child of UIView(#9625860)
(UILabel(#9626020, [[40.0, 30.0...)> r 10
[[50.0, 30.0], [150.0, 20.0]]
=> UILabel(#9626020, [[50.0, 30.0], [150.0, 20.0]], text: "This is page 1"), child of UIView(#9625860)




12年10月27日土曜日
#	
  if	
  you	
  are	
  in	
  the	
  REPL,	
  you	
  might	
  not	
  be	
  able	
  to	
  click	
  on	
  the	
  
      view	
  you	
  want...
      >	
  adjust	
  superview.subviews[4].subviews[1]
      >	
  up	
  1
      >	
  down	
  1	
  	
  #	
  same	
  as	
  up	
  -­‐1,	
  obviously
      >	
  down	
  	
  #	
  defaults	
  to	
  1	
  anyway
      >	
  left	
  1
      >	
  right	
  1	
  	
  #	
  same	
  as	
  up	
  -­‐1,	
  obviously
      >	
  left	
  	
  #	
  =>	
  left	
  1
      >	
  origin	
  10,	
  12	
  	
  #	
  move	
  to	
  x:10,	
  y:12
      >	
  wider	
  1
      >	
  thinner	
  1
      >	
  taller	
  	
  #	
  =>	
  taller	
  1
      >	
  shorter	
  	
  #	
  =>	
  shorter	
  1
      >	
  size	
  100,	
  10	
  	
  #	
  set	
  size	
  to	
  width:100,	
  height:	
  10
      >	
  shadow(opacity:	
  0.5,	
  offset:	
  [0,	
  0],	
  color:	
  :black,	
  radius:	
  1)	
  
      #	
  and	
  path,	
  which	
  is	
  a	
  CGPath	
  object.
      >	
  center	
  	
  #	
  See	
  `Centering`	
  section	
  below
      >	
  restore	
  	
  #	
  original	
  frame	
  and	
  shadow	
  is	
  saved	
  when	
  you	
  call	
  
      `adjust`



12年10月27日土曜日
UIViewControllerの構造を調べたい時はrootを使う



    (UILabel(#9626020, [[50.0, 30.0...)> tree root
     0: . #<HomeViewController:0x9623010>

    => #<HomeViewController:0x9623010>




12年10月27日土曜日
その他、便利な機能が盛りだくさん



           https://github.com/rubymotion/sugarcube




12年10月27日土曜日
おまけ
12年10月27日土曜日
BasS

          ランディ・バース(Randy William Bass, 1954年3月13日 - )は、アメリカ
          合衆国オクラホマ州ロートン生まれの元プロ野球選手(内野手)、政治家。

          2004年からオクラホマ州議会の上院議員(民主党)。




12年10月27日土曜日
BaaS
               (Backend as a Service)




12年10月27日土曜日
12年10月27日土曜日
12年10月27日土曜日
ログイン管理とかセーブデータ管理とか
   プッシュとかをクラウド側でサクッと対応してくれる


                       ので


               iOS開発者はそんなこと知らなくてもよい




12年10月27日土曜日
セーブデータ




12年10月27日土曜日
# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project'
require 'bundler'
Bundler.require

Motion::Project::App.setup do |app|
 # Use `rake config' to see complete project settings.
 app.name = 'parse'
 app.libs += %W(/usr/lib/libz.1.1.3.dylib /usr/lib/libsqlite3.dylib)
 app.frameworks += %w(AudioToolbox Accounts AdSupport CFNetwork CoreGraphics CoreLocatiion Social
StoreKit SystemConfiguration MobileCoreServices Security QuartzCore)
  app.vendor_project('vendor/Parse.framework',
             :static,
             :products => ['Parse'],
             :headers_dir => 'Headers')
end




12年10月27日土曜日
class AppDelegate
 def application(application,
didFinishLaunchingWithOptions:launchOptions)
   Parse.setApplicationId(".......", clientKey:".....")

    obj = PFObject.objectWithClassName("TestObject")
    obj.setObject("bar", forKey:"foo")
    obj.save()

  true
 end
end



12年10月27日土曜日
https://www.parse.com/




12年10月27日土曜日

Mais conteúdo relacionado

Semelhante a Sugarcubeをはじめよう

JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+Hiroaki Okubo
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
Ruby which Supports Social Platform
Ruby which Supports Social PlatformRuby which Supports Social Platform
Ruby which Supports Social PlatformKoichiro Ohba
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたYukimitsu Izawa
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 
第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8NISHIMOTO Keisuke
 
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説Samir Hammoudi
 
mobylet ケータイサイト30分クッキング
mobylet ケータイサイト30分クッキングmobylet ケータイサイト30分クッキング
mobylet ケータイサイト30分クッキングShin Takeuchi
 
【Techbuzz】titanium資料
【Techbuzz】titanium資料【Techbuzz】titanium資料
【Techbuzz】titanium資料洋平 前田
 
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようNTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようMidori Oge
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜Shuji Yamada
 
バージョンアップに負けないためのプラクティス
バージョンアップに負けないためのプラクティスバージョンアップに負けないためのプラクティス
バージョンアップに負けないためのプラクティスYuji Tokuda
 
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~de:code 2017
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Takuya Fujimura
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞYoichi Toyota
 

Semelhante a Sugarcubeをはじめよう (20)

JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Ruby which Supports Social Platform
Ruby which Supports Social PlatformRuby which Supports Social Platform
Ruby which Supports Social Platform
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみた
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
PhoneGap Introduction
PhoneGap IntroductionPhoneGap Introduction
PhoneGap Introduction
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8
 
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
 
mobylet ケータイサイト30分クッキング
mobylet ケータイサイト30分クッキングmobylet ケータイサイト30分クッキング
mobylet ケータイサイト30分クッキング
 
【Techbuzz】titanium資料
【Techbuzz】titanium資料【Techbuzz】titanium資料
【Techbuzz】titanium資料
 
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようNTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
 
バージョンアップに負けないためのプラクティス
バージョンアップに負けないためのプラクティスバージョンアップに負けないためのプラクティス
バージョンアップに負けないためのプラクティス
 
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞ
 
RoboVM
RoboVMRoboVM
RoboVM
 

Sugarcubeをはじめよう

  • 3. 自己紹介 元Apple製品開発者 -SNAps 3270/5250  日本語版製品責任者, メインプログラマー -DAL(Data Access Language) -Taligent -General Magic 12年10月27日土曜日
  • 5. Taligent(タリジェント)は、1992年にアップルコンピュータとIBMが共同で設立した会社、お よびその会社の開発していたオブジェクト指向の次世代オペレーティングシステムの名称であ る[1][2][3]。これは1991年のIBMとアップルの包括的提携の実現化の1つ[4]で、1994年にはヒュ ーレット・パッカードも資本参加した[5]。 アップル社内で進められていた次世代OS"Pink"のプロジェクトを引き継ぎ、PowerPCを搭載 したオープンアーキテクチャ(PReP、後にCHRP)マシン、カレイダまたはスクリプトXと呼 ばれた次世代開発環境とセットで、AIM連合の次世代環境として計画されていた[6]。 タリジェントOSは、完全にオブジェクト指向のオペレーティングシステムで、マイクロカー ネルを採用してPowerPCやインテルなどのCPU上で稼働し、AIX、 OS/2、Windows NT、 MacOSなどのパーソナリティ(マイクロカーネル上の互換環境)も同時に稼働できるとされ た。またIBM Workplace OS上で稼働するパーソナリティ(OS)の1つともされた。 のちにタリジェントOSは、フレームワークCommonPointの開発に変更され、1994年に発表 された[7]。CommonPointはC++で開発され、 AIX, HP-UX, OS/2, Windows NTに対応した。 1996年にタリジェントはIBMに吸収され、プロジェクトは中止された[8][9]。IBMは CommonPointを1997年に販売終了した[10]。タリジェントの開発していたフレームワークの一 部は、IBMオープンクラスライブラリ(IOCL)や、JDK (Java Development Kit)の国際化対応部 分などに引き継がれた。 Wikipediaより 12年10月27日土曜日
  • 9. Rubymotionのメーリングリストで 最近話題になっているSugarcube https://github.com/rubymotion/sugarcube 12年10月27日土曜日
  • 10. あまあまな名前に、つい 「Sugarっち!」 と言ってしまうワイルドなあなたも。 12年10月27日土曜日
  • 13. SugarCube started out as a Fusionbox project (see the announcement), but as its popularity increased, the decision was made to offer it to the rubymotion community, in the spirit of open-source and collaboration. It is a great compliment to teacup, especially when paired with sweettea! 12年10月27日土曜日
  • 14. Teacup A community-driven DSL for creating user interfaces on the iphone. Using teacup, you can easily create and style layouts while keeping your code dry. The goal is to offer a rubyesque (well, actually a rubymotion-esque) way to create interfaces programmatically. sweettea teacup  +  sugarcube  =  sweettea 12年10月27日土曜日
  • 16. gem  install  sugarcube #  or  in  Gemfile gem  'sugarcube' #  in  Rakefile require  'sugarcube' 12年10月27日土曜日
  • 17. Programming motioncast #4 http://motioncasts.tv/4-sugarcube-and-geomotion/ 12年10月27日土曜日
  • 18. $motion create scrollview Create scrollview Create scrollview/.gitignore Create scrollview/Rakefile Create scrollview/app Create scrollview/app/app_delegate.rb Create scrollview/resources Create scrollview/spec Create scrollview/spec/main_spec.rb $ 12年10月27日土曜日
  • 19. $cd scrollview/ $gem install bundler Fetching: bundler-1.2.1.gem (100%) Successfully installed bundler-1.2.1 1 gem installed Building YARD (yri) index for bundler-1.2.1... $ 12年10月27日土曜日
  • 20. $bundle init Writing new Gemfile to /Users/saishu/Develop/scrollview/Gemfile $ 12年10月27日土曜日
  • 22. Gemfile # A sample Gemfile source "https://rubygems.org" # gem "rails" gem 'rubymotion_generators' gem 'sugarcube' gem 'geomotion' 12年10月27日土曜日
  • 23. $bundle Fetching gem metadata from https://rubygems.org/... Installing geomotion (0.0.2) Installing thor (0.16.0) Installing rubymotion_generators (0.0.3) Using sugarcube (0.11) Using bundler (1.2.1) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. $ 12年10月27日土曜日
  • 24. MountainLionにUpdateした人は Command Line ToolsをXcodeから もう一度インストールすることを忘れずに 12年10月27日土曜日
  • 25. Rakefile # -*- coding: utf-8 -*- $:.unshift("/Library/RubyMotion/lib") require 'motion/project' require 'bundler' Bundler.require Motion::Project::App.setup do |app| # Use `rake config' to see complete project settings. app.name = 'scrollview' end 12年10月27日土曜日
  • 26. $rake Build ./build/iPhoneSimulator-6.0-Development Compile ./app/app_delegate.rb (途中省略) Simulate ./build/iPhoneSimulator-6.0-Development/scrollview.app (main)> 本当はもっとたくさんコンパイルされます。 12年10月27日土曜日
  • 28. view controllerを作成 $motion_g vc home create app/controllers/home_view_controller.rb insert app/controllers/home_view_controller.rb $ 12年10月27日土曜日
  • 29. class  HomeViewController  <  UIViewController    def  viewDidLoad        super        scroll_frame  =  view.bounds        scroll  =  UIScrollView.alloc.initWithFrame(scroll_frame)        scroll.pagingEnabled  =  true        scroll.contentSize  =  CGSizeMake(scroll_frame.width  *  3,  scroll_frame.height)        3.times  do  |i|            subframe  =  scroll_frame.right(scroll_frame.width  *  i)            subview  =  UIView.alloc.initWithFrame(subframe)            subview.backgroundColor  =  [rand  *  255,  rand  *  255,  rand  *  255].uicolor            scroll  <<  subview            header_frame  =  subview.bounds.down(30).right(30).width(150).height(20)            header_label  =  UILabel.alloc.initWithFrame  header_frame            header_label.text  =  "This  is  page  #{i  +  1}"            header_label.backgroundColor  =  :clear.uicolor            subview  <<  header_label            sublabel  =  UILabel.alloc.initWithFrame(header_frame.below(100).width(200).centered_in(subframe))            sublabel.text  =  "lorem  ipsum  dolor  amet..."            sublabel.backgroundColor  =  :clear.uicolor            subview  <<  sublabel        end        view  <<  scroll    end    def  viewDidUnload        super        #  Release  any  retained  subviews  of  the  main  view.    end    def  shouldAutorotateToInterfaceOrientation(interfaceOrientation)        interfaceOrientation  ==  UIInterfaceOrientationPortrait    end end 12年10月27日土曜日
  • 30. include  SugarCube::Adjust class  AppDelegate    def  application(application,  didFinishLaunchingWithOptions:launchOptions)        @window  =  UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)        @window.makeKeyAndVisible        home_controller  =  HomeViewController.alloc.init        @window.rootViewController  =  home_controller        true    end end 12年10月27日土曜日
  • 31. $rake          Build  ./build/iPhoneSimulator-­‐6.0-­‐Development      Compile  ./app/app_delegate.rb      Compile  ./app/controllers/home_view_controller.rb            Link  ./build/iPhoneSimulator-­‐6.0-­‐Development/scrollview.app/scrollview        Create  ./build/iPhoneSimulator-­‐6.0-­‐Development/scrollview.dSYM    Simulate  ./build/iPhoneSimulator-­‐6.0-­‐Development/scrollview.app (main)>   12年10月27日土曜日
  • 33. 今日は時間がないので REPLの便利機能をちょっとだけ 12年10月27日土曜日
  • 34. (UILabel(#9626020, [[30.0, 30.0...)> tree 0: . UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]]) 1: `-- UIView(#96239d0, [[0.0, 20.0], [320.0, 460.0]]) 2: `-- UIScrollView(#96240e0, [[0.0, 0.0], [320.0, 460.0]]) 3: +-- UIView(#9625860, [[0.0, 0.0], [320.0, 460.0]]) 4: | +-- UILabel(#9626020, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 1") 5: | `-- UILabel(#9628100, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...") 6: +-- UIView(#9628690, [[320.0, 0.0], [320.0, 460.0]]) 7: | +-- UILabel(#96289f0, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 2") 8: | `-- UILabel(#9628c90, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...") 9: +-- UIView(#96290c0, [[640.0, 0.0], [320.0, 460.0]]) 10: | +-- UILabel(#9629440, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 3") 11: | `-- UILabel(#9629750, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...") 12: +-- UIImageView(#9661670, [[0.0, 453.0], [320.0, 7.0]]) 13: `-- UIImageView(#96617d0, [[313.0, 0.0], [7.0, 460.0]]) => UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]]) (UILabel(#9626020, [[30.0, 30.0...)> 12年10月27日土曜日
  • 35. UIWindow UIView UIScrollView 12年10月27日土曜日
  • 36. (UILabel(#9626020,  [[30.0,  30.0...)>  superview =>  UIView(#9625860,  [[0.0,  0.0],  [320.0,  460.0]]),  child  of  UIScrollView(#96240e0) (UILabel(#9626020,  [[30.0,  30.0...)>  superview.superview =>  UIScrollView(#96240e0,  [[0.0,  0.0],  [320.0,  460.0]]),  child  of  UIView(#96239d0) (UILabel(#9626020,  [[30.0,  30.0...)>   12年10月27日土曜日
  • 37. (UILabel(#9626020, [[30.0, 30.0...)> tree 0: . UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]]) 1: `-- UIView(#96239d0, [[0.0, 20.0], [320.0, 460.0]]) 2: `-- UIScrollView(#96240e0, [[0.0, 0.0], [320.0, 460.0]]) superview 3: +-- UIView(#9625860, [[0.0, 0.0], [320.0, 460.0]]) superview 4: | +-- UILabel(#9626020, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 1") 5: | `-- UILabel(#9628100, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...") 6: +-- UIView(#9628690, [[320.0, 0.0], [320.0, 460.0]]) 7: | +-- UILabel(#96289f0, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 2") 8: | `-- UILabel(#9628c90, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...") 9: +-- UIView(#96290c0, [[640.0, 0.0], [320.0, 460.0]]) 10: | +-- UILabel(#9629440, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 3") 11: | `-- UILabel(#9629750, [[60.0, 220.0], [200.0, 20.0]], text: "lorem ipsum dolor amet...") 12: +-- UIImageView(#9661670, [[0.0, 453.0], [320.0, 7.0]]) 13: `-- UIImageView(#96617d0, [[313.0, 0.0], [7.0, 460.0]]) => UIWindow(#947e350, [[0.0, 0.0], [320.0, 480.0]]) (UILabel(#9626020, [[30.0, 30.0...)> 12年10月27日土曜日
  • 38. (UILabel(#9626020, [[30.0, 30.0...)> adjust self => UILabel(#9626020, [[30.0, 30.0], [150.0, 20.0]], text: "This is page 1"), child of UIView(#9625860) (UILabel(#9626020, [[30.0, 30.0...)> right 10 [[40.0, 30.0], [150.0, 20.0]] => UILabel(#9626020, [[40.0, 30.0], [150.0, 20.0]], text: "This is page 1"), child of UIView(#9625860) (UILabel(#9626020, [[40.0, 30.0...)> r 10 [[50.0, 30.0], [150.0, 20.0]] => UILabel(#9626020, [[50.0, 30.0], [150.0, 20.0]], text: "This is page 1"), child of UIView(#9625860) 12年10月27日土曜日
  • 39. #  if  you  are  in  the  REPL,  you  might  not  be  able  to  click  on  the   view  you  want... >  adjust  superview.subviews[4].subviews[1] >  up  1 >  down  1    #  same  as  up  -­‐1,  obviously >  down    #  defaults  to  1  anyway >  left  1 >  right  1    #  same  as  up  -­‐1,  obviously >  left    #  =>  left  1 >  origin  10,  12    #  move  to  x:10,  y:12 >  wider  1 >  thinner  1 >  taller    #  =>  taller  1 >  shorter    #  =>  shorter  1 >  size  100,  10    #  set  size  to  width:100,  height:  10 >  shadow(opacity:  0.5,  offset:  [0,  0],  color:  :black,  radius:  1)   #  and  path,  which  is  a  CGPath  object. >  center    #  See  `Centering`  section  below >  restore    #  original  frame  and  shadow  is  saved  when  you  call   `adjust` 12年10月27日土曜日
  • 40. UIViewControllerの構造を調べたい時はrootを使う (UILabel(#9626020, [[50.0, 30.0...)> tree root 0: . #<HomeViewController:0x9623010> => #<HomeViewController:0x9623010> 12年10月27日土曜日
  • 41. その他、便利な機能が盛りだくさん https://github.com/rubymotion/sugarcube 12年10月27日土曜日
  • 43. BasS ランディ・バース(Randy William Bass, 1954年3月13日 - )は、アメリカ 合衆国オクラホマ州ロートン生まれの元プロ野球選手(内野手)、政治家。 2004年からオクラホマ州議会の上院議員(民主党)。 12年10月27日土曜日
  • 44. BaaS (Backend as a Service) 12年10月27日土曜日
  • 47. ログイン管理とかセーブデータ管理とか プッシュとかをクラウド側でサクッと対応してくれる ので iOS開発者はそんなこと知らなくてもよい 12年10月27日土曜日
  • 49. # -*- coding: utf-8 -*- $:.unshift("/Library/RubyMotion/lib") require 'motion/project' require 'bundler' Bundler.require Motion::Project::App.setup do |app| # Use `rake config' to see complete project settings. app.name = 'parse' app.libs += %W(/usr/lib/libz.1.1.3.dylib /usr/lib/libsqlite3.dylib) app.frameworks += %w(AudioToolbox Accounts AdSupport CFNetwork CoreGraphics CoreLocatiion Social StoreKit SystemConfiguration MobileCoreServices Security QuartzCore) app.vendor_project('vendor/Parse.framework', :static, :products => ['Parse'], :headers_dir => 'Headers') end 12年10月27日土曜日
  • 50. class AppDelegate def application(application, didFinishLaunchingWithOptions:launchOptions) Parse.setApplicationId(".......", clientKey:".....") obj = PFObject.objectWithClassName("TestObject") obj.setObject("bar", forKey:"foo") obj.save() true end end 12年10月27日土曜日