구글이 안드로이드 플랫폼 소스를 공개하였습니다. 플랫폼 전체 를 오픈소스로 만들어 버리는 것을 보면 과연 구글이라는 생각이 듭니다. 좌측은 안드로이드 캐릭터의 오픈소스 버젼입니다. 뚜껑을 열어 머릿속을 훤히 보여 주고 있습니다. ^^

다운로드 받아 볼까 했는데 파일크기가 2.1GB이고 6GB의 공간이 필요하기 때문에 다음 기회로 미루었습니다. '설치를 위해서는 Linux 또는 OS X가 필요하고 윈도우즈는 아직 지원하지 않는다'는 흔히 볼 수 없는 문구도 재미있습니다. 

이와 함께 안드로이드 개발자 블로그를 보면 Android Market: Now available for users란 제목으로 애플의 앱스토어와 유사한 어플리케이션 마켓을 런칭했다는 포스팅이 올라왔습니다. 현재까지는 50개의 어플리케이션이 올라와 있고 10월 27일 부터는 일반 개발자들도 어플리케이션을 등록할 수 있다고 합니다.

흥미로운 것은 개발자들에게 70%의 수익이 돌아 가는 부분은 애플의 앱스토어와 같지만, 나머지 30%에서도 구글은 수익을 가지고 가지 않는다고 합니다. 아무리 구글의 모토가 "Don't be evil"이지만 어지간히 통 큰 기업이 아닐 수 없네요.

개발자는 쉽게 유통시킬 수 있고 사용자는 경쟁적인 저렴한 가격에 소프트웨어를 구입할 수 있으니, SDK를 제공하고 온라인 상점을 이용해 개발자와 사용자를 직접 이어주는 이런 서비스가 많이 생기는 것은 양쪽 모두가 반길만한 일이라고 생각됩니다. 요즘 경제위기와 함께 IT의 빙하기가 도래한 우리나라 개발자들에게는 더 반가운 소식일 것 같습니다.

아이폰을 기다리다 지쳐 아이팟을 구입했는데, 문득 잘 한 것 같다는 생각이 듭니다. 휴대폰은 구글폰으로 구입해서 구글폰과 아이폰을 같이 가지고 다니면 심심할 일이 별로 없을 것 같습니다.

'기타' 카테고리의 다른 글

안드로이드 SDK - 바이오리듬 예제  (5) 2008.12.03
4. 기본 레이아웃 설정  (1) 2008.11.02
3. Rails 어플리케이션 기본 설정  (4) 2008.10.21
2. Rails 어플리케이션 생성  (0) 2008.10.20
1. Ruby on Rails 설치 및 설정  (4) 2008.10.15
AND

이전에 Cocoa-Ruby 어플리케이션이란 포스팅에서 deepblue님께서 댓글로 MacRuby를 언급하셔서 존재한다는 것만 알고 있었습니다. 오늘 애플의 맥개발 센타에서
Developing Cocoa Applications Using MacRuby란 문서를 보았습니다.

대충 읽어보니 MacRuby는 루비로 Mac OS X 어플리케이션을 만들기 위한 애플의 오픈소스 프로젝트이며, 성능저하를 해결하고 완벽하게 통합시켰다고 합니다. 다운로드 받아서 간단하게 살펴 보았습니다.

1. 설치
http://www.macruby.org/files/에서 현재 최신버젼인 MacRuby 0.3.zip 파일을 다운로드 받습니다. 압축을 풀면 나오는 설치파일을 실행하면 간편하게 설치할 수 있습니다.

설치가 완료되면 Xcode를 실행하고 New Project... 메뉴를 클릭하면 아래와 같이 User Templates / Application에 MacRuby Application이 추가되어 있는 것을 확인할 수 있습니다.


2. 어플리케이션 작성
이전에 포스팅했던 Xcode3 첫 어플리케이션에 나오는 Objective-C로된 AppController를 MacRuby로 변경해 보겠습니다. 인터페이스 빌더에서의 작업은 완전히 동일하기 때문에 여기서는 소스코드만 살펴보겠습니다.

1) Objective-C
기존의 AppController의 Objective-C 소스는 아래와 같습니다.

* AppController.h
#import <Cocoa/Cocoa.h>

@interface AppController : NSObject {
    IBOutlet NSTextField    *textLabel;
    IBOutlet NSTextField    *inputField;
  
    IBOutlet NSButton    *refreshButton;
    IBOutlet NSButton    *leftButton;
    IBOutlet NSButton    *rightButton;

    NSPoint    originalPoint;
}

- (IBAction)setLabel:(id)sender;
- (IBAction)moveLeft:(id)sender;
- (IBAction)moveRight:(id)sender;

@end

* AppController.m
#import "AppController.h"

@implementation AppController

- (void)awakeFromNib {
    NSImage *buttonImage = [NSImage imageNamed:NSImageNameRefreshTemplate];
    [refreshButton setImage:buttonImage];

    buttonImage = [NSImage imageNamed:NSImageNameGoLeftTemplate];
    [leftButton setImage:buttonImage];
  
    buttonImage = [NSImage imageNamed:NSImageNameGoRightTemplate];
    [rightButton setImage:buttonImage];
  
    originalPoint = [textLabel frame].origin;
}

- (IBAction)setLabel:(id)sender {
    [textLabel setStringValue:[inputField stringValue]];  
    [textLabel sizeToFit];
}

- (IBAction)moveLeft:(id)sender {
    [[textLabel animator] setFrameOrigin:originalPoint];
}

- (IBAction)moveRight:(id)sender {
    CGFloat xPos;
  
    xPos = [[[NSApp mainWindow] contentView] bounds].size.width;
    xPos -= [textLabel frame].size.width;
  
    NSPoint targetPoint = NSMakePoint(xPos, originalPoint.y);
    [[textLabel animator] setFrameOrigin:targetPoint];
}

@end


2) MacRuby
MacRuby로 변경한 코드는 아래와 같습니다.

* AppController.rb
class AppController
    attr_writer :textLabel, :inputField, :refreshButton, :leftButton, :rightButton
    originalPoint = NSPoint.new(0, 0)
   
    def awakeFromNib
        @buttonImage = NSImage.imageNamed(NSImageNameRefreshTemplate)
        @refreshButton.setImage(@buttonImage)
       
        @buttonImage = NSImage.imageNamed(NSImageNameGoLeftTemplate)
        @leftButton.setImage(@buttonImage)
       
        @buttonImage = NSImage.imageNamed(NSImageNameGoRightTemplate)
        @rightButton.setImage(@buttonImage)
       
        @originalPoint = @textLabel.frame.origin
    end
   
    def setLabel(sender)
        @textLabel.setStringValue(@inputField.stringValue)  
        @textLabel.sizeToFit
    end
   
    def moveLeft(sender)
        @textLabel.animator.setFrameOrigin(@originalPoint)
    end
   
    def moveRight(sender)
        @xPos = NSApp.mainWindow.contentView.bounds.size.width
        @xPos -= @textLabel.frame.size.width
  
        @targetPoint = NSPoint.new(@xPos, @originalPoint.y)
        @textLabel.animator.setFrameOrigin(@targetPoint)
    end
end

빌드하고 테스트를 해보면 Objective-C로 작성한 것과 완전히 동일하게 동작합니다. 문서를 보면 MacRuby는 실행시에 Objective-C 객체로 불러오고 Objective-C의 가비지콜렉터터를 사용한다고 합니다. 앞으로는 애플에서도 Cocoa-Ruby보다는 MacRuby에게 힘을 실어 주지 않을까 하는 생각이 듭니다. 또한 MacRuby는 기존 Ruby와는 별도로 macruby, macirb, macri macrdoc, macgem등 커멘드라인 유틸리티도 별도로 제공하고 있습니다.

자세한 자료와 튜토리얼등은 MacRuby 홈페이지에 잘 나와있습니다.

'Xcode 3' 카테고리의 다른 글

Xcode 도움말 사용하기  (8) 2008.12.11
Cocoa-Ruby 어플리케이션  (6) 2008.08.20
Xcode 3 둘러보기(3) - 기타  (6) 2008.08.14
Xcode 3 둘러보기(2) - Interface Builder  (14) 2008.07.31
Xcode 3 둘러보기(1) - Xcode  (10) 2008.07.29
AND

이전에 생성한 어플리케이션을 브라우져에서 확인해 보기위해 웹서버를 구동합니다. 어플리케이션 폴더에서 아래와 같이 실행합니다.

> script/server

레일즈의 웹서버는 일반적으로 3000 포트를 사용하기 때문에 "URL:3000/"과 같이 주소창에 입력하셔야 합니다. 브라우져에서 Rails의 기본페이지가 보이며, 아래와 같이 해야할 작업들이 나와 있습니다.

1. Use script/generate to create your models and controllers
To see all available options, run it without parameters.

2. Set up a default route and remove or rename this file
Routes are set up in config/routes.rb.

3. Create your database
Run rake db:migrate to create your database. If you're not using SQLite (the default), edit config/database.yml with your username and password.

위에서 지시하는대로 작업을 해보겠습니다.

1. Home 컨트롤러 생성
1) HomeController 를 생성
script내의 generate는 이름 그대로 레일즈에서 컨트롤러, 모델, 스케폴드등을 간편하게 생성할 수 있게 합니다. 시작 페이지를 만들기 위해 아래와 같이 index 뷰를 가진 home 컨트롤러를 생성합니다.

> script/generate controller Home index
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/home
      exists  test/functional/
      create  app/controllers/home_controller.rb
      create  test/functional/home_controller_test.rb
      create  app/helpers/home_helper.rb
      create  app/views/home/index.html.erb

실행이 되면 위와 같이 생성되는 디렉토리와 파일들을 확인할 수 있습니다. app/controllers 디렉토리에서 home_controller.rb가 아래와 같이 생성되어 있습니다.

class HomeController < ApplicationController
  def index
  end

end

2) index.html 삭제
public 디렉토리 아래의 index.html을 삭제합니다. index.html이 존재하면 아래에서 작업할 routes.rb에서의 설정이 무효화됩니다.

> rm public/index.html


2. routes.rb 설정
config 디렉토리 아래의 routes.rb 파일을 오픈합니다. 주석으로 처리된 부분을 제외하면 아래와 같습니다. map.root를 home 컨트롤러로 설정하도록 푸른색으로 된 부분을 추가합니다.

ActionController::Routing::Routes.draw do |map|
  map.root :controller => "home"
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

이제 웹 루트('/') 요청을 받게 되면 /home/index로 연결됩니다.

3. 데이터 베이스 설정

1) 데이터베이스, 계정 생성
mysql에서 개발, 테스트, 배포에 필요한 데이터베이스와 계정을 생성합니다.

mysql> create database www_development;
mysql> create database www_test;
mysql> create database www;
mysql> grant all privileges on www_development.* to www_user@'localhost'  identified by '1111';
mysql> grant all privileges on www_test.* to www_user@'localhost'  identified by '1111';
mysql> grant all privileges on www.* to www_user@'localhost'  identified by '1111';

2) database.yml 수정
이제 config 폴더 밑의 database.yml을 오픈하여 위에서 생성한 정보로 변경합니다.

development:
  adapter: mysql
  encoding: utf8
  database: www_development
  username: www_user
  password: 1111
  socket: /tmp/mysql.sock

test:
  adapter: mysql
  encoding: utf8
  database: www_test
  username: www_user
  password: 1111
  socket: /tmp/mysql.sock

production:
  adapter: mysql
  encoding: utf8
  database: www
  username: www_user
  password: 1111
  socket: /tmp/mysql.sock

위의 파일에서 주석으로 되어 있는 부분을 보면 테스트를 위한 데이터베이스는 테스트 실행시 디비를 초기화 하기 때문에 개발과 배포를 위한 데이터베이스는 별도로 만들어야 한다고 경고하고 있습니다.

4. index.html.erb 파일
1) erb
index.html.erb 파일은 HTML과 eRuby 문법을 같이 사용할 수 있는 템플릿 파일입니다. eRuby는 템플릿 파일에서 사용할 수 있는 루비입니다. '<%' 와 '%>'의 사이에서 루비코드를 사용할 수 있습니다.

레일즈에 의해 이전에 생성된 app/views/home/index.html.erb의 내용은 아래와 같습니다.

<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>

2) 동작 확인
db등 변경된 부분을 새로 적용하기 위해 실행되고 있는 script/server를 컨트롤+C를 눌러 종료한 후에 script/server를 재시동합니다. 

브라우져에서 리로드를 하면 아래와 같이 위에서 작업된 내용들이 적용되어 초기화면이 아래와 같이 Home 컨트롤러로 연결되어 있는 것을 확인할 수 있습니다.

제가 루비온레일즈에서 해본 것중 70% 정도까지 온 것 같습니다. 해본 것도 이해를 정확히 못하고 있는데 조금만 있으면 진짜 삽질기로 들어 갈 것 같습니다.

'기타' 카테고리의 다른 글

4. 기본 레이아웃 설정  (1) 2008.11.02
구글 안드로이드 소스 공개와 마켓 오픈  (2) 2008.10.23
2. Rails 어플리케이션 생성  (0) 2008.10.20
1. Ruby on Rails 설치 및 설정  (4) 2008.10.15
아이팟 터치 2세대  (8) 2008.10.10
AND