Visual Studio에서 JavaScript 응용프로그램 개발하기


Before delving into the details of the application, I want to say a few things about JavaScript application development. One of the challenges facing the JavaScript developer is the dynamic nature of the language. With JavaScript you aren’t constrained by a rigid type system; instead, objects can be built dynamically. This poses a challenge to the developers of JavaScript editors and IDEs. With strongly typed languages such as C# and Java, the type information can be used to provide enhanced code navigation, refactoring and IntelliSense. With JavaScript, on the other hand, the lack of type information means that the IDE typically provides far fewer developer aids.
응용프로그램의 자세한 사항으로 들어가기 앞서, 저는 JavaScript 응용프로그램 개발에 대하여 몇 가지 이야기 하고 싶습니다. 훌륭한 JavaScript 개발자로 도전할만 한 것은 언어의 역동적 성질입니다. JavaScript와 함꼐라면 딱딱한 유형의 시스템으로 부터 구애받지 않을 수 있습니다; 그 대신에, 객체를 역동적으로 만들 수 있습니다. JavaScript 에디터와 통합개발툴(IDE) 개발자들의 도전 자세가 
C#또는 Java와 같은 강력한 유형의 언어와 같이 강력한 Refactoring 또는 IntelliSense한 안내 코드를 제공하여 사용할 수 있게합니다. 그러나 반대로 자바스크립트는 유형 정보의 뜻이 몇몇 개발자를 보조하는보통의 IDE에서 부족하게 제공되고있습니다.


Fortunately, things have improved recently, with Visual Studio 2010 performing pseudo-execution of your JavaScript code in order to determine the “shape” of each object, allowing it to provide JavaScript IntelliSense. In order to take full advantage of the IntelliSense support, we have to provide the IDE with a few “hints” in the form of “references” that tell the IDE which files to include in its pseudo-execution. With the demo project, all files start with a reference comment that tells the IDE to include the intellisense.js file. The content of this file is simply a list of references that ensure the IDE includes all the important application JavaScript files, providing quality IntelliSense support across the application, as shown here:
다행히도, 이런 것들은 비쥬얼 스튜디오 2010의 JavaScript IntelliSense 에서 제공된 각각의 JavaScript 객체의 "형"(Shape)을 측정하는 JavsScript 가상시현(pseudo-execution) 기능으로  현제 많이 개선되었습니다. IntelliSense의 모든 장점을 취하기 위해선 가상시현(pseudo-execution)을 위해 IDE 파일 내부에 몇가지 힌트를 참조양식(Form of "references")과  함께 제공해야했습니다. 시현(Demo) 프로젝트에는 모든 파일의 시작에 intelllisense.js파일을 포함하는 IDE 참조코멘트(Reference comment)가 있습니다. 다음에 보시는 크로스 응용프로그램을 지원하는 IntellliSense  파일의 내용은 IDE에서 포함한 중요한 응용프로그램 JavaScript파일들의 간단한 참조리스트입니다:



  1. /// Ensure IntelliSense includes all the files from this project.
  2. ///
  3. /// <reference path="app.js" />
  4. /// <reference path="viewModel/ApplicationViewModel.js" />
  5. /// <reference path="viewModel/SearchResultsViewModel.js" />
  6. /// <reference path="viewModel/TweetViewModel.js" />
  7. /// <reference path="viewModel/TwitterSearchViewModel.js" />
  8. /// <reference path="lib/jquery-1.6.4.js" />
  9. /// <reference path="lib/cordova-1.5.0.js" />
  10. /// <reference path="lib/knockout-1.2.1.js" />

JavaScript is a relaxed and forgiving language, with features such as value coercion and semi­colon insertion making it easy to use in a scripting environment. However, these same features often become problematic when managing large quantities of code. For that reason I highly recommend using JSLint, a tool that applies a more rigid set of coding standards to JavaScript. A popular Visual Studio Extension adds JSLint support (jslint4vs2010.codeplex.com), reporting lint errors within the error console. I’ve used JSLint for the Twitter Search application (and virtually every other JavaScript project I’ve worked on).
JavaScript는 느슨하고 관용적인 언어이지만, 스크립팅 환경에서 값의 강제성과 세미콜론(;)을 쉽게 삽입하는 특징을 이루고 있습니다. 그러나 이 것과 같은 특징들은 큰 규모의 코드를 관리하는데 있어 자주 문제시 되어지는 부분입니다. 그런 이유에서 저는 
툴에 더욱 완고한 표준 JavaScript 코딩을 설정 적용하고 싶다면, 강하게 JSLint를 사용할 것을 권하고 싶습니다. 대부분의 Visual Studio Extension 에는 JSLint 지원(jslint4vs2010.codeplex.com)하여 lint 오류를 오류콘솔을 통해서 통보하고 있습니다. 저는 트위터 검색 응용프로그램에 JSLint를 사용하였습니다(그리고 가상적으로 모든 JavaScript 프로젝트에 사용하고 있습니다).


You might notice a “globals” comment at the start of each JavaScript file within the project. JSLint helps prevent variables “leaking” into global scope by accidental omission of the var keyword. The “globals” comment provides JSLint with a formal definition of which variables are allowed to occupy a global scope.
당신은 프로젝트의 JavaScript파일에 "global"이라는 코멘트를 주의하셔야 할 것입니다. JSLint는 우발적인 키워드 생략으로 인한 전역적으로 발생하는 일명 "누수"현상을 막아줍니다. "global" 코멘트는 선점적으로 정의하여 제공하고 있습니다.


Model-View-View Model(MVVM) 응용프로그램 구조

The Twitter Search application is, from the perspective of the phone’s browser control, a single-page application. Conversely, from the user perspective, it has multiple pages, as seen in Figure 5. In order to support this, a Knockout ViewModel is constructed that contains a stack of ViewModel instances, each one representing a page within the application. As the user navigates to a new page, the corresponding ViewModel is added to this stack, and when the user navigates back, the topmost ViewModel is popped off the stack (see Figure 6).
트위터 검색 응용프로그램은 폰(phone)의 브라우저 컨트롤러로 보는 단일 
페이지 응용프로그램입니다. 반대로 사용자 시점에서 보면 Figure 5에서 보듯 다중 페이지로 보입니다. 응용프로그램간 페이지를 각각 대표하는 ViewModel 객체들의 더미(stack)을 포함하도록 지원하는 Knockout ViewModel이 구성되어졌습니다. 사용자에게 새로운 페이지를 안내하게 된다면 이에 상응하는 ViewModel을 ViewModel객체들의-더미(stack)에 추가하고 사용자에게 안내를 돌려주게 되고 가장 상위의 ViewModel은 ViewModel객체 더미에서 튀어나오게 됩니다(참조 Figure 6).


Figure 6 The Knockout ApplicationViewModel

  1. /// <reference path="..//intellisense.js" />
  2. /*globals ko*/
  3. function ApplicationViewModel() {
  4.   /// <summary>
  5.   /// The ViewModel that manages the ViewModel back-stack.
  6.   /// </summary>
  7.   // --- properties
  8.   this.viewModelBackStack = ko.observableArray();
  9.   // --- functions
  10.   this.navigateTo = function (viewModel) {
  11.     this.viewModelBackStack.push(viewModel);
  12.   };
  13.   this.back = function () {
  14.     this.viewModelBackStack.pop();
  15.   };
  16.   this.templateSelector = function (viewModel) {
  17.     return viewModel.template;
  18.   }
  19. }


When the application starts, an instance of the ApplicationViewModel is created and bound to the UI using Knockout:
응용프로그램이 시작되면 응용프로그램의 ViewModel의 객체가 생성 및 Knockout을 이용한 UI로 묶여지게 됩니다:


  1. document.addEventListener("deviceready", initializeViewModel, false);
  2. var application;
  3. function initializeViewModel() {
  4.   application = new ApplicationViewModel();
  5.   ko.applyBindings(application);
  6. }



The UI itself is quite simple, comprising a div element that uses the Knockout template binding to render the ViewModel stack:
div 엘레멘트를 포함한 Knockout 템플릿의 묶음과 
ViewModel 더미를 표현하는 UI 자체는 굉장히 단순합니다:



  1. <body>
  2.   <h1>Cordova Twitter Search</h1>
  3.   <div class="app" data-bind ="template: {name: templateSelector, foreach: viewModelBackStack}">
  4.   </div>
  5. </body>


The Knockout template binding works in a similar manner to the Silverlight ItemsControl in that it binds to an array of ViewModel instances and is responsible for generating the View for each via a template. In this case, the templateSelector function is invoked on the ApplicationViewModel in order to determine the named template for each ViewModel.
Knockout 템플릿 바인딩은 
SilverLight ItemControl의 템플릿을 통한 각각의 VIew를 생성하는 역활과 ViewModel 객체의 배열로 묶어주는 방식과 비슷하게 동작합니다. 이 경우에 각각의 ViewModel의 이름을 지정하기 위한 ApplicationViewModel을 templateSelector  가 호출하게됩니다.


If you run this application you’ll find that it doesn’t actually do anything—that’s because there aren’t any ViewModels to represent the pages of the application!
이응용프로그램을 실행하면 막상 아무 것도 하고 있지 않을 것을 발견할 것입니다. 왜냐하면 응용프로그램을 대표하는 페이지지 즉 ViewModel들이 어디에도 없기 때문입니다!


트위터 검색 뷰 모델(The TwitterSearchViewModel)

I’ll introduce the first ViewModel, TwitterSearchViewModel, which represents the first page of the application. This ViewModel exposes a few simple observable properties that support the UI, namely the searchTerm, which is bound to the user input field, and isSearching, which is a Boolean observable that disables the search button when the Twitter APIs are being queried via HTTP. It also exposes a search function that’s bound to the search button, in much the same way that you would bind an ICommand to a Button within Silverlight (see Figure 7).
제가 응용프로그램을 대표하는 첫 페이지 첫 ViewModel인 TwitterSearchViewModel을 소개하겠습니다. 이 ViewModel은 몇 가지 간단한 관찰가능한 UI요소들인 사용자 입력 필드(field)인 searchTerm과 Twitter API로 
HTTP를 통하여 질의할 때 조회 버튼이 사용불가능 하도록하는 Boolean 관찰자인 isSearching으로 나타내보여집니다. Silverlight에서 ICommand버튼에 바인드 하듯이, 이 것 역시 조회 기능을 조회버튼에 바인드 할 수 있습니다(참조 Figure 7).


Figure 7 The TwitterSearchViewModel

  1. /// <reference path="..//intellisense.js" />
  2. /*globals $ application ko localStorage SearchResultsViewModel TweetViewModel*/
  3. function TwitterSearchViewModel() {
  4.   /// <summary>
  5.   /// A ViewModel for searching Twitter for a given term.
  6.   /// </summary>
  7.   // --- properties
  8.   this.template = "twitterSearchView";
  9.   this.isSearching = ko.observable(false);
  10.   this.searchTerm = ko.observable("");
  11.   // --- public functions
  12.   this.search = function () {
  13.     /// <summary>
  14.     /// Searches Twitter for the current search term.
  15.     /// </summary>
  16.     // implementation detailed later in this article ...
  17.   };
  18. }


The template property of the ViewModel names the View that’s associated with this ViewModel. This View is described as a jQuery template within the index.html file:
ViewModel 템플릿 요소인 View를 ViewModel의 조합으로 이름하였습니다. 이 VIew는 index.html파일에 jQuery템블릿으로 기술되어진 것입니다:


  1. <script type=text/x-jquery-tmpl" charset="utf-8" id="twitterSearchView" 
  2.   <div>
  3.     <form data-bind="submit: search">
  4.       <input type="text"
  5.         data-bind="value: searchTerm, valueUpdate: 'afterkeydown'" />
  6.       <button type="submit"
  7.         data-bind="enable: searchTerm().length > 0 &&
  8.           isSearching() == false">Go</button> 
  9.     </form>     
  10.   </div>
  11. </script>



If you add an instance of the TwitterSearchViewModel to the application ViewModel stack, the application now shows the first page, as shown in Figure 8.
만약 TwitterSearchViewModel의 객체를 응용프로그램 ViewModel 더미(stack)에 추가했다면 Figure 8에서 보듯이 으용프로그램은 첫페이지를 보여주게 됩니다.



The TwitterSearchViewModel Rendered via the twitterSearchView Template
Figure 8 twitterSearchView템플릿을 통한 TwitterSearchViewModel 표현

Posted by gofly

댓글을 달아 주세요

Cordova Applications 개발하기

You can add your HTML, JavaScript and CSS files to the www folder and—as long as you mark them with a Build Action of Content—they’ll be included in your project and accessible via the browser control when your application executes. You can use any of the standard JavaScript/HTML5 libraries or frameworks in your Cordova application, as long as they’re compatible with the phone’s browser.
당신은 HTML, JavaScript그리고 CSS 파일을 www폴더에 추가 할 수 있고-어느정도 당신이 컨텐츠 표현을 위한 구현을 할 수 있게- 당신의 응용프로그램이 실행될 때 브라우저 콘트롤러를 통하여 접근할 수 있는 프로젝트에 포함되어야 할 것을 추가할 수 있습니다.


The Cordova APIs are documented on the Cordova Web site; I won’t describe them in detail here. One important thing to note is that you must wait for the deviceready event before making use of any of the other API methods. If you inspect the index.html file generated from the template, you can see that it waits until the device is ready before updating the UI:
Cordoba API는 Cordova Web site에 문서화되어 있습니다; 이 곳에서는 그 것들에 대해서 자세하게 다루지는 않겠습니다. 한가지 주의해야 할 중요한 점이 있다면 기계구동준비(Device Ready) 이벤트 전에 다른 API 메소드의 사용 할 수 있도록 기다려야 한다는 것입니다. 만약 당신이 템플릿으로 부터 생성된 index.html 파일을 검사해보면, 기계구동상태가 준비되기전에 UI(User Interface)를 수정(Updating)하는 것을 볼 수 있습니다:

  1. <script type="text/javascript">
  2.   document.addEventListener("deviceready",onDeviceReady,false);
  3.   function onDeviceReady()
  4.   {
  5.     document.getElementById("welcomeMsg").innerHTML
  6.       += "Cordova is ready! version=" + window.device.cordova;
  7.     console.log(
  8.       "onDeviceReady. You should see this " +
  9.         "message in Visual Studio's output window.");
  10.   }
  11. </script>


The console object used in the preceding code allows you to add debug output to your application. These messages are sent to the Visual Studio console by Cordova.
콘솔 오브젝트를 사용하여 디버그를 출력하는 선행 응용프로그램 코드입니다. 이 메세지들은 코르도바에 의해 비주얼 스튜디오 콘솔에 보내지게 됩니다. 


단일페에지 또는 다중 응용프로그램 아키텍쳐

When building Cordova applications, you can employ two distinct patterns:
Cordova 응용프로그램을 만들 때 당신은 크게 두 가지 패턴을 사용할 수 있습니다:

Multipage applications: In multipage applications, multiple HTML pages are used to represent the various screens of your application. Navigation between pages uses the standard browser mechanics, with links defined by anchor tags. Each HTML page includes script references to the Cordova JavaScript code and your application JavaScript.
다중페이지 응용프로그램: 다중페이지 응용프로그램 안에는, 당신의 응용프로그램이 대체적으로 여러 HTML 페이지들이 여러 스크린에 의하여 표현되어진다는 것을 뜻합니다. 페이지들을 안내(Navigation)하기 위해 사용되는 것은 기본 브라우저 메카닉과 앵커 태그에 의해 정의되어진 링크입니다. 각각의 HTML페이지는 Cordova JavaScript 코드 레퍼런스 또는 사용자 응용 JavaScript를 추가하고 있습니다. 

Single-page applications: In single-page applications, a single HTML file references Cordova and your application JavaScript. Navigation between the various pages of your application is achieved by dynamically updating the rendered HTML. From the perspective of the phone browser, the URL remains the same and there’s no navigation between pages.
The choice you make between these two patterns has a significant impact on the structure of your code.
단일페이지 응용프로그램: 단일 페이지 패턴의 응용프로그램은, 하나의 HTML 파일에 Cordova 또는 당신의 응용 JavaScript가 참조될 수 있습니다. 당신의 응용프로그램에서 여러 페이지들을 안내(Navigation)하기 위해서 HTML을 다이나믹하게 수정하여 그려내게(Rendered) 됩니다. 폰의 브라우저의 시점에서는 URL(Uniform Resource Locator)은 남아서 동일하고, 페이지 주소를 안내(Navigation)하진 않습니다.
이 두가지 패턴중에 한 가지를 선택하는 것은 코드의 구조에 중요한 영향을 미치게 됩니다.

Generally speaking, the multipage pattern is best suited to applications that mostly comprise static content. With this approach you can take HTML/CSS/JavaScript that’s currently used on your Web site and package it, using Cordova, for delivery to the phone as an application. But the multipage approach has some disadvantages. First, when the browser navigates from one page to the next, it has to reload and parse all the JavaScript associated with the new page. There’s a noticeable pause as the Cordova lifecycle, which creates the link between the JavaScript APIs and C# counterparts, is executed. Second, because your JavaScript code is being reloaded, all application state is lost.
일반적으로 말해서 다중페이지가 최고의 정적 컨텐츠 응용프로그램 패턴이라고 할 수 있습니다. 단일페이지 응용프로그램으로서 당신의 폰에 Cordova를 사용하여 전달한다는 접근은 현제 당신의 웹사이트나 패키지에서 사용되고 있는 HTML/CSS/JavaScript를 취할 수가 있다는 것입니다. 그러나 다중페이지 접근은 몇 가지 불리한 것이 있습니다. 첫 째, 브라우저로 하나의 페이지에서 다음으로 안내되어 질 때, 모든 것을 새로읽고 해독하고 JavaScript를 새로운 페이지에 조합하여야 한다는 것입니다. 여기 Cordova 생활주기에서는 중요한 실행 또는 정지되어 질 때 생성되는 JavaScript API와 C#의 응대(반응)하기위한 연결 상태값 등이 있습니다. 두 번째는 JavaScript코드가 있기 위해서 새로 읽어질 때 모든 응용프로그램 상태가 손실될다는 것입니다. 

The single-page pattern overcomes the issues associated with the multipage approach. The Cordova and application JavaScript code is loaded just once, resulting in a more responsive UI and removing the need to pass application state from one page to the next. The only disadvantage to this approach is the added complexity, with JavaScript code being required to update the UI when navigation occurs.
단일 페이지 응용프로그램 패턴은 다중 페이지 응용프로그램 접근과 같이 대두된 이슈를 극복하였습니다. Cordova와 JavaScript 응용프로그램 코드는 딱 한 번만 읽혀지고, 많은 UI(사용자 인터페이스)의 반응 값과 한 페이지가 소멸되고 남은 응용프로그램 상태 값을 다음 지우는 것입니다(Remving the need to pass application state from one page to the next). 이런 접근에 있어서 유일하게 불리한 점은 페이지들 간에 안내(Navigation)가 되고 있을 때 JavaScript코드로 UI의 상태 또는 모양을 업데이트하게 될 때 복잡해 진다는 것입니다.

The demo application described in this article uses the single-page pattern. For an example of the multipage approach in action, I recommend looking at the DemoGAP CodePlex project (demogap.codeplex.com), which provides a simple demonstration of the Cordova API features within a Windows Phone application.
현제 제공되는 데모 응용프로그램은 싱글 페이지 패턴의 문서를 가지고 기술 된 것입니다. 윈도우 폰 응용프로그램으로 제공된 간단한 Cordova API 데모 중 다중 페이지 접근의 예문을 활용하시려면 저는 DemoGap Complex Project(demogap.complex.com)을 보라고 추천하고 싶습니다. 

데모 응용프로그램

The rest of this article describes “Cordova Twitter Search,” a simple Windows Phone application that allows the user to search Twitter based on one or more keywords, as shown in Figure 5.
다음 기술된 "Cordova Twitter Search:Cordova 트위터 검색" 글은 Figure 5에서 보시듯 아주 간단하게 한 개 이상의 키워드로 트위터를 검색하는 윈도우 폰 응용프로그램을 보여주고 있습니다. 


As well as Cordova, this application makes use of the following frameworks:
다음은 코르도바 응용프로그램의 프레임웍입니다.
  • jQuery and jQuery Templates: jQuery has become the de facto standard framework for manipulation of the browser Document Object Model (DOM). jQuery templates are plug-ins that Microsoft developed (bit.ly/8ZO2V1), making it easy to create reusable HTML templates that can be rendered to the DOM. Twitter Search uses jQuery templates to define the UI for the various pages within the application.
  • jQuery 와 jQuery 템플릿: jQuery는 브라우저의 DOM을 가공한 de facto 표준 프레임웍이 되었습니다. jQuery 템플릿은 DOM으로 그려낼 수 있는 HTML 템플릿이고, 창조적인 재사용이 가능하게 Microsoft developed( bit.ly/8ZO2V1)에서 프러그인으로 제공됩니다. 트위터 검색은 응용프로그램에 jQuery 템플릿 UI로 정의된 여러가지 페이지로 구성되어있습니다.


  • Knockout JS: Knockout is a Model-View-ViewModel (MVVM) framework that makes it easy to construct ViewModels and keep them synchronized with Views in a manner familiar to Silverlight developers. It’s this familiarity that led me to choose Knockout over the numerous other suitable JavaScript UI frameworks.
  • Knockout JS: Knockout은 아주 쉽게 뷰모델을 구성하고 지속적으로 동기화 해주는 Silverlight 개발자를 위한 매우 친숙한 Model-View-ViewModel(MVVM)프레임 웍입니다. 이런 친숙함이 다른 괜찮은 JavaScript UI 프레임웍보다 더욱 더 Knockout을 선택하게 이끌었습니다.

I won’t be covering Knockout in detail in this article. If you’re interested in learning more about this framework, I recommend reading John Papa’s recent article, “Getting Started with Knockout” (msdn.microsoft.com/magazine/hh781029). And if you aren’t familiar with the MVVM pattern (where have you been hiding?), I recommend this excellent article by Josh Smith: “WPF Apps with the Model-View-ViewModel Design Pattern” (msdn.microsoft.com/magazine/dd419663).
저는 Knockout을 자세하게 이 글에서 다루고 싶지 않습니다. 그러나 만약 프레임웍(Knockout)에 대하여 더 배우길 원하신다면, 저는 Jhon Papa의 최근 글인 "Getting Started With Knockout"(msdn.microsoft.com/magazine/hh781029)을 권하고 싶습니다. 그리고 만약 MVVM패턴이 익숙하지 않으시다면(뭘 숨기시려하십니까?-역자주: 부끄러워 말라는 거겠죠? 모를수도 있으니...), Josh Smith의 글 "WPF Apps with the Model-View-ViewModel Design Pattern"(msdn.microsoft.com/magazine/dd419663)을 권하고 싶습니다.


마치며...
너무나 오랜 만에 번역 작업을 한 것 같습니다. 역시나 허접하지만, "개떡같이 말해도 찰떡같이 알아들어라" 현명한(?) 우리의 선조들의 말을 빌어 그지같은 저에 오역글에 자비와 인애로 애쓴다하는 생각으로 글을 봐주시길 희망합니다.


아!!!! 아래 추천좀 눌러주심 감사하겠습니다...쿄쿄쿄
좋은 하루 되세요!!!!^^

Posted by gofly

댓글을 달아 주세요

툴 얻어오기...

It’s assumed you already have Visual Studio, the Windows Phone SDK and (optionally) Zune set up for Windows Phone development. If not, you can obtain the tools for free by downloading Visual Studio 2010 Express for Windows Phone (bit.ly/dTsCH2).
윈도우폰 SDK와 (추가적으로)윈도우폰 개발을 위한 Zune을 설치했다는 것은 당신에게 이미 Visual Studio가 있다는 것입니다. 그러나 만약 그렇지 않다고 하더라도 윈도우폰을 위한 Visual Studio 2010 Express를 무료로 다운로드 받을 수 있습니다(bit.ly/dTsCH2).


You can obtain the latest Cordova developer tools from the PhoneGap Web site (phonegap.com), although future releases will be distributed via Apache (incubator.apache.org/cordova). The download includes the templates, libraries and scripts required to develop Cordova applications across all the supported platforms. You’ll want to use the Windows Phone version, of course.
앞으로는 Apache(incubator.apache.org/cordova)를 통하여 분포되어지겠지만, 현제 최근 Cordova 개발툴은 Phonegap 웹사이트(phonegap.com)에서 얻을 수 있습니다. 다운로드에는 템플릿, 라이브러리 그리고 모든 플랫폼을 다양하게 지원하는 Cordova 응용프로그램을 개발할 때 필요한 스크립트들이 포함되어있습니다. 윈도우폰 버전도 역시 사용할 수 있음은 말할 것도 없구말입니다.


Once you’ve downloaded the Cordova tools, follow the Windows Phone Get Started Guide (phonegap.com/start#wp) and install the Visual Studio template. Creating a “Hello World”-style application is as simple as creating a new project based on the supplied template, as shown in Figure 2.
만약에 Cordova 툴을 다운로드 받았다면 윈도우즈폰 개발 시작 가이드
(phonegap.com/start#wp)에 따라서 Visual Studio 템플릿을 설치하기 바랍니다. Figures 2에서 볼 수있듯이, "Hello World"를 만든는 것은 템플릿의 지원을 기반으로 간단하게 만들 수 있는 스타일 응용프로그램입니다.


Figure 2. Visual Studio에 포함된 윈도우폰용 CordovaFigure 2. Visual Studio에 포함된 윈도우폰용 Cordova


If you build and deploy the project created by the template to your emulator, you should be greeted with the message “Hello Cordova,” as shown in Figure 3.
에뮬레이터에서 프로젝트를 빌드하고 배포했다면, Figure 3에서 보듯이 위대한 메세지 "Hello Cordova"를 만날 수 있을 것입니다(이 말투는 굉장히 장황한 어감의 말투임-해석의 부제로 원저자의 의도가 희석될까 우려하여 코멘트를 남깁니다).


Figure 3. 에뮬레이터에서 Cordova 탬플릿 응용프로그램 구동된 모습Figure 3. 에뮬레이터에서 Cordova 탬플릿 응용프로그램 구동된 모습


윈도우포 Cordova 응용프로그램의 해부...


Although you can develop a Cordova application without much knowledge of how it works under the hood, it’s worthwhile understanding what the various files generated by the template are, as shown in Figure 4.
물론 당신은 Cordova 응용프로그램이 내부적으로 어떤지 몰라도 개발은 할 수 있지만, Figure 4에서 보여주듯 탬플릿에 의해 생성된 각각의 파일들이 무엇인지 이해하는 것은 상당히 가치있는(또는 할 보람이 있는) 것입니다.


Figure 4. Cordova 탬플릿의 폴더 구조Figure 4. Cordova 탬플릿의 폴더 구조


Focusing only on the Cordova files in Figure 4 (from top to bottom), note the following:
다음에 나오는 Figures 4의 Cordova 파일에 대한 이야기에만 주의를 기울여주시기 바랍니다:


GapLib/WP7CordovaClassLib.dll is the Cordova assembly. This contains the Windows Phone native implementation of the Cordova APIs.
GapLib/WP7CordovaClassLib.dll은 Cordova의 직약체입니다. 이 것은 윈도우폰 내부수행에 대한 Cordova API들을 가지고 있습니다.


www is the folder where you place your application assets, HTML5, JavaScript, CSS and images. The template generates a basic index.html file and the master.css stylesheet.
www폴더는 당시의 응용프로그램의 자산인 HTML5, JavaScript, CSS그리고 이미지들이 위치하는 곳입니다. 탬플릿은 기본 index.html을 생성하고 master.css 스타일 시트 파일 또한 생성합니다.


www/cordova-1.5.0.js provides the Windows Phone imple­mentation of the Cordova JavaScript APIs. This interfaces with the native code contained within WP7CordovaClassLib.
www폴더 아래의 cordova-1.5.0.js는 윈도우폰이 수행할 Cordova JavaScript API들을 제공하여 줍니다. 네이티브코드인 이 인터페이스는 WP7CordovaClassLib(.dll)과 함께하고 있습니다.


BuildManifestProcessor.js is a JavaScript file that’s invoked by a post-build step. This file generates the Cordova­SourceDictionary.xml file, ensuring that anything you add to the www folder will be loaded into isolated storage.
BuildMainifastProcessor.js 는 post-build step(뭐라 번역을 해야할지 모르겠음;;;;-내용상 봤을 땐 자동으로 개발자산들을 추가하고 관리하는 듯)에 필요한 JavaScript파일입니다. 이 파일은 Cordova-SourceDictionary.xml 파일에 의해 만들어 졌는데, 뭐든 www폴더에 넣든 독립적인 저장공간에서 읽어드리게 될 것입니다.


CordovaSourceDictionary.xml is a generated XML file that lists all of your application assets. When your application first launches, this XML file indicates the files to be loaded into isolated storage.
CordovaSourceDictionary.xml은 당신의 응용프로그램의 모든 자산리스트로부터(프로젝트내의 모든 파일) XML파일로 만들어졌습니다. 당신이 응용프로그램을 실행시킬 때, 독립저장공간에서 XML파일에서 가리키는 파일들을 읽어드리게 됩니다.


The MainPage.xaml file contains an instance of the CordovaView control, a user control that contains a WebBrowser control:
웹브라우저 콘트롤이 포함하는 사용자 컨트롤를 CordovaView 컨트롤 인스탄스를 MainPage.xaml파일이 포함하고 있습니다:


<Grid x:Name="LayoutRoot">

    <my:CordovaView Name="PGView" />

  </Grid>


When the app starts, the CordovaView control takes care of loading your application assets into local storage and navigating to the www/index.html file, thus launching your application. You can, of course, place other Silverlight controls in the page by editing this XAML, although I wouldn’t recommend it. If you’re writing an HTML5 application, your intention is probably to make this work cross-platform. Any controls you add to MainPage.xaml will of course be specific to your Windows Phone build.
응용프로그램이 시작되면, ControlView는 로컬저장공간내의 응용프로그램 자산을 로딩하고, www/index.html을 가리키고 응용프로그램은 구동되게됩니다. 물론 권하지는 않지만, 다른 실버라이트 컨트롤을 XMAL을 수정하여 페이지에 위치시킬 수(place)있는 것은 당연하고. HTML5응용프로그램을 만들었다면, 당신의 의도대로 다중 플랫폼을 지원하게 될 것입니다. 어느 컨트롤들이라 할지라도 윈도우폰을 빌드하는데 있어서 필요한 것이 있다면  MainPage.xaml에 추가할 수 있습니다.


2장을 마치며...

아...조금 더 어려웠네요;;;;; 전문적인 내용들이 속속있고, 또 이 바닥 문서들이 OOP과 비슷한 애매하고 모호한 하지만 굉장히 이론적인 내용들이 담겨져 있는터라, 그것을 의역할지 직역할지 해석하는데 너무나 어려웠습니다. 뭐 그렇다고 잘 해석했다는 것은 아니구요. 제가봐도 문제가 되는 해석구문들이 있으니 영어좀 하시거나 원서읽으시는 분들은 얘뭐야? 하시겠죠...^^;;;;; 죄송합니다. 저도 제 나름의 노력이라 한계가 있네요....뭐 아무튼 다음에는 이제 구체적으로 개발하는 코드들을 보게 됩니다.


조만간 또 찾아오도록 하겠습니다....^^

Posted by gofly

댓글을 달아 주세요

HTML 5 Weekly 에서 Webzine으로 메일이 주기적으로 오는데 아주 흥미로운 기사를 보게 되어 이렇게 글을 쓰게 됩니다.

다음 부터 쓰는 글들은 MSDN Magazine에서 올라온 글인 "Develop HTML5 Windows Phone Apps with Apache Cordova-Colin Eberhardt" 을 참고로 하여  못하는 영어 해석해가며 인용하여 쓴 글입니다(그러니 조금 오역이나 잘못된 글이 있다 하더라도 이해해 주세요^^ ;;;;;). 자 그럼 시작해 보겠습니다!!!!!


Apache Cordova글 시작

This article introduces Apache Cordova, a framework for creating cross-platform mobile applications using HTML5 and JavaScript, and shows how it can be used to develop applications for Windows Phone.
이 글은 HTML5와 JavaScript를 이용하여 Cross-platform(다중 플랫폼) 모바일 응용프로그램을 만들 수 있는  Framework을 소개하고 어떻게 Window Phone용 응용프로그램을 Apache Cordova로 개발할 수 있는지를 소개하는 것입니다.


Windows Phone and its native development platform allow you to create beautiful Metro-style applications with ease. With the recent Nokia partnership, Windows Phone is starting to find its way into more and more pockets.
윈도우 폰과 윈도우 폰 네이티브 개발 플랫폼은 아름다운 메트로 스타일의 응용프로그램을 쉽게 만들 수 있도록 해줍니다. 윈도우 폰은 현제 더욱 더 휴대할 수 있는 방법을 노키아 파트너쉽을 통하여 시작하고 있습니다.


Recent data published by research firm Gartner Inc. predicts a promising future for the Microsoft OS (bit.ly/h5Ic32), with significant market share in a fragmented market. If you’re developing a smartphone application, this market fragmentation means you either have to choose which OS to target or write the same application multiple times using the diverse range of languages these phones require (C#, Java and Objective-C).
최근 연구 조사기관인 Gartner Inc에서 발표한 데이터에 의하면 분산되어 있는 어플리케이션 시장(이하 마켓)의 공유를 얼마나  중요하게 다루느냐가 마이크로소프트 운영체제(이하 OS)의 미래를 약속한다고 내다봤습니다. 분산되어 있는 마켓이라 하면,  스마트폰 응용프로그램을 개발한다고 가정하고, 어떤 OS를 선택할 것인지 다양한 언어중 폰에서 요구하는 언어는 어떤 것으로 해야 하는지를 결정 짓는 것을 뜻합니다.


However, there is another way. All these smartphones have a highly capable browser, in many ways more capable than their desktop counterparts, where some people still use archaic browsers! Modern smartphones allow you to create applications that run within the browser using a combination of HTML5, JavaScript and CSS. With these technologies you can potentially write a single browser-based application that runs across a diverse range of smartphone devices.
그러나, 여기 대안이 있습니다. 모든 스마트폰에는 고기능의 브라우저를 가지고 있는데, 이 브라우저들은 어떤 분들이 쓰는 구식 데스크탑 브라우저에 비해서 다양한 방면에서 뛰납니다! 현대의 스마트폰은 브라우저에서 HTML5, JavaScript 그리고 CSS의 조화를 이뤄 실행할 수 있는 응용프로그램을 만드는 것을 허용하고 있습니다. 이런 기술은 하나의(또는 어떤) 브라우저를 기본으로 하는 응용프로그램을 기술함으로서 다양한 스마트폰 기계에서 사용할 수 있는 잠재력을 말합니다.


Apache Cordova의 소개

You can create an HTML5-based mobile application by creating a public Web page with JavaScript and HTML5 content and directing people to the hosting URL. However, there are a couple of problems with this approach. The first is the distribution model through online marketplaces and stores. You can’t submit the URL that hosts your Web app to a marketplace, so how can you monetize it? The second problem is how to access the phone’s hardware. There are no widely supported browser APIs for accessing phone contacts, notifications, cameras, sensors and so on. Apache Cordova (just Cordova hereafter for brevity) is a free and open source framework that solves both of these problems.
당신은 JavaScript와 HTML5로 이뤄져있고 사용자가 호스팅 URL로 접근할 수 있는 HTML5 모바일 웹페이지 응용프로그램을 만들 수 있습니다. 그러나 이런 접근은 몇가지 문제점을 가지고 있습니다. 첫 번째로 온라인 마켓의 장소와 상점을 통한 배포모델입니다. 웹 응용프로그램을 마켓 호스트 URL로 등록할 수 없는데 어떻게 통용시킬 수 있겠습니까? 두 번째 문제는 어떻게 스마트폰의 하드웨어에 접근하느냐 하는 것입니다. 스마트폰의 주소, 알림, 카메라, 센서 외에도 여러부분이 브라우저 API에서 지원하지 않고 있습니다. 하지만 Apache Cordova(이하 Cordova)는 이 두가지 문제점을 해결해 주는 무료 오픈소스 프레임웍입니다.


Cordova started life as PhoneGap, which was developed by Nitobi. In October 2011 Nitobi was acquired by Adobe Systems Inc., with the PhoneGap framework being open-sourced under the Apache Software Foundation and rebranded as Cordova. This transition is still underway.
Cordova는 Nitobi에 의해 PhoneGap으로 시작하였습니다. 2011년 10월 Nitobi는 Adobe System Inc에서 이 프로그램을 습득하였는데 후에 PhoneGap 프레임웍은 오픈소스로서 아파치 재단아래에서 Cordova로 명명하기 시작하였습니다. 그리고 아직도 과도기에 있습니다.


Cordova provides an environment for hosting your HTML5/JavaScript content within a thin native wrapper. For each smartphone OS, it uses a native browser control to render your application content, with the application assets being bundled into the distributable. With Windows Phone, your HTML5 assets are packaged within the XAP file and loaded into isolated storage when your Cordova application starts up. At run time, a WebBrowser control renders your content and executes your JavaScript code.
Cordova는 가벼운 네이티브 래퍼와 함께 HTML5와 JavaScript컨텐츠를 호스팅 할 수 있는 환경을 제공합니다. 이는 각각의 스마트폰 OS의 기본 브라우저 컨트롤을 사용하여 분포된 응용프로그램 자산을 묶고 그 내용(Content)를 표현해 줍니다. 당신의 HTML5 자산들은 윈도우즈 폰에서 XAP 파일에 담겨지고, Cordova의 독립된 저장공간(Storaage)안에서 로드되어 응용프로그램이 시작됩니다. 이 때, 웹브라우저 컨트롤러는 내용을 표현하고, JavaScritp코드를 실행하게 됩니다.


Cordova also provides a set of standard APIs for accessing the functionality that’s common across different smartphones. Some of these functionalities include:
Cordova는 서로다른 기종의 기본 기능을 접근할 수 있게 해주는 표준 API들을 제공하고 있습니다. 다음과 같은 것들을 포함하고 있습니다:


  • Application lifecycle events
  • 응용프로그램 생애주기 이벤트들
  • Storage (HTML5 local storage and databases)
  • 저장공간(HTML5 자체 저장공간 및 데이터 베이스)
  • Contacts
  • 연락처
  • Camera
  • 카메라
  • Geolocation
  • 위치정보
  • Accelerometer
  • 가속측정(이건 뭐라해야 올은건지 모르겠네요....)

Each one of the preceding functionalities is exposed as a Java­Script API, which you use from your JavaScript code. Cordova does all the hard work involved in providing the required native implementation, ensuring that you work against the same JavaScript APIs, regardless of the phone OS your code is running on, as illustrated in Figure 1.
당신이 JavaScript코드를 사용하게 되면 각각의 선행기능들이 JavaScript API에 감지되게 됩니다. Cordova는 동일한 JavaScript API들을 사용하여 기본실행에 필요한 복잡한 작업들(이 기종간 호환성을 찾고 그 것에 맞게 랲핑하는 것)에 관하여 제공하는데, Figure 1의 그림에서 처럼 스마트 폰의 OS와 상관없이 당신의 코드는 실행 되어집니다.


Cordova개념도Cordova는 하나의 HTML5 응용프로그램으로 다중기종 모바일 OS들간의 실행을 지원합니다.


The bulk of this article discusses Cordova from the perspective of a Windows Phone developer, where development takes place within Visual Studio and you test your application on the emulator or a physical device. While Cordova is a cross-platform technology, you typically develop using your editor or IDE of choice, so an iOS developer would develop a Cordova application in Xcode and an Android developer would most likely use Eclipse.
이글은 대부분 
Cordova의 Visual Studio나 에뮬레이터 또는 물리적인 기계에서의 개발하는 윈도우 폰 개발자의 시점에서 이야기하게 됩니다. 하지만, Cordova로 다중 플랫폼 기술을 사용하는 동안 에디터나 IDE를 선택해야 하는데, iOS개발자는 Xcode내에 Cordova응용프로그램을 개발할 수 있으며, Android개발자는 Eclipse를 사용할 수 있습니다.


Cordova also has a cloud-based build service called Build (build.phonegap.com), where you can submit your HTML5/JavaScript content. After a short time it returns distributions for most of the Cordova-supported platforms. This means you don’t need to have copies of the various platform-specific IDEs (or a Mac computer) in order to build your application for a range of platforms. The Build service is the property of Adobe and is currently in beta and free to use. It will remain free for open source projects.
Cordova는 HTML5/JavaScript을 언제 어디서든 제공할 수 있도록 클라우드 기반의 빌드 서비스 즉 빌드(build.phonegap.com)에 대한 것도 포함하고 있습니다. 후에 분산된 Cordova를 지원하는 플랫폼의 대부분이 될 것입니다. 이는 사용 플랫폼의 IDE 또는 맥컴퓨터에 복사할 필요가 없이 다양한 플랫폼의 범위에 대해서 응용프로그램을 빌드할 수 있다는 뜻입니다. 이 빌드 서비스는 Adobe의 자산이며 현제는 베타로 무료제공되고 있습니다. 이것은 무료 오픈소스 프로젝트로 남게될 것입니다. 


1장마무리....

오늘은 여기까지 하겠습니다. 3일을 번역했는데.....;;;;;;힘드네요^^;;;;;;; 2장에서는 Cordova를 얻어서 설치하고, 샘플로 어떻게 개발하는지를 번역하여 보겠습니다. 그럼 좋은 하루되세요....^^

Posted by gofly

댓글을 달아 주세요

요즘 구상중인 Application이다.

내용은 이렇다 DB를 앞으로 Data 표준이될 XML을 이용하여 Source로 삼고 이것을 조회하거나 할 때, 개발자들이 흔히 이용하는 SQL로 조회하여 보여주고, DML로 데이터를 가공하는 Application이다.

이점은
1.Smart phone과 같은 소형 기기에서 간략하게 사용할 수 있는 소형 DB를 구현할 수 있음
2.Data를 Import시키는 것이 자유롭다.

특징은
1.특정 공간에 두고 App을 구동하며 Data(XML file)를 자동으로 읽어와 조회할 수 있게 해준다.
2.하나의 XML은 하나의 Table이다.
3.SQL언어로 데이터를 조회하기 때문에 별도의 교육이 필요하지 않다.

다음은 mind map으로 구성해본 요소들이다.

XaSQL Program Mind map image

XaSQL Mind map


1. Data Access Method는 Data를 import하거나, create했을 때, 이것을 읽어 오는 기술을 제공합니다.
    ㄱ.Import 방식의 데이터 추가:XML을 복사해서 입력하는 것이다.
    ㄴ.Create 방식의 데이터 추가: DDL언어를 이용하여 XML파일을 만들고, 컬럼은 DTD파일로 저장하여 새로 만들        어진 XML          Data의 컬럼을 정의 합니다.

2. Data Manufacture Method는 Data를 조회하거나 가공하는 기술을 제공합니다.
   ㄱ.SQL형식의 언어와 같은 방식의 언어로 XML 데이터를 조회한다.
   ㄴ.SQL형식의 언어와 같이 데이터를 조작(Insert, Update, Delete)을 한다.

3. Data View Method는 DMM(Data Manufacture Method)에서 가공 또는 조회되는 데이터를 보여주는 기술 제공합니다.
  ㄱ.View All Column: 서로 상이할 수 있는 데이터의 Entity를 모두 컬럼화 하여 해당하는 데이터를 Row의 Column에 보여줍니다.
  ㄴ.View Average Column: 평균적 즉, 일반적으로 보여줘야 할 데이터당 Entity를 조회하여 컬럼을 만들어 Row의 Column에 보       여줍니다.

예시

Text.xml

<Test>
  <Data>
    <name>홍길동</name>
    <age>18</age>
    <height>183</height>
    <weight>73</weight>
    <sex>Male</sex>
  </Data>
  <Data>
    <name>김부자</name>
    <age>56</age>
    <height>153</height>
    <weight>73</weight>
    <sex>Female</sex>
  </Data>
</Test>

============================================

*명령어 입력-표준 SQL형식을 따른다*

SELECT * FROM Text /*<--Text는 Text.xml을 말함*/;

============================================

*실행결과*

   | name | age | height | weight | sex |              /*<==각 데이터의 Entity를 column화 함*/
1   홍길동   18       183       73       Male            /*<==각 데이터를 Column에 맞게 나열함
2   김부자   56       153       73      Female

============================================

이렇게 동작하는 프로그램이다.

'Idea Story' 카테고리의 다른 글

요즘 구상 중인 XML as Sequence Query Language : XaSQL  (0) 2010.05.15
Posted by gofly

댓글을 달아 주세요