안녕하세요. 강성희입니다.
그동안 포스팅이 뜸한 중에, 충동적으로 새로운 홈페이지를 오픈하였습니다.(..)

홈페이지는 http://www.railsmaniac.kr/ 입니다.
주로 루비 온 레일즈에 관한 정보를 다루는 블로그가 될 듯 합니다.

 그럼 모두 잘 부탁드립니다. _(__)_
Posted by 강성희 Trackback 0 : Comment 0

 요즘 따라 포스팅이 자주 올라오죠?
 개발이 거의 끝나고, 자잘한 버그를 수정하는 중이라 그렇습니다 ㅎㅎ.
 이 버그 이외에도 몇 가지 버그와 팁 등을 발견했는데, 시간이 나는대로 포스팅하도록 하겠습니다.

 모바일 어플리케이션을 제작할 때 간혹 jQuery의 serialize메소드를 이용해야 할 경우가 있습니다. ajax를 이용하여 비동기 액션을 해야 하는 경우가 이에 해당됩니다.

 그런데 가끔가다 serialize메소드가 정상적으로 동작하지 않는 경우가 있습니다.
 이 중 가장 많이 나오는 문제는 아무런 직렬화 없이 공백 문자를 반환하는 경우이죠.

 이 경우는 원인이 너무 많아서 일일이 다 적기는 힘들고(..)
 가장 많이 하는 실수는 폼의 각 요소들에 name속성을 부여하지 않아서 생긴 문제입니다.
 대부분의 개발자들은 폼의 요소들에 id속성만 주지 name속성은 부여하지 않거든요. 하지만 jQuery의 serialize메소드를 이용하기 위해서는 반드시 name속성을 부여해 줘야 합니다.

 그리고 두 번 째 문제. 현재 JQTouch에서 가장 많이 일어나는 문제인데,
 폼 요소들 중 email타입만 직렬화가 되지 않는 경우입니다.

 
<form method="post">
        <ul class = "rounded-each">
            <li>
                 <label for="from">From</label>
                 <input type="email" id="from" name="from" autocapitalize="off"/>
            </li>
             <li>
                 <label for="to">To</label>
                 <input type="email" id="to" name="to" autocapitalize="off"/>
             </li>
             <li>
                 <label for="content">Content</label>
                 <textarea id="content" name="content"></textarea>
            </li>
            <input class="submit" id="submit" name="commit"
type="submit" value="Send" />
        </ul>
</form>

 위 폼의 경우는 content의 내용만 직렬화가 되고, from과 to의 내용은 직렬화가 되지 않습니다.

 이 문제는 사파리 브라우저(모바일, 데스크톱 포함)에서만 일어나는 문제이며, 파이어폭스 브라우저에서는 일어나지 않는 특이한 버그입니다.
 (사파리,파이어폭스를 제외한 브라우저는 잘 모르겠습니다. 아마도 webkit엔진을 사용하는 브라우저라면 비슷한 버그가 일어나겠죠?)

 해결 방법은 간단하게도, jQuery의 버전을 최신으로 업그레이드 해주시면 됩니다.
 
 이 버그가 특히나 JQTouch개발자에게 자주 일어나는 이유는 JQTouch가 최근까지 업그레이드가 되지 않고 있기 때문이죠. 개발자가 경쟁 프레임워크인 Sencha로 옮겼기 때문입니다.
 덕분에 JQTouch에 포함되어 있는 jQuery는 무려 1.3.2! 오래되도 한참 오래 된 버전이죠 ㅎㄷ.
 
 그렇기때문에 굳이 JQTouch를 사용하고 있지 않더라도, jQuery버전이 1.3.2인 분들에게도 동일한 버그가 일어날 것입니다.



Posted by 강성희 Trackback 0 : Comment 0

 
 원래는 JQTouch가 공식적으로 아이패드를 지원하지 않기 때문에, 폰갭으로 아이패드 앱을 개발하는 경우는 많지 않습니다.
 (물론 Sencha Touch가 있습니다만, 공포의 듀얼 라이센스를 감당해 낼 수 있을 때의 이야기... ㅎㄷㄷㄷ)

 하지만 폰갭으로 아이패드 앱. 정확히는 아이폰/아이패드가 동시 지원되는 앱을 만들 경우, 두 기기의 해상도에 맞는 타이틀 이미지(일명 Launch Screen)를 각각 제공해줘야 합니다.

 물론 이미지가 하나라도 알아서 리사이징을 해 줍니다만, 로딩 종료 시 순간적으로 이미지가 정상 사이즈로 보여지는 문제가 있기 때문에 가능하면 두 개의 이미지를 제공해 주는 편이 좋습니다.
 (뭐 정상 사이즈로 보여지는 그 순간이 채 1초도 되지 않으니 무시해도 되긴 합니다만...)

 해결 방법은 간단하게도, info-plist의 Launch Image(UILaunchImageFile)을 아이폰 용과 아이패드 용을 따로 나눠서 잡아주면 됩니다만(참고), 폰갭의 경우 이 부분에 관한 버그가 있어서 아이패드 용 런치 스크린이 적용이 안 될 수도 있습니다.

 이 경우 아이패드에서도 임의로 아이폰용 런치 이미지를 사용하죠. 로딩 종료시 이미지가 320px x 460px로 줄어드는 광경을 체험해 보실 수 있습니다.(머엉)

 뭐 폰갭의 버그인지 다른 이유인지를 확실히 모르겠습니다만, 해결 방법은 AppDelegate.m에 다음 코드를 추가해 주시면 됩니다.(참고)

- (void)applicationDidFinishLaunching:(UIApplication *)application
{   
    [ super applicationDidFinishLaunching:application ];
   
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        UIImage* image = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Default-Portrait" ofType:@"png"]];
        imageView = [[UIImageView alloc] initWithImage:image];
        [image release];
       
        imageView.tag = 1;
        [window addSubview:imageView];
        [imageView release];
    }
}


 이상입니다.

 여담이지만 드디어 제가 개발한 앱이 심사에 들어갔습니다.
 빠르면 다음주, 늦어도 다다음주에는 공개가 가능할 것 같네요 ㅋㅋ.

 공개가 된다면 홍보 포스팅을 하도록 하겠습니다 ㅎㅎ.
Posted by 강성희 Trackback 0 : Comment 0

 정말 오랜만의 글이네요.

 자바스크립트로 모바일 앱을 개발할 경우 모바일의 회전에 맞춰 인터페이스를 바꿔줘야 하는 경우가 있습니다.

   이 경우 'orientationchange'라는 이벤트에 함수를 바인딩하면 모바일 기기가 회전할 때 마다 콜백 함수를 호출받을 수 있습니다.

$(window).bind('orientationchange', updateOrientation);

function updateOrientation() {
            orientation = window.innerWidth < window.innerHeight ? 'profile' : 'landscape';

            $body.removeClass('profile landscape')
                        .addClass(orientation)
                        .trigger('turn', {orientation: orientation});

            // scrollTo(0, 0);
}

JQTouch 라이브러리 내에 존재하는 코드 중 하나입니다.
기기 회전 시 HTML의 body에 'landscape'또는 'profile' 클래스를 추가하죠.


 하지만  특정 경우(특히 아이패드 환경)에서는 이 'orientationchange' 이벤트가 호출되지 않는다고 합니다.
 여러가지 원인이 있는 것 같은데, 아직 확실하게 고쳐지지 않은 것 같네요.

 이 경우에는 'orientationChanged'라는 이벤트를 이용해 보세요.

$(window).bind('orientationChanged', updateOrientation);

function updateOrientation() {
            orientation = window.innerWidth > window.innerHeight ? 'profile' : 'landscape';

            $("ul li textarea").removeClass('profile landscape')
                                      .addClass(orientation)
                                      .trigger('turn', {orientation: orientation});
  }

 단 이 이벤트의 경우 기기가 회전하기 전에 호출되는 것 같더군요.
 가령 회전 전 상태가 가로이면, 가로 상태로 함수가 호출되고 이후에 회전을 시작합니다.
 
 왠지 이벤트가 거꾸로 먹는 것 같으면 이 부분을 의심해보세요 ㅎㅎ


 - 추가(2010년 9월 16일) -
 찾아보니 JQTouch에서 제공하는 'turn'이라는 트리거가 있네요.
(http://wiki.github.com/senchalabs/jQTouch/callbackevents)
 위 코드에서도 사용하고 있었는데 전혀 눈치채지 못했네요 ^^;

 직접 사용해보진 않았지만 공식 위키에 있는 내용이니 신뢰하셔도 될 것 같습니다.
Posted by 강성희 Trackback 0 : Comment 0


Missing dependency target "PhoneGapLib (from PhoneGapLib.xcodeproj)"

cp: /javascripts/phonegap.js: No such file or directory

Command /Developer/Library/PrivateFrameworks/DevToolsCore.framework/
Resources/pbxcp failed with exit code 1
/Applications/eclipse/pg/phonegap-iphone/PhoneGapTutorial/Classes/
PhoneGapTutorialAppDelegate.h:10:0 /Applications/eclipse/pg/phonegap-
iphone/PhoneGapTutorial/Classes/PhoneGapTutorialAppDelegate.h:10:29:
error: PhoneGapDelegate.h: No such file or directory

/Applications/eclipse/pg/phonegap-iphone/PhoneGapTutorial/Classes/
PhoneGapTutorialAppDelegate.h:12:0 /Applications/eclipse/pg/phonegap-
iphone/PhoneGapTutorial/Classes/PhoneGapTutorialAppDelegate.h:12:
error: cannot find interface declaration for 'PhoneGapDelegate',
superclass of 'PhoneGapTutorialAppDelegate'

 폰갭 어플리케이션 빌드 시 다음과 흡사한 메시지가 뜨는 경우가 있습니다.
 대략 15개의 에러와 8개의 경고 메시지가 뜨며, 당연하지만 빌드는 실패합니다.

 확인 결과 인스톨러의 문제로 판명되었고, 기트허브(GitHub) 저장소에서 새로운 버전의 소스코드를 다운받아 설치하시면 해결됩니다.
 최근에는 수정판이 폰갭 홈페이지 에 올라왔으므로, 홈페이지에서 다운받으셔도 무방합니다.


 공개된지 오랜 시간이 지났지만 아직 자잘한 버그가 많네요.
 저번에도 설치 오류때문에 제대로 고생했는데... 왠만한 분들은 시작도 못 해보고 포기하게 생겼네요.
 그래도 이런 상황에서 수 많은 관련 자료와 서적까지 출간되는 걸 보면, 폰갭에 대한 기대감이 상당한 듯 싶습니다.



Posted by 강성희 Trackback 0 : Comment 0



 생각보다 일찍 번역본이 나왔네요.
 쳇, 이러면 고생하면서 원서로 읽은 보람이 없잖아... ㅡ_ㅡ

 일단 짧습니다. 원서 기준 167페이지!
 그럼에도 불구하고 필요한 내용은 거진 다 들어있습니다. 정말 굉장하죠.
 (개인적으로 쓰레기에 근접한 서적으로 평가하는 어떤 책과는 다릅니다)

 많은 분들이 폰갭 활용이 이 책의 핵심이라고 생각하시지만,
 실제로는 jQuery플러그인 중 하나인 jQTouch가 이 책의 핵심입니다.

 저 jQTouch을 통해서 지-_-랄같은 대쉬코드의 늪에서 벗어날 수 있죠.
 jQTouch를 쓰면서 내가 왜 대쉬코드 따위에 얽매였는지 후회스러울 정도입니다.(..)

 책의 기본은 웹 기반 어플리케이션 개발을 표방하는 만큼,
 처음에는 모바일 웹에서의 HTML, CSS, javascript활용에 대한 간단한 언급을 한 후,
 이후 jQuery를 활용하는 방법과, jQTouch를 이용한 좀 더 리치한 UI작성을 보여줍니다.

 이후 클라이언트에서의 데이터 저장 방법, 폰갭을 이용한 어플리케이션 배포 등등
 어플 개발을 위한 기타 몇몇가지 부분을 설명한 후 마무리.


 참 간단하면서도 필요한 것만 꼼꼼하게 설명해 주는 바람직한 서적입니다.
 왠만하면 내년 쯤 번역되었으면 했던 원서 애독자의 뜻을 이해해주지 못하다니 안타깝네요(..)

 이 책 이후에 읽어야 할 서적으로는 핵심만 골라 배우는 스마트폰 웹 개발이 있습니다.
 참고로 저는 원서로 읽을 생각이었으나 이미 번역이 되어있군요.
 원서도 참 전략적으로 읽어야겠다는 생각이 듭니다.(..)

 여하튼 좋은 책입니다. 모바일 웹&어플리케이션 개발자들은 필독!

 
IPHONEAPPS개발하기
카테고리 컴퓨터/IT > 프로그래밍/언어 > 웹프로그래밍 > HTML+JAVASCRIPT
지은이 조나단 스타크 (아이티씨, 2010년)
상세보기


Posted by 강성희 Trackback 0 : Comment 2



정말 오랜만에 발매된 TDD서적입니다.
그리고 국내 저자(채수원님)가 작성한 첫 TDD책이기도 하지요.

일단 켄트 백의 테스트 주도 개발(TDD by Example)과 많이 비교되는 책입니다.
간단하게 차이점을 요약해보자면


1. 바이블 vs 사전

켄트 벡의 테스트 주도 개발 서적은 '바이블'이라고 보시면 되고,
채수원님의 테스트 주도 개발 서적은 '사전'이라고 보시면 됩니다.

테스트 주도 개발을 이해하기 위해서는 켄트백의 서적을 반드시 읽어야 하지만,

또한 채수원님의 서적을 읽어보지 않으면
테스트 주도 개발을 사용하면서 거쳐야 할 많은 시련들을 슬기롭게 헤쳐나갈 수 없습니다.


2. 보다 더 '이슈'에 관점을 둔 내용 구성

켄트 벡의 서적은 테스트 주도 개발의 1부터 10까지를 단계별로 이야기해줍니다,
반면에 채수원님의 서적은 테스트 주도 개발을 시작하면서 고민하게 될 여러가지 문제들을
챕터별로 나누어 하나하나 섬세하게 다루고 있습니다.

DB와 웹 어플리케이션 개발 방식, TDD를 하기 힘든 레거시 코드 대응 방법,
테스트 주도 개발에 관한 코딩 컨벤션과 관련 패턴 등

테스트 주도 개발을 도입하면서 겪을 수 있는 모든 사건들을
장인의 관점에서 꼼꼼하고 정확하게 짚어주고 있습니다.


3. 보다 더 진화된 테스트 주도 개발에 관한 소개

켄트백의 서적은 '성서'에 비견될 만큼 위대한 책이지만,
이 책이 발매된 기간은 2003년입니다. 지금으로부터 7년 전이죠.

그 7년 간 테스트 주도 개발은 몰라볼 정도로 크게 발전하였으며,
수 많은 플러그인과 라이브러리들이 새롭게 생겨났습니다.

채수원님의 서적은 켄트 백의 서적에서 다룰 수 없었던
TDD의 주요 패턴과 라이브러리, 프레임워크 등을 다루고 있습니다.

이는 기존의 다른 서적에서는 쉽게 얻을 수 없는 내용이죠.



베타리딩에 참여한 사람으로서 평가하자면, 굉장히 좋은 서적입니다.

TDD를 어느정도 숙지하였고, 실제 프로젝트에서 사용해 보고 싶으신 분들에게는
반드시 읽어야 할 책으로 권하고 싶습니다.
(실제로 저자이신 채수원님이 근무중인 LG CNS의 애자일 도입을 위해 집필하신 서적입니다)

채수원님 외에도 국내의 적잖은 TDD 전문가들이 참여했기 때문에,
TDD에 대한 굉장히 포괄적인 내용을 다루고 있습니다.
(너무 많아서 베타리딩 동안 100페이지 정도 추려냈습니다. 챕터 하나를 없앤다던지... ㅎㄷㄷ)

만일 이 책을 건너뛰고 테스트 주도 개발을 실무에 도입하신다면,
관련 자료를 찾느라 책 읽는 시간의 몇 배는 허비하시리라고 장담할 수 있습니다.

테스트 주도 개발을 옹호하고 권장하는 한 사람으로써, 필독하시길 부탁드랍니다.


끝으로 집필하느라 고생하신 채수원님에게 감사의 말씀 드립니다.
베타리딩에 참여하면서 책을 쓴다는 게 얼마나 어려운 일인지 몸소 체험할 수 있었습니다.

그런고로 저는 왠만하면 책은 쓰지 말아야하지... 하고 생각하고 있답니다.(머엉-)



테스트주도개발TDD실천법과도구
카테고리 컴퓨터/IT > 프로그래밍/언어 > JAVA > JAVA일반
지은이 채수원 (한빛미디어, 2010년)
상세보기


Posted by 강성희 Trackback 0 : Comment 2



 진짜 이번 한국은 천운이 따라주는구나 ㅋㅋㅋㅋ

2002년과는 전혀 다른 상황 전개!
(2002년은 포르투갈-폴란드-미국-이탈리아-스페인-독일 ㅎㄷㄷㄷ)


운도 여기까지 따라줬는데
이번이 마지막 기회라는 생각으로 해야 할 듯 ㅎㅎ



Posted by 강성희 Trackback 0 : Comment 0



크게 보기


영화 300의 배우들이 했다는 일명 '크로스핏 트레이닝'입니다.

이걸 추천하는 헬스 트레이너의 절반 가량이
과도한 훈련량을 이유로 해고당한답니다는 설이 있습니다.(..)

정말 보기만 해도 토할 것 같은 운동량이네요 ㅎㄷㄷㄷ

Posted by 강성희 Trackback 0 : Comment 0

 폰갭에서 사용할 애플의 Push Notification Service에 관해 찾던 도중 이런 게 나왔네요.
아직 사용해 본 적은 없지만 평이 매우 좋습니다.

홈페이지는 이 곳이고, 구글 코드에서 프로젝트 정보를 살펴보실 수 있습니다.

Posted by 강성희 Trackback 0 : Comment 2