'開發 - Computer/Interest'에 해당되는 글 16건

  1. 2010.10.26 Developer Guidelines - Intel AppUp developer program
  2. 2010.10.07 UTF-8 URL Decode to MFC CString
  3. 2010.06.14 C에서 함수의 다형성 사용하기
  4. 2009.10.13 IPC(Inter Process Communication)
  5. 2009.10.04 Google PageRank
  6. 2009.05.22 퀵소트

원문: http://appdeveloper.intel.com/en-us/article/developer-guidelines

Intel AppUpSM developer program 


Developer Guidelines

Submitted by Community Admin on 14 Sep 2009 12:58:40

 

아래는 인텔 AppUpSM 개발자 프로그램을 위한 개발 가이드라인과 제출 요구사항의 개요입니다.

 

Application/Component Requirements Summary

l       코드는 Validation Guidelines 문서의 표준을 만족시켜야 합니다.

l       개발을 가속하고 Validation Process 중에 거부되는 위험을 줄이기 위해, Developer Catalog 있는 컴포넌트의 사용을 권장합니다.

l       오픈소스 애플리케이션을 제외하고, Intel AppUp 개발자 프로그램 SDK 사용해야 합니다.

l       SDK 함께 제공되는 API 지시사항에 부합하게 GUID 사용하시오.

l       코드를 제출하기 전에 면밀히 검사하시오. Mobiln* OS 위해 개발을 한다면, Moblin.org에서 구할 있는 Moblin 준수 테스팅 도구를 사용하시오.

l       애플리케이션을 제출할 , 제출 지시사항을 따르고, 제출 양식에 적절하고 정확한 정보를 적어 제출하시오.

 

Validation Requirements

몇몇의 하시오 하지 마시오 성공적인 검증(Validation) 작업을 준비하는데 도움이 것입니다. 검증 작업에 대해 자세한 정보를 원한다면, Validation Guidelines Validation Process 문서를 보고, Application Readiness Checklist 또는 Component Readiness Checklist 보시오.

 

애플리케이션:

l       다른 회사들의 트레이드 마크들의 사용 권한을 갖고 있는지 보장하시오.

l       애플리케이션을 배포할 권한이 있는지 보장하시오. 오픈소스 애플리케이션만 소스코드를 제출해야 합니다.

l       애플리케이션이 제대로 인스톨되고 동작하며 깨끗하게 제거되는지 보장하시오.

l       UI 깨끗하고 일관성 있는지 보장하시오.

l       애플리케이션을 제출할 적절히 평가하고, 제출 양식에 모든 요구 기준을 포함시키시오.

l       다른 소프트웨어나 네트워크에 해를 끼치는 동작을 허용하지 마시오.

l       사용자의 명시적인 동의 없이 개인 정보를 요구하거나 이용하는 동작을 허용하지 마시오.

l       불쾌한 컨텐츠를 포함시키지 마시오.

l       앱스토어 외부의 판매나 업그레이드, 구매유도를 위한 팝업이나 광고를 포함시키지 마시오.

 

컴포넌트:

l         라이센스 문서를 첨부하시오.

l         API 기술하시오.

l         컴포넌트의 추가 테스트를 위한 적절한 정보를 첨부하시오.

 

How We Test

1.      설치 패키지가 올바른 형식인지 검사합니다.

2.      패키지를 설치합니다.

3.      애플리케이션에 우리의 검증 표준 테스트를 합니다.

4.      깨끗한 제거를 확인하기 위해 애플리케이션을 제거합니다.

Posted by 배트
,
Some source codes which conduct URL decoding are awful!!
Most of them cannot process a UTF-8 encoded 3 bytes character. (frankly, I'm not good at web search.)
One more frankly, I can't guarantee it works well. Sorry all. :-)

CString URLDecode( CString strEncodedText )
{
CString strResult;
wchar_t ch0, ch1, ch2;
wchar_t wch;
TCHAR tch;
int i = 0;

while( i<strEncodedText.GetLength() )
{
tch = strEncodedText.GetAt(i);
if( tch != _T('%') )
{
// a character not encoded
strResult += tch;
i++;
}
else
{
// a character encoded !!
ch0 = _tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 );
i += 3;

if( ch0 < 0x80 )
// 1 byte for UTF-8
// 0xxx xxxx
wch = ch0;
else
{
if( strEncodedText.GetAt(i)!= _T('%') ) // Error!
continue;

ch1 = _tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 );
i += 3;

if( ch0 < 0xe0 )
{
// 2 byte for UTF-8
// 110x xxxx 10xx xxxx
wch = ((ch0&0x1f)<<6)
| (ch1&0x3f);
}
else
{
// 3 byte for UTF-8
if( strEncodedText.GetAt(i)!= _T('%') ) // Error!
continue;

ch2 = _tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 );
i += 3;

// 1110 xxxx 10xx xxxx 10xx xxxx
wch = ((ch0&0x0f)<<12)
| ((ch1&0x3f)<<6)
| (ch2&0x3f);
}
}
strResult += wch;
}
}

return strResult;
}
Posted by 배트
,
c를 사용하면서 함수의 다형성을 사용하려면

.c/.cc/.ccp에서 변수와 함수를 static으로 정의한 다음,
static이 아닌 함수 포인터를 정의하여 static 함수의 주소를 기록하고
외부에서는 함수 포인터로 static 함수에 접근한다.

함수 포인터 이름은 고유해야 하며,
어떤 함수 주소를 담느냐에 따라 다형성을 구현할 수 있다.
여러 사람이 모듈별로 코딩 할 때는 나름 유용할 수도...

....에효. 꼭 이러지 않아도 될 듯;;;
Posted by 배트
,
IPC(Inter Process Communication)
    스레드 간에 데이터를 주고받기 위한 기술들.
    스레드는 다른 프로세스, 또는 다른 PC에 위치할 수 있다.

    분류: message Passing, Synchronization, Shared Memory, RPC(Remote Process Calls)
    목적: 자료 공유, 연산 속도 향상, 모듈성, 편의성

기법
    File
        달리 할 말이 없네
    Signal
        POSIX 시스템에서 주로 사용하는 IPC. 프로세스에 비동기 Notification을 날리는 방식.
        시그널 발생하면 OS는 프로세스의 동작을 멈추고 시그널 핸들러를 실행.
        디폴트 시그널 핸들러를 실행하거나 프로세스가 정의하고 등록한 핸들러를 실행할 수도 있음.
        문제점 정리는 귀찮아서 스킵.
        사용자 정의 시그널 핸들러 (다른 방식도 있는데...써본 적도 없고 귀찮기도 하고)
            void my_handler (int signum) { ... }
            void main() {
               ...
               signal( SIGBREAK, SIG_IGN );
               if( signal( SIGTERM, my_handler )== SIG_IGN )
                   signal( SIGTERM, SIG_IGN );
               ...
            }

    Socket
        TCP/UDP, IP를 위해 소켓을 쓰기도 하지만…소켓은 원래 IPC를 목적으로 만들어졌음.
        로컬 IPC로 쓰려면 socket() 함수의 첫 번째 인자(domain)를 PF_UNIX로.

    Message Queue
    Pipe
        POSIX 시스템 지원

    Named Pipe
        POSIX, Window 시스템 지원

    Semaphore
        POSIX 시스템 지원

    Shared Memory
        POSIX 시스템 지원

    Message Passing
        병렬프로세스, 분산컴퓨팅과 같은 분야에 주로 사용. 물론 직접 만져본 적이 없다.

    Memory-Mapped File


Windows IPC
    Clipboard
    COM
    Data Copy
    DDE
    File Mapping
    Mailslots
    Pipes
    RPC
    Windows Sockets


Threads Synchronization
    윈도우에서 제공하는 스레드 동기화를 방법으로는-
    이벤트, 크리티컬 섹션(단일프로세스), 뮤텍스(멀티프로세스), 세마포어가 있음.
Posted by 배트
,

키워드: PageRank, 페이지랭크, Search Engine, 검색엔진, Link Analysis, 링크분석, Random Surfer Model, 랜덤서퍼모델

 

페이지랭크

페이지랭크(PageRank)는 스탠포드 대학교의 래리 페이지와 세르게이 브린 개발하여 학계에 발표한 후에, 구글(Google) 검색 엔진에 사용된 링크 분석 알고리즘이다. 검색된 문서는, 이 페이지랭크를 이용해 정렬되어 사용자에게 보여진다. 이는 웹에 있는 모든 객체에 연결된 하이퍼링크, 참조 빈도, 중요도를 분석하여 각 객체에 가중치를 부여하는 방식으로, 검색어의 출현 빈도에 따라 문서에 중요도를 부여하는 기존의 알고리즘들과 구분된다. 여기서 각 객체는 E라고 표기하고, 객체에 부여된 가중치는 ‘E의 페이지랭크로 부르며, PR(E)로 표기한다. 페이지랭크는 보통 주기적으로 갱신되며, 저장되어있는 PR(E) 값이 사용자 쿼리 시간에 참조된다.

페이지랭크에서 링크를 분석하고 각 객체의 중요도를 평가하는 방법은 다른 객체에서의 참조를 기반으로 한다. 객체 B가 객체 A를 중요하다고 판단하고, 객체 A를 중요하다고 여기는 객체가 많을수록 전체 인터넷에서 객체 A의 중요도는 점점 커진다. 이 중요도는 객체간 하이퍼링크로 판단을 할 수 있다. , 유입 링크(Incoming Link)가 많은 객체일수록 더 중요한 객체인 것이다.

 

알고리즘

페이지랭크는 사용자가 특정 웹 페이지에 있는 하이퍼링크를 임의로 클릭하여 이동한다고 가정한다. 이를 랜덤 서퍼 모델(Random Surfer Model)이라고 한다. 다른 페이지로 이동하면 이동하기 전의 객체의 페이지랭크를 이동하는 다른 페이지로 분배하게 된다. 모든 E에 대해, PR(E)의 합은 1 , 이다. 이런 식으로 페이지를 이동하며 페이지랭크를 분배하는 과정을 무한히 반복한 후에 최종적으로 모든 객체에 부여된 페이지랭크는 일종의 확률 분산과 같다.

예를 들어, 객체 A, B, C가 있고, B, C A를 참조하고 있으며, B의 하이퍼링크 개수는 2, C 1개라고 하자. 그러면 A의 페이지랭크를 가장 단순히 다음과 같이 나타낼 수 있다.

이를 임의의 객체 u에 대해 일반화하면 다음과 같다.

Bu는 객체 u에 대한 유출 링크(Outgoing Link)가 있는 객체의 집합이며 L(v)는 객체 v의 모든 유출 링크 개수이다. 이 과정은 모든 객체에 대해 이루어져야 하며, 수렴치를 찾을 때까지 재귀적으로 반복되어야 한다. 최종적으로 위의 그림은 이동확률을 에지 값에, 페이지랭크를 버텍스 값으로 갖는 마코프 체인이 된다.

랜덤 서퍼 모델에서 사용자가 웹 페이지 검색을 멈추는 경우도 있다. 이를 위해 제동인자(Damping Factor)를 두고 아래와 같이 식을 확장한다. 제동인자의 적정 값은 약 0.85로 알려져 있다.

또한 링크를 타고 페이지를 이동하다 더 이상 유출 링크가 없는 페이지에 다다를 수도 있다. 이런 경우, 다른 어느 페이지로든 이동할 수 있는 것으로 간주하여 모든 유출 링크로의 확률을 동일하게 놓는다.

페이지랭크는 재귀적으로 반복하면서 값을 갱신해나가며, 수렴치로 다다른다. 이 과정을 간편히 하기 위해 아래와 같은 행렬식을 제안한다.

R(t)는 전체 페이지랭크의 벡터이다. l(pi,pj)pi에서 pj로 링크가 나갈 확률이며, 이는 단순히 1/(유출링크개수)일 수 있지만, 알고리즘이 고도화되면서 가중치를 부여해 계산할 수도 있다. 위와 같은 행렬식으로 재귀연산을 하여 최종적으로 구해진 페이지랭크 벡터를 검색 결과에서 순위를 매기는데 사용한다.

 

관련연구

l  HITS(Hyperlink-Induced Topic Search)
유입 링크의 가중치인 권위값(Authority Score)와 유출 랭크의 가중치인 허브값(Hub Score)를 이용해 문서의 중요도를 매긴다. 이는 미리 계산하는 것이 아니라 쿼리 시간에 계산되며, 일반 검색 엔진에는 사용되지 않고, 두 가지 다른 값을 이용한다는 특징이 있으며, 전체 웹 페이지가 아니라 일부에만 적용하여 사용한다. 고품질의 결과를 도출하지만 시간이 오래 걸린다는 단점이 있고, IBM의 웹 검색 프로젝트인 CLEVER에 사용되었다.

l  TrustRank
스팸페이지를 구분하기 위해 스탠프도 대학교와 Yahoo에 의해 개발된 반자동 기법이다. 이는 전문가에 의해 수동으로 구분된 웹 페이지를 기초로, 그 웹페이지와 관련된 페이지에 신뢰도를 높게 쳐주는 방식이다. 반자동이라는 단점이 있지만, 실제로 스팸 페이지의 구분에 우수한 성능을 보였다.

 

참고자료

The PageRank Citation Ranking: Bringing Order to the Web

http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf

 

The Intelligent Surfer: Probabilistic Combination of Link and Content Information in PageRank

http://www.cs.washington.edu/homes/pedrod/papers/nips01b.pdf

 

Manipulability of PageRank under Sybil Strategies

http://www.cs.duke.edu/nicl/netecon06/papers/ne06-sybil.pdf

 

Our Search: Google Technology

http://www.google.com/corporate/tech.html

 

참고자료 전부 구라. 위키피디아 하나면 쫑.

수식은 나중에 정리...

Posted by 배트
,

스터디 시켜주느라 짜본 퀵소트.
제대로 짠건진 모르겠네. 데헷 :-9

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void printArr( int *head, int *tail );
void quickSort( int *head, int *tail );
void swap( int *v1, int *v2 );

int main(void)
{
    srand( time(NULL) );
   
    for( int i=0 ; i<10 ; i++ )
    {
        int arr[10];
        for( int j=0 ; j<10 ; j++ )
            arr[j] = rand() % 100;

        printArr( arr, &(arr[9]) );
        quickSort( arr, &arr[9] );
        printArr( arr, &(arr[9]) );
        printf("\n");
    }
}

void printArr( int *head, int *tail )
{
    int *p = head;
    while( p<=tail )
    {
        printf( "%d ", *p );       
        p++;
    }
    printf( "\n" );
}

void quickSort( int *head, int *tail )
{
    // pivot = head
   
    if( head>=tail )
        return;
   
    int *p=head, *l=head, *r=tail;
   
    while( l<=r )
    {
        if( *l>*p && *r<*p )
            swap( l, r );
        if( *l<=*p ) l++;
        if( *r>=*p ) r--;
    }
   
    int *c = *l<*r?l:r;
    swap( p, c );

    quickSort( head, c-1 );
    quickSort( c+1, tail );
}

void swap( int *v1, int *v2 )
{
    int t = *v1;
    *v1 = *v2;
    *v2 = t;
}

Simple quick sort source code.

Posted by 배트
,