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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

Kurogo Tutorial 08 - Configuration-

2012. 5. 11. 01:08 | Posted by 솔웅


반응형

Configuration

Kurogo 프레임워크는 조금만 셋업해도 동작할 수 있도록 만들어 졌습니다. 어쨌든 파일위치, 디버깅 정보 그리고 모듈의 기능에 영향을 미치는 모듈 옵션들이나 다른 기능들에 익숙해 지셔야 프레임워크를 잘 활용하실 수 있습니다.

모든 confituration은 .ini 파일들에서 이루어 집니다. 직접 이 파일을 수정하셔도 되고 어드민 모듈에서 수정하셔도 됩니다.

Structure of .ini Files

대부분의 개발자들이나 administrator들은 .ini 파일 구조에 익숙해지셔야 합니다. ini 파일들에 대한 깊은 정보는 PHP 매뉴얼의 parse_ini_file() 함수 부분을 보시면 도움이 되실 겁니다.


Properties

ini 파일에 있는 기본적인 요소는 property 입니다 모든 프로퍼티는 name과 value를 가지고 있습니다. 그리고 그 관계는 = 으로 설정합니다. name은 = 기호 왼쪽에 위치합니다. String 은 큰 따옴표 "" 로 감싸져야 합니다. Constants(상수) 들은 큰 따옴표 바깥쪽에 있을 수 있습니다. Kurogo에서 사용하는 별도의 방법은 {} 를 key name에 사용할 수 있게 한 겁니다.

key1="value"
key2=CONSTANT
key3=ANOTHER_CONSTANT "value"
key4="Using value {key3}"


Sections

Properties may be grouped into arbitrarily named sections. The section name appears on a line by itself, in square brackets ([ and ]). All properties after the section declaration are associated with that section. There is no explicit “end of section” delimiter; sections end at the next section declaration, or the end of the file. Sections may not be nested.

프로퍼티는 임의로 명명된 섹션들의 group 화 될 수 있습니다. 섹션 이름은 해당 라인에 [] (square brackets) 안에 있게 됩니다. 섹션 정의 이후의 모든 프로퍼티들은 해당 세션과 연관이 있는 것들입니다. 그 섹션의 끝을 나타내는 특별한 기호(구분자)는 없습니다. 해당 섹션은 그 다음 섹션 정의 부분 에서 끝납니다. 섹션은 nested 되지 않습니다.

[section]


Comments

세미콜른은 주석의 시작을 의미합니다. 주석은 그 줄의 끝까지 해당 됩니다. 세미콜른이 있는 라인의 내용은 엔진이 무시하고 넘어 갑니다.

; comment text


Configuration files


모듈이 작동할 때 아래 config 파일들이 자동으로 로딩 됩니다.;

- config/kurogo.ini : framework config file. 주요 기능은 active site와 configuration mode를 알려줌
- SITE_DIR/config/site.ini : site configuration file. 모든 모듈이 공유하는 프로퍼티가 있고 기본 환경을 세팅해 줌
- SITE_DIR/config/strings.ini : Strings table. 사이트에서 사용하는 다양한 string들을 포함
- SITE_DIR/config/MODULEID/module.ini : 현재 모듈에 대한 Basic configuration file. disabled status, protected, secure and authorization 을 포함한 모듈과 관련된 프로퍼티들이 있음. 또한 다른 unique 한 다른 module configurable parameters 들도 있음
- SITE_DIR/config/MODULEID/pages.ini : 현재 모듈에 대한 Title/navigation configuration

다른 모듈들은 external data configuration 과 모듈 output 과 formatting을 위한 특정 configuration을 위해 SITE_DIR/config/MODULEID 폴도로부터 파일들을 로드할 겁니다.

Local Files

쿠로고 프레임워크는 로컬 서버 customization을 위해 configuration 파일을 overrid 할 수 있도록 지원합니다. config/kurogo.ini 안에 있는 CONFIG_IGNORE_LOCAL 이 1로 설정되지 않는 한 프레임워크는 각 configuration file이 로드될 때 파일이름이 -local로 된 파일도 같이 로드합니다. 예를 들어 SITE_DIR/config/site.ini 은 SITE_DIR/config/site-local.ini 로 override 될 수 있습니다. ITE_DIR/config/home/module.ini는 SITE_DIR/config/home/module-local.ini로 오버라이드 될 수 있구요. 전체 파일읠 duplicate 할 필요는 없습니다. 오직 -local에서 다르게 작동해야만 하는 부분이 있으면 그 부분만 넣어 주시면 됩니다. 그리고 기본 config에 없는 내용을 -local 에 추가할 수도 있습니다.

These files are ignored by the git version control system and are an excellent place to put sensitive file paths or credentials that should not be part of a public source code repository. It can also aid in deployment since your development machine may use different settings than a production server.

If CONFIG_IGNORE_LOCAL is set to 1, then -local files will be ignored. This is useful if you do not use them and may slightly improve performance.
Configuration Mode

In addition to -local files. There is also an option to include configuration override files by specifying a mode string. This string is like -local but can be set to any value. This will allow you to create multiple versions of configuration files, with slightly different versions of certain values and instantly switch between them. This option is set in the CONFIG_MODE value of config/kurogo.ini These files are not ignored by git.

One use of this would be to create development and production versions of some of your configuration files. You can have SITE_DIR/site-development.ini and SITE_DIR/site-production.ini with differing values for debugging. Then you can set CONFIG_MODE to development or production. If CONFIG_MODE is empty (the default), than no files will be searched. Another example would be to include authorization values for certain modules in a production environment.

Keep in mind that this setting is independent of -local files. -local files will override any option presuming CONFIG_IGNORE_LOCAL is not enabled.

Kurogo has included a series of example -production.ini files to indicate recommended values for production servers
Retrieving Configuration Values

There are a variety of methods that are used to retrieve values from the configuration files. Please see Module Configuration for more information on how to retrieve these values in your module.
Site Configuration

The SITE_DIR/config/site.ini file configures the basic site configuration. It is broken up into several sections
Error handling and debugging

The properties in this section are used during development. Most of them are boolean values (0 is off, 1 is on)

    DEFAULT_LOGGING_LEVEL - See Logging in Kurogo for more information.
    LOGGING_LEVEL[area] - See Logging in Kurogo for more information.
    DISPLAY_ERRORS - Display PHP errors. This can make discovering bugs more easy. You should turn this off on a production site.
    DEVICE_DEBUG - When the framework is running in device debugging mode, you can prepend any framework url with device/[PAGETYPE]-[PLATFORM]/ or device/[PAGETYPE]/ to see that version of the page in your browser. So for example “/device/basic/about/” will show the basic version of the About module’s index page.
    MODULE_DEBUG - Enables debugging information provided by each module. The type of information will vary by module. An example of this is showing the LDAP server used by the People module
    MINIFY_DEBUG - When Minify debugging is turned on, Minify adds comments to help with locating the actual file associated with a given line.
    DATA_DEBUG - Data debugging enables logging and certain output to debug data connections. When turned on, it will log url requests in the error log.
    DEVICE_DETECTION_DEBUG - Show the device detection info in the footer
    PRODUCTION_ERROR_HANDLER_ENABLED - The production error handler will email exceptions to the DEVELOPER_EMAIL address. You should treat exceptions as extraordinary situations that should normally not occur in production environments.
    DEVELOPER_EMAIL - an email address to send exception notices. At this time, it uses the php mail() function so it may not be compatible with all environments.

You should turn the _DEBUG options to off in a production environment and enable the Production Error Handler with an appropriate developer email address.
Site settings

    SITE_DISABLED - When set to 1 this site is disabled. Useful for MultiSite
    SECURE_REQUIRED - When set to 1 then the site will require a secure (https) connection
    SECURE_HOST - Alternate hostname to use for secure (https) connections. If not included it will use the same host name.
    SECURE_PORT - Alternate port to use for secure connections. Typically you should leave it at the default of 443
    LOCALE - Locales are used for date/time formatting. If you wish to use a locale other than the server default, then you should set this. Note that valid values are dependent on the operating system of the server.
    LANGUAGES[] - A list of language priorities. See Localization for more info.
    LOCAL_TIMEZONE - Set this to your environment’s time zone. See http://php.net/manual/en/timezones.php for a list of valid time zones
    LOCAL_AREA_CODE - Set this to your environment’s primary area code
    AUTODETECT_PHONE_NUMBERS - Turn this off to prevent the auto detection of telephone numbers in content. This is primarily only supported in iOS devices at this time.

Modules

    DYNAMIC_MODULE_NAV_DATA - This value determines whether modules can present dynamic data on the navigation home screen. This could include dynamic titles, images or other information. If you are not providing dynamic data, then you should turn off this option. It is off by default. See Dynamic Home Screen Information for more information
    CREATE_DEFAULT_CONFIG - This value determines whether config folders will be automatically created if they don’t exist. This can be convienient for development when you want to populate a config folder with the default values, but should be turned off for production to ensure modules that you don’t use don’t create configuration folders.

Cache

    MINIFY_CACHE_TIMEOUT - The timeout for saving the minify cache. This determines how often to look for new templates or css/js files. It should be set high for production sites.

Analytics

    GOOGLE_ANALYTICS_ID - set this to your google analytics id and the framework will utilize the google analytics server
    GOOGLE_ANALYTICS_DOMAIN - If you use subdomains in your google analytics reporting, set this to the appropriate domain
    PERCENT_MOBILE_ID - set this to your percent mobile analytics id and the framework will utilize the percent mobile analytics server
    STATS_ENABLED - if set to 0 then the internal statistics engine will be disabled
    KUROGO_STATS_TABLE (kurogo_stats_v1) - The name of the table to use for internal statistics gathering
    KUROGO_VISIT_LIFESPAN (1800) - The timeout (in seconds) for tracking visits

Temp Directory

    TMP_DIR - This should be set to your a writable temporary directory. If this entry is blank, it will use the system default temporary directory.

Themes

    ACTIVE_THEME - This is set to the active theme. It should be a valid folder inside the SITE_DIR/themes directory.
    TABLET_ENABLED - If set to 0 then the tablet devices will receive the compliant page type templates.

URL Rewriting and the default page

In the [urls] section you can put a series of values that allow you to map a url to another. Typically this would be if you want to map a module’s url to several possible values, perhaps to maintain historical bookmarks. The entered url will be redirected to the value you specify. For example:

    directory = people would map the url /directory to /people (i.e. the people module)

Take care that you do not create infinite redirect loops.

There is a special case for the DEFAULT url. This is the module that is loaded when users enter your site without a module name (i.e. the root of your site). You can configure this to show a different module depending on the type of device/platform. In the initial setting, users browsing your site from a computer will be presented with the info module and users browsing your site from a mobile device will be shown the home module.

The default option will look for the most specific value when determining which default page to show. You can create entries like such (in uppercase)

        DEFAULT-PAGETYPE-PLATFORM - matches the specific pagetype/platform combination. like DEFAULT-COMPLIANT-COMPUTER or DEFAULT-TOUCH-BLACKBERRY.
        DEFAULT-PAGETYPE - matches all the devices from a particular pagetype. Like DEFAULT-COMPLIANT or DEFAULT-BASIC
        DEFAULT will match any device if a more specific entry is not found

This allows you to customize the front door experience for your users.
Device Detection

See Device Detection for more information on configuration values.
Cookies

    MODULE_ORDER_COOKIE_LIFESPAN - How long (in seconds) to remember the module order customization. In production sites this should be set to a long time, like 15552000 (180 days)
    LAYOUT_COOKIE_LIFESPAN - How long to remember the device detection results for pagetype and platform. In production sites this should be set to a long time, like 1209600 (14 days)
    BOOKMARK_COOKIE_LIFESPAN - How long to remember the saved bookmarks for a user. In production sites this should be set to a long time, like 15552000 (180 days)

Database

The main database connection can be used by a variety of modules for storing and retrieving values. See the database section for specific information on configuration values.
Authentication

    AUTHENTICATION_ENABLED - Set to 1 to enable authentication
    AUTHENTICATION_IDLE_TIMEOUT - Idle Timeout in seconds before users are logged off Use 0 to disable
    AUTHENTICATION_USE_SESSION_DB - If 1 then session data will be saved to the site database
    AUTHENTICATION_REMAIN_LOGGED_IN_TIME - Time in seconds where users can choose to remain logged in even if closing their browser. If this is set to 0 then user’s cannot remain logged in. Typical times are 604800 (7 days) or 1209600 (14 days).

Log Files

    KUROGO_LOG_FILE - The location of the Kurogo log file. This is where all Kurogo log statements will be placed depending on the value of DEFAULT_LOG_LEVEL
    LOG_DATE_FORMAT - Date format for log files
    LOG_DATE_PATTERN - regex pattern of log dates, should match output from LOG_DATE_FORMAT

Module Visibility and protection

Each module contains an configuration file in SITE_DIR/config/moduleID/module.ini. This file contains values common to all modules, as well as module specific values.

    id - The module id to use. By default this will be the same name as the moduleID. You can change this to create a copied module or to use another module’s code at this url.
    title - The module title. Used in the title bar and other locations
    disabled - Whether or not the module is disabled. A disabled module cannot be used by anyone. Use this value for temporarily disabling modules.
    search - Whether or not the module provides search in the federated search feature.
    secure - Whether or not the module requires a secure (https) connection. Configuring secure sites is beyond the scope of this document.

Permanently disabling modules

When CREATE_DEFAULT_CONFIG is set to 0, if you remove a module’s config folder it will be permanently disabled and will not be accessible.
Optional Common Module Settings

    SHOW_LOGIN - By default the login link only appears on the home module. If you wish for it to show up on other modules, you can set this value to 1 on any module you wish to see it. You could also set this to 0 on the home module to suppress its showing.

Home Screen

See Home Module for information on configuring the look and layout of the home screen.
Strings

There are a number of strings that are used throughout the framework to identify the site name the organization it is a part of. These include:

    SITE_NAME - The name of the site. Used in the footer and other places.
    COPYRIGHT_LINK - Link to copyright notice (optional)
    COPYRIGHT_NOTICE - Copyright notice
    FEEDBACK_EMAIL - email address where users can send feedback.

Administration Module

In addition to editing these files, you can use the administration module to manage the configuration. The admin module is located at /admin and does not have an icon on the home screen.

반응형

Kurogo Tutorial 07 - Device Detection -

2012. 5. 9. 05:12 | Posted by 솔웅


반응형

Device Detection

Kurogo 프레임워크의 파워풀한 기능 중 하나가 다양한 디바이스를 감별해 내고 다양한 디바이스의 capabilities를 근거로 format content를 분류하는 기능입니다. 디바이스별 분류를 지우너하기 위해 프레임워크는 Device Detection Server를 사용합니다. 이 서버는 디바이스들과 nomalized 된 프로퍼티 세트 output들에 대한 데이터베이스가 있습니다.

 

Types of Device Detection Servers

 

Kurogo는 유저 디바이스의 user agent를 parse 하고 상응한 값 목록들을 return 하는  internal device detection server 가 포함돼 있습니다. 여기에는 lib/deviceData.json에 위치한 json dataset을 포함됍니다. 이것은 각 패턴들의 series를 포함하고 있고 해당 패턴에 맞는 값을 return 하게 됩니다. 또한 여러분은 여러분 나름대로의 custom dataset file을 정의하실 수 있습니다. 이 custom file은 canonical dataset보다 먼저 검색돼 여러분 필요에 따라 control 할 수 있도록 도와 줍니다.

external device detection service 도 가능합니다. 이 service의 장점은 좀 더 최신이 디바이스 정보까지 포함하고 있다는 겁니다. 이를 위해서는 2개의 url들이 제공됩니다. 하나는 개발용이고 다른 하나는 production 용입니다.

좀 더 자세한 사항은 Device Detection Configuration  를 보세요.

 

Data Format

 

Kurogo 프레임워크는 유저 브라우저의 user agent를 사용해서 device detection service를 진행합니다. 이 service는 그 디바이스를 근거로한 프로퍼티들을 return 할 겁니다.

  • pagetype - String. device buckets 중의 하나, 그 디바이스가 어떤 major HTML 소스 를 receive 할 것인지를 정하게 됨. 리턴값으로는 basic, touch, compliant and tablet 등이 있음
  • platform - 디바이스의 특정 타입. 값으로는  ANDROID, BBPLUS, BLACKBERRY, COMPUTER, FEATUREPHONE, IPHONE, IPAD, PALMOS, SPIDER, SYMBIAN, WEBOS, WINMO, WINPHONE7 등이 있음
  • description - 디바이스에 대한 설명 
  • supports_certificates - Boolean. 이 프로퍼티는 더 이상 사용하지 않음

The pagetype 와 platform properties 들은 module object 의 프로퍼티로서 assign 됩니다.

 

Configuration

 

device detection service에 영향을 미치는 몇가지 configuration 값들이 있습니다. 이 값을은 SITE_DIR/config/site.ini에서 설정 하실 수 있습니다.  

  • MOBI_SERVICE_VERSION - 디바이스 버전을 포함. compatibility를 위해 제공 됨
  • MOBI_SERVICE_USE_EXTERNAL - Boolean. 0 이면, Kurogo 는 internal device detection server를 사용함. 1이면 external server를 사용함
  • MOBI_SERVICE_SITE_FILE - internal detection을 사용할 경우 site-specific device detection data 의 위치.  (DATA_DIR/deviceData.json 에 있음)
  • MOBI_SERVICE_URL - external detection을 사용할 경우 device detection server 의 URL 
  • MOBI_SERVICE_CACHE_LIFETIME - Time (in seconds), external device detection service 로부터 받아 cache 된 값을 keep 하고 있는 시간

Debugging Options

 

  • DEVICE_DETECTION_DEBUG - on으로 할 경우 홈 스크린의 밑에서 device detection 정보를 보실 수 있습니다. 특정 디바이스를 다룰 경우 유용하게 사용하실 수 있습니다. 디바이스가 정확하게 분류되 있지 않다고 느끼시면 device/browser 의 user agent 정보와 함께 kurogo-dev@googlegroups.com 로 알려 주세요.
  • DEVICE_DEBUG - on으로 할 경우, 주어진 요청을 행하기 위해 device pagetype과 platform 을 변경하실 수 있는 권한을 갖게 됩니다. 이 기능은 특정 디바이스를 가지고 있지 않거나 데스크탑에서 테스트를 할 때 유용하게 사용하실 수 있습니다.  심플하게 /device/pagetype-platform/에 사전 정의 해 주세요. 

 

Customizing your Device Detection

 

Kurogo 1.3 에서는 device detection files에 어떻게 access를 하는지에 대해 변경이 있습니다. 수정하거나 특정 device detections를 override 하는 것을 훨씬 쉽게 진행할 수 있도록 면서도 speed 손실이 없도록 했습니다.

쿠로고는 device detection 프로세스를 컨트롤 하기 위해 JSON 포맷을 사용합니다. 그럼으로서 빠르게 감지하고 쉽게 수정하거나 특정 디바이스를 추가할 수 있도록 했습니다. 이 파일에 대한 스키마 정의가 LIB_DIR/deviceDataSchema.json에 있습니다. JSON 스키마에 대한 좀 더 자세한 정보는 http://json-schema.org/를 참조하세요. 샘플 custom file은 DATA_DIR/sampleDeviceData.json 에서 보실 수 있습니다.

The sample deviceData.json file is reproduced below with comments added to help describe the format. Note that comments are not allowed in the actual file, in order to conform to json specifications:

deviceData.json 파일을 주석을 달아서 이해하기 쉽도록 한 샘플 파일이 아래에 있습니다. 실제로는 이 주석이 허용되지 않으니까 주의하세요.

 

{
    // All deviceData files consist of an object containing a single property, "devices".  devices is an array of device blocks.
    "devices" : [
        {
            // A device block contains several properties:

            // "groupName" : a machine readable identification of the device or device group.
            "groupName" : "exampleDevice",

            // "description" : a human readable identification of the device or device group.
            "description" : "Both revisions of the Example Device produced by Example Company, Inc.",

            // "classification" : a versioned set of identifications to be passed to kurogo once a device is matched
            "classification" : {
                // By convention, the highest version number is placed first in the file.
                "2" : {
                    // The full list of supported pagetypes and platforms are defined
                    // in the associated schema.
                    // Note: The schema defines a specified set of pagetypes and
                    //     platforms, in an attempt to catch misspelling and other user
                    //     input errors.  Kurogo, however, has no such restrictive list, and
                    //     you can actually specify any pagetype/platform assuming you also
                    //     have all the necessary template/configuration files defined.
                    "pagetype"     : "compliant",
                    "platform"     : "android",
                    "supports_certificate" : true
                },

                // In the event that a classification cannot be found for a given version
                // number, it attempts to search for the next lowest version.
                // So if you are requesting version 3, it first attempts to find version 3.
                // If it cannot find it, it attempts to find version 2.  If it cannot find
                // that either, it attempts to find version 1, etc.

                // Because of this, version numbers are a way to specify when this
                // definition last changed.  This also means that upgrading to a new
                // version of the detection engine does not require you to edit every single
                // entry just to continue to use your custom detection file.
                "1" : {
                    "pagetype"     : "webkit",
                    "platform"     : "android",
                    "supports_certificate" : true
                }
            },

            // "match" : an array of regex and/or string match blocks which should be matched against the user agent.
            "match" : [
                // You can specify any number of matcher blocks.
                {
                    // There are 4 types of matches.
                    // "prefix" attempts to match the specified string at the beginning of the user-agent.
                    "prefix" : "Mozilla/5.0 (exampleDevice-v1"
                },
                {
                    // "suffix" attempts to match the specified string at the end of the user-agent.
                    "suffix" : "exampleDevice-v2)"
                },
                {
                    // "partial" attempts to perform a literal string match somewhere in the user-agent string.
                    "partial" : "exampleDevice"
                },
                {
                    // "regex" allows you full preg_match syntax for matching any part of the user-agent string.
                    // Note: Do not include delimiters in your regex string or escape any potential delimiters.
                    // This is done automatically by Kurogo.
                    "regex" : "exampleDevice-v(1|2)",

                    // Each of the 4 different types of matches can also include an optional "options" object.
                    // This object can contain various modifiers for the match functions.  While useable on the
                    // basic string matching operations, it's most useful in regex, where you can specify case insensitivity and/or newline matching for the dot token.
                    "options" : {
                        "DOT_ALL" : true,
                        "CASE_INSENSITIVE" : true
                    }
                }
            ]
        }
    ]
}



반응형

'WEB_APP > Kurogo' 카테고리의 다른 글

Kurogo Tutorial 12 - Logging in Kurogo -  (0) 2012.05.21
Kurogo Tutorial 11 - News Module -  (0) 2012.05.17
Kurogo Tutorial 10 - Module 만들기 -  (0) 2012.05.13
Kurogo Tutorial 09 - MAP Module -  (0) 2012.05.12
Kurogo Tutorial 08 - Configuration-  (1) 2012.05.11
Kurogo Tutorial 06 - 소스 코드 여행 -  (0) 2012.05.08
Kurogo Tutorial 05 - 모듈 생성하기 -  (0) 2012.05.08
Kurogo Tutorial 04  (0) 2012.05.08
Kurogo Tutorial 03  (1) 2012.05.08
Kurogo Tutorial 02  (0) 2012.05.08

Kurogo Tutorial 06 - 소스 코드 여행 -

2012. 5. 8. 23:41 | Posted by 솔웅


반응형

Source code tour

이 섹션에서는 Kurogo 소스 코드 프로젝트에 있는 다양한 파일들과 디렉토리들을 여행해 볼겁니다. 프로젝트의 레이아웃을 안다는 것은 코딩 이전에 무엇인가를 결정할 때 그리고 여러분의 파일을 어디에 위치 시켜야 할지를 결정할 때 도움을 줄 겁니다.

Basic Layout

Kurogo 폴더의 루트는 몇개의 폴더가 있습니다.

add-ons
이 디렉토리에는 추가적인 scripts나 code들이 들어갑니다. 주로 다른 어플리케이션과  interact 하는데 사용될 수 있습니다.
app
이 대렉토리에는 Kurogo가 제공하는 각 모듈의 code 와 templates 이 들어 있습니다. 또한 각 모듈에 의해 사용되는 shared template도 있습니다. (including headers and footers). lib 폴더에 이런 파일을 add 하거나 altering 하지 말고 Site folder  안에 새로운 파일이나 altered 파일을 넣으세요.
config
이 디렉토리에는 전체 프로젝트에 대한 메인 configuration file들이 들어 있습니다. 가장 주목할 파일은 kurogo.ini file 입니다.
doc (only included in source distribution)
이 디렉토리에는 이 guide를 포함해서 다양한 documentation 파일들이 있습니다. 이 가이드는 Sphinx documentation system 을 사용해서 만들어 졌습니다.
lib
이 디렉토리는 Kurogo에서 제공하는 라이브러리가 있습니다. data retrieval, parsing, authentication, database access 라이브러리와 configuration 등이 있습니다. 일반적으로 Kurogo가 제공하는 라이브러리만 이 디렉토리에 있어야 합니다. 여러분의 라이브러리는 SITE_FOLDER/lib 폴더에 넣어야 나중에 프로젝트를 업데이터 할 때 혼동이 없습니다.
site
이 디렉토리에는 각 사이트의 entry 가 있습니다. 좀 더 자세항 사항은 다음을 보세요. Site folder
www
이 디렉토리에는 사이트의 DocumentRoot가 있습니다. 여기에는 모든 incoming request들을 핸들링하는 메인 스크립트인 index.php 가 있습니다. 여기에 또한 css와 javascript가 있게 됩니다. .htaccess 와 web.config 파일은 Apache와 IIS를 위한 URL redirection이 있습니다.


Case Sensitivity

여러분 사이트를 개발 하실 때 대소문자를 구분한다는 사실을 항상 염두에 두세요. 많은 개발자들이 대소문자 구분을 하지 않는 시스템에서 작업을 하십니다. 대부분의 서버에서는 대소문자 구분을 합니다. 그러니까 폴더위치나 url등을 정할 때 이 부분을 잘 염두에 두셔야 합니다.

Provided vs. Site files

레이아웃 섹션에서 말했듯이 app,lib,www 같은 Kurogo에서 제공하는 파일들과 여러분이 사이트 작업을 위해 사용하시는 파일 등이 있습니다. 쿠로고는 오픈소스이기 때문에 여러분의 필요에 따라 소스를 고치셔도 됩니다. 만약 여러분이 프로젝트 디렉토리의 파일을 수정하거나 새 파일을 추가했다면 다음 버전에 업데이트 할 때 문제가 될 수 있습니다. 업그레이드 할 때 이런 부분을 도와주는 것으로 add additional functionality이 있습니다.

그리고 여러분이 좀 더 낫게 수정하면 여러분의 수정사항을  submit your changes 에 알려주시면 감사하겠습니다.

Libraries

이 프레임워크는 모듈라이즈와 특정 프로세스를 추상화하고 코드 재사용을 용이하게 하기 위해 많은 라이브러리를 사용하도록 하고 있습니다. 모든 라이브러리는 PHP 클래스로 돼 있습니다.

Packages

특정 클래스 파일들이나 클래스들을 하나의 패키지로 관리할 수 있습니다. 패키지로 관리함으로서 필요한 파일들을 하나로 묶어서 관리를 편하게 해 줍니다.(use: Kurogo::includePackage(‘PackageName’) in your module code) 현재 아래 패키지들이 사용 가능합니다.

  • Authentication (included automatically when authentication is enabled)
  • Authorization - for connecting to various OAuth based web services
  • Cache - classes dealing with in-memory and disk caching
  • Calendar - includes classes to deal with calendar data
  • Config - classes to deal with configuration files
  • DataController - legacy classes dealing with the pre 1.4 DataController class
  • DataModel - subclasses of the DataModel class
  • DataParser - subclasses of the DataParser class
  • DataResponse - subclasses of the DataResponse class
  • DataRetriever - subclasses of the DataRetriever class
  • DateTime - classes for handling date and time
  • db - used when you wish to interact with a database
  • Emergency - used by the emergency module
  • Maps - used by the map module
  • People - used by the people module
  • RSS - classes for handling RSS data
  • Session - Subclasses of the session object, used for session management
  • Video - used by the video module

Core / Support Files

  • compat - defines several functions that normalize behavior throughout PHP versions
  • exceptions - defines exception subclasses and sets up exception handling behavior
  • Kurogo - a singleton class used to consolidate common operations like initialization, site configuration, and administration. See more
  • minify - interface between the framework and the included open source minify library
  • DeviceClassifier - An interface between the framework and the Device Detection Service
  • deviceData.db - A SQLite database that contains browser entries used by the internal device detection system.
  • Validator - A utility class to validate certain types of data

Native API Functions

이 함수는 특정 모듈함수에 접근권한을 주는 API interface를 다루는 함수 입니다. 이 인터페이스들은 native application에 의해 주로 이용됩니다. 그리고 AJAX 를 위한 모듈에 의해서도 사용되어 집니다.

  • APIModule - The base class for API modules, inherits from Module
  • APIResponse - A class that encapsulates the common response message for API requests

더 자세한 사항은 The APIModule Object 를 보세요.

External Data Retrieval

더 자세한 사항은 Data Retrieval  를 보세요.

Database Access

Kurogo는 데이터베이스 연결관련 configuration을 위해 database connection abstraction library를 제공합니다.

  • db - A database access library based on PDO. It includes abstractions for MySQL, SQLite, PostgreSQL and MS SQL. This support is dependent on support in your PHP installation. The setting up and maintaining of databases and their associated extensions is beyond the scope of this document.
  • SiteDB - Uses the main database configuration for access.

더 자세한 사항은 Database Access  를 보세요.

User Access and Authentication

  • AuthenticationAuthority - 이것은 authenticating users 에 대한 루트 클래스 입니다. It is designed to be subclassed so each authority can provide the means of actually authenticating users, but still maintain a consistent interface for the login module. See Authentication for more information about the included authorities.
  • AccessControlList - A class used by the authorization system to restrict access to modules based on user or group membership. This is especially useful for the Administration Module.
  • User - The base class for identifying logged in users
  • UserGroup - The base class for identifying groups

더 자세한 사항은 Authentication 를 보세요.

Session Management

  • Session -  유저의 상태를 저장해서 관리합니다. 현재는 두 종류의 세션이 있습니다.

    • SessionFiles - Save and restore session data using the built in file handler
    • SessionDB - Save and restore session data using a database

Configuration

  • Config - An abstract class that stores key/value data and has logic for handling replacement values (i.e referencing other keys’ values within a value)
  • ConfigFile - Provides an interface for reading and writing an ini configuration file
  • ConfigGroup - Provides an interface for coalescing multiple configuration files to provide a single key/value store
  • ModuleConfigFile - A specific config file class to load module config files.
  • SiteConfig - A specific ConfigGroup that loads the critical site and project-wide configuration files.

configuring Kurogo에 대한 더 자세한 사항은 Configuration 를 보세요. 

Modules and Templates

  • Module - The core class that all modules inherit from. Provides a variety of necessary services and behavior to module subclasses. See Writing Modules.
  • WebModule - The core class that all web modules inherit from.
  • HTMLPager - A support class used to paginate content
  • smarty - The Smarty Template System
  • TemplateEngine - An subclass of the smarty object used by the framework

더 자세한 사항은 Writing Modules 를 보세요.

Other

  • ga - 자바스크립트를 지원하지 않는 브라우저를 위한 google analytics implementation 

Modules and Templates

app 폴더 안에 모듈과 탬플릿 파일들이 있습니다.

Common

common folder 안에는 모든 모듈에서 사용할 수 있는 template과 css 파일들이 있습니다. 이 각각의 탬플릿들은 다른 디바이스별로 몇가지 variant를 가지고 있습니다. (탬플릿 시스템과 파일 네이밍에 대한 좀 더 자세한 정보는 Templates을 보세요.) 이 탬플릿들은 아래와 같은 것들이있습니다.

  • footer.tpl content placed at the bottom of most pages
  • header.tpl content placed at the top of most pages
  • help.tpl template used for displaying help pages
  • formList.tpl template used for showing a list that enables input
    • formListItem.tpl template used for an individual form item in a list
  • navlist.tpl template used for showing items as a list
    • listitem.tpl template used for an individual item in a list
  • pager.tpl - template for providing pagination for long-form content
  • results.tpl - template for displaying results in a list
  • search.tpl - template for presenting a search box
  • share.tpl - template for presenting a sharing content via social networking
  • springboard - template for displaying content as a grid of icons
  • tabs.tpl - template for displaying content in tabs

Modules

modules 폴더에는 Kurogo와 같이 bundle 된 모든 모듈들이 들어 있습니다. 각 모듈들은 PHP 코드와 탬플릿 파일들이 있습니다. 또한 CSS와 Javascript 파일들도 있습니다. 모듈 디자인에 대한 좀 더 자세한 사항은 Writing Modules 를 보세요.

여기서 naming convention은 아주 중요합니다. (특히 대소문자를 구분하는 시스템에서는요.)

  • The folder must be lower case and be the same as the url of the module (/about, /home, /links). You can create modules at other urls by copying the module
  • The folder must contain a PHP file named ModulenameWebModule.php. If the module is located in the site folder and it extends an existing module then it should be called SiteModulenameWebModule.php.
  • The first (and ONLY) letter of the module must be capitalized and followed by WebModule.php.
    • AboutWebModule.php (NOT aboutwebmodule.php or AboutWebmodule.php)
    • FullwebWebModule.php (NOT FullWebModule.php or FullwebWebmodule.php)
    • SiteNewsWebModule.php (NOT siteNewsWebModule.php or Sitenewswebmodule.php)
  • Template files go into the templates folder. There should be a .tpl for each page of the module. At minimum there should be an index.tpl which represents the default page (unless the module alters that behavior). Each page should be in all lower case.
  • If you are overriding a project module you only need to include the pages that you are overriding.
  • You may choose to place additional css style sheets in a folder named css
  • You may choose to place additional javascript scripts in a folder named javascript
  • You can provide default configuration files in a folder named config

site folder에 다른 모듈을 생성함으로서 included된 모듈의 behavior를 override 하는 것이 가능합니다. 좀 더 자세한 사항은 Extending an existing module를 보세요. 

Site folder

site folder에는 각 site를 위한 폴더 모임들이 있습니다. 이렇게 함으로서 각 사이트들은 각각 다른 configuration, design, custom code 등을 가질 수 있습니다. 처음 제공되는 디폴트 파일에는 한개의 active site만 있습니다. root Kurogo directory의 config/kurogo.ini file에서 active site를 설정하실 수 있습니다. 여기서 폴더의 이름은 kurogo.ini 파일에 있는 ACTIVE_SITE와 일치해야 합니다.

Multiple site folder는 사이트를 각각 다른 버전으로 개발하고 싶은 경우에 유용하게 사용될 수 있습니다. 각각의 사이트에는 아래와 같은 디렉토리들이 있습니다.

  • app - Site specific templates and modules. Inside this folder you will find 2 folders
    • common - Site specific common templates and css
    • modules - Site specific modules. To promote ease when updating the framework to new versions, it is important that you keep site specific modules in this folder rather than in the root app/modules folder. If you wish to include your work in Kurogo, please see GitHub Repository. Also see Extending an existing module.
  • cache - Contains server generated files that are cached for performance. This folder is created as needed, but must be writable by the web server process.
  • config - Contains the site specific configuration files in .ini format. Many of these files can be managed using the Administration Module
    • site.ini - The general configuration file that affects all site behavior such as timezone, log file locations, database configuration, and more.
    • acls.ini - Site wide access control lists
    • authentication.ini - The configuration for user Authentication.
    • strings.ini - a configuration file containing strings used by the site
    • Each module’s configuration is contained a folder named by its module id. There are several standard files for each module:
      • module.ini - Settings for disabling, access control, search and module variables and strings
      • feeds.ini - Specifies external data connections
      • pages.ini - Titles for each page
      • Modules may have other config files as needed
  • data - a folder that contains data files meant to be used by the server. Unlike cache folders, these files cannot be safely deleted. Examples would include data that is not able to be generated from a web service, SQLite databases, or flat authentication files. It is also possible that certain deployments would have nothing in the data folder.
  • lib - an optional folder that contains code libraries used by site modules. The Kurogo autoloader will discover and find classes and packages in this folder.
  • logs - Log files
  • themes - Contains the themes available for this site. Each theme folder contains a common and modules folder that contains the CSS and image assets for the site. See Templates for more information.

WWW Folder

www폴더에 있는 파일과 폴더들은 사이트의 기본 위치인 DocumentRoot 에 있는 겁니다. 바로 대문 앞에 있는 것이죠. 이 구조를 잘 유지하시려면 모든 request,들은 index.php file을 통해서 전달되도록 하셔야 합니다. (예외인 경우는 min이나 minify url 처럼 이미 존재하는 path 나 폴더들일 경우입니다.)

index.php

이 index script 는 프레임워크의 메인 controller입니다. 모든 request들은 .htaccess를 override하고 아파치의 경우 mod_rewrite 를 그리고 IIS의 경우 URL Rewrite extension 사용해서 처리 됩니다. .htaccess file 은 모든 request들을 rewrite 합니다. request된 path를 포함한 $_GET variable _path 등을 rewrite 한느 것이죠. 예를 들어 http://server/module/pagehttp://server/index.php?_page=module/page가 됩니다. $_GET이나 $_POST 변수의 다른 추가적인 데이터도 가능합니다. 좀 더 자세한 사항은 Handling Requests 을 보세요


반응형

'WEB_APP > Kurogo' 카테고리의 다른 글

Kurogo Tutorial 11 - News Module -  (0) 2012.05.17
Kurogo Tutorial 10 - Module 만들기 -  (0) 2012.05.13
Kurogo Tutorial 09 - MAP Module -  (0) 2012.05.12
Kurogo Tutorial 08 - Configuration-  (1) 2012.05.11
Kurogo Tutorial 07 - Device Detection -  (0) 2012.05.09
Kurogo Tutorial 05 - 모듈 생성하기 -  (0) 2012.05.08
Kurogo Tutorial 04  (0) 2012.05.08
Kurogo Tutorial 03  (1) 2012.05.08
Kurogo Tutorial 02  (0) 2012.05.08
Kurogo Tutorial 01  (0) 2012.05.04

Kurogo Tutorial 05 - 모듈 생성하기 -

2012. 5. 8. 23:32 | Posted by 솔웅


반응형

Making Your First Module - Hello World


이 섹션에서는 모듈 생성 과정에 대한 overview를 보여 드릴 겁니다. 그냥 따라하시기만 하시면 됩니다. 좀 더 자세한 테크닉을 원하시면 Creating a new module  를 보세요.이 섹션에서 설명된 대부분의 내용은 좀 더 자세한 설명들이 Documentation 안에있습니다.

 

Case Sensitivity

일단 대소문자 구분을 한다는 것을 명심해 두세요. 많은 개발자들이 대소문자 구분을 하지 않는 파일 시스템을 사용하고 있습니다. 대부분의 서버들 특히 리눅스 베이스 서버들은 대소문자를 구분하는 파일 시스템을 사용하고 있습니다. 그렇기 때문에 폴더 위치나 url을 사용할 때 이 규칙을 따르는 것은 매우 중요합니다. 웬만하면 폴더나 url들은 소문자를 사용하시면 좋습니다.


Creating the module folder structure

Noteinstallation steps 을 따라서 설치하고 site folder도 생성한 상태여야 합니다. SITE_DIR 은  site/YOURSITE 로 돼 있어야 합니다. YOURSITE는 여러분이 생성한 사이트의 이름입니다.

Kurogo 프레임워크는 다양한 위치에 모듈 데이터를 생성할 수 있습니다. (see Source code tour) 일단 여러분의 모듈들을 여러분 사이트의 app/modules folder에 생성하세요. Kurogo 모듈로서 이미 사용되고 있는 폴더를 /app/modules 에 넣지 마세요.


 

  • SITE_DIR/app/moduleshello 라는 폴더를 만드세요. 
  • SITE_DIR/app/modules/hello folder 안에templates 라는 폴더를 만드세요.

Creating the module class file

hello directory 안에 HelloWebModule.php 라는 파일을 만드세요. 그리고 아래 내용을 그 파일안에 작성하세요.

<?php

class HelloWebModule extends WebModule
{
  protected $id='hello';
  protected function initializeForPage() {
    $this->assign('message', 'Hello World!');
  }
}

Creating the template file

hello/templates directory 안에 index.tpl 라는 파일을 만들고 아래 내용을 넣으세요. 

{include file="findInclude:common/templates/header.tpl"}

<h1 class="focal">{$message}</h1>

{include file="findInclude:common/templates/footer.tpl"}

이제 폴더 구조가 아래처럼 됐을 겁니다.



Creating the nav bar image

56 x 56 PNG file 을 만들고 title-hello.png 라고 이름을 넣어 주세요. 그리고 이 이미지 파일을 아래 폴더에 넣어주세요.  SITE_FOLDER/themes/default/common/images/compliant.

Creating the config folder

이 모듈을 로드하기 위해 configuration 폴더가 필요합니다.

  • SITE_FOLDER/config 안에 hello 폴더를 생성하세요
  • SITE_FOLDER/config/hello/module.ini 파일을 생성하시고 아래와 같이 내용을 넣으세요. 
[module]
title="Hello"
disabled = 0
protected = 0
search = 0
secure = 0

Viewing the module

여기까지만 하면 여러분의 웹 브라우저에서 여러분의 새로운 모듈을 보실 수 있을 겁니다. 여러분 사이트가 8888이라고 가정하고 여러분의 컴퓨터의 브라우저에 http://localhost:8888/hello 를 넣으세요. 성공했다면 아래와 같은 화면을 보실 수 있을 겁니다.

 




축하드립니다. 방금 아주 간단한 모듈을 직접 만드셨습니다.



반응형

'WEB_APP > Kurogo' 카테고리의 다른 글

Kurogo Tutorial 10 - Module 만들기 -  (0) 2012.05.13
Kurogo Tutorial 09 - MAP Module -  (0) 2012.05.12
Kurogo Tutorial 08 - Configuration-  (1) 2012.05.11
Kurogo Tutorial 07 - Device Detection -  (0) 2012.05.09
Kurogo Tutorial 06 - 소스 코드 여행 -  (0) 2012.05.08
Kurogo Tutorial 04  (0) 2012.05.08
Kurogo Tutorial 03  (1) 2012.05.08
Kurogo Tutorial 02  (0) 2012.05.08
Kurogo Tutorial 01  (0) 2012.05.04
Kurogo Platform Demo 체험기  (0) 2012.04.25

Kurogo Tutorial 04

2012. 5. 8. 23:03 | Posted by 솔웅


반응형

Upgrading from Previous Versions

Kurogo는 간단하고 쉽게 업그레이드를 할 수 있도록 디자인 됐습니다. 이전에 소개했던 대로 사이트를 생성하고 extension 했다면 여러분의 customizations를 overwrite 할 필요 없이 간단하게 Kurogo new version을 업데이트 할 수 있습니다.

If you have forked the git repository

Git은 새로운 변경사항을 쉽게 implement 하도록 해 줍니다. 여러분은 단지 master repository로부터 간단하게 변경된 사항들을 pull down 해서 여러분의 repository에 merge 하시면 됩니다.

  1. In your repository, set up an upstream remote:
    • git remote add upstream git://github.com/modolabs/Kurogo-Mobile-Web.git
    • git fetch upstream
  2. When new changes come down you can run:
    • git fetch upstream
    • git merge upstream/master Merge changes into your master branch

여러분의site folder에서만 작업이 이루어 졌다면 이 버전 업데이트 작업은 깨끗하게 완료 될 겁니다.

If you used a downloaded version

git을 사용하지 않는다면 새 버전을 다운로드 받으시고 여러분의 site folder에 복사해 넣으시면 됩니다. 주의하셔야 할 점은 여러분의 kurogo.ini file은 사용하시던 것을 그대로 유지 하셔야 합니다.




MultiSite

MultiSite는 Kurogo의 한 기능입니다. 이것을 사용하면 한 서버에서 여러개의 Kurogo site folder를 host 할 수 있도록 해 줍니다. 각각의 사이트는 나름대로의 configuration files, cache folders, themes, custom modules들을 가질 수 있습니다. 그리고 그 사이트들은 하나의 같은 Kurogo code를 공유를 합니다. 이 기능은 여러분의 사이트를 다국어로 서비스 할 때 유용하게 이용하실 수 있을 겁니다.

MultiSite는 각각의 site 를 subpath로서 관리하면서 구현됩니다. 예를 들어 2개의 en, es 사이트가 있다면 다음과 같은 방법으로 이 사이트들에 access 될 수 있습니다. (home 모듈에 access 하는 방법을 예로 들었습니다.)

Setting up MultiSite

multi site를 사용하시려면 Kurogo가 반드시 여러분 도메인의 root로서 설정 돼 있어야 합니다. 만약에 Kurogo를 subpath로 설정하면 MultiSite가 제대로 작동을 안 할 겁니다.

MultiSite를 셋업하려면 먼저 config/kurogo.ini file에서 이 부분을 세팅해야 합니다.

  • Open up config/kurogo.ini. If it does not exists, copy kurogo-default.ini to kurogo.ini
  • Set MULTI_SITE = 1 in the [kurogo] section
  • Set DEFAULT_SITE to the default site you want people to see when they visit your site. For example DEFAULT_SITE=”en”
  • For added security and performance, you can set a series of ACTIVE_SITES[] values for each site that you wish to expose.
ACTIVE_SITES[] = "en"
ACTIVE_SITES[] = "es"

이렇게 설정하면 이 서버에서는 en 과 es 로 이루어 지는 MultiSite를 사용하실 수 있게 됩니다. 




반응형

Kurogo Tutorial 03

2012. 5. 8. 10:45 | Posted by 솔웅


반응형

Setup and Installation

Kurogo는 PHP 웹 어플리케이션 입니다. 당연히 웹 서버에 인스톨 되어야 겠죠. 현재까지는 2 종류의 웹 서버를 지원하고 있습니다.

System Requirements

  • Web Servers supported
  • PHP 5.2 or higher with the following extensions:
    • zlib
    • xml
    • dom
    • json
    • PDO (Used for Database Access)
    • mbstring
    • Zip (needed if parsing KMZ files)
  • Some PHP modules are optional depending on whether you need their backend functionality
    • LDAP



Installation

이 튜토리얼은 여러분이 기본적인 시스템을 가지고 있고 웹 서버 관리에 대한 기본적인 지식을 가지고 있는 것을 상정하고 작성했습니다. 좀 더 자세한 사항은 여러분의 시스템과 웹 서버 설명서를 참조하세요.

  1. Kurogo 파일을 웹 서버가 접근 가능한 위치에 넣으세요.
  2. 웹서버의 루트 폴더를 Kurogo의 www 폴더로 잡아 주세요.(Using Kurogo in a subfolder of a domain 을 보세요.)
  3. (Apache Only) .htaccess files 이 사용 가능해야 합니다.  적어도 FileInfo 에는  AllowOverride 가 세팅되 있어야 합니다. (MAMP on OS X 에는 이 기능이 디폴트로 설정 돼 있습니다. )
  4. (IIS Only) 전체 프로젝트 폴더에 Application Pool 이 read access 가 가능해야 합니다.  In IIS 7.5 this is the IIS AppPoolDefaultAppPool user
  5. site directory에, make a copy of the Universitas folder 를 그 안의 파일들까지 모두 복사해서 하나 더 만드세요. 여러분의 site name으로 사용할 이름을 그 폴더이름으로 사용하세요. 이 폴더를 SITE_FOLDER 로 사용할 겁니다.

    • Critical: 웹서버 유저는 SITE_FOLDER 내의 모든 파일에 쓰기 가능으로 설정 돼 있어야 합니다. (Apache typically: apache or www, IUSR on IIS) 
  6. kurogo-default.ini file 을 kurogo.ini 라는 이름으로 하나 더 복사해 넣으세요.
  7. 그 kurogo.ini file 의 ACTIVE_SITE option 을 SITE_FOLDER 하고 같게 설정하세요.
  8. 웹서버를 restart 하고  http://yourhost/admin 를 브라우저에서 불러보세요.

Using Kurogo in a subfolder of a domain

특정 환경에서는 Kurogo 가 도메인의 root 가 아니라 URL로 install 되어야 필요가 있습니다. 이렇게 하기 위한 몇가지 방법이 있습니다.

  • Unix environment 에서는 symbolic links 사용하기
  • IIS 에서는 Virtual Folders 사용하기 (requires manual configuration change)
  • 윈도우에서는 Junctions 사용하기

Note. Apache aliases는 aliases 와 mod_rewrite 를 실행하는데에는 지원하지 않습니다.

Using Virtual Folders in IIS

윈도우즈 환경에서 IIS 웹서버를 사용하신다면 virtual folder에 Kurogo를 인스톨 해야 합니다. 이렇게 하면 document root가 아닌 경로에서도 Kurogo를 사용할 수 있습니다. 이렇게 사용하기 위해서는 아래와 같이 하시면 됩니다.

  • kurogo www folder를 가리키는 vitual folder를 생성하세요.
  • Kurogo project folder에서 config/kurogo.ini 를 오픈하세요. 이 파일이 없으면 kurogo-default.ini를 복사해서 사용하시면 됩니다.  
  • [kurogo] section 에서, URL_BASE option의 주석을 풀고 해당 경로를 세팅해 주세요. 예를 들어 여러분의 사이트가  /kurogo 에 인스톨 돼 있으면 다음과 같이 세팅하시면 됩니다.  URL_BASE=”/kurogo”

Using Junctions in Windows

The following procedure should work in either IIS or Apache, however it is recommended to use Virtual Folders in IIS

아래 절차들은 IIS나 아파치 모두에서 작동합니다. 어쨌든 IIS에서는 Virtual Folder를 사용할 것을 권장합니다.

  •  서버에 junction program이 인스톨 되어 있어야 합니다. 이것은 마이크로 소프트 (Microsoft) 에서 배포합니다. 그리고 이 글을 쓰는 시점에는 다음 링크에서 받으실 수 있습니다. http://technet.microsoft.com/en-us/sysinternals/bb896768
  • junction program이 PATH내에 위치해 있어야 합니다. 대부분의 경우 junction.exe 파일을 시스템 루트 폴더 (C:Windows)에 카피해서 넣으면 됩니다.
  • same NTFS filesystem. 의 2개 path들 사이에 junction들을 생성하실 수 있습니다. FAT32로 포맷된 volumes 나 on volumes 사이에 junctions를 생성하실 수 없습니다.

아래와 같이 명령창에서 실행해 보세요. (조건에 따라 약간씩 다를 수 있습니다.)

junction C:\path\to\documentroot\mobile C:\path\to\kurogo\www


여기서는 subfolder 이름이 mobile이라는 것으로 가정했습니다. 폴더 이름은 임으로 정하시면 됩니다.

Common Installation Problems

설치하는 과정에서 문제가 발생할 수 있습니다. 대부분의 문제는 셋업이 제대로 안 됐거나 다른 요건들이 충족되지 않아서 입니다.

Apache: Viewing any of the modules results in a 404 Not Found error

설치 후 브라우저에서 열어봤는데 404 에러가 나올 수 있습니다. 이것은 Kurogo가 작동하고 있지만 .htaccess 파일을 Kurogo가 제대로 읽을 수 없기 때문입니다.


  • mod_rewrite 가 enabled 되 있어야 합니다. 이것은 httpd.conf 파일에서 enableing mod_rewrite 의 주석을 제거해 주시면 됩니다. 이 httpd.conf 가 어디에 있는지 아시려면 설치한 서버에서 제공하는 instructin을 참조하세요.
  • AllowOverride를 FileInfo나 All로 세팅해야 합니다. AllowOverride는 아파치가 .htaccess 파일을 읽을 수 있도록 해 주는 옵션입니다. 어떤 경우에슨 디폴트로 이것이 disabled 된 경우가 있습니다. (NONE으로 세팅되 있음) httpd.conf나 virtual host configuration에서 이 부분을 확실하게 enabled 시켜야 합니다.

Kurogo Error messages are shown as an Apache error message

에러메세지가 아파치 Apache 메세지 처럼 보인다면 아마도 서버가 /error urls 로 trapping 되고 있기 때문일 겁니다.

  • httpd.conf 나 virtual host configuration 파일에서 Alias /error 라인을 제거해 주세요.


반응형

Kurogo Tutorial 02

2012. 5. 8. 09:27 | Posted by 솔웅


반응형

Version History

Kurogo는 꾸준히 개선되고 있습니다. 아래 내용은 각 버전별 개선된 사항들 입니다. release notes에 대해 좀 더 자세히 알고 싶으시면 CHANGELOG file을 보세요.

Version 1.4 (March 5, 2012)

  • NEW Module: Athletics
  • NEW Module: Photos
  • Updated Map module
  • SOAP과 Database retrieval 메소드, 복잡한 데이터 모델을 좀 더 지원하기 위해 Data Retrieval classe 들 개선
  • 클라이언트 사이드 caching headers 개선
  • Added support for in-memory caching of Kurogo data structures using Memcache or APC.
  • Added developer support for encrypting data on disk (requires mcrypt)
  • Added option to locally save user credentials so they can be passed on to external services
  • Added support for Google Analytics domain names
  • Added support to show emergency notifications on the home screen
  • Federated search queries will now happen asynchronously on compliant devices.
  • Added support to create copied modules from the admin console.
  • Added support to remove modules from the admin console

Version 1.3 (October 13, 2011)

Version 1.2 (July 19, 2011)

Version 1.1 (June 1, 2011)

Version 1.0 (April 8, 2011)

Initial Release


============ o ============= o ================ o ==============

Getting Support

Kurogo 는 오픈소스 프로젝트이기 때문에 특별히 공식적인 지원은 없습니다. 단지 여러 비공식적으로 질문을 받고 지원을 하는 통로들이 있을 뿐입니다. 개별적인 지원을 받으시려면 유료 지원 서비스를 이용하실 수 있습니다.

Kurogo Google Group

사용자들에 대한 지원을 위해 Kurogo-dev라는 구글 그룹을 만들었습니다. 이 그룹에는 사용자들이 질문과 답변을 공유할 수 있는 메일링 리스트가 포함되 있습니다. 이 리스트는 Modo Labs의 구성원들 (Kurogo code 유지 보수 인력)에 의해 모니터 되고 있습니다. 답변은 공식적인 것이 아니고 구성원들간 자유롭게 주고 받는 메세지 입니다.

http://groups.google.com/group/kurogo-dev
kurogo-dev@googlegroups.com


Github Issues


버그를 발견하시면 아래 github 페이지에 그 내용을 올려 주세요.

https://github.com/modolabs/Kurogo-Mobile-Web/issues

Training and Support Through Modo Labs

좀 더 공식적인 지원을 원하시는 사용자는 sales@modolabs.com 로 연락 주시기 바랍니다. 공식적인 지원 내용은 아래와 같습니다.

•Initial Developer Training. Learning the framework, module development, theme design.
•Ramp up/implementation support
•Production / incident support


Professional Services

Modo Labs는 새로운 모듈이나 integration , user experiencce 그리고 인터페이스 디자인 등 좀 더  기술적인 요구가 있는 분들을 도와드리기 위해 professional development와 design service를 제공해 드릴 수 있습니다. 좀 더 자세한 정보는 sales@modolabs.com 로 연락 주세요.

============ o ============= o ================ o ==============


GitHub Repository




Kurogo 는 오픈 소스 프로젝트 입니다. 공짜로 다운로드 받을 수 있고 마음대로 소스를 수정해서 사용하실 수도 있ㅅ브니다. 이 프로젝트는 Git distributed version control system을 사용하고 있습니다. Git repository는 GitHub에서 운영하는 겁니다. 아래 웹사이트에서 만나실 수 있습니다.
https://github.com/modolabs/Kurogo-Mobile-Web

Git이나 GitHub가 생소하신 분은 GitHub Help Site를 먼저 보시기 바랍니다.

Forking and Managing your repository


간단하게 코드만 다운로드 받고 싶으신 분은 git clone git://github.com/modolabs/Kurogo-Mobile-Web.git 을 사용한 repository를 clone 하시면 됩니다.

만약 당신의 프로젝트를 maintaining 하시는데 관심이 있으시다면 그 프로젝트를 fork 하셔야 합지다.

1. GitHub 에 로그인 하기
2. https://github.com/modolabs/Kurogo-Mobile-Web 로 가기
3. 우상단에 있는 fork icon을 클릭하기
4. (Optional) 여러분 프로젝트 이름을 바꿀 수도 있습니다.
5. 여러분 로컬 컴퓨터에 프로젝트 clone 하기
6. Set up an upstream remote:
   ◦ git remote add upstream git://github.com/modolabs/Kurogo-Mobile-Web.git
   ◦ git fetch upstream
7. 변경할 내용이 있으면 아래와 같이 하면 됩니다.
   ◦ git fetch upstream Get updates to the upstream remote
   ◦ git merge upstream/master Merge changes into your master branch


다른 방법으로 여러분의 repository를 관리하는 방법이 있을겁니다. 하지만 이 방법으로 하면 좀 더 유연성있게 운영할 수 있습니다.

Creating your site

여러분의 프로젝트에는 master project에 있지 않은 elements (i.e. 이미지들이나 CSS assets 같은 것들)이 포함되어 있기 때문에 별도의 upstream branch를 유지할 것을 권장합니다. 이 branch는 clean 하게 남아 있을것이고 여러분의 master branch에 merge 될수도 있을겁니다. upstream branch를 생성함으로서 변경 이전 버전으로 돌아가는 기능도 아주 깨끗하게 처리할 수 있게 됩니다.

여러분의 master branch로부터 site/universitas 폴더들의 copy를 만드세요. 이것은 teplate site입니다. 여러분 site에 걸맞는 이름으로 바꿔주세요. 대부분 이 폴더에서 여러분의 코딩이 이루어질 겁니다. 새로운 모듈을 생성한다던가 기존의 모듈을 extend 하고 여러분의 site를 theming 하는것에 대해 좀 더 알아 보시면 많은 도움이 될 겁니다. 여러분만의 특별한 필요가 있지 않는 한 여러분 site의 디렉토리 밖에 있는 file을 수정해야 될 필요는 없을 겁니다.

Submitting your changes

만약에 여러분이 프로젝트 내의 버그를 수정했거나 새로운 기능을 추가해서 공유하고 싶으시면 여러분은 pull request 를 submit 할 수 있습니다. 그러면 Kurogo의 project 유지보수 인력에게 그 사실이 통보 될 것이고 여러분은 이 Kurogo 프로젝트의 주요한 일 부분이 되시는 겁니다.

pull request를 initiate 할 때 아래 매너들을 따라 주실것을 간곡히 부탁드립니다.

1. 여러분의 upstream branch 가 최신버전이어야 합니다.
2. fixes/features 를 implements 해서 새로운 branchm를 만들어 주세요.
3. 여러분의 웹 브라우저로 여러분의 GitHub project를 browse 해 주세요.
4. 여러븐의 fix/feature가 있는 branch로 switch 해 주세요.
5. pull request icon을 클릭해 주세요.
6. 작업에 대한 description을 넣어 주세요. 자세한 사항이 기재돼 있지 않으면 여러분의 request 가 accept 되지 않을 수도 있습니다.
7. 만약 별도의 branch에서 pull request를 initiate 하지 않았다면 여러분은 change commits 버튼을 클릭하시고 여러분의 fix가 포함돼 있는 commit들을 선택하셔야 합니다.
8.변경이 다 완료 됐으면 send pull request 를 click 해 주세요.


request 할 때 꼭 프로젝트에서 변경된 부분과 관련된 사항만 request에 포함시켜 주세요. main branch 쪽 부분도 되도록 포함시키지 말아주시구요. 너무 광범위한 자료를 포함시키면 가끔 의도치 않게 코딩 스타일이나 여러분의 patch 등에 대한 부분만 논의 되다 끝날 수 있습니다.


반응형

Kurogo Tutorial 01

2012. 5. 4. 20:05 | Posted by 솔웅


반응형

MODO Labs 의 Kurogo 시스템을 사용하게 됐습니다.

이전에는 몰랐던 새로운 기술을 배워야 되서 아주 신나네요.


제 스타일대로 Kurogo 웹사이트의 튜토리얼을 한번 쭉 정리해야겠습니다.


Kurogo Documentation

Kurogo Developer’s Guide¶

Kurogo 프레임워크는 PHP base 웹 어플리케이션 입니다. 광범위한 모바일 디바이스에 대한 서비스와 정보를 효율적으로 전달하는 것을 체계적으로 도와주는 툴입니다. MIT 프레임워크를 기반으로 했고 오픈 소스 프로젝트 입니다. 이 프로젝트는 확장성 있고 customizable 한 다양한 데이터 소스의 현재의 모바일 버전에 modular way 로 기능을 제공합니다.

Kurogo Framework에는 아래와 같은 것들이 포함 돼 있습니다.

• 디바이스의 특장을 감지하고 해당 디바이스에 알맞게 콘텐트를 display 하는 매커니즘
• 다양한 외부 소스로부터 데이터를 검색하고 parsing하고 display 하는것을 객체 지향적으로 처리함
• consistent한 유저 인터페이스를 손쉽게 개발할 수 있도록 테마별로 정리하고 재사용할 수 있도록 utilize해 효과적으로 탬플릿화 할 수 있도록 도와 줌
• 디렉토리와 뉴스 그리고 이벤트 정보들을 모으기 위해 prebuilt 와 customizable 모듈을 같이 사용할 수 있도록 지원
• 컨텐트와 관리자모드로의 접근시 이를 인증하고 검증하는 시스템

아래 내용들은 프로젝트 소스코드와 그 기능들에 대해 알 수 있는 가이드 입니다.


Overview

Kurogo는 다양한 종류의 모바일 기기에 delivering high quality와 data driven customizable content를 지원하기 위해 만들어진 PHP 프레임워크입니다. Kurogo는 다양한 source로부터 content를 받도록 해 주고 이를 피쳐폰이나 초기 스마트폰에서부터 최신 디바이스와 태블릿같은 광범위한 모바일 기기에 이를 표현할 수 있도록 해 줍니다. 모바일 웹 컴포넌트는 PHP를 사용한 웹 베이스의 어플리케이션 처럼 있습니다. 이 어플리케이션은 웹 서버에 호스트 되고 유저는 모바일 기기에 있는 웹 브라우저를 통해 이곳에 접근합니다.

이것은 liberal 오픈소스 MIT 라이센스를 사용해서 만들어 졌습니다. 이 의미는 여러분은 공짜로 이 제품을 다운로드 받아 설치하고 카피하고 수정하고 등등 여러분의 입맛에 맞게 고쳐서 사용할 수 있다는 겁니다.

Modules¶

Kurogo를 구성하는 부분 부분들은 Module입니다. 각각의 페이지 request는 url을 parse 하는 모듈에 의해서 처리됩니다. 그리고 나서 그 페이지를 표시합니다. 모듈은 코드의 조각들로 구성돼 있습니다. 그것들은 데이터를 처리하는 외부의 서비스들과 연결돼 있죠. 그리고 그 결과를 HTML과 CSS 표준을 사용해서 디바이스에 display 합니다. Kurogo는 여러 다양한 외부의 source들로부터 데이터를 받을 수 있도록 디자인 돼 있습니다. 그리고 그 데이터를 parse 하고 처리하고 화면에 출력하기 알맞는 포맷으로 준비합니다.

일반적인 유저 request는 데이터 소스를 query 하는 것을 포함하고 있습니다. 그리고 Data Parser를 사용해서 그 결과 data를 parsing 합니다. 그리고나서 그 모듈은 그 데이터를 template 엔진으로 pass 합니다. 이 탬플릿 엔진은 HTML,CSS, javascript 등을 사용해서 device에 결과를 출력하게 되는 것이죠.



Device Detection¶

 Kurogo의 중요한 기능중 하나는 현재 사용하고 있는 기기가 어떤 것인지 감지하는 것 입니다. 요즘의 모바일 기기들은 각각 다른 capability를 가지고 있고 그 성능도 각기 다릅니다. 그래서 현재 사용하는 디바이스를 구분해 내는 것은 유저에게 결과물을 보기 좋게 해당 디바이스로 제공하기 위해 아주 중요한 기능입니다.

Kurogo 는 pagetype과 platform에 따라 디바이스를 분류합니다. pagetype은 디바이스의 기본 capability를 기반으로해서 분류하는 겁니다. 이것은 CSS 지원이나 javascript, 이미지 처리 등의 기능에 따라 단계별로 구분 됩니다. platform은 그 디바이스가 사용하는 시스템이나 브라우저를 기반으로 분류하는 겁니다. 이러한 분류들은 해당 디바이스에 최선의 퍼포먼스를 보여주기 위해 여러 방법으로 사용됩니다. Kurogo는 이 각각의 기기별로 일반적인 유저 인터페이스 element들과 모듈들을 포함해 최선의 결과를 보여주기 위한 template과 CSS 파일의 시리즈들이 있습니다.

Customization¶

초기에 Kurogo는 customize 되기 위해 built 됐습니다. 여러분은 모듈로 어떻게 데이터를 get 하는지, 어떻게 이것을 parse 하는지 그리고 유저에게 이것이 어떻게 보여지는지에 대해 완벽하게 콘트롤 할 수 있습니다. 소프트웨어의 modular 세계는 여러분에게 어떤 단계에서든지 그 소스를 customize 할 수 있도록 개방하고 있습니다.

Data Customization¶

각각의 모듈은 여러분에게 여러분의 어플리케이션으로 data를 가져오기 위한 데이터 소스와 프로세스 방법을 선택할 수 있는 기회를 드립니다. 데이터를 retrieve하고 parsing하는 구체적인 방법을 추상화 했기 때문에 여러분의 어플리케이션은 아주 다양한 데이터 소스로 respond 할 수 있습니다. 대부분의 모듈들은 DataModel의 subclass를 사용하게 됩니다. 각 모듈은 Data Retriever라는 객체를 사용합니다. 이것은 data를 retrieve하고 Dataparser 객체를 사용해서 그 데이터를 parsing 하게 됩니다. DataParser 객체는 결과 data를 받고 그 데이터에 맞는 PHP structure를 생성합니다. configuration을 이용해서 여러분은 DataRetriever와 DataParser를 customize 할 수 있습니다. 또한 여러분 site의 데이터를 여러분만의 방식으로 다루기 위해 여러분만의 Data Retriever와 Data Parser도 만들 수있습니다.


Code Customization¶

각각의 모듈은 PHP 객체입니다. 이것은 WebModule 클래스로부터 상속됩니다. 개발자들은 직접 모듈을 생성해서 사용할 수도 있고 기존에 존재하는 것을 subclass 해서 사용할 수 있습니다. extending 할 때 여러분은 단지 특정 메소드를 override 하기만 하면 됩니다. 이렇게 함으로서 여러분은 로직이나 코딩보다도 기능이나 begavior에 집중할 수 있어서 여러분의 모듈을 독창적으로 만들 수 있도록 도와줍니다.

Output Customization¶

그 데이터가 출력되도록 준비가 됐으면 여러분은 그것을 여러분이 원하는대로 표시할 수 있는 몇가지 방법이 있습니다. 각각의 페이지는 HTML 문서로 구성돼 있습니다. 이러한 탬플릿들은 customize 될 수 있고 필요한대로 override 할 수 있습니다. 그리고 common user interface element와 각 디바이스별로 알맞게 customize 된 pieces 을 포함한 fragments들에 대한 라이브러리도 있습니다. HTML과 함께 여러분은 스타일 쉬트도 customize 하실 수 있습니다.

 


반응형


반응형

Working with classes in Sencha Touch 2.0

1. Declaration (선언)

1.1. The Old Way (옛날 방법)


만약 여러분이 Sencha Touch 1.x 버전을 사용하신다면 분명 클래스를 생성하기 위한 Ext.extend 를 잘 알고 계실겁니다.

var MyPanel = Ext.extend(Object, { ... });

이것은 다른 클래스를 상속받는 새로운 클래스를 생성할 때 손쉽게 이용할 수 있는 방법입니다. 상속하는 것 말고는 다른 클래스 생성 관점에서 보면은 그렇게 크게 유용하지는 않습니다. configuration이라던지 statics, mixins 같은 것들 말이죠. 간단하게 이런 아이템들과 관련한 사항들을 살펴보죠.

아래 샘플을 한번 보세요.

My.cool.Panel = Ext.extend(Ext.Panel, { ... });

여기서는 새로운 클래스의 네임스페이스를 사용했고 Ext.Panel을 extend 했습니다. 이 예제에서는 두가지 알아두어야 할 것들이 있습니다.

1. My.cool은 프로퍼티로서 Panel을 할당하기 전에 객체로서 존재해 있어야 합니다.
2. Ext.Panel은 이것이 참조되기 전에 존재하고 또 로드 되어 있어야 합니다.

첫번째 아이템은 대개 Ext.namespace (Ext.ns)를 사용해서 해결 합니다. 이 메소드는 object/property를 통해 재귀적으로 참조 되고 그것이 존재하지 않으면 생성합니다. 좀 성가신 일은 여러분이 Ext.extend를 사용할 때는 항상 이것을 사용해야 한다는 것이죠. 아래 예제가 있습니다.

Ext.ns('My.cool');
My.cool.Panel = Ext.extend(Ext.Panel, { ... });


두번째 이슈는 이것을 address 하기가 쉽지 않다는 것입니다. 왜냐하면 Ext.Panel 은 다른 많은 클래스들을 depend on  할 것이기 때문이죠. 다른 클래스들을 직접적이든 간접적이든 상속하니까요. 그러면 그 상속할 대상이 되는 클래스는 반드시 존재해 있어야 하겠죠. 이러한 이유 때문에 Sencha Touch 2 이전에는 ext-all.js의 모든 라이브러리의 일부분만 사용해도 이것을 통재로 include 했었습니다.

1.2. The New Way (새로운 방법)

센차 터치 2 는 클래스를 생성할 때 오직 한가지 메소드만 생각하면 되도록 부가적인 것들은 전부 제거했습니다. 그것은 Ext.define 입니다. 아주 간단한 신택스죠.

Ext.define(className, members, onClassCreated);

이 신택스의 각 부분별로 한번 살펴 보겠습니다.

- className 은 클래스의 이름입니다.
- members는 key-value 조합의 클래스 멤버 collection을 나타내는 객체입니다.
- onClassCreated는 옵션입니다. 모든 관계된 클래스가 ready 되면 invoke 하기 위한 callback 함수이죠. 또한 이 클래스 자체가 완전히 생성되면 invoke 되기도 합니다. 클래서 생성의 새로운 비동기적인 성격으로 인해  이 callback은 다양한 경우에 아주 유용하게 사용될 수 있습니다. 이 내용은 Sencha Touch 2 튜토리얼 4장에서 다시 자세하게 다뤄질 겁니다.


Example

Ext.define('My.sample.Person', {
    name: 'Unknown',

    constructor: function(name) {
        if (name) {
            this.name = name;
        }
    },

    eat: function(foodType) {
        alert(this.name + " is eating: " + foodType);
    }
});

var aaron = Ext.create('My.sample.Person', 'Aaron');
    aaron.eat("Salad"); // alert("Aaron is eating: Salad");

   
Ext.create() 메소드를 사용해서 My.sample.Person의 새로운 인스턴스를 생성했습니다. 그러려면 아마 (new My.sample.Person())을 사용해야 했겠죠. 하지만 다이나믹 로딩의 장점을 이용하기 위해서 위의 방법대로 하실것을 권장합니다. 다이나믹 로딩의 좀 더 자세한 사항은 Getting Started guide를 살펴 보세요.

2. Configuration

센차터치 2에서는 클래스가 생성되기 전에 강력한 Ext.Class 전처리 장치에 의해 진행되는 config property를 제공하고 있습니다.
이것은 아래와 같은 내용들을 제공합니다.

- configurations는 다른 클래스 멤버로부터 완전하게 캡슐화 되어있습니다.
- 각 config property의 getter와 setter 메소드들은 클래스가 생성되는 동안 이 메소드들이 따로 정의되어 있지 않으면 class prototype에 자동적으로 생성합니다.
- 각 config property에 대해 apply 메소드도 또한 생성됩니다. 자동으로 생성된 setter 메소드는 value를 setting 하기 전에 내부적으로 apply 메소드를 call 합니다.
그 value 를 세팅하기 전에 custom logic 을 run 할 필요가 있으면 config property에 apply 메소드를 override 합니다. 만약 apply가 어떤 값도 return 하지 않으면 setter는 value를 set 하지 않습니다.

아래에 예제가 있습니다.

Ext.define('My.own.WindowBottomBar', {});

Ext.define('My.own.Window', {

    /** @readonly */
    isWindow: true,

    config: {
        title: 'Title Here',

        bottomBar: {
            enabled: true,
            height: 50,
            resizable: false
        }
    },

    constructor: function(config) {
        this.initConfig(config);
    },

    applyTitle: function(title) {
        if (!Ext.isString(title) || title.length === 0) {
            console.log('Error: Title must be a valid non-empty string');
        }
        else {
            return title;
        }
    },

    applyBottomBar: function(bottomBar) {
        if (bottomBar && bottomBar.enabled) {
            if (!this.bottomBar) {
                return Ext.create('My.own.WindowBottomBar', bottomBar);
            }
            else {
                this.bottomBar.setConfig(bottomBar);
            }
        }
    }
});


아래 예제는 이것을 어떻게 사용하는지를 보여줍니다.

var myWindow = Ext.create('My.own.Window', {
    title: 'Hello World',
    bottomBar: {
        height: 60
    }
});

console.log(myWindow.getTitle()); // logs "Hello World"

myWindow.setTitle('Something New');
console.log(myWindow.getTitle()); // logs "Something New"

myWindow.setTitle(null); // logs "Error: Title must be a valid non-empty string"

myWindow.setBottomBar({ height: 100 }); // Bottom bar's height is changed to 100



3. Statics

static 멤버들은 static config를 사용해서 정의될 수 있습니다.

Ext.define('Computer', {
    statics: {
        instanceCount: 0,
        factory: function(brand) {
            // 'this' in static methods refer to the class itself
            return new this({brand: brand});
        }
    },

    config: {
        brand: null
    },

    constructor: function(config) {
        this.initConfig(config);

        // the 'self' property of an instance refers to its class
        this.self.instanceCount ++;
    }
});

var dellComputer = Computer.factory('Dell');
var appleComputer = Computer.factory('Mac');

alert(appleComputer.getBrand()); // using the auto-generated getter to get the value of a config property. Alerts "Mac"

alert(Computer.instanceCount); // Alerts "2"



Error Handling and debugging (에러 처리와 디버깅)


센차터치 2에는 디버깅과 에러 처리를 도와주는 유용한 기능이 있습니다.

메소드의 display name을 얻으려면 Ext.getDisplayName()을 사용하실 수 있습니다. 이것은 description 안에 클래스 이름과 메소드 이름을 가진 에러를 throw 할 때 유용하게 사용하실 수 있습니다.

throw new Error('['+ Ext.getDisplayName(arguments.callee) +'] Some message here');

에러가 Ext.define()을 사용해 정의된 클래스의 메소드내에서 던져졌을 때 여러분의 브라우저가 크롬(Chrome)이나 사파리(Safari) 같이 WebKit 을 사용하는 브라우저라면 call stack에 그 메소드와 클래스 이름이 표시될 겁니다.

아래에 크롬에서 보실 수 있는 에러 메세지들이 있습니다.


반응형

PhoneGap 설치하고 예제 실행하기

2012. 4. 26. 02:59 | Posted by 솔웅


반응형

오늘은 PhoneGap 을 한번 설치 해 보기로 했습니다.

저는 Hybrid App 을 Corona SDK, Sencha Touch, JQuery Mobile 을 위주로 한번 연구해 볼 생각이거든요.


거기다가 Kurogo 가 도움이 된다면 같이 한번 사용해 보고 싶고...

웹 서버쪽은 PHP 와 데이터베이스를 사용할 거고.


이런 구조로 Hybrid App 을 개발 툴 조합을 연구해 보고 있습니다.


그런데 디바이스의 Native 기능 등을 사용하기 위해 Corona SDK를 사용하느냐. PhoneGap을 사용하느냐 를 결정하려면 장단점을 알고 있어야 할 것 같아서요.


Corona SDK에 대해서는 잘 알지만 일반적으로 Hybrid App에 많이 사용되는 PhoneGap에 대해서는 전혀 몰라서 오늘 한번 설치해보고 감을 잡고자 합니다.


우선 eclipse 와 Android SDK, ADT Plugin, JAVA 등은 다 설치 되서 Native Android 앱 개발 환경은 다 완료 된 것으로 하고 PhoneGap 설치를 진행해 보겠습니다.


1. http://phonegap.com/start 로 접속을 합니다.


2. 아래 화면에서 해당 platform을 선택합니다. (저는 Android를 선택했습니다.)



3. 비디오 튜토리얼이 있네요. 이것부터 한번 볼까요?




보니까 PhoneGap 에 대해 많이 이해가 되네요.

이클립스 개발환경에서 폰갭을 설치하고 샘플 앱을 만드는 방법까지 자세히 설명을 했습니다.


4. 다음 단계는 Eclipse, Android SDK, ADT Plugin을 설치하는 단계입니다.



저는 ADT Plugin 까지 모두 설치 된 상태이기 때문에 PhoneGap 다운로드부터 하겠습니다.




이 글을 올리는 시점에는 PhoneGap 1.6.1 이 최신 버전이네요.


5. 다운받은 압축 파일을 푸니까 아래와 같은 구조네요.



lib 폴더에 android, bada, blackberry, ios, symbian, windows 같은 각 모바일 플랫폼 별 jar 파일과 js 파일이 들어있고 예제 파일도 들어있습니다.


6. 그 다음은 Android Native Language로 App을 만들 때 처럼 이클립스에서 New Android Projet를 만듭니다.


- 이클립스에서 File-New-Android Project를 선택합니다. 그리고 Project Name을 정합니다.



- 일단 버전은 2.2 를 선택하겠습니다.


- Package Name 이 빠졌으면 이 부분 넣고 Finish 버튼을 누릅니다.




7. 그 다음에는 project 폴더에 2개의 폴더를 더 추가해 넣습니다. (libs, assets/www)


8. 다음에 아까 받았던 PhoneGap 의 jar 파일을 libs에 js 파일을 www 에 복사해 넣습니다.

그리고 xml 폴더를 res 폴더 밑에 복사해 넛습니다.




9. 다음은 java 파일을 조금 수정하는데요.




위에 빨간 줄 친 부분을 바꾸시면 됩니다. (위에것 에서 아래 것으로요)


10. 다음에는 AndroidManifest.xml 파일을 수정합니다.

AndroidManifest.xml 안에서 <uses-sdk android:minSdkVersion="8" /> 코드를 찾으세요.

그리고 그 위에 아래 코드를 붙여 넣으세요.


<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true"
android:anyDensity="true"
/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />


그리고 <activity ..... > 태그에 아래 코드를 추가하세요.

android:configChanges="orientation|keyboardHidden"


그러면 대개 아래와 같은 형식이 될 겁니다.



10. 그 다음은 PhoneGap 프로그래밍을 하시면 됩니다.

www 폴더 밑에 index.html 파일을 생성하신후 아래와 같이 해 보세요.


<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap</title>
<script type="text/javascript" charset="utf-8" src="cordova-1.x.x.js"></script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>


11. 이제 실행하시면 됩니다. Ctrl + F11 을 누르시던지 프로젝트에서 오른쪽 마우스 버튼을 클릭한 후 Run As - Android Application을 실행 해 보세요.


아래 화면이 완성된 화면입니다.




처음엔 좀 복잡하네요..


하여간 이렇게 설치하고 예제를 하나 실행했더니 폰갭이 대강 이해가 갑니다.


자체적으로 jar 파일하고 js 파일을 제공해서 모바일 앱을 만들도록 하는 거네요.

각 플랫폼 마다 따로따로 개발해야 되는 번거로움이 좀 있구요.

(코로나 SDK 는 그냥 빌드만 따로 하면 되는데 말이죠.)

대신 기존 Android Native Programming 구도를 그대로 사용하는 거라서 Native 기능을 모두 사용할 수는 있겠네요.


폰갭 + JQuery, Sencha Touch를 하면 정말 많이 편리할 것 같습니다.


폰갭 공부도 좀 더 해서 폰갭 조합 하고 코로나 SDK 조합 Hybrid App 개발 둘 다 해야 겠습니다.


재밌네요...



반응형