2019년 3월 2일 토요일

- Defining Plugins | Qt Core 5.12


<QtPlugin> - Defining Plugins

<QtPlugin> 헤더 파일은 플러그인들을 정의하기 위한 매크로들을 정의합니다. More...
Macros

Q_DECLARE_INTERFACE(ClassName, Identifier)
Q_IMPORT_PLUGIN(PluginName)
Q_PLUGIN_METADATA( ...)

Macro Documentation

Q_DECLARE_INTERFACE(ClassName, Identifier)

이 매크로는 주어진 Identifier (문자열 리터럴)를 ClassName이라는 인터페이스 클래스에 연결합니다. 식별자는 고유해야합니다. 예를 들어:
#define BrushInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface/1.0"

Q_DECLARE_INTERFACE(BrushInterface, BrushInterface_iid)
이 매크로는 일반적으로 헤더 파일의 ClassName에 대한 클래스 정의 바로 다음에 사용됩니다. 자세한 내용은 Plug & Paint 예제를 참조하십시오.
Q_DECLARE_INTERFACE를 네임 스페이스에 선언 된 인터페이스 클래스와 함께 사용하려면 Q_DECLARE_INTERFACE가 네임 스페이스 안에 있지 않은지 확인해야합니다. 예를 들어:
namespace Foo
{
struct MyInterface { ... };
}

Q_DECLARE_INTERFACE(Foo::MyInterface, "org.examples.MyInterface")

Q_IMPORT_PLUGIN(PluginName)

이 매크로는 PluginName이라는 플러그인을 가져옵니다.이 플러그인은 Q_PLUGIN_METADATA()를 사용하여 플러그인의 메타 데이터를 선언하는 클래스의 이름과 일치합니다.
이 매크로를 응용 프로그램의 소스 코드에 삽입하면 정적 플러그인을 사용할 수 있습니다.
Example:
Q_IMPORT_PLUGIN(qjpeg)
응용 프로그램이 빌드 될 때 정적 플러그인도 링커에 포함되어야합니다. Qt의 미리 정의 된 플러그인의 경우 QTPLUGIN을 사용하여 필요한 플러그인을 빌드에 추가 할 수 있습니다. 예를 들어:
TEMPLATE = app
QTPLUGIN += qjpeg qgif # image formats

Q_PLUGIN_METADATA( ...)

이 매크로는이 개체를 인스턴스화하는 플러그인의 일부인 메타 데이터를 선언하는 데 사용됩니다.
매크로는 객체를 통해 구현 된 인터페이스의 IID를 선언하고 플러그인의 메타 데이터가 들어있는 파일을 참조해야합니다.
Qt 플러그인의 소스 코드에는이 매크로가 정확히 하나 있어야합니다.
Example:
class MyInstance : public QObject
{
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDummyPlugin" FILE "mymetadata.json")
};
자세한 내용은 Plug & Paint 예제를 참조하십시오.
이 매크로가 나타나는 클래스는 기본 구성 가능해야합니다.
FILE은 선택적이며 json 파일을 가리 킵니다.
json 파일은 빌드 시스템이 지정한 include 디렉토리 중 하나에 있어야합니다. moc는 지정된 파일을 찾을 수 없을 때 오류와 함께 종료합니다.
이 함수는 Qt 5.0에서 처음 소개되었습니다.

2018년 6월 17일 일요일

Oreo 특성 vs Nougat


1. Picture-in-Picture 모드
2. 자동 채우기 프레임 워크
3. 공유 환경 설정에 대한 학습
4. 캐시 된 데이터에 대한 앱 별 디스크 공간 할당량 관리를 통한 공간 확보 메커니즘
5. NAN(Neighbor Awareness Networking) 지원
6. 화면의 기본 종횡비가 없어짐
7. multi-display support
8. 포인트 캡처
9. Project Treble
10. 알림 처리방식 변경
11. 오디오 subsystem 개선사항(추가 블루투스 코덱 지원, 오디오 포커스 처리 방법 변경)
12. Downloadable fonts와 adaptive icons
13. 블루투스5 지원

[참고]
https://www.androidauthority.com/android-oreo-vs-android-nougat-introduction-794696/

2017년 12월 23일 토요일

[STAN] Structure Analysis for Java > Tasks > Switching between Flat Packages and Package Trees

Switching between Flat Packages and Package Trees

자바의 패키지 컨셉은 클래스를 높은 레벨 구성단위로 그룹핑하는 기본적인 방법이다. 그러나 패키지 구조 또한 트리를 구성한다. 예를 들어, com.stan4j.db와 com.stan4j.ui 패키지는 com.stan4j의 sub-packages 이다. 이를 고려해서 STAN은 flat packages를 Flat Packages와 Package Tree 모드 사이를 토글하도록 해준다.
Java's package concept is the basic way for grouping classes into higher level units. However, the package structure also builds a tree. For example, the packages com.stan4j.db and com.stan4j.ui are sub-packages of package com.stan4j. To take this into account, STAN allows you to toggle between the flat packages Flat Packages and Package Tree modes.
  • Flat package 모드에서 STAN 완전히 super와 sub-package 관계를 무시한다. 모든 패키지들은 explorer tree 상에서 동일한 레벨로 보인다.
  • Package Tree 모드에서는 STAN은 super/sub-package 관계를 유지한다. Structure Explorer는 "normal" 패키지를 말단으로해서 전체 package 계층을 보여준다.
    • package tree는 package 뿐만 아니라 서브트리를 포함하는 package tree를 의미한다.
    • folder는 subtree 노드들만 포함하는 package tree를 의미한다.
    • leaf package는 말단 패키지를 의미한다.

Flat 대 Tree switch는 Structure Explorer에 여양을 주지는 않는다. 그 switch는 STAN이 전역적으로 다른 구조 모델을 사용하게 해준다. 그러므로, toggle은 또한 다른 뷰에서 무엇이 보이는지 무엇이 보이는지에 대해 암시를 갖는다. 예를들어
The Flat versus Tree switch does not only affect the Structure Explorer. Rather, it makes STAN use the different structure models globally. Therefore, the toggle also has implications on what is shown in other views. For example,
  • 패키지를 위한 Dependency Landscape는 다른 (flat) 패키지나 package trees 에 의존할 것이다.
  • Composition View는 오직 flat package 모드에서만 모든 package들을 포함하는 (flat) package dependency graph를 보여줄 것이다.
  • Couplings View는 오직 package tree 모드에서만 package tree node들을 사용할 것이다.
  • Query View와 Violations View는 flat package mode에서 package tree rows를 gray out 시킬 것이다.

[STAN] Structure Analysis for Java > Tasks > Using the Structure Explorer

Using the Structure Explorer

Structure Explorer는 STAN의 주요 선택 도구이다. Structure Explorer는 인공물 관리 계층을 보여둔다. 인공물을 선택하면 그것이 현재 노드가 된다: 모든 다른 뷰들은 해당 노드에 대응되는 컨텐츠를 보여줌으로써 이를 반영한다.
explorer의 root node는 전체 project/application에 대응된다. root의 컨텍스트 메뉴는 Properties 아이템을 포함하는데 이는 application properties 다이얼로그를 열어준다(단축키는 ALT+ENTER).
만약 분석이 클래스를 제외하면, 이들은 root와 분리되어 "Filtered Classes"로 라벨링되어 보여진다.

Refresh 컨텍스트 메뉴 아이템을 사용하여(또는 explorer가 활성화된 상태에서 F5를 누른다) 분석을 재실행한다. 이는  밑에 포함된 리소스들이 디스크 상에서 변경되었다면 유용하다(클래스 파일들과 JAR들)

인공물들은 인공물 자체나 그것의 자식들중 하나가 특정 측정 기준으로 등급이 지정되는 경우 에러 마크를 보여준다. 경고 표시는 인공물이나 그것의 자식을 위한 최악의 등급이 주황색 범위에 빠지게 됨을 가리킨다. 결과적으로 에러나 경고가 없는 인공물들은 측정 기준을 위반하지 않고 있다는 것을 의미한다.

Excluding/Including Artifacts from the Structure Explorer

패키지 트리의 경우 평범한 패키지들과 클래스들은 Exclude 아이템 항목을 포함하는 컨텍스트 메뉴를 포함한다. Explorer로부터 인공물을 제외하는 것은 자동적으로 적절한 exclusion 패턴을 추가하고 분석을 재가동함으로써 어플리케이션 특성들을 변경할 것이다.

Note
Application properties를 열고 Filter tab으로 가서 현재 활성화된 패턴 리스트들을 손수 관리할 수 있다. 필터 패턴에 대한 더 많은 정보는 Specifying Class Filter Patterns를 참고해라.

필터링된 클래스들은 grayed-out icons으로 분리된 root 밑에 보여진다. 명확하게 제외된 패키지 트리들, 평범한 패키지들 그리고 클래스들은 In-out 마커로 장식되고 컨텍스트 메뉴의 Include로 다시 포한될 수 있다(부모가 제외되었을 때는 제외된다)

Warning
필터 패턴들은 어플리케이션 전체 영역이다. Thus, using the Exclude menu item while in Show Libraries mode may cause artifacts from other libraries be excluded as well (e.g. when excluding a package that extends over several libraries.

Linking the Structure Explorer with Views

synched Link with View button은 explorer와 뷰를 연결하는데 사용된다. 이 모드에서,
The synced Link with View button is used to link the explorer to views. In this mode,
  • Composition View에서 artifact를 탐색하는 것은 그 artifact를 현재 노드로 만들 것이다.
  • Couplings View에서 artifact를 탐색하는 것은 그 artifact를 현재 노드로 만들 것이다.

Structure Treemap

Structure Explorer가 활성화되었을 때(포커스를 가지고있는) OverView는 트리맵으로써 현재 노드 현재 노드에 뿌리를 둔 서브트리를 형상화해준다. 트리맵 셀을 더블 클릭하면 explorer에서 대응되는 노드가 선택되고 그것이 새로운 현재 노드가 된다.

  • 트리맵 셀의 색깔은 artifact 타입에 대응된다.(예를 들어, 클래스는 녹색, 인터페이스는 분홍색이다)
  • 트리맵 셀의 사이즈는 artifact에 포함된 코드의 양을 가리킨다.

[STAN] Structure Analysis for Java > Tasks > Analyzing Code > Setting Analysis Preferences

Setting Analysis Preferences

Analysis Preference 페이지는 Level of Detail과 Exclusion Patterns을 위한 기본값을 명세하게 해준다.(Specifying Class Filter Patterns을 보아라).
새로운 analysis를 설정할 때, preferences를 초기값으로 취하게 된다.

[STAN] STAN - Structure Analysis for Java > Tasks > Analyzing Code > Specifying Class Filter Patterns

Specifying Class Filter Patterns

Class filters는 분석을 형성하는 라이브러리들로부터 클래스의 부분집합들을 조정게 해준다. 두가지 종류의 필터가 있다.
  • Inclusions 특정 클래스들이 분석되게 하는 규칙을 명세하는 Ant-style 패턴들의 부분집합으로 주어질 수 있다. 만약 inclusions이 정의되지 않았다면 기본 패턴이 적용된
  • Exclusions 틀정 클래스들이 무시되도록 하는 규칙을 명세하는 Ant-style 패턴의 집합이 주어질 것이다.
만약 클래스가 적어도 하나의 inclusion 패턴에 매칭되고 어떤 exclusion 패턴에 매칭되지 않는다면 클래스는 분석의 부분이 된다.
패턴은 패스 구분자로 점'.' 대신에 슬래시'/'를 사용한다. 다음의 와일드카드들이 사용가능하다:

  1. ? 는 하나의 캐릭터와 매칭된다(드물게 사용된다)
  2. * 는 '/'를 포함하지 않는 연속된 캐릭터와 매칭된다.
  3. ** 는 어떤 캐릭터들과도 매칭된다.
패턴을 쉽게 사용하기 위해서는 몇몇 standard pattern 타입들과 일치시키자:

  1. "/*"으로 끝나고 어떤 와일드카드를 포함하지 않는다면 하나의 패키지와 매칭된다. 예를 들어 com/foo/bar/* 는 com.foo.bar 패키지의 모든 클래스들과 매칭된다.
  2. "/**"으로 끝나고 어떤 와일드카드를 포함하지 않는다면 패키지 트리와 매칭된다. 예를 들어, com/foo/bar/**는 com.foo.bar 패키지 트리로부터의 모든 클래스들과 매칭된다.  com.foo.bar.baz 등등.
  3. 어떤 와일드 카드도 없는 패턴은 하나의 클래스와 매칭된다(inner class를 포함하여). 예를 들어 com/foo/bar/Baz는 com.foo.bar.Baz와 com.foo.bar.Baz$1과 같은 중첩 클래스와 매칭된다.
위의 표준 타입의 패턴들은 만약 Structure Explorer로부터 인공적으로 제외되지 않는다면 자동으로 분석에 적용된다. 우리는 complex patters으로서 표준 타입과 매칭되지 않는 패턴들을 참조한다. complex patterns의 예는 다음과 같다.
Patterns of the above standard types are automatically applied to the analysis if you exclude artifacts from the Structure Explorer. We refer to patterns that do not match the standard types as complex patterns. Examples for complex patterns are:
  • **/test/** 는 "test" 세그먼트를 포함하는 패키지명의 모든 클래스들과 매칭된다. 
  • **/Test* 는 "Test"로 시작하는 모든 package 내의  클래스들과 매칭된다.
새로운 분석을 생성할 때, 기본 inclusion 패턴은 라이브러리와 기본 exclusion 패턴으로부터 모든 클래스들과 매칭한다.(이 패턴은 inclusion pattern 리스트에는 표시되지 않는다)

2017년 12월 22일 금요일

[STAN] Structure Analysis for Java > Tasks > Analyzing Code > Selecting Libraries

Selecting Libraries


Library Page는 분석의 코드 베이스를 형성하는 라이브러리의 리스트를 유지한다.

  • JAR 파일들을 추가하기 위해 Add JARs... 버튼을 누른다.
  • 클래스 폴더를 추가하기 위해 Add Foldr... 버튼을 누른다.
Up과 Down버튼은 라이브러리 아이템들의 순서를 정렬하기 위해 사용할 수 잇다. Structure Explorer은 Show Libraries 모드에서 이 순서대로 라이브러리들을 보여준다. 선택된 아이템을 제거하려면 Remove button을 사용한다.