구글이 새로운 상황인지 API, Awareness API(구글 어웨어니스 API)를 발표하였습니다.


진행 중인 프로젝트의 특성상 이 API의 정보를 살펴봐야 했기에,  먼저 Overview(개괄) 부분부터 살펴보았습니다.


아래 내용은 Awareness API overview 페이지(링크)를 번역한 내용입니다.


원본 페이지의 제목 부분은 그대로 작성하였습니다.


또한, 아래에서 등장하는 context라는 단어는 맥락이라고 번역할 수도 있었지만, 그렇게 번역했을 때 매끄럽지도 않다고 생각하고, 해당 API의 핵심 keyword라고 판단해서 굳이 번역하지 않았습니다.


오타 및 매끄럽지 않은 번역에 대한 지적은 언제나 환영합니다.


What is the Awareness API?

  • 구글 Awareness API를 사용하면, 사용자의 현재 상황에 지능적으로 반응하는 앱을 만들 수 있다.
  • Awareness API는 7개의 다른 context를 감지할 수 있으며, 앱에서 이전에는 불가능했던 방법으로 사용자 경험을 개선할 수 있다.
  • 앱에서는 이런 context 신호를 조합하여 사용자의 현재 상황을 추론할 수 있으며, 이런 정보를 이용하여 사용자가 헤드폰을 꽂고 조깅을 시작할 때 재생 목록을 추천하는 등의 개개인의 요구에 맞춘 경험을 제공할 수 있다.


Awareness API benefits


Awareness API는 여러 가지 혜택을 제공한다.

  • 구현의 용이성 : 오직 하나의 API만 앱에 추가하면 되며, 이는 통합을 매우 단순하게 하며 생산성을 향상시킨다.
  • 보다 나은 context 데이터 : 가공되지 않은 신호들은 품질 향상을 위해 가공된다. 예로, 진보된 알고리즘이 유저의 활동을 높은 적중률로 결정한다.
  • 시스템 상태의 최적화: Awareness API는 자동적으로 데이터와 배터리 사용량의 영향을 관리하며, 따라서 앱에서는 그런 작업을 수행할 필요가 없다.



Fences and snapshots


Awareness API는 2개의 구분된 API로 구성되어 있으며, 이 API를 사용하여 앱이 context 신호를 얻어서 사용자의 현재 상황을 결정할 수 있다.

  • Fence API : 앱이 유저의 현재 상황에 반응할 수 있고, 특정 context 조건의 조합이 만족되었을 때 알림을 제공할 수 있다.
    예시 : ‘사용자가 걷고 있고, 헤드폰이 꽂혀 있을 때 알려달라’
    한번 fence가 등록되면, Fence API는 앱이 실행되고 있지 않더라도 콜백을 보낼 수 있다.
  • Snapshot API : 앱이 사용자의 현재 context의 정보를 요청할 수 있다.
    예시 : ‘사용자의 현재 위치와 현재 날씨 정보를 달라’



Context types


Context는 Awareness API의 핵심이다. 

Contextual data는 위치(위도, 경도), 장소(집, 직장, 커피숍), 활동(걷기, 운전 중) 등과 같이 센서에서 전달되는 데이터를 포함한다.

이러한 기본 신호는 사용자의 상황을 좀 더 구체적으로 추론하기 위해 조합될 수 있다.
아래의 표는 Awareness API에서 제공하는 기본적인 context들에 대한 설명이다.

 Context Type

예시 

Time(시간) 

현재 시간 

Location(위치) 

위도와 경도 

Place(장소) 

장소 (장소의 유형을 포함)

Activity(활동) 

감지된 사용자 활동(걷기, 뛰기, 자전거 타기) 

Beacons(비컨) 

근처의 비컨(namespace, context, 유형 포함) 

Headphones(헤드폰)

헤드폰이 플러그인되어 있는가?

Weather(날씨) 

현재 날씨 조건 








데이터베이스 생성

mysql> create database '데이터베이스이름';


유저 생성

mysql> create user '유저이름'@'호스트' identified by '패스워드';

주의할 점은 호스트 부분이다.

만약 이 컴퓨터에서만 접속하게 하고싶다 라고 한다면

'호스트' 부분이 localhost가 되면 된다.


만약 192.168.0.0 ~ 192.168.0.255까지의 범위면 접속을 허용하겠다 라고 한다면

'호스트' 부분이 '192.168.0.%'가 되면 된다.


만약 모든 원격지에서의 접속을 허용하려면?

'호스트' 부분을 '%'로 적으면 된다.


유저에게 데이터베이스의 권한 주기

mysql> grant all on '데이터베이스이름'.* to '유저이름'@'호스트';

유저가 해당 데이터베이스에 대한 권한을 모두 얻게 된다.





MySQL 설정을 건드려줘야 한다.


$ sudo vi /etc/mysql/my.cnf

혹은 사용중인 편집기(nano 등)로 my.cnf 파일을 연다.


[mysqld] 설정에 보면

bind-address = 127.0.0.1 이라는 구문이 있는데

이를

bind-address = 0.0.0.0으로 수정해준다.(범위 지정이 가능한 것 같은데 자세히 모르겠음.)


:wq 명령어 등으로 저장하고 빠져나온다.


설정이 완료되면 MySQL을 재시작해준다.


$ sudo service mysql restart


정상적으로 연동이 되는 모습을 확인할 수 있다.




여담 보기


(C) 파일 입출력 함수 정리 (1)


프로그래밍/C/C++

Written by Kuhave on 2009.12.26 20:41


파일 입출력 함수 정리

1. fopen 함수
 (1) 코드

#include 
FILE* fopen(const char *, const char*)

 (2) 함수 설명
 - 파일을 불러들이는 함수이다.

 (3) 함수 인수 설명
 - 첫 번째 : 파일의 이름
   두 번째 : 파일의 개방 모드

 모드 첫번째  의미 파일이 없으면   파일이 있으면
 r  읽기 (Read)  NULL 포인터 반환  정상 동작
 w  쓰기 (Write)  새 파일 생성  이전 파일 삭제
 a  추가 쓰기 (Append)  새 파일 생성  이전 파일 뒤에 추가
 r+  읽기와 쓰기  새 파일 생성  정상 동작
 w+  읽기와 쓰기  새 파일 생성  이전 파일 삭제
 a+  추가를 위한 읽기와 쓰기  새 파일 생성  이전 파일 뒤에 추가


 모드 두번째  의미  차이  특징
 t  텍스트(text) 모드  \r이 \r\n으로 변환됨.  기본 모드
 b  이진(binary) 모드  아무 변화 없음.   -

 (4) 리턴값 설명
 - 파일 포인터를 리턴한다.
   r 모드에서 파일이 없을 시 NULL 포인터를 리턴한다.


2. fclose 함수
(1) 코드
#include 
int fclose(FILE* fp);

(2) 함수 설명
- 파일을 닫는 함수이다.

(3) 함수 인수 설명
 - FILE* fp : 닫을 파일의 파일 포인터를 전달한다.

(4) 리턴값 설명
 - 잘 닫힌 경우 0(NULL)을 리턴한다.

3. 예시

#include 
int main(int argc,char** argv)
{

char* sFileName = "test.txt";
FILE* fp = fopen(sFileName, "r");
if(fp==NULL)
{
printf("File Open Error!!");
}

//코드 생략

fclose(fp);

}

'프로그래밍 > C/C++' 카테고리의 다른 글

(C) 파일 입출력 함수 정리 (1)  (0) 2009.12.26
[펌] #pragma 키워드 알기  (0) 2009.11.26

실행 파일 다운로드


드래그, 부대지정 액션을 한번 꾸며 보았다.

기능은 드래그(드래그), 부대지정(컨트롤 + 숫자1~0) , 불러오기(숫자 1~0) , 움직이기(오른쪽 마우스 클릭) 이 3가지다.

조만간 팀 프로젝트로 전략시뮬게임을 만들 건데 예행 연습(?)을 했다.
부대 지정이 되어야 전략 시뮬이고 뭐고 만들 것 아닌가....


이것을 짜면서 배운 것 : SDL에도 isKeyDown 비슷한 기능을 하는 함수가 있다는 것을 알게 되었다.
단지 키에 따라 적용 방법이 매우 다른 것 뿐...

여튼 만족 ^^;

'프로그래밍 > SDL' 카테고리의 다른 글

(C++ / SDL) 드래그 & 부대지정 프로그램  (0) 2009.12.15
점을 움직이는 프로그램(C++)  (0) 2009.11.26

점을 움직이는 프로그램(C++)


프로그래밍/SDL

Written by Kuhave on 2009.11.26 16:11

 실행 파일 다운로드 링크


사용자 삽입 이미지


점을 움직이는 프로그램이다.

관성의 유무,중심점 주위에 도는 검은 점 등등을 설정 가능함.

수행평가용으로 만든 프로그램이었지만 어느 순간 강화하고있는 나를 발견(..)했다.




삼각함수의 위대함을 알게 되었다.
역시 수학적 사고력이 중요한 게야...



결론: 매우 뿌듯(^_^;;)

'프로그래밍 > SDL' 카테고리의 다른 글

(C++ / SDL) 드래그 & 부대지정 프로그램  (0) 2009.12.15
점을 움직이는 프로그램(C++)  (0) 2009.11.26

[펌] #pragma 키워드 알기


프로그래밍/C/C++

Written by Kuhave on 2009.11.26 15:53

#pragma 키워드는 컴파일러 제작 회사가 특정 플랫폼에 의존하는 기능을 확장하기위해 기능을 추가한 키워드이다.

해당 컴파일러가 지시명을 인식하지 못한다면 에러 또는 경고 메세지를 수반하지 않고서 #pragma의 지시를 무시하게  된다.


#pragma 옵션

  옵션

  설명

 allock_text

 

 comment

 코드 안에 특별한 주석을 기입함

 init_seg

 

 optimize

 

 auto_inline

 

 component

 

 inline_depth

 

 pack

 변수 정렬을 인위적으로 변경

 bss_seg

 

 data_seg

 다른 파일에서 데이터를 공유하고자할때

 inLine_recursion

 

 pointers_to_members

 

 check_stack

 

 function

 

 intrinsic

 

 setlocale

 

 code_seg

 

 hdrstop

 

 message

 컴파일시 메시지를 출력함

 vtordisp

 

 const_seg

 

 include_alias            

 

 once

 해당 파일이 한번만 포함

 warning

 컴파일러 경고 메시지를 만들거나 안보이게 함

 link

 실행화일에 파일을 링크


#pragma once

ex> #pragma once

전처리기가 이 행을 처리하려고 할 때, 이 파일은 오직 한 번 추가되어야 한다는 것을 알게 된다.


#pragma pack

ex>

#pragma pack(n)   //n으로 정렬방식을 바꾼다.

#pragma pack()     //Default 정렬방식을 바꾼다.

#pragma pack(push, n) //n의로 정렬 방식을 바꾸고 기존정렬방식을 스택에 저장한다.
#pragma pack(pop)       //스택에 저장한 정렬방식으로 다시 돌린다.


pack 지시자는 이 후 부터 선언되는 구조체의 정렬 방식을 지정하는 것이다. n은 컴파일러가 저장된 메모리에 데이터를 정렬하는 방법을 결정하는 byte의 크기이다.


ex>

#pragma pack(1)

typedef struct _TEST_STRUCT
{
    char CharValue;    //1byte
    char CahrValue2;  //1byte
    int  IntValue;         //4byte
    char* pCharValue; //4byte
    int* pIntValue;       //4byte

} TEST_STRUCT, *PTEST_STRUCT;
#pragma pack()

위 구조체를 sizeof() 로 구조체의 크기를 알아보면 문제가 있음을 알 수 있다. 위 구조체의 크기는 14byte이다. 하지만 sizeof()로 크기를 알아보면 16byte로 나타나는 것을 알 수 있다. 이 떄 pack을 사용하면 빈공간 없이 14byte로 구조체가 선언된것을 알 수 있다.


#pragma warning

ex>

#pragma warning (disable:4101)   // 경고를 무시하도록 한다.

#pragma warning (once:4101)      // 4101경고를 한 번만 출력한다.

#pragma warning (error:4700)       // 경고 대신 에러를 출력한다.

#pragma warning (3:4706)            // 4706번 경고를 레벨 3으로 올린다.

이 지시자는 컴파일시 나오는 경고를 설정한다. 이것으로 매 컴파일 마다 나오는 경고를 없애거나 한번만 나오게 할 수있다.

제어문

설명

once : 번호

반복되는 경고를 번만 출력한다.

default : 번호

원래 설정대로 되돌린다.

disable : 번호

경고를 출력하지 않는다.

error : 번호

경고를 에러로 처리한다.

level : 번호

경고의 레벨(1~4) 변경한다.

push[,n]

모든 경고의 레벨을 저장한다. n 있을 경우 저장과 동시에 전역 경고 레벨을 n으로 변경한다.

pop

스택에 마지막으로 저장된 경고 레벨을 복원한다.

 
#pragma comment
ex>
#pragma comment(lib, "d3d8.lib")
 
이 지시자는 해당 옵션에 따라 다양한 주석문 및 문자를 코드에 추가한다.

  옵션

  설명

 lib

 코드 내에서 명시적으로 라이브러리의 링크를 지정해준다

 exestr

 기록된 string 실행파일 내부에 기록되어지며, 이것은 결코 메모리로 load되지 않는다. 다만 파일 검색 유틸리티를 사용하여 실행파일에서 string 찾아볼 수 있다.

 user

 ".OBJ" file string을 기록합니다. 하지만 linker에 의해 string은 무시되어집니다. object 파일에만 그 내용이 남게 됩니다.

 
#pragma data_seg
ex>
#pragma data_seg(".mine$a")  //.mine 명으로 공유, Section 이름은 8자 또는 그 이하로 해야한다.
int g_nCount1 = 0;
#pragma data_seg(".mine$z")  //'$' 기호 전에 동일 이름인 섹션들은 한 개의 섹션으로 통합이 된다. 여기서 통합의 순서는
                                               '$'다음의 문자 정렬로 순서를 결정한다.
int g_nCount2 = 0;
#pragma data_seg()               //Default로 복원
 
 #pragma comment( linker, "/SECTION:.mine, RWS" )  // R:Read, W:Write, S:Shared
 
우선은 공유할 데이터(변수)를 Global 변수로 선언하고 #pragma data_seg를 위와 같이 추가한 다음 Linker 코드를 추가하면 g_nCount1과 g_nCount2데이터를 DLL 외부에서 공유할 수 있게 된다.

#pragma link

ex>

#pragma comment( linker, "/SECTION:.SHAREDATA, RWS" )  // R:Read, W:Write, S:Shared

이 지시자는 실행파일에 해당 파일을 Link 시킨다.

옵션

 설명

/ALIGN:number

Specifies the alignment of each section

/BASE:{address | @filename,key}

Sets a base address for the program

/COMMENT:["]comment["]

Inserts a comment string into header

/DEBUG

Creates debugging information

/DEBUGTYPE:CV
/DEBUGTYPE:COFF
/DEBUGTYPE:BOTH

Creates particular formats of debugging information

/DEF:filename

Passes a module-definition (.DEF) file to the linker

/DEFAULTLIB:library

Searches specified library when resolving external references

/DELAY

Controls the delayed loading of DLLs

/DELAYLOAD

Causes the delayed loading of the specified DLL

/DLL

Builds a DLL

/DRIVER[:UPONLY]

Creates a Windows NT kernel mode driver

/ENTRY:function

Sets the starting address

/EXETYPE:DYNAMIC

Builds a virtual device driver

/EXPORT

Exports a function

/FIXED[:NO]

Creates a program that can be loaded only at its preferred base address

/FORCE[:{MULTIPLE|UNRESOLVED}]

Forces link to complete in spite of unresolved or multiply defined symbols

/GPSIZE:#

Specifies the size of communal variables for MIPS and Alpha platforms

/HEAP:reserve[,commit]

Sets the size of the heap in bytes

/IMPLIB:filename

Overrides the default import library name

/INCLUDE:symbol

Forces symbol references

/INCREMENTAL:{YES|NO}

Controls incremental linking

/LARGEADDRESSAWARE

Tells the compiler that the application supports addresses larger than two gigabytes.

/LIBPATH:path

Allows the user to override the environmental library path

/LINK50COMPAT

Generates import libraries in Visual C++ Version 5.0 format

/MACHINE:{IX86|ALPHA|ARM|MIPS|MIPSR41XX|PPC|SH3|SH4}

Specifies the target platform

/MAP

Creates a map file

/MAPINFO:{EXPORTS|FIXUPS|LINES}

Includes the specified information in the map file

/MERGE:from=to

Combines sections

/NODEFAULTLIB[:library]

Ignores all (or specified) default libraries when resolving external references

/NOENTRY

Creates a resource-only DLL

/NOLOGO

Suppresses startup banner

/OPT:{REF|NOREF|ICF[,iterations]|NOICF}

Controls LINK optimizations

/ORDER:@filename

Places COMDATs into the image in a predetermined order

/OUT:filename

Specifies the output file name

/PDB:filename

Creates a program database (.PDB) file

/PDBTYPE:{con[solidate]|sept[ypes]}

Specifies where to store the Program Database (PDB) debug type information.

/PROFILE

Enables profiling (creates a mapfile)

/RELEASE

Sets the checksum in the .EXE header

/SECTION:name,attributes

Overrides the attributes of a section

/STACK:reserve[,commit]

Sets the size of the stack in bytes

/STUB:filename

Attaches an MS-DOS stub program to a Win32 program

/SUBSYSTEM:{CONSOLE|WINDOWS|NATIVE|POSIX|WINDOWSCE} [,major[.minor] ]

Tells the operating system how to run the .EXE file

/SWAPRUN:{NET|CD}

Tells the operating system to copy the linker output to a swap file before running it

/VERBOSE[:LIB]

Prints linker progress messages

/VERSION:major[.minor]

Assigns a version number

/VXD

Creates a virtual device driver (VxD)

/WARN[:level]

Specifies warning level

/WS:AGGRESSIVE

Aggressively trim process memory



출처 : http://blog.naver.com/pointer98?Redirect=Log&logNo=150036254090

허락없이 퍼 와서 죄송합니다.
문제가 된다면 자삭하겠습니다.

'프로그래밍 > C/C++' 카테고리의 다른 글

(C) 파일 입출력 함수 정리 (1)  (0) 2009.12.26
[펌] #pragma 키워드 알기  (0) 2009.11.26