반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

Kurogo Tutorial 22 - Content Module -

2012. 10. 10. 01:44 | Posted by 솔웅


반응형

Content Module


content module은 다른 소스로부터 자유롭게 content를 모으고 display 할 목적으로 만들어 졌습니다. Content Module은 다른 HTML site 나 RSS feed 로부터 display 된 곳으로부터 content를 모아서 display 할 수 있습니다. 또한 configuration file이나 administration module을 사용해서 static content configured 를 display 하도록 할 수 있습니다.

디폴트로 content 모듈은 리스트에 그 feed 를 display 합니다. 그리고 나서 유저가 feed를 선택하면 그 feed 의 content가 보여지게 되는 겁니다. 만약에 feed 가 1개만 있다면 리스트 대신 그 feed 가 보여집니다. 옵션으로 group화 할 수 있습니다.


Configuring Content Feeds


SITE_DIR/config/MODULE/feeds.ini file에 원하는 만큼의 feed 를 정의 하세요. 각 feed 는 section에 의해 표현됩니다. 그 섹션의 이름은 모듈의 page를 의미합니다. 이곳에는 configure 할 몇가지 property들이 있습니다.


  • TITLE - The title of the feed. This is shown in the list and in the navigation bar
  • CONTENT_TYPE - the type of content. Values include:
    • html - Static html text that is included in the CONTENT_HTML property
    • html_url - Fetch HTML content from the BASE_URL property.
    • rss - Fetch RSS content from the BASE_URL property. Will retrieve the content from the first item in the feed. Good for CMS’s that expose their content via RSS. Ensure that this feed contains the full content and not just a link



Creating Groups of Content


  • NOTE - Creation of content groups is not supported in the admin console at this time.

You can create groups of content in order to organize similar content into categories. Creating content groups involves the following steps:

유사한 콘텐트를 하나의 카테고리에 묶기 위해 콘텐트의 group을 만들 수 있습니다. 아래와 같이 group을 생성하시면 됩니다.

  1. SITE_DIR/config/MODULE/feedgroups.ini 파일을 생성한다.
  2. 그룹 이름을 feedgroups.ini 의 section 안에 넣는다. 스페이스나 특수문자가 없는 alpha numeric 소문자이어야 한다.
  3. 섹션에는 TITLE option이 있어야 한다. 이것은 그룹의 title을 나타낸다. 옵션으로 DESCRIPTION value를 넣을 수 있다. 이것은 그룹의 리스트 top에 보여질 내용이다.
  4.  SITE_DIR/config/MODULE/feeds-groupname.ini  파일을 만든다. groupname is the short name of the group you created in feedgroups.ini. This file should be formatted like feeds.ini with each entry being a uniquely indexed section.
  5. 이 그룹을 사용하기 위해 eeds.ini. 안에 entry를 할당한다. 그룹의 short name 값으로 GROUP 값을 넣는다. 옵션으로 TITLE을 넣을 수 있다. 이것은 eedgroups.ini 안에서 group title 대신에 쓰이게 된다.

feeds.ini file에는 groups와 content entry 들이 있을 겁니다. 이것들은 section의 순서대로 display 될 겁니다. 만약 1개의 그룹만이 있다면 그 그룹이 display 될 겁니다.

아래는 SITE_DIR/config/MODULE/feedgroups.ini 예제입니다. 각 그룹은 TITLE이 있는 section 입니다. 여러분이 원하는 만큼의 그룹을 만들 수 있습니다.


[applying]
TITLE = "Applying to Universitas"
DESCRIPTION = ""

[visiting]
TITLE = "Visiting"
DESCRIPTION = ""


SITE_DIR/config/MODULE/feeds-applying.ini.  아래는 applying group 예제입니다. feeds.ini file처럼 format 됐습니다.


[admissions]
TITLE = "Admissions"
SUBTITLE = ""
SHOW_TITLE = 0
CONTENT_TYPE = "html_url"
BASE_URL = "http://universitas.modolabs.com/admissions"
HTML_ID = "node-2"


SITE_DIR/config/MODULE/feeds.ini


[applying]
TITLE = "Applying to Universitas"
GROUP = "applying"

[visiting]
TITLE = "Visiting"
GROUP = "visiting"

[othercontent]
TITLE = "Other Content"
SUBTITLE = ""
SHOW_TITLE = 0
CONTENT_TYPE = "html_url"
BASE_URL = "http://www.example.com/othercontent"
HTML_ID = "html-id"


Options for HTML Content


HTML document에서 data를 추출하기 위해서는 몇가지 옵션이 추가로 있습니다. 대부분의 경우 HTML, HEAD 태그 같은 것들은 건너뛰고 header와 footer 들도 remove 할 겁니다. 그리고 그 HTML 문서의 일부분만 사용하길 원하겠죠. 어떤 content 를 포함 시킬것인지 결정하는 방법에는 두가지가 있습니다.

  • HTML_ID - Use this option to include only a single element (and its child elements) based on its HTML id attribute. This is the simplest, and most recommended option if it is available. The value for this option is case sensitive.
  • HTML_TAG - Use this to include all elements of a certain tag. For instance set it to “table” to include all table elements or “p” to include all paragraph elements. Do not include the surrounding brackets (<, >)


만약 이 옵션을 사용하지 않으면 body tag 전체가 추출될 겁니다.


반응형


반응형
Posted on . Written by


Corona에 몇가지 더 업데이트 된 사항이 적용됐습니다.


첫번째로 Tom 의 iOS 6 FAQ 를 권해드립니다. 애플의 iOS 6와 관련된 아주 많은 버그들이 소개돼 있습니다. 이러한 버그와 관련된 문제를 극복하기 위해 여러방면에서 노력하고 있고 여러분들이 활용할 수 있는 해결 방법들을 소개해 드리고 있습니다.


두번째로 NOOK HD 프로토타입으로 좀 더 많은 테스트를 할 수 있는 기회를 가졌습니다. NOOK team 으로부터 그 기회를 받았죠. NOOK 팀과 같이 해결해야할 많은 이슈들을 찾아냈습니다. 아마 이 문제들은 코로나 뿐만이 아니라 다른 앱에도 적용되는 문제들이 많이 있고 이를 NOOK team 이 해결하기 위해 계속 작업하고 있습니다.


  • The virtual keyboard causes a resize event, causing touches to be incorrectly offset.
  • Resuming an app sometimes shows a black screen if nothing is being animated. This happens rarely — only on specific situations (no animation occurring when app resumes from suspend) — and there’s a simple workaround that I mentioned at the bottom of Monday’s post.
  • The navigation bar half covers a fullscreen video player’s media controls.
  • The native activity indicator is not working


맵뷰에서 맵이 손가락을 따라 움직이지 않는 이슈를 찾아냈습니다. 이것이 NOOK의 문제인지 아니면 우리의 implementation 문제인지 아직 확실하지는 않습니다. (어쨋든 이 맵뷰는 다른 곳에서는 잘 작동합니다. 그리고 NOOK의 old 버전에서도 잘 작동하구요.)


그리고 WebView/WebPopup 이 JNI 와 충돌하는 것도 찾았구요. 이 이슈는 해결을 했구요. daily build 927 부터 적용이 될 겁니다.


우리는 이러한 버그들을 해결하기 위해 NOOK 팀과 계속 작업을 해 나가고 있습니다.


* * *


이 이슈들과 관련해서 이 블로그에 우리의 roadmap 과 어디까지 진행되고 있는지에 대해 공지해 드리겠습니다.


오늘 아침에 이러한 내용들과 또 CoronaGeek 관련된 내용들에 대해 얘기 했습니다. 아래 video를 보시면 그 내용을 보실 수 있습니다.



반응형

FAQ Wednesday: iOS 6 버그들

2012. 10. 9. 21:08 | Posted by 솔웅


반응형
Posted on . Written by


It’s Wednesday and time for another FAQ session. Here are some frequently asked questions (FAQ) about current iOS 6 bugs.

수요일의 FAQ 시간인데요. 오늘은 요즘 많이 질문되는 iOS 6 bug들과 관련한 내용을 다루겠습니다.


1. Why does GameCenter crash my app on iOS 6?


이전 FAQ에서 말씀 드렸듯이 이미 알려진 iOS 6 Apple bug 가 있습니다. landscape 모드인 앱에서 일어나는데요. GameCenter 의 로그인 화면이나 photo picker 가 나올 때 충돌하는 현상이 있습니다.

아이폰 디바이스의 이 두가지 네이티브 object들은 portrait mode 만 있거든요. landscape 앱에서 이 두 네이티브 object 들이 display 될 떄 crash 가 일어납니다. iPad 에서는 문제되지 않아요. 이미 애플 버그로 등록된 내용입니다.


2. I see a number of GameCenter work-arounds on StackOverflow.com. Why can’t you include those fixes in Corona?


인터넷이나 애플 개발자 포럼등에 있는 work-around를 저희들도 보고 있습니다. 그리고 그 해결책들을 찾기 위해 노력하구 있구요. GameCenter와 관련한 이슈에 대한 해결책과 이것을 어떻게 portrait 모드인 이 화면을 landscape인 앱에서 작동되게 하느냐 같은 문제들이 있죠.  그리고 GameCenter 에 대해 Portrait mode로 display 하도록 하면 그와 더불어서 UIViewController objects 들 즉 TextField, TextBox, webViews같은 Native objects 들도 GameCenter object 와 같이 Portrait, Landscape 모드에 맞춰서 돌아가는 문제도 있습니다.

그러면 Landscape 에 맞춰서 앱을 만들었는데 그 layout 이 이상하게 돌아가게 되겠죠.



지난 며칠간 저희들은 GameCenter 객체가 portrait 모드로 돌아가도록 하면서 다른 native object들은 돌아가지 않도록 하는 방법들을 연구했습니다. 애플에서 제공하는 API로는 이를 해결할 방법을 찾지 못했습니다. 애플 private API 로는 그것을 해결하는 방법을 찾았습니다만 애플은 이 private API를 사용하는 것을 금지하고 있습니다. 아마 그 방법을 사용하면 앱스토어에서 심사할 때 reject 될 겁니다. 그러니까 그 방법은 해결책이 될 수 없게 됐습니다.





3. How can I configure my app to work around the GameCenter iOS 6 bug?


만약 여러분의 앱이 Landscape mode에서만 운영이 된다면 그리고 GameCenter 나 Photo Picker 를 사용해야 된다면 build.setting를 portrait mode가 가능하도록 수정해 주시면 됩니다. 그러면 GameCenter와 Photo Picker 시 충돌이 일어나지 않습니다. 단지 Corona content 는 landscape mode 만 되도록 해야 앱을 사용할 수 있겠죠. 이 방법의 단점은 1) 여러분 앱이 landscapeRight 만 가능하게됩니다. 2) textFields, textBoxes, webView 같은 native object 들이 portrait 일 경우 돌아가게 됩니다.  GameCenter 는 rotate 되도록 하면서 다른 native object 들은 rotate 되지 않도록 하는 방법은 없습니다.


settings = {
orientation =
{
default = "landscapeRight",
content = "landscapeRight",
  supported = { "landscapeRight", "portrait" },
},
}



content = “landscapeRight” line을 잘 보세요. landscapeLeft 는 허용이 되지 않습니다. 코로나는 이 부분에 오직 한개의 orientation 만 세팅하기 때문입니다. 그리고 이렇게 하면 Corona content  는 landscapeRight 로 모두 고정이 되지만 supported 에서 landscapeRight와 portrait을 허용했기 때문에 native objects 들은 portrait 모드에서 돌아가게 됩니다. 



build 926 에서는 GameCenter event.type을 추가했습니다. 아마 이것을 활용해서 rotation 이슈를 콘트롤 하실 수 있을 겁니다. GameCenter의 initCallback 에 대해 event.type이 showSignIn 으로 잡히게 됩니다. 이 시점은 GameCenter의 로그인 화면이 막 나타나기 직전 입니다. 이 때 native object 들을 업애거나 hide 혹은 delay showing을 시키실 수 있습니다. 유저가 사인하고 난 이후에는 이 event.type이 없어집니다. 이렇게 되면  initCallback 은 evnet.type == "init" 이 됩니다. 유저가 이미 GameCenter에 로그인 된 상태라면 showSignIn 이벤트가 일어나지 않습니다. 곧바로 init event로 갈겁니다. 


그리고 orientation listener를 추가하는 것이 필요할 겁니다. 유저가 디바이스를 rotate 시켰는데도 native 객체들이 그대로 있을 수 있으니까요. 디바이스가 로테이트 되면 이것을 catch 해서 해당 native objects 들을 hide 시키는 방법도 있겠죠.


local function initCallback( event )
    -- "showSignIn" is only available on iOS 6+
    if event.type == "showSignIn" then
        print( "showSignIn event found" )
-- This is an opportunity to pause your game or do other things you might need to do while the Game Center Sign-In controller is up.
-- For the iOS 6.0 landscape orientation bug, this is an opportunity to remove native objects so they won't rotate.
-- This is type "init" for all versions of Game Center.

     elseif event.data then
print( "init event found" )
loggedIntoGC = true
gameNetwork.request( "loadScores", { leaderboard={ category=leaderBoards[currentBoard], playerScope="Global", timeScope="AllTime", range={1,3} }, listener=requestCallback } )
    else
-- User canceled sign-in
end

end

 

이 방법들이 이상적인 혹은 근본적인 해결책은 아닙니다. 가장 근본적인 방법은 애플이 이 버그를 해결하는 것이죠. 저희들이 버그 리포트를 했지만 여러분들도 애플에 버그 리포트를 해 주시면 좀 더 빨리 해결 될 수 있을 겁니다.



4. My app doesn’t use GameCenter but does use PhotoPicker and it crashes too. What can be done about that?


위에서와 같이 build.settings을 수정하면 GameCenter와 PhotoPicker 모두에서 동작합니다. (몇가지 제한사항도 마찬가지구요) 물론 sign-in listener event.type은 GameCenter에만 해당이 되는겁니다. 이 문제를 근본적으로 해결하려면 애플에 버그리포트를 하고 그런 버그 리포트가 많이 쌓이게되면 애플에서 우선순위를 두어서 수정을 할 겁니다. 애플에 버그 리포트를 해 주세요.



5. Why does my iOS 6 app crash when I use network.request?


애플은 iOS6에서 network delegate에 대한 약간의 변화를 주었습니다. 그런데 아주 짧은 시간에 많은 network.request가 일어날 경우 iOS 6 앱이 충돌하는 현상이 발생하고 있습니다. 저희들은 그 해결 방법을 찾았구요 다음 Daily Build 에 반영할 예정입니다. (build 926 이후부터) 맥 시뮬레이터에서도 비슷한 이슈가 있었는데요. 이것도 build 926 부터 수정이 될 겁니다.


6. Why can’t I see my print message in the Xcode Console?


몇주 전에 이와 관련해서 알려드렸었는데요. iOS 6 애플에서 애플리케이션에 있는 메세지를 capture 하는 방법이 그 이전과 다르게 진행됩니다. 그래서 print 메세지가 Xcode Console 로 가는 부분이 제대로 작동이 되지 않고 있습니다. (Xcode 에 연결된 디바이스) 이와 관련된 좋은 소식은요 해결방법을 찾았다는 거구요 Daily Build 925 버전부터는 제대로 작동하게 됐습니다.



여기까지가 오늘의 질문과 답변들입니다.



반응형