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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

Kurogo Tutorial 19 - The Kurogo Object -

2012. 6. 12. 05:10 | Posted by 솔웅


반응형

The Kurogo Object


쿠로고 객체는 싱글턴 인스턴스 입니다. 이 객체는 모듈을 개발 할 떄 사용하는 일반적인 태스크인 여러개의 메소드들을 포함하고 있습니다.


Static Class Methods

  • Kurogo::sharedInstance() - shared Kurogo singleton object를 return 합니다. This is typically not necessary to use since all publically documented methods are static methods on the Kurogo class.
  • Kurogo::tempDirectory() - configured temporary directoryt를 return 합니다.
  • Kurogo::siteTimezone() - DateTimeZone object set를 세팅된 site의 세팅된 time zone으로 return 합니다.
  • Kurogo::includePackage($packageName) - Adds a library package to the autoloading path. See The AutoLoader
  • Kurogo::getSiteVar($key, $section=null) - See Configuration
  • Kurogo::getOptionalSiteVar($key, $default=’‘, $section=null) - See Configuration
  • Kurogo::getSiteSection($section) - See Configuration
  • Kurogo::getOptionalSiteSection($section) See Configuration
  • Kurogo::getSiteString($key) - See Configuration
  • Kurogo::getOptionalSiteString($key, $default=’‘) - See Configuration
  • Kurogo::getCache($key) - Retrieves a value from the memory cache - See Caching
  • Kurogo::setCache($key, $value, $ttl = null) - Sets a value to the memory cache - See Caching
  • Kurogo::deleteCache($key) -Removes a value from the memory cache - See Caching
  • Kurogo::log($priority, $message, $area) - Logs a value to the kurogo log - See Logging in Kurogo
  • Kurogo::encrypt($value, key) - Encrypts a value (requires the mcrypt extension). See Encryption
  • Kurogo::decrypt($value, key) - Decrypts a value (requires the mcrypt extension). See Encryption



The AutoLoader


PHP 클래스를 사용하기 전에 클래서 정의가 로드돼 있어야 한다는 것을 기억하세요. 쿠로고는 그 클래스의 이름과 같은 PHP 파일 인 각 클래스를 포함하는 패턴을 따릅니다. 파일들을 활용하기 위해 PHP의 require와 include 구문을 사용할 수 있도록 Kurogo는 클래스가 request 됐을 때 그 파일을 자동으로 include하는 autoloading 메카니즘을 가지고 있습니다. autoloader는 site의 lib 폴더나 base Kurogo lib 폴더를 찾을 겁니다.  그리고 그 클래스와 같은 이름의 파일을 로드할 겁니다. 그러므로 SomeClass::method()로 call을 하면 아래와 같은 파일들을 찾을 겁니다.

  • SITE_DIR/lib/SomeClass.php
  • KurogoRoot/lib/SomeClass.php


Packages


클래스 파일들의 구성을 좀 더 유용하게 하기 위해 패키지라는 개념을 사용합니다. 이것은 비슷한 기능을 갖는 파일들을 한 그룹으로 묶는 겁니다. package를 include 하면 autoloader가 그 subforlder까지 찾을 겁니다. 또한 그 lib 폴더에 있는 Package.php라는 파일을 로드하려고 할 겁니다. 이렇게 함으로서 글로벌 상수나 글로벌 함수 정의들을 로드할 수 있도록 합니다. 예를 들어 Maps 패키지가 오드되면 다음과 같은 경로가 autoloader 검색 path에 추가 될 겁니다.

  • SITE_DIR/lib/Maps/
  • KurogoRoot/lib/Maps/


그리고 autoloader는 lib/Maps.php를 로드하려고 할 겁니다.

여러분의 여러분 site의 lib 폴더에 간단하게 폴더를 추가 생성함으로써 여러분의 패키지를 생성하실 수 있습니다. 아래 패키지들은 쿠로고에서 제공하는 패키지들입니다.


  • Authentication (included automatically when authentication is enabled)
  • Authorization - for connecting to various OAuth based web services
  • Calendar - includes classes to deal with date and time
  • db - used when you wish to interact with a database
  • Emergency - used by the emergency module
  • Maps - used by the maps module
  • People - used by the people module
  • Video - used by the video module


Encryption

1.4 버전에서는 암호화 된 데이터를 저장하고 retrieve 하기 위한 메소드가 추가 됐습니다. 이것은 보안을 유지하면서 원격 서버로부터 중요한 데이터를 저장하는데 유용하게 이용될 수 있을 겁니다. 이 메소드들은 mcrypt extension 이 필요합니다. 다른 암호화 시스템 처럼 데이터를 암호화하기 위해 사용되는 키들을 보호합니다. 기본적으로는 서버 소프트웨어의 인스톨 경로를 사용해 발생되는 SITE_KEY constant를 사용하게 됩니다. site.ini에서 SITE_KEY를 업데이트 해서 이 key를 세팅할 수 있습니다.


Caching

1.4 버전에서는 in-memory caching을 사용해서 쿠로고의 퍼포먼스를 개선하기 위한 메소드를 추가했습니다. 서버가 특정 확장자들을 포함하고 있으면 configuration 값들과 탬플릿들의 search path들 그리고 remote data values 같은 쿠로고에 의해 사용되는 caching information으로 서버의 퍼포먼스를 크게 개선하실 수 있습니다.


Configuration


쿠로고는 2개의 다른 시스템을 사용해서 caching을 지원합니다.


이 시스템에 대한 configuration은 kurogo.ini의 [cache] 섹션을 통해서 완료 됩니다.

chaching types에 의해 사용되는 몇개의 옵션들이 있습니다.

  • CACHE_CLASS - The type of caching system to use. Current options include APCCache and MemcacheCache
  • CACHE_TTL - The default time-to-live (in seconds) for cache values. 특정 시간동안 캐쉬에 값을 보관할 겁니다. 대부분의 경우 10~15분 (600-900)이 적당합니다. 


APC

APCCache 에 대한 추가적인 옵션은 없습니다.


Memcache


이 옵션들은 MemcacheCache에만 적용됩니다.


  • CACHE_HOST - memcache 서버의 hostname 이나 IP address. 이 값이 배열이면(CACHE_HOST[]) 쿠로고는 failover를 할 겁니다. 
  • CACHE_PORT - memcache server에 연결하기 위해 사용되는 포트. default는 11211
  • CACHE_PERSISTENT - 1로 세팅되면 persistent connection이 사용 될 것임. 디폴트는 false
  • CACHE_TIMEOUT - Timeout in seconds to connect to the servers. This should rarely be altered.
  • CACHE_COMPRESSED - If set to 1, compression will be used. Default is true.


반응형

Kurogo Tutorial 18 - Video Module -

2012. 6. 7. 00:10 | Posted by 솔웅


반응형

Video Module

video 모듈은 YouTube, Vimeo and Brightcove 같은 3rd party websites 의 비디오 컨텐트에 mobile에서 access 해서 내용을 보여주도록 하는 모듈입니다.


Configuring the Sources


비디오 모듈은 각 섹센에 대해 구별되는 feed를 사용해서 섹션별 비디오들을 organize 할 수 있도록 해 줍니다. 각 섹션에는 service provider에 대한 정보가 있고 tag나 author 에 의해 filter 될 수 있습니다. (문자 검색에 의해서도 filter 될 수 있습니다.) feed 는 SITE_DIR/config/video/feeds.ini 안에서 configure 됩니다.


각 fee는 section에 포함 됩니다. 각 section의 이름은 일반적으로 그렇게 중요하지는 않지만 반드시 unique 해야 합니다.

각 feed에는 아래 옵션들을 사용하게 됩니다.

  • RETRIEVER_CLASS - The Data Retriever to use. Currently supported retrievers include:
    • YouTubeRetriever
    • VimeoRetriever
    • BrightcoveRetriever
  • TITLE - The textual label used when showing the section list
  • AUTHOR - optional, used to limit the results by author
  • TAG - optional, used to limit the results by tag



YouTubeRetriever


유튜브에는 아래 옵션이 추가적으로 더 있습니다.

  • PLAYLIST - optional, used to limit the results by a particular playlist


VimeoRetriever

Vimeo에는 아래 옵션이 추가적으로 더 있습니다.

  • CHANNEL - optional, used to limit the results by a particular channel


BrightcoveRetriever

Brightcove service를 사용하시려면 몇개의 parameter들을 사용하셔야 합니다.

값들은 Brightcove` 에서 받을 수 있습니다.

  • token
  • playerKey
  • playerId


Configuring Display Options

  • MAX_PANE_RESULTS - (optional) tablet device에서 display 될 Maximum number. Defaults는 5.
  • MAX_RESULTS - (optional) 비디오 모듈의 index 페이지에서 표시될 maximum number. Defaults는 10.
  • BOOKMARKS_ENABLED - (optional) true로 세팅하면 즐겨찾기 할 수 있는 표시가 나타남. 디폴트는 true
  • SHARING_ENABLED - (optional) Defaults to true. true로 세팅하면 detail page에 현재 비디오를 share 할 수 있는 링크가 나타남. 디폴트는 true.


반응형

Kurogo Tutorial 17 - Calendar Module -

2012. 6. 1. 23:47 | Posted by 솔웅


반응형

Calendar Module

Calendar 모듈은 날짜와 관련된 정보를 모바일에 맞게 제공합니다. 날짜별 카테고리별 그리고 리스트별로 일정들을 볼 수 있고 그 일정의 세부 일정도 보게 할 수 있습니다. 쿠로고에 자체 내장돼 있는 Calendar 모듈은 iCalendar(ICS) 포맷에 따라 정보를 parsing 하고 보여 줍니다.


Configuring the Calendar Feed


Calendar 모듈을 사용하시려면 먼저 여러분의 데이터와의 connection을 셋업해야 합니다. 반드시 세팅해야 할 2개의 값이 있고 몇개의 옵션값이 더 있습니다.  Administration Module 을 사용하거나  SITE_DIR/config/calendar/feeds.ini 파일을 직접 edit 해서 세팅할 수 있습니다.


Calendar 모듈은 여러 종류의 칼렌더를 제공합니다. 각각의 칼렌더는 configuration 파일의 각각의 섹션에 의해 지정 됩니다. 섹션의 이름은 type이 되고 어떤 칼렌더를 사용할 것인지는 URL들을 이용해서 정해줍니다. type 파라미터가 url을 지정돼 있지 않으면 첫번째 calendar 가 사용될 겁니다.

  • TITLE 값은 calendar feed의 이름에 사용되는 label 입니다. 이 값은 해당 이벤트가 보여질 때 상단의 제목으로 사용될 겁니다.
  • BASE_URL은 ICS feed 의 url로 세팅 됩니다. static file일 수도 있고 web service 일 수도 있습니다.

Optional values

  • RETRIEVER_CLASSData Retriever 에 대한 다른 클래스 이름을 세팅할 수 있도록 해 줍니다. 만약 여러분의 service가 dinamic URL을 사용한다면 custom retriever를 사용하셔야 합니다.
  • PARSER_CLASS (default ICSDataParser) DataParser 의 서브클래스로 세팅해 줍니다. iCalendar(ICS) 포맷이 아닌 포맷으로 데이터를 return 할 때 해당 포맷에 맞게 이 값을 바꿔주셔야 합니다.
  • EVENT_CLASS (default ICalEvent)  검색시 return 된 이벤트 객체들에 대해 다른 클래스 이름으로 세팅할 수 있도록 해 줍니다. feed의 custom field를 처리할 수 있도록 custom behavior를 지정할 수 있도록 해 줍니다.



Configuring the Detail Fields


feed setting이 다 끝났으면 세부정보를 보여주는 화면이 어떻게 display 될지 그리고 어떤 값들을 사용할지를 configure 하셔야 합니다. 각각의 field는 section에서 configure 됩니다. 그 section 이름은 event field와 매핑됩니다. 이 section의 순서는 detail view의 순서가 됩니다. 각각의 섹션안에는 어떻게 이 field가 display 될지를 정해주는 여러 값들이 있습니다. 모두 optional 입니다.

  • label - field에 대한 text label
  • type - value를 포맷하거나 링크를 생성하기 위한 옵션 값. 아래의 값들이 올 수 있습니다.

    • datetime - date/time 값으로 format
    • email - 이메일 주소같은 값에 mailto 링크를 생성함
    • phone - 전화번호 같은 값에 telephone link를 생성함
    • url - url 링크를 생성함
  • class - field에 CSS 클래스를 추가. space를 두고 여러 클래스들을 열거해 사용할 수 있음
  • module - 다른 모듈에 링크를 걸음. 그리고 결과값을 format 하기 위해 그 모듈의 linkForValue 모듈을 사용함. 좀 더 자세한 사항은  Module Interaction를 보세요.

Configuring the Initial Screen

index page는 여러분의 configure 한 calendar들의 리스트를 보여주도록 configure 될 수 있습니다. SITE_DIR/config/calendar/page-index.ini 를 수정해서 이 리스트의 content들을 update 할 수 있습니다. 각각의 entry는 section 입니다. 각각의 section은  listItem 탬플릿에 의해 사용되는 값에 대한 매핑 값들을 가지고 있습니다.

  • title - 사용자에게 보여질 entry 이름
  • subtitle - title 밑에 보여 줄 subtitle
  • url - 목적지 링크. 외부 url에 링크 걸 수도 있고 모듈 안의 한 페이지에 링크를 걸 수도 있슴. 칼렌더 view page들은 어떤 calendar가 보여질지를 지정하기 위해 type 파라미터를 전달해줘야 합니다.

    • day - 해당 일자의 이벤트를 보여 줌
    • year - 12달 동안의 모든 이벤트를 보여 줌. month 파라미터를 전달해서 시작하는 month를 지정할 수 있슴
    • list - 현재일 바로 다음의 이벤트들을 보여 줌. 디폴트 limit은 20 events 임
    • categories - 카테고리의 리스트를 보여 줌. 현재로서는 이 카테고리 리스트를 get 하기 위해서는 특별한 support가 요구됩니다.
  • class - item의 CSS class. 예) phone, email

Configuring User Calendars and Resources

유저 칼렌더와 resources (rooms/equipment 등) 을 보기 위한 기능이 있습니다. 지금까지 support 되는 칼렌더 시스템은 Business 나 Education을 위한 Google Apps 만이 지원 됩니다.


User Calendars 가능하도록 하려면:

  • Setup the authority for your Google Apps Domain.
  • Ensure that you have entered the required OAuth consumer key and secret
  • Ensure that the “http://www.google.com/calendar/feeds” scope is available in your authority.
  • Edit config/calendar/module.ini and add a user_calendars section.
  • Set RETRIEVER_CLASS to GoogleAppsCalendarListRetriever
  • Set AUTHORITY to the section name of your Google Apps Authority. If this value is not set it will use the first defined GoogleAppsAuthority class


아래는 config/calendar/module.ini file 의 예제 입니다.

[user_calendars]
RETRIEVER_CLASS="GoogleAppsCalendarListRetriever"
AUTHORITY="googleapps"

Resource들을 사용하시려면:

  • Setup the authority for your Google Apps Domain.
  • Ensure that you have entered the required OAuth consumer key and secret
  • Ensure that the “https://apps-apis.google.com/a/feeds/calendar/resource/” scope is available in your authority.
  • Edit config/calendar/module.ini and add a resources section.
  • Set RETRIEVER_CLASS to GoogleAppsCalendarListRetriever
  • Set AUTHORITY to the section name of your Google Apps Authority

아래는 config/calendar/module.ini file 예제입니다.

[resources]
RETRIEVER_CLASS="GoogleAppsCalendarListRetriever"
AUTHORITY="googleapps"



반응형

Kurogo Tutorial 16 - Database Access -

2012. 5. 30. 10:43 | Posted by 솔웅


반응형

Database Access

데이터베이스가 필요한 경우는 여럿 있습니다. Kurogo는 PDO pho library를 사용하는 표준 데이타베이스 access abstraction system을 만들었습니다. 이 section에서는 데이터베이스 connection에 대한 configuration 뿐만 아니라 모듈이나 library를 만들 때 어떻게 데이터베이스를 활용하는지에 대한 설명도 있습니다.

Supported Database Backends

Kurogo는 다음과 같은 부분을 지원합니다. 이 시스템을 사용하시려면 PHP extention 이 요구된다는 것을 기억해 두세요. 데이터베이스 서버를 설치하고 configuring 하는것은 이 문서에서는 따로 다루지 않겠습니다.



An important note about SQL statements

Kurogo 데이터베이스 라이브러리는 단지 abstraction library 에 접속하는 일만 합니다. 이것은 SQL abstract library 가 아니기 때문에 서로 다른 backend 시스템이 하나의 SQL language를 지원하지 않구요 거기에 맞는 statement를 사용해야 하는 겁니다. SQL 구문이 반드시 다르게 되는 back ends 들에 대한 정보는 Using the database access library 를 보세요.

Kurogo Features that use Database connections

  •  internal device detection system은 브라우저에 데이터를 저장하기 위해 내장된 SQLite 데이터베이스를 사용합니다.
  • Statistics Modules 은 access log들을 index 하고 report를 준비하기 위해 데이터베이스를 사용합니다. 여러분 환경이 load balance 된 환경이라면 centralized 데이터베이스를 사용하시는게 좋을 겁니다.
  • 옵션으로 세션데이터를 저장하려면 SessionDB 클래스를 사용해서 서버에 파일로 저장할 게 아니라 데이터베이에 저장하는 것이 좋습니다.
  • DatabasePeopleController는 디렉토리 정보를 얻기 위해 데이터베이스를 사용합니다. (LDAP 서버를 사용하지 않고 데이터베이스를 사용하는 겁니다.)
  • DatabaseAuthentication authority 는 authentication을 위해 데이터베이스를 사용합니다.

이 기능들을 사용하시려면 데이터베이스만 있으면 됩니다. 데이터베이스를 사용하지 않아도 Kurogo를 사용할 수는 있습니다.

Configuring Database Connections

site.ini 파일의  database 섹션에는 데이터베이스 connection setting의 primary set 이 있습니다. 모든 데이터베이스 커넥션들은 디폴트로 series of setting을 사용할 겁니다. 여러분들은 특정 서비스의 configuration마다 적당한 값들을 사용함으로서 이러한 세팅들을 override 하실 수 있습니다.

  • DB_DEBUG - on 이면 쿼리들은 log 되고 에러들은 브라우져에 보여집니다. production site에서는 off로 해 두셔야 합니다. 그렇지 않으면 데이터베이스 에러가 있을 때 SQL 쿼리가 노출 될 수 있습니다.
  • DB_TYPE - 데이터베이스 시스템의 종류. 아래와 같은 것들이 있습니다.
    • mysql
    • sqlite
    • pgsql
    • mssql

아래 값들은 host based 시스템들에 적합합니다. (mysql, pgsql and mssql)

  • DB_HOST - The hostname/ip address of the database server.
  • DB_USER - The username needed to connect to the server
  • DB_PASS - The password needed to connect to the server
  • DB_DBNAME - The database where the tables are located
  • DB_PORT - The port used to connect to the server. If empty it will use the default (mysql and pgsql only)

The following values are valid for file based systems (sqlite)

아래 값은 file based systems 에 적용됩니다. (sqlite)

  • DB_FILE - 데이터베이스 파일의 위치. Use the DATA_DIR constant to save the file in the site data dir. This folder is well suited for these files.

Using the database access library

데이터베이스 접근이 요구되는 모듈을 만든다면 여러분 코드를 간단하게 하고 같은 데이터베이스 접근을 쉽게 하기 위해 데이터베이스 클래스를 활용하실 수 있습니다.

  • Include the db package: Kurogo::includePackage(‘db’);
  • Instantiate a db object with arguments, the arguments should be an associative array that contains the appropriate configuration parameters. If the argument is blank then it will use the default settings found in the database section of site.ini
  • Use the query($sql, $arguments) method to execute a query. The arguments array is sent as prepared statement bound parameters. In order to prevent SQL injection attacks you should utilize bound parameters rather than including values in the SQL statement itself
  • The query method will return a PDOStatement object. You can use the fetch method to return row data.
  • The lastInsertID method of the db object will return the ID of the last inserted row.
<?php

Kurogo::includePackage('db');

class MyClass
{
    function myMethod() {

        $db = new db();

        $sql = "SELECT * FROM sometable where somefield=? and someotherfield=?";
        $result = $db->query($sql, array('value1','value2'));
        while ($row = $result->fetch()) {
            // do something
        }
    }
}



반응형

Kurogo Tutorial 14 - Handling Requests -

2012. 5. 23. 00:52 | Posted by 솔웅


반응형

Handling Requests

이 섹션은 HTTP request들을 어떻게 Furogo 프레임워크가 처리하는지에 대한 개요에 대한 글입니다. 간략하게 아래와 같이 outline을 말할 수 있습니다.

1. mod_rewrite가 그 path 가 존재하는지 여부를 살펴 봄
  : DocumentRoot 안에는 2개의 파일과 1개의 폴더가 있습니다 : index.php, robots.txt and min
  : min 폴더는 css와 javascript assets의 version들을 consolidate 하기 위한 간략한 라이브러리를 포함하고 있습니다.
2. file이 없으면 그 사실이 index.php로 보내집니다.
3. file시스템에 있는 file로 경로가 매핑되고 이것을 return 하거나 404 코드가 return 됩니다.
4. SITE_DIR/config/site.ini를 업데이트해서 URLs을 다른 URLs로 매핑할 수 있습니다.
5. 첫번째 경로 component를 기반으로 한 config 폴더는 모듈이 로드 됐는지 확인합니다.





Path patterns

index.php 는 몇가지 패턴에 따라 경로를 analyze 할 겁니다.

- CURRENT_THEME/common/images 폴더에 favicon.ico 가 있으면 client한테 보내집니다.
- ga.php 가 lib 폴더로부터 보내 질 겁니다.
- css, javascript, 이미지들의 subpath 와 함께 모듈의 경로 (혹은 일반적인 경로) 를 포함한 request들은 Pagetype 과 Platform 파일들에 따른 규칙을 사용해서 작동합니다. 다음과 같은 예들이 있습니다. /modules/home/images/x.png, /common/css/compliant.css, /modules/admin/javascript/admin.js
- /media 경로가 있는 request는 현재 site 폴더의 subfolder 안에서 검색 될 겁니다. i.e. /media/file will map to SITE_DIR/media/file

어떤 패턴도 없으면 이 script는 SITE_DIR/config/site.ini 의 [urls] section 에 url이 있는 지 살펴 볼 겁니다. 만약 있으면 그 url로 rediret 될 겁니다.

다른 모든 request들은 그 request 의 첫번째 path component (/module) 를 근거로 site config 폴더에 있는 폴더를 찾으려고 할 겁니다. 첫번째 / 전에 있는 content들은 그 모듈의 id를 가리킬 겁니다. module.ini 파일의 id 프로퍼티를 추가함으로서 이것을 override 하실 수 있습니다.(좀 더 자세한 사항은 Copying a Module을 보세요). 슬래시 다음의 content들은 로드할 page 가 될 겁니다. 명시된 페이지가 없다면 index 페이지가 로드 될 겁니다. 이 script는 (index.php) WebModule::factory method 를 사용해 상응하는 id 를 갖고 module을 instantiate 하려고 시도할 겁니다. 이 때 파라미터로서 $_GET 과 $_POST 변수의 내용도 포함이 됩니다. (어떻게 module file들이 위치되는지에 대한 정보는 Writing Modules를 보세요). Note: the trailing .php for page names is optional.

Examples:


* /home - index 페이지와 함께 home 모듈이 로드 될 겁니다.
* /about/about_site - about_site와 함께 about 모듈이 로드 될 겁니다.
* /calendars/day?type=events 는 day 페이지와 함께 calendars 모듈이 로드되고 여기에 events라는 값을 가지는 Get 변수 name인 type을 포함할 겁니다.
* /news/?section=1 는 index 페이지와 함께 news 모듈을 로드하고 section이라는 name을 가지고 1이라는 값을 가지는 GET 변수를 포함할 겁니다.

Pages 에 대해서는 Writing Module setion에서 좀 더 자세하게 다뤄질 겁니다.

Pagetype & Platform Files

다양한 디바이스에 맞게 request를 만들다 보면 아주 다양한 상황에 놓이게 됩니다. device detection service에는 두가지 중요한 프로퍼티가 있습니다. 이 프로퍼티들은 어떤 content가 로드될 것인가에 영향을 미칩니다.

- pagetype - The basic type of device, is basic, touch, compliant or tablet.
- platform - The specific device type. Examples include: android, bbplus, blackberry, computer, featurephone, iphone, palmos, spider, symbian, webos, winmo


탬플릿 파일이나 css file 그리고 javascript 파일에 대해서는 서로 다른 디바이스 타입과 플랫폼들에 맞게 해당 버전을 로드할 수 있습니다. 프레임워크는 가장 알맞는 file을 로드할 겁니다 예를 들어 디바이스가 안드로이드 디바이스이면 다음 순서대로 index.tpl 파일을 찾아볼 겁니다.

- index-compliant-android.tpl
- index-compliant.tpl
- index.tpl


그리고 feature phone 일 경우는 아래 순서대로 살펴 보겠죠.

- index-basic-featurephone.tpl
- index-basic.tpl
- index.tpl


이렇게 함으로서 여러분은 서로 다른 HTML markup, CSS, javascript를 해당 디바이스에 맞게 제공할 수 있습니다.  탬플릿 안에서 CSS @import 와 {block} 함수를 사용함으로서 일반적인 layer utilize 구조나 스타일을 해당 디바이스에 맞게 제공 되도록 구현할 수 있습니다.


반응형

Kurogo Tutorial 13 - Localization -

2012. 5. 22. 23:11 | Posted by 솔웅


반응형

오늘은 Kurogo의 Localization을 살펴 봅니다.

이 미들웨어의 이름은 일본어 이지만 한국인들이 중심이 되어 만들어서 그런지 예제를 들 때 한국어를 많이 사용했네요.


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


Localization

Kurogo에는 서로 다른 언어와 지역에 대해 지원하는 기능이 있습니다. 여기에는 고정된 화면 출력 값과 에러 메세지 그리고 다른 text string들이 포함 됩니다. 현재 쿠로고는 US English translation만 지원됩니다. 그렇지만 여러분들은 여러분들 만의 translation을 생성할 수 있습니다. 여러분 사이트에 추가할 수도 있고 다음 Kurogo 버전에 반영되도록 submit 하실 수도 있습니다.

Configuration of Languages

site는 여러 언어들을 사용할 수 있도록 configure 되게 할 수 있습니다. 우선순위가 높은 언어를 사용하도록 하려면 Kurogo는 string table을 순서대로 search 하고 첫번째 것을 return 하기 때문에 그에 맞도록 string table을 세팅하시면 됩니다.

언어의 순서는 SITE_DIR/config/site.ini의 [site settings] section에 세팅하시면 됩니다. 간단하게 LANGUAGES[] 값들은 우선순위대로 생성하세요. Kurogo는 ISO 국가 지역코드를 사용합니다. Kurogo에서 지원되는 언어코드들을 보시려면 여기로 가세요.


Code Language Name Native Name
af_ZA Afrikaans Afrikaans
am_ET Amheric አማርኛ
be_BY Belarusian Беларуская
bg_BG Bulgarian български език
ca_ES Catalan Català
cs_CZ Czech čeština
da_DK Danie Dansk
de_AT German (Austria) Deutsch (Österreich)
de_CH German (Swiss) Deutsch (Schweiz)
de_DE German Deutsch (Deutschland)
el_GR Greek Ελληνικά
en_AU English (Australia) English (Australia)
en_CA English (Canada) English (Canada)
en_GB English (United Kingdom) English (United Kingdom)
en_IE English (Ireland) English (Ireland)
en_NZ English (New Zealand) English (New Zealand)
en_US English (United States) English (United States)
es_ES Spanish Español
et_EE Estonian Eesti
eu_ES Basque Euskara
fi_FI Finnish Suomi
fr_BE French (Belgium) Français (Belgique)
fr_CA French (Canada) Français (Canada)
fr_CH Frensh (Swiss) Français (Suisse)
fr_FR French Français (France)
he_IL Hebrew עברית
hr_HR Croatian Hrvatski
hu_HU Hungarian Magyar
hy_AM Armenian Հայերեն
is_IS Icelandic Íslenska
it_CH Italian (Swiss) Italiano (Svizzera)
it_IT Italian Italiano (Italia)
ja_JP Japanese 日本語
kk_KZ Kazakh Қазақ тілі
ko_KR Korean 한국어
lt_LT Lithuanian Lietuvių
nl_BE Dutch (Belgium) Vlaams
nl_NL Dutch (Netherlands) Nederlands
no_NO Norwegian Norsk
pl_PL Polish Polski
pt_BR Portuguese (Brazil) Português (Brasil)
pt_PT Portuguese Português
ro_RO Romanian Română
ru_RU Russian Pусский
sk_SK Slovak Slovenčina
sl_SI Slovene Slovenščina
sr_YU Serbian Cрпски
sv_SE Swedish Svenska
tr_TR Turkish Türkçe
uk_UA Ukrainian Yкраїнська
zh_CN Chinese (Simplified) 简体中文
zh_TW Chinese (Traditional) 繁體中文



예제)

LANGUAGES[] = "es_ES"
LANGUAGES[] = "ko_KR"
LANGUAGES[] = "en_US"


스페인어 다음에 한국어 그리고 영어가 세팅돼 있습니다. US English 는 이렇게 표기하지 않아도 자동으로 맨 마지막에 포함되도록 돼 있습니다. 이렇게 표기해도 되구요. 언어의 순서는 서버에 알려주는 겁니다. 그러니까 여러분이 두개의 서버를 가지고 있고 그 서버는 각각 다른 언어를 주요 언어로 사용한다면 Kurogo에서도 MultiSite를 사용해서 서버별로 다르게 language 세팅을 하실 수 있습니다. 그러면 유저에게는 선호하는 언어를 사용하는 서버로 가도록 링크를 걸어서 서비스를 제공할 수도 있겠죠.

Note : 만약에 admin 콘솔을 사용하신다면 오직 primary language만 세팅하실 수 있습니다. 어드민 콘솔은 multiple language를 지원하지 않습니다.

Using String Tables

Kurogo core와 각 모듈들에 모두 string table들이 있습니다 . 각 파일은 strings 폴더에 위치해 있고 language/locality 를 사용한 이름이 주어집니다. Kurogo는 string 테이블에 이 리스트를 merge 해서 프로젝트 내에서 언제든지 override 할 수 있도록 합니다.

Locations include (examples given for US English String tables)

app/common/strings/en_US.ini
app/modules/home/strings/en_US.ini
app/modules/news/stirngs/en_US.ini
SITE_DIR/app/common/strings/en_US.ini (if you want to override Kurogo string values)
SITE_DIR/app/modules/home/strings/en_US.ini (if you want to override the home module string values)
SITE_DIR/app/modules/news/strings/en_US.ini (if you want to override the news module string values)

다른 모든 Kurogo customization 들 처럼 여러분의 site 폴더 안에 파일을 생성하고 수정하실 것을 권장드립니다. 그래야지 나중에 Kurogo 상위버전 업데이트시 수월하게 하실 수 있습니다.

만약에 스페인어 버전을 사용하시고 싶으시면 아래와 같이 파일을 만드시면 됩니다.

SITE_DIR/app/common/strings/es_ES.ini
SITE_DIR/app/modules/home/strings/es_ES.ini
SITE_DIR/app/modules/news/strings/es_ES.ini

Values

각 string 테이블은 key와 values 쌍으로 .ini 파일 안에 들어가 있습니다. 이 string 을 업데이트하시려면 간단히 이 value를 수정하시면 됩니다. 여러분 파일에 모든 key 가 포함돼 있을 필요는 없습니다. 필요한 만큼의 key 만 작성하시면 됩니다.

key들의 이름은 어디에서 사용되는지 찾기 쉽도록 naming 돼 있습니다.

Format Specifiers

어떤 value들은 변수 값을 사용해서 구성 되도록 되어 있습니다. 왜냐하면 각 언어들의 문법이 다르기 때문입니다. 이런 경우 미리 사용할 placeholder가 정의 돼 있을 필요가 있습니다.  아래 예제가 있습니다.

SEARCH_MODULE="Search %s" ; english
SEARCH_MODULE="%s 검색" ; korean


%s 는 module name으로 replace 될 겁니다.

Site Values

여러분 site에서 사용되는 많은 value들은 standard configuration value들 입니다. 또한 여러분 site의 일 부분이기도 하죠. 이것은 다음과 같은 것을 포함하고 있습니다.

* Site name and organization
* Names of modules and page titles
* Home screen icons
* About text
* Feeds (you may wish to choose feeds that contain content in the appropriate language)

좀 더 자세한 사항은 해당 모듈이나 configuration documentation을 보시기 바랍니다.

Summary



1. String key in template or module
2. Kurogo chooses the appropriate string table
3. If there is a value, it replaces any %s
4. Display string


반응형

Kurogo Tutorial 12 - Logging in Kurogo -

2012. 5. 21. 22:17 | Posted by 솔웅


반응형

Logging in Kurogo


Kurogo 에는 일반적인 logging과 예외적인 이벤트에 대한 logging이 있습니다. logging 시스템의 목적은 수정될 필요가 있는 중요한 상황에 대해 시스템 관리자에게 알리기 위한 점과 개발자에게 Kurogo code paths를 trace 하고 디버그 할 수 있도록 하기 위함입니다.

디폴트로 Kurogo event들은 SITE_DIR/logs/kurogo.log 에 log 됩니다. 각 entry들은 몇개의 부분들로 구성됩니다.


[date/time] area:priority method URI message


area는 이 메세지를 담당하고 있는 Kurogo component를 string으로 표현합니다. Kurogo는 몇개의 표준 area들을 정의하고 있습니다. 그 외에 개발자들은 필요에 따라 아무런 string을 사용하셔도 됩니다. priority는 이 메세지의 중요성(시급성) 등을 알리는 부분입니다. 이 priority map 들은 syslog function 의 priority들을 따릅니다. function/method는 이 메세지가 어디에서 나왔는지를 알 수 있도록 도와 줍니다. 이 URI는 유저가 본 페이지의 address 입니다.




Log Settings

Kurogo log의 behavior에 영향을 주는 몇가지 세팅이 있습니다. 이것들은 SITE_DIR/config/site.ini 에 위치해 있습니다.

  • KUROGO_LOG_FILE (default LOG_DIR/kurogo.log) - Kurogo log 파일의 위치입니다. 이 위치는 웹서버에 의해 write 가 가능해야 합니다. 여기에 모든 로그 메세지들이 저장되게 됩니다.
  • DEFAULT_LOGGING_LEVEL - logging level을 세팅합니다. 여기서 세팅된 레벨보다 높은 메세지만 log 됩니다. 레벨 이하의 로그는 무시됩니다.  
  • LOGGING_LEVEL[area] - 특별 area에 대한 logging 레벨을 세팅합니다. 이 기능은 개발자들이 특정 area에 대한 메세지만 보고 싶을 때 유용하기 사용하실 수 있습니다. 이 레벨은 이 area 에서 DEFAULT_LOGGING_LEVEL를 override 할 겁니다. 여러분은 원하는 만큼의 area를 override 할 수 있습니다. 

Priority Levels

Kurogo에 의해 사용되는 priority level constants가 있습니다. 대부분의 시스템에서는 이것을LOG_WARNING으로 세팅합니다. 이것을 LOG_INFO나 LOG_DEBUG로 세팅하면 여러분은 더 많은 메세지를 보실 수 있습니다. 일반적으로 디버깅을 위해서는 이것을 warning 보다 낮게 세팅하고 있습니다.

  • LOG_EMERG - system is unusable
  • LOG_ALERT - action must be taken immediately
  • LOG_CRIT -critical conditions
  • LOG_ERR - error conditions
  • LOG_WARNING - warning conditions
  • LOG_NOTICE -normal, but significant, condition
  • LOG_INFO -informational message
  • LOG_DEBUG - debug-level message

Standard areas in Kurogo

아래는 logging 메세지들을 구분하기 위한 Kurogo 내부 area들에 의해 사용되는 area들 입니다. 개발자들은 이 임의의 area를 만들어서 사용하실 수 있습니다.

  • admin - Admin console
  • auth - Authentication and authorization
  • config - Configuration
  • data - Used by libraries that retrieve external data.
  • db - Database
  • deviceDetection - Device Detection
  • exception - Exceptions
  • kurogo - Core functions including initialization
  • module - General module events
  • session - User session management
  • template - HTML templates

Logging in your module or library

Kurogo::log($priority, $message, $area) 메소드는 log에 메세지를 보냅니다. $priority 파라미터는 priority level constants 라야 합니다. message는 string 이어야 하고 area는 여러분이 log 하고 싶어하는 area로 string 이어야 합니다. 여러분은 여러분이 필요한 area에 대해 logging 세팅을 하기 위해 LOGGING_LEVEL[area]를 사용하실 수 있습니다.



반응형

Kurogo Tutorial 11 - News Module -

2012. 5. 17. 00:07 | Posted by 솔웅


반응형

이번에는 Kurogo의 News Module 을 살펴봐야겠네요. 관련된 일을 받았거든요.


News Module

뉴스 모듈은 RSS feed 로부터 받은 stories/articles 리스트를 보여 줍니다. 그 feed 가 full textual content를 제공한다면 그 article은 모바일에 맞는 포맷으로 유저에게 보여질 겁니다. 만약 그 feed가 full text를 담고 있지 않다면 그 article로 지정된 URL로부터 content를 fetch 하도록 configure 될 수 있습니다. (아래 FETCH_CONTENT 를 보세요.)

General Options

SITE_DIR/config/news/module.ini  안에 뉴스 모듈의 기본 작동에 관해 configure 할 수 있는 몇개의 옵션이 있습니다.

  • MAX_RESULTS (10) - 뉴스 리스트에 보여질 아이템의 갯수 
  • SHARING_ENABLED (1) - news entries에 sharing link를 걸 수 있는지 없는지 지정. 0으로 하면 지정할 수 없도록 함

Configuring News Feeds

news 모듈을 사용하기 위해 우선 여러분의 data로 연결하는 connection을 setup 해야 합니다. 이를 위해서는 2가지를 반드시 세팅해야 합니다.  이 작업을 하기 위해 Administration Module 를 이용하거나 SITE_DIR/config/news/feeds.ini file 에서 곧바로 값을 수정하시면 됩니다.

이 모듈은 multiple feeds를 지원합니다. 각 feed 는 configuration file안의 section에 의해 지정됩니다. 그 section의 이름은 0-indexed number 이어야 합니다 (i.e. 첫번째 feed는 0 이고 두번째 feed 는 1 ...). 아래의 값들이 필요합니다.

  • TITLE 값은 여러분 feed 의 이름을 가르킵니다. 이 이름은 feed를 선택하기 위해 drop down list 했을 때 보여지게 됩니다.
  • BASE_URL은 여러분의 News feed의 url을 세팅하면 됩니다. static file이 될 수도 있고 Web service 가 될 수도 있습니다.




Optional values

  • RETRIEVER_CLASS - data를 get 하기 위해 alternate data retriever  를 세팅할 수 있도록 합니다. 디폴트는 URLDataRetriever 입니다.
  • PARSER_CLASS - DataParser의 subclass로 세팅합니다. 여러분의 데이터 소스가 RSS/Atom 이나 RDF가 아닌 포맷으로 return 될 때에만 바꾸시면 됩니다. 디폴트는 RSSDataParser 입니다.
  • SHOW_IMAGES - feed의 thumbnail 이미지를 보여줍니다. 이미지가 없으면 placeholder image 가 보일 겁니다. 만약에 모든 feed가 이미지를 가지고 있지 않으면 SHOW_IMAGES=0 으로 세팅하실 수 있습니다.
  • SHOW_PUBDATE - 뉴스 리스트에 publish date를 보여 줌. (published date는 detail page에서는 항상 보여 짐)
  • SHOW_AUTHOR - 뉴스리스트에 저자를 보여 줌 (detail page에서는 항상 저자를 보여 줌) 
  • SHOW_LINK - full article에 대한 link를 보여 줌. feed에 introductory paragraph 만을 포함하고 있을 때 유용함. 

Additional Configuration for RSS Feeds

특정 RSS feeds에 대한 옵션들이 있습니다. RSSDataParser 가 디폴트 parser 이면 이것은 대부분의 feed들에 적용이 될 겁니다.

  • CHANNEL_CLASS   RSS channel 에 대해 다른 클래스 이름을 세팅할 수 있도록 해 줌. 여러분은 custom subclass를 생성해서 unique하게 RSS 아이템을 핸들링 할 수 있습니다. 흔히 사용되지는 않습니다.
  • ITEM_CLASS  feed 안에서 각 아이템에 대해 다른 클래스 이름을 세팅할 수 있도록 함. custom matter 안에 custom fields 나 parse fields를 가지고 있는 feed 를 핸들링 할 수 있도록 해 줍니다.
  • ENCLOSURE_CLASS enclosures에 다른 클래스 이름을 세팅할 수 있도록 해 줍니다. enclosures에 대해 custom behavior를 핸들링 할 수 있도록 해 줍니다. 
  • IMAGE_ENCLOSURE_CLASS  image enclosures에 대해 다른 클래스 이름을 세팅할 수 있도록 해 줍니다. 이미지에 대해 custom behavior를 핸들링 할 수 있도록 해 줍니다.
  • REMOVE_DUPLICATES - feed에서 duplicate entry 들을 remove 합니다. (i.e. 같은 GUID를 가지고 있는 아이템).
  • HTML_ESCAPED_CDATA - 1로 세팅하면 content와 description field 에 있는 HTML을 decode 할 겁니다. CDATA block에 wrapping 하기 위해 HTML data를 encode 하면서 feed가 HTML data를 encode 하는데 문제가 생길 경우 on으로 설정할 필요가 있습니다.
  • USE_DESCRIPTION_FOR_CONTENT - 1로 세팅 돼 있으면 description field는 full content로서 사용될 겁니다.
  • FETCH_CONTENT - 1로 세팅되면 Kurogo는 아이템에서 명시된 URL에서 content를 fetch 하는 것을 시도할 겁니다. 그리고 그 content를 extract 할 겁니다.



반응형

Kurogo Tutorial 10 - Module 만들기 -

2012. 5. 13. 05:27 | Posted by 솔웅


반응형

이번주 제가 회사에서 할당받은 일이 Kurogo의 Map 과 관련된 것 하고 새 모듈을 하나 만드는 겁니다.

지금 Kurogo Tutorial 을 번역하고 있는데요.

급하게 제가 처리해야 할 일이 생겨서 그 부분 부터 번역을 하고 있는데요.

지난번에 MAP 부분을 정리했고 이번에는 Module 만들기를 정리합니다.


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


Writing Modules

쿠로고 프레임워크는 모듈을 기본으로 만들어 졌습니다. 각 모듈들은 유저에게 보여지는 그들만의 데이타 세트와 서비스들을 제공합니다.


The Module Object


각 모듈은 Module object의 subclass 입니다. 대부분의 core logic이 이 클래스에 위치해 있습니다.


  • configuration과 런타임 파라미터들을 수집하는것
  • internal URL들의 생성
  • Authorization


웹에서 유저에게 제공되는 모듈을 만들기 위해서는 (홈 스크린에 나타나던지 그렇지 않던지 간에) 그 모듈은 반드시 WebModule 객체의 subclass 이어야 합니다. 웹서비스로서 native(iOS같은) 앱이나 앱의 AJAX functionality 들이 그 데이터를 사용하도록 만드려면 그 모듈은 반드시 APIModule 객체의 subclass 이어야 합니다.


대부분의 모듈들은 WebModule과 APIModule 모두의 subclass 입니다. 모듈이 이 중 하나의 subclass 이고 다른 하나의 subclass가 아닌 경우도 있을 수 있습니다. 예를 들어 에러 모듈의 경우에는 유저에게 에러를 알려주기 위한 웹 인터페이스인데 API counterpart를 가지고 있지 않습니다.각 모듈들의 WebModule과 APIModule subclass 는 대부분 비슷합니다. WebModule과 APIModule에 관한 자세한 사항들은 아래 링크로 가서 확인하세요.



    The WebModule Object
    The APIModule Object




Module life cycle

request가 한번 만들어지면 loading system은 factory method를 사용해서 어떤 모듈이 load 되어야 결정하고 모듈을 생성합니다. URL은 어떤 모듈이 로드 되고 어떤 페이지가 할당되고 includ 돈 파라미터들을 설정합니다.

url의 첫번째 path component 는 모듈의 아이디 입니다. 이것은 어떤 모듈을 로드할 지를 정할 수 있도록 해 줍니다. factory method는 SITE_DIR/config/ID/ 에서 config 폴더를 찾아봅니다. 그리고 module.ini 파일을 로드하죠. 그 파일 안에서 id 값을 찾고 해당 ID의 module을 로드합니다. 만약 ID property가 없다면 config folder 를 id로 module을 load 할 겁니다.

그 URL에 대한 config folder가 없다면 site.ini에 있는 CREATE_DEFAULT_CONFIG 의 값을 찾아보게 됩니다.

    만약 true 이면 그 ID를 근거로 모듈을 로드하려고 할 겁니다. 그리고나서 모듈이 발견되면 자동적으로 config folder를 생성합니다.
    만약 false면 (디폴트임) 또는 그 ID로 모듈을 찾을 수가 없으면 fail이 일어날 겁니다.

두번째 path component는 (WebModule에 대한) page 입니다. 이것으로 로드할 code path와 template file 을 설정합니다. 만약 가리키는 page가 없으면 그 페이지는 index로 세팅 될 겁니다.

APIModule에 대해서는 이것은 command 입니다. 이 command는 항상 존재해야 합니다. 필요한 id/command URL format의 single exception(예외상황)은 CoreAPIModule을 request 하는 것입니다. CoreAPIModule은 single command (hello) 이고 모듈 아이디가 없습니다.

After instantiating the object, the init method is called. This does several things:
객체를 초기화(instantiating) 하고 나서 init method 가 call 됩니다. 여기에 몇가지가 있습니다.

    - page, args, pagetype, platform 을 포함한 필요한 프로퍼티들을 할당한다.
    - data structure들을 셋업하기 위해 사용되는 initialize() 메소드를 call 합니다. 이 data structure는 inside a page와 outside(예를 들어 federated search 안의 instance에 대한 경우)를 사용합니다.
    - WebModules안에서 initializeForPage() 메소드가 call 됩니다. 이 메소드는 그 모듈 로직에 대한 primary entry point를 보여 줍니다. 특히 그 모듈이 그 페이지 프로퍼티으 ㅣ값에 근거한 다룬 로직을 처리하게 됩니다.
    - APIModules 안에서는 initializeForCommand() 메소드가 call 됩니다. 특히 이 모듈은 command property의 값에 근거한 다른 로직을 처리하게 됩니다.


마지막으로 output은 다음과 같은 것을 generate 됩니다. WebModule은 templatePage 프로퍼티의 값에 근거해 display 할 template을 선택합니다. 초기에는 page property로 셋하지만 좀 더 다이나믹한 template display 를 위해 필요하다면 overridden 할 수 있습니다. APIModule은 모듈 id, API version, command requested, response payload 를 포함한 JSON response를 생성합니다.

Methods to use

모듈 객체에는 많은 메소드가 있습니다. 대부분은 내부적으로 사용됩니다. 그러므로 얘기 나눌 부분은 별로 없습니다. 새로운 모듈을 만들 때 주의해야할 몇개의 메소드가 있습니다. WebModuleAPIModule을 위한 메소드들도 보셔야 합니다.

Accessors

    getArg($key, $default) - Retrieves an argument sent via GET/POST, if the $key is not present, then it will return the value specified in $default

Configuration

configuration data를 로드하기 위한 여러 메소드들이 있습니다. Configuratin은 server locations, urls 그리고 소스코드 밖의 다른 값들 같은 특정 detail 값들을 keep 할 수 있도록 해 줍니다. 각 모듈은 configuration file들의 폴더가 있습니다. primary configuration data 는 module.ini 파일안에 있습니다. pages.ini 모듈 안에 있는 Page data는 필요로 하는 configuration structure를 사용할 수 있습니다. 많은 경우 complex data structure는 다른 파일에 있을 필요가 있을 겁니다.

여러분은 key나 전체 section을 이용해서 값을 retrieve 할 수 있습니다. (배열로서 값을 받을 겁니다.) Module 객체에는 아래 메소드들이 있습니다.

    getModuleVar($key, $section=null, $config=’module’) - Gets a required module variable $key. If you specify $section it will only look in that section. Will throw an exception if the value is not present
    getOptionalModuleVar($key, $default=’‘, $section=null, $config=’module’) - Gets an optional module variable $key. If you specify $section it will only look in that section. If it is not present, $default will be used (empty string by default)
    getModuleSection($section, $config=’module’) returns an array of values in a module section. Will throw an exception if the section is not present
    getOptionalModuleSection($section, $config=’module’) returns an array of values in a module section. Will return an empty array if the section is not present
    getModuleSections($config) - Returns a complete dictionary of sections=>vars=>values for a particular config file. Very handy when you basically want the array structure of an entire file
    getOptionalModuleSections($config) - Like getModuleSections(), but if the config file does not exist it will return false


site configuration (site.ini)에서도 값을 retrieve 할 수 있습니다. 이것들은 모든 모듈에 의해 사용되는 값들입니다. Kurogo 객체의 static methods가 있습니다.

    Kurogo::getSiteVar($key, $section=null) - similar to getModuleVar
    Kurogo::getOptionalSiteVar($key, $default=’‘, $section=null) - similar to getOptionalModule Var
    Kurogo::getSiteSection($section) - similar to getModuleSection
    Kurogo::getOptionalSiteSection($section) similar to getOptionalModuleSection


site string(strings.ini)을 get 하기 위한 또 다른 2개의 다른 메소드들이 있습니다.

    Kurogo::getSiteString($key) - returns a site string. Will throw an exception if not present
    Kurogo::getOptionalSiteString($key, $default=’‘) - returns a site string. Will return $default if not present


User Sessions


    isLoggedIn() returns whether a user is logged in or not (see Authentication)
    getUser() returns a User object of the current user (or AnonymousUser if the user is not logged in)
    getSession() returns the Session object of hte current session.




반응형

Kurogo Tutorial 09 - MAP Module -

2012. 5. 12. 04:06 | Posted by 솔웅


반응형

Kurogo Documentation 을 순서대로 진행을 했는데요. 오늘은 좀 건너 뛰어서 해야겠습니다.

회사에서 갑자기 MAP 과 관련되서 일이 주어져서요.

아직 제대로 파악도 못했는데... 빨리 공부해서 빨리 해결해야 겠습니다.

맵 말고도 한두가지 더 일을 맡았는데 그 중 하나는 Drupal 로 하는 일이예요.

Drupal 도 배워야겠네요...


Map Module TutorialIncluded Modules 안의 Map Module 부분에 있습니다.


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


Map Module

이 맵 모듈은 맵에서 여러분들이 찾고 싶은 곳을 찾고 볼 수 있도록 해 줍니다. 장소들은 feed groups, category, subcategory 등에 의해 group 화 될 수 있습니다.




Basic Configuration

Feed Groups

각 feed group 은 center location과 appearance에 의해 base map, characterized 와 연관 돼 있습니다. 여러개의 캠버스들과 feed group들로 구성된 조직을 캠퍼스가 맵을 지역적으로 분리합니다.

Group은 SITE_DIR/config/map/feedgroups.ini file 안에서 configured 돼 있습니다. 거기에는 아래와 같이 적어도 한개의 entry 가 있어야 합니다.

[groupID]
title                = "Title of my map"
subtitle             = "Subtitle of my map"
center               = "42.3584308,-71.0597732"
DEFAULT_ZOOM_LEVEL   = 10


[groupID] 는 짧게 알파벳으로 그룹의 이름을 지어주면 됩니다. 예) “boston”, “newyork”, “daytime”, etc.
title (required) - 이 그룹에 대한 짧은 설명 e.g. “Boston Campus”
subtitle (optional) - title로 부족할 경우 좀 더 길게 설명을 추가할 수 있음
center (required) - latitude, longitude point (위도, 경도). 이 그룹의 center를 나타냄. 쉼표 전 후로 빈공간이 들어가면 안 됨.
DEFAULT_ZOOM_LEVEL (recommended) - 맵을 표시할 초기 zoom 레벨. 대개 0~21 사이의 값을 넣으면 됨. 각 숫자는 아래의 크기를 보여 줍니다.

0: earth
1: hemisphere (반구)
2: multiple continents
3: one continent
4: large country
5: medium-sized country
6: small country or large state
7: small state
8: tiny state
9: metropolitan area + vicinity
10: metropolitan area
11: large city
12: small city
13: town
14: several neighborhoods
15: a few neighborhood
16: neighborhood
17: several blocks
18: a few blocks
19: several buildings
20: a few buildings
21: a building

compliant/tablet 디바이스에서는 디폴트로 구글 맵을 사용합니다. 그리고 basic/touch 디바이스에서는 Google Static Map을 사용합니다. 쿠로고는 또한 compliant/tablet 디바이스에서 ArcGIS JavaScript를 지원합니다. 그리고 basic 디바이스에서 ArcGIS static map 을 지원합니다. 좀 더 자세한 사항은 Advanced Configuration section을 참조하세요.

Data Feeds

각 data feed는 홈스크린이나 캠퍼스에서 유저가 browse 하는 category로서 표현됩니다.

현재 아무 mapping infrastructure를 가지고 있지 않은 사람들을 위해 우리는 Google Earth를 사용해서 feeds를 생성하라고 권장합니다. Google Earth는 맵에 pin을 사용할 수 있도록 하고 결과값을 KML 파일로 export 할 수 있도록 합니다.

feed group에 feed를 add 하기 위해 SITE_DIR/config/map/feeds-GROUP.ini 파일 안에 entry를 생성합니다. (Group은 feedgroups.ini로부터 가져온 그 그룹의 id 입니다.). 각각의 entry들은 다음과 같이 만들어 집니다.

[index]
TITLE            = "Fun Places in Washington"
SUBTITLE         = "These are places I like to check out on vacation"
BASE_URL         = DATA_DIR"/washington.kml"
SEARCHABLE       = 1

index 는 숫자입니다. (0서부터 시작) 이 인덱스는 이 feed의 sort order(정렬순서)를 나타냅니다.
TITLE 은 카테고리 리스트에 보이는 카테고리의 desctiptive name 입니다.
SUBTITLE (optional) 은 title 옆에 붙는 간략한 description 입니다.
BASE_URL (required) 은 데이터 소스의 URL이나 파일의 위치입니다.
SEARCHABLE - 그냥 1로 세팅하세요.
Note: .kml 포맷이 아니라 .kmz 을 사용한다면 엔트리 안에 다음의 것들을 지정하셔야 합니다.

RETRIEVER_CLASS       = "KMZDataRetriever"

쿠로고는 또한 ArcGIS RES API와 ESRI Shapefile 포맷으로 데이터를 지원합니다. 만약 이 포맷을 사용한다면 혹은 data feeds와 base maps를 다른 것으로 바꾸기를 원한다면 Advanced Configuration section을 참조하세요.

User Interface Options

The following options appear by default in SITE_DIR/config/map/module.ini:
아래 옵션들은 SITE_DIR/config/map/module.ini 에서 디폴트로 설정돼 있는 값들입니다.

BOOKMARKS_ENABLED          = 1
MAP_SHOWS_USER_LOCATION    = 1
SHOW_DISTANCES             = 1
DISTANCE_MEASUREMENT_UNITS = "Imperial"
SHOW_LISTVIEW_BY_DEFAULT   = 0

BOOKMARKS_ENABLED - 유저가 위치를 즐겨찾기 하게할 지 말지를 정함
MAP_SHOWS_USER_LOCATION - 유저가 지도에 location marker를 display 하게 할지 말지를 정함. This does not turn off geolocation in general.
SHOW_DISTANCES - 검색된 위치로부터의 거리를 표시할 지 여부를 정함.
DISTANCE_MEASUREMENT_UNITS - either “Metric” or “Imperial”. Metric 이나 Imperial 중에 하나를 선택하면 됨
SHOW_LISTVIEW_BY_DEFAULT - 만약에 단 하나의 캠퍼스만 있다면 map module의 index page는 compliant devices에서 지도를 full screen으로 보여 줄겁니다. 만약 이 값이 1로 세팅돼 있다면 맵 모듈의 index page 는 list view를 보여줄 겁니다. 또한 멀티 캠퍼스라면 파라미터에 상관없이 index page는 list view를 보여 줄 겁니다.   multip

Advanced Configuration

Feed Groups

title, subtitle, center 이외에 각 그룹은 다음과 같은 것들을 지정해 줍니다.

- JS_MAP_CLASS (optional) - JavaScript map을 지원하는 디바이스를 사용하기 위한 base map의 type . Base Maps를 보세요.
- DYNAMIC_MAP_BASE_URL (required if JS_MAP_CLASS is ArcGISJSMap) - base map JavaScript API 가 host 돼 있는 base URL
- STATIC_MAP_CLASS (optional) - JavaScript map을 지원하지 않는 디바이스를 사용하기 위한 base map의 type . Base Maps를 보세요.
- STATIC_MAP_BASE_URL (required if STATIC_MAP_CLASS is ArcGISStaticMap or WMSStaticMap) - static base map service가 호스트 돼 있는 base URL
- NEARBY_THRESHOLD (optional, defaults to 1000) -인근 위치를 검색할 때 사용하는 meter로 된 거리
- NEARBY_ITEMS (optional, defaults to 0) - 인근 검색할 떄 return 되는 item들의 maximum number.값이 0이면 제한이 없음.

Example configuration:

[honolulu]
title                = "Honolulu Campus"
subtitle             = "Our new satellite office that nobody knows about"
center               = "21.3069444,-157.8583333"
JS_MAP_CLASS         = "ArcGISJSMap"
DYNAMIC_MAP_BASE_URL = "http://myhost/MapServer"
STATIC_MAP_CLASS     = ArcGISStaticMap
STATIC_MAP_BASE_URL  = "http://myhost/MapServer"
NEARBY_THRESHOLD     = 1609
NEARBY_ITEMS         = 12



Data Feeds

TITLE, SUBTITLE, BASE_URL 이외에 각 feed 는 아래와 같은 값들을 정해 줍니다.

- MODEL_CLASS - 데이터 소스 타입과 관련된 데이타 모델 클래스. 디폴트는 MapDataModel 임.
- RETRIEVER_CLASS - feed를 위해 사용되는 data retriever class (디폴트가 아니라면). 디폴트는 MODEL_CLASS에 따라 다름. 만약 custom model class를 사용하지 않는다면 이것은 KMZ 파일에만 필요할 것임 (which need KMZDataRetriever).
- SEARCHABLE - 이 데이타 소스가 internal search result에 포함되어야 하는지의 여부를 나타내는 boolean 값. 이 값은 external search engine을 사용한다면 관계가 없음. 디폴트는 false임.
- HIDDEN (optional) - true이면 이 feed는 browsable category의 리스트에 나타나지 않음. 이 기능은 site가 user가 browse 할 수 있는 search results에 표시될 서로 다른 placemarks의 세트를 갖기를 원할 경우 사용될 수 있을 겁니다. 그 placemark의 set는 user가 browse 할 수 있는 search results에 표시될 겁니다.

개별적인 feed 들에 대한 어떤 config 값들의 세트는 서로 연관된 feed group 에서 그 값을 override 할 수 있습니다. 예를 들어 'honlulu' feed group은 검색할 때 인근 1000미터 반경을 찾아 볼 겁니다. 하지만 밀집한 feed 가 있어서 반경 200미터에서만 검색하기를 원합니다. 이럴 경우 NEARBY_THRESHOLD 를 개별적인 feed로 세팅할 수 있습니다. override 할 수 있는 config 파라미터들은 DEFAULT_ZOOM_LEVEL, JS_MAP_CLASS, DYNAMIC_MAP_BASE_URL, STATIC_MAP_CLASS, STATIC_MAP_BASE_URL, NEARBY_THRESHOLD, NEARBY_ITEMS 가 있습니다.


KML/KMZ

KML은 맵 모듈의 디폴트 feed type 입니다. 다른말로 feed config 가 MODEL_CLASS 나 RETRIEVER_CLASS 로 정해주지 않았다면 코로고는 이 feed를 KML 포맷으로 처리할 겁니다.

쿠로고는 KML tags의 subset 만 지원합니다. 쿠로고는 <MultiGeometry>, <Model>, <gx:Track>, <gx:Multitrack>를 제외한 모든 지원하지 않는 tags를 무시할 겁니다. 이럴 경우 Kurogo는 exception을 throw 합니다. 또한 몇개의 태그들은 parse 되지만 UI에서는 보이지 않습니다.

아래 tags 들은 parse 되고 UI에도 나타납니다.

<Folder>
    <name>
    <description>
<StyleMap>
    <Pair>
        <key>
        <styleURL>
<Style>
    <iconStyle>
        <href>
        <w>
        <h>
    <balloonStyle>
        <bgColor>
        <textColor>
    <lineStyle>
        <color>
        <weight>
    <polyStyle>
        <fill>
        <color>
<Placemark>
    <address>
    <name>
    <description>
    <Snippet>
    <Point>
        <coordinates>
    <Polygon>
        <outerBoundaryIs>
        <innerBoundaryIs>
    <LineString>
        <coordinates>
    <LinearRing>


   
아래 tags 들은 parse 되지만 UI에 영향을 주지는 않습니다.   

<Document>
    <name>
    <description>

    <scale> (under iconStyle)


   
좀 더 자세한 사항은 구글의 KML documentation을 참조하세요.

ArcGIS Server

ArcGIS 서버를 사용하려면 feeds-<group>.ini 안의 아래 사항들을 설정하셔야 합니다.

MODEL_CLASS = "ArcGISDataModel"

만약에 service 가 여러 layer를 가지고 있다면 Kurogo는 한번에 한 layer 만 사용합니다. 여러분은 feed 별로 다른 layer 를 할당하셔야 됩니다.

ARCGIS_LAYER_ID = <number>


<number> 는 layer를 나타내는 숫자로 된 ID 입니다. 이 ID를 할당함으로서 feed 별 layer를 지정합니다. sublayer는 현재 지원되지 않습니다.

좀 더 자세한 사항을 보시려면 Esri의 ArcGIS server documentation을 보세요.

Shapefile

To use shapefiles, specify the following in feeds-<group>.ini:
shapefile을 이용하려면 feeds-<group>.ini 안에 있는 아래 내용을 사용하세요.

MODEL_CLASS = "ShapefileDataModel"

network 상에 위치한 Shapefile들은 directory들을 포함하고 있지 않은 sip 폴더에 있어야 합니다. (예: contents 들은 모두 .shp, .dbf, .shx, and .prj 파일들입니다). zipped 된 shapefile들을 사용하려면 ZipArchive 확장자가 PHP에서 사용 가능해야 합니다.

큰 shapefile들은 unzip 되 있고 DATA_DIR의 subdirectory에 locally 저장돼 있을 겁니다. 이런 경우에 BASE_URL은 반드시 확장자 없이 지정되어야 합니다. 예) DATA_DIR”/myshapefile.shp” 와 DATA_DIR”/myshapefile.dbf” 로 구성된 shapefile은 반드시 다음과 같이 지정돼야 합니다.

BASE_URL = DATA_DIR"/myshapefile"

좀 더 자세한 사항을 아시려면 Wikipedia의 Shapefile specification 부분을 보세요.

Configuring Display Options

SHOW_DISTANCES - (optional, defaults to true) item 까지의 거리를 보여줄지 여부
DISTANCE_MEASUREMENT_UNITS - (optional, defaults to ‘Metric’) Imperial (인치, 야드, 마일 등) 이나 Metric (미터 단위) 로 거리를 보여줄 지 여부.
MAP_SHOWS_USER_LOCATION - (optional, defaults to false) 지도에 user의 위치를 보여줄 지 여부.
BOOKMARKS_ENABLED - (optional, defaults to true) true로 세팅돼 있으면, bookmarked 된 entry로의 link 가 나타남. 만약 아무 entry 도 bookmark 돼 있지 않다면 entry 가 bookmark 될 때까지 이 링크는 나타나지 않을 겁니다.

Base Maps

Kurogo의 base 맵은 아래의 configuration과 default rules 를 따릅니다. :

JS_MAP_CLASS 와 STATIC_MAP_CLASS 가 따로 명시돼 있지 않다면 Kurogo는 디폴트로 basic/touch device에 대해서는 Goggle Static Maps를 그리고 compliant/tablet device에 대해서는 Google Maps를 사용할 겁니다.

만약 TATIC_MAP_CLASS 만이 명시돼 있다면 compliant/tablet 와 basic/touch devices 모두 STATIC_MAP_CLASS 가 명시되서 base map 을 사용할 겁니다. JS_MAP_CLASS 만 명시됐다면 basic/touch devices 에도 Google Static Maps 가 적용될 겁니다.

JavaScript base maps (compliant and tablet only)

JS_MAP_CLASS 에 적용 가능한 옵션은 아래와 같습니다. .

Google Maps

Google Map을 (디폴트를 그냥 사용하지 않고) 명시적으로 사용하려면 아래 configuration을 참조하세요.

JS_MAP_CLASS = "GoogleJSMap"



좀 더 자세한 사항은 Google’s Maps documentation을 참조하세요.

ArcGIS Tiled Service Maps

ArcGIS tile server 로부터 tiles 를 얻어서 사용하려면 아래 configuration을 참조하세요.

JS_MAP_CLASS = "ArcGISJSMap"
DYNAMIC_MAP_BASE_URL = "http://..."



ArcGIS Dynamic Service Map으로부터 얻어 사용할 수 있는 추가적인 dynamic layer는 DYNAMIC_MAP_BASE_URL에 배열로 명시해서 base map 의 윗부분에 추가할 수 있습니다.

DYNAMIC_MAP_BASE_URL[] = "http://my.tiled.service/MapServer" DYNAMIC_MAP_BASE_URL[] = "http://my.dynamic.service/MapServer"


DYNAMIC_MAP_BASE_URL의 첫번째 element 는 반드시 tiled service 라야 합니다. 1개만 지정되고 단 1개만 tiled service 라야 합니다.

좀 더 자세한 사항은 Esri’s ArcGIS JavaScript documentation 을 참조하세요.

Static image base maps

STATIC_MAP_CLASS에 사용될 수 있는 옵션은 아래와 같습니다.

Google Static Maps

디폴트를 그냥 사용하지 않고 Google Static Maps를 명시적으로 사용하려면 아래 configuration을 사용하세요.

STATIC_MAP_CLASS = "GoogleStaticMap"



Google Static Maps는 현재 polygon overlay를 지원하지 않습니다.

좀 더 자세한 사항은 Google’s Static Maps documentation을 보세요.

Web Map Service (WMS)

WMS service 에서 images를 사용하시려면 아래 configuration을 이용하세요.

STATIC_MAP_CLASS = "WMSStaticMap"
STATIC_MAP_BASE_URL = "http://..."



overlays를 WMS map에 추가하는 것은 가능하지 않습니다.

좀 더 자세한 사항은 Open Geospatial Consortium’s WMS documentation 을 참조하세요.

ArcGIS exported images

ArcGIS로부터 export된 이미지를 사용하려면 아래 configuration을 이용하시면 됩니다.

STATIC_MAP_CLASS = "ArcGISStaticMap"
STATIC_MAP_BASE_URL = "http://..."



export된 image에 overlay를 추가하는 것은 가능하지 않습니다.

좀 더 자세한 사항은 Esri’s export API documentation 을 참조 하세요.

Map Search

Map search 는 module.ini에서 설정합니다. 만약 이게 설정돼 있지 않으면 Kurogo는 디폴트로 MapSearch 클래스를 사용합니다. 이 클래스는 선택된 feed group 전체를 보게 될 겁니다.

옵션으로 아래 파라미터들이 설정될 수 있습니다.

MAP_SEARCH_CLASS          = "MyMapSearchSubclass"
MAP_EXTERNAL_SEARCH_CLASS = "GoogleMapSearch"



MAP_SEARCH_CLASS 를 사용해서 map module 안에 Searches 를 initiate 할 수 있습니다. MAP_SEARCH_CLASS의 디폴트는 MapSearch 입니다. Search는 modules에 의해 initiate 됩니다. 만약 optional config parameter MAP_EXTERNAL_SEARCH_CLASS 가 다른 클래스로 configure 됐다면 map module은 다른 search class를 사용할 겁니다.

기본적으로 제공되는 GoogleMapSearch 클래스는 Google Places 나 the Google Geocoding service를 사용합니다. Geocoding가 디폴트 입니다. Places를 사용하려면 (구글로부터 API key 를 받았다는 것을 가정하고..) SITE_DIR/config/maps.ini 파일에 아래 configuration을 하세요.

[maps]
USE_GOOGLE_PLACES     = 1
GOOGLE_PLACES_API_KEY = AbCDeFGH123789zzzzzzzzzzzzzzzzzzzxwycbA



Terms of Use for External Providers

Google Maps 유저나 그과 관계된 제품(Kurogo installation에 주요하게 포함돼 있는 제품)을 사용하는 유저들은 이 모든 제품들에 대한 usage 제한에 대해 염두에 두셔야 합니다.

Google Maps/Earth API terms 는 여기에 있습니다.

사용량이 많은 site의 경우 embedded Google Maps 의 최근 변경된 usage limit에 대해 주의하실 필요가 있습니다.


반응형
이전 1 2 3 4 다음