'정리'에 해당되는 글 4건

  1. 2012.10.30 :: site
  2. 2012.10.22 :: push server
  3. 2012.03.12 :: 뮤텍스와 세마포어
  4. 2012.01.13 :: 좋은 프로그래밍 습관(경쟁력을 갖춘 전문가의 작은 차이)
정리 2012. 10. 30. 16:57

데이터 베이스 관련 정보 (빅데이터 등.)

http://www.dbguide.net/index.db


시스템 엔지니어 공동 관리 구역 -

http://blog.syszone.co.kr/590

 

c언처 강좌, str관련 함수 설명 -

http://itguru.tistory.com/86

 

각종 언어 및 플래폼.. 등등 배우기 좋은 사이트 -

http://www.tutorialspoint.com/

 

안랩, 리버스코어 사이트 -

http://reversecore.com/category/study

 

삼성소프트웨어멤버십 (IT 놀이터) -

http://blog.secmem.org/category/IT%20놀이터?page=1


스프링강좌 : 

http://blog.daum.net/openeidos/8879784


자바 스터디 카페 - 

http://cafe.naver.com/javachobostudy.cafe

 

리눅스 POSIX acl -

http://users.suse.com/~agruen/acl/linux-acls/online/


c++ 강좌 : 

http://kks227.blog.me/60204917341

'정리' 카테고리의 다른 글

push server  (0) 2012.10.22
뮤텍스와 세마포어  (0) 2012.03.12
좋은 프로그래밍 습관(경쟁력을 갖춘 전문가의 작은 차이)  (0) 2012.01.13
posted by cozyboy
:
정리 2012. 10. 22. 19:31

 

1. 배경

서버-클라이언트 관계에서 지금까지는 대부분 클라이언트에서 서버에 요청하는 방식(Pull) 이 많이 사용되었다.

하지만 최근 스마트폰 같이 테블렛 기기가 많이 공급되면서 클라이언트가 서버에게 요청하고 다시 자료를 받는 식의 방법을 사용하였으나, 이방법은 패킷을 많이 소모하게 된다.

그래서 요즘의 추세는 서버에서 새로운 소식이 있을 때 클라이언트로 알려주는 Push방식이 많이 사용되고 있다.

 

2. 개요
안드로이드 폰이나 아이폰에서 사용자 기반 개별 애플리케이션에게 Push알림을 하기 위해서는 구글에서 제공하는 C2DM(안드로이드폰) 서버 또는 애플에서 제공하는 APN(아이폰) 서버에게 푸시 요청을 보내는 Third-Party 서버가 필요하다. Push 알림 서비스를 요청받기 위해서는 Push서버에 수신자의 고유 ID정보가 관리가 되며, 고유 ID는 사용자의 ID 또는 휴대폰 번호, 이메일 주소, Mac Address 등의 임의의 정보를 통해서 생성 된다. 푸시서버는 스마트폰이나 웹에서 접근 할 수 있는 Open API를 제공하며 REST/JSON 또는 REST/XML 기반 통신 Protocol을 제공 할 수 있다.

 

3. 서비스용도
Email: 메일 수신 시 알림 서비스
Calendar : 일정 고유 알림
Task: 작업 공지 알림
User Event: SNS알림, 공지사항 알림 등등


 

4. Push 서비시체계가 가져야 할 요건

- 자료전달기능 으로서 전 대상자에 전달할수있는 기능(Broadcast Data Delivery), 

- 선택적 대상에 자료을 전달 할 수 있는 기능(Multicast Data Delivery),

- 특정대상에 자료 전달 기능(Unicast Data Devlivery)

- 성능적인 문제

    얼마나 많은 사용자들에게 자료을 전달 할 수 있는가

    최소의 시스템 자원으로 최대의 접속자에게 자료을 전달

    얼마나 많은 메시지 자료를 전달 할 수 있는가 

 

3사에서 지원하는 모바일 push server

Apple Push Notification Service (APNS) for iOS devices

Cloud to Device Messaging Framework (C2DM) for Android devices

Microsoft Push Notification Service (MPNS) for Windows Phone Devices

 

 

아래 링크는 전부 테스트 해본 것이 아니라 자료 수집 및 현재 어떻게 만들어졌는지 참고 사항 일 뿐이다.


5. 적용사례

 - http://blog.naver.com/tankljh?Redirect=Log&logNo=90001585339

 - http://blog.naver.com/ospace99?Redirect=Log&logNo=70094717432 

 

6. solution 

 - PUMP  : http://www.btbsolution.co.kr/solutions/pdf/BTBSolution_PPS.pdf 

 - Kony : http://www.kony.com/push-notification-services

 

7. open source

 - Common Push Notification Service Sample (android & Ios & window통합 open sorce)

 : http://windowsphone.interoperabilitybridges.com/articles/common-push-notification-service-sample

 

 - It was made using Javascript (actually coffeescript), and requires Node.js.

Both of them supports Andoird, Windows Phone and iOS. I haven't tested them, so I can't give you more insights.

 : https://github.com/rs/pushd

 

- z-push(open sorce) : http://z-push.sourceforge.net/soswp/

 

 - open source(java, object-c, perl, php, python, ruby) : https://support.urbanairship.com/customer/portal/articles/60713-push-server-libraries

 

8. 이론 및 tecnology

http://mygony.com/archives/2535   한글포스팅(comet을 쉽게 설명)

http://en.wikipedia.org/wiki/Push_technology

http://www.slideshare.net/noloh/comet-by-pushing-server-data-we-push-the-web-forward

 

 

 여담

구글 & 안드로이드 push service : http://mobizen.pe.kr/1074

'정리' 카테고리의 다른 글

site  (0) 2012.10.30
뮤텍스와 세마포어  (0) 2012.03.12
좋은 프로그래밍 습관(경쟁력을 갖춘 전문가의 작은 차이)  (0) 2012.01.13
posted by cozyboy
:
정리 2012. 3. 12. 14:08

이 글은 Niclas Winquist씨가 2005년에 쓴 화장실에 비유한 글을 번역하였습니다.

뮤텍스 : 뮤텍스는 화장실에 들어가기 위한 열쇠로 비유할 수 있습니다. 즉 화장실에 들어갈 수 있는 열쇠를 한 사람이 갖고 있다면, 한 번에 열쇠를 갖고 있는 그 한 사람만이 들어갈 수 있습니다. 화장실에 열쇠를 갖고 있는 사람이 들어가 볼일을 다 본 후에는 줄을 서서 기다리고 있는(대기열-큐) 다음 사람에게 열쇠를 주게 됩니다.

공식적인 정의(심비안 개발자 라이브러리에서 발췌) : 뮤텍스는 한 번에 하나의 쓰레드만이 실행되도록 하는 재 입장할 수 있는 코드 섹션에 직렬화된 접근이 가능하게 할 때 사용됩니다. 뮤텍스 객체는 제어되는 섹션에 하나의 쓰레드만을 허용하기 때문에 해당 섹션에 접근하려는 다른 쓰레드들을 강제적으로 막음으로써 첫 번째 쓰레드가 해당 섹션을 빠져나올 때까지 기다리도록 합니다.

뮤텍스는 값이 1인 세마포어입니다.

세마포어: 세마포어는 빈 화장실 열쇠의 갯수라고 보면 됩니다. 즉, 네 개의 화장실에 자물쇠와 열쇠가 있다고 한다면 세마포어는 열쇠의 갯수를 계산하고 시작할 때 4의 값을 갖습니다. 이 때는 이용할 수 있는 화장실 수가 동등하게 됩니다. 이제 화장실에 사람이 들어갈 때마다 숫자는 줄어들게 됩니다. 4개의 화장실에 사람들이 모두 들어가게 되면 남은 열쇠가 없게 되기 때문에 세마포어 카운트가 0이 됩니다. 이제 다시 한 사람이 화장실에서 볼일을 다 보고 나온다면 세마포어의 카운트는 1이 증가됩니다. 따라서 열쇠 하나가 사용가능하기 때문에 줄을 서서 기다리고 있는 다음 사람이 화장실에 입장할 수 있게 됩니다.

공식적인 정의(심비안 개발자 라이브러리에서 발췌): 세마포어는 공유 리소스에 접근할 수 있는 최대 허용치만큼 동시에 사용자 접근을 할 수 있게 합니다. 쓰레드들은 리소스 접근을 요청할 수 있고 세마포어에서는 카운트가 하나씩 줄어들게 되며 리소스 사용을 마쳤다는 신호를 보내면 세마포어 카운트가 하나 늘어나게 됩니다.


[출처] 뮤텍스 와 세마포어 어떻게 다른가?|작성자 블링블링

[참고] 글은 조금 엉성하지만 알아 듣기 쉽다.
http://blog.naver.com/thx4alice?Redirect=Log&logNo=110022369987

'정리' 카테고리의 다른 글

site  (0) 2012.10.30
push server  (0) 2012.10.22
좋은 프로그래밍 습관(경쟁력을 갖춘 전문가의 작은 차이)  (0) 2012.01.13
posted by cozyboy
:
정리 2012. 1. 13. 10:47

1. 항상 초기화를 한다.
1.1. 초기화를 하여, 언제 발생 할지 모르는 trash 값을 미연에 방지한다.

    ● 구조체
    ● 포인터
    ● 일반 변수


2. 인터페이스를 정의 하여 모듈화를 한다.

    ● int add(int, int); /* 덧셈 함수 */ : 공동 프로젝트 시, 함께 사용 할 함수
       는 상의 후 헤더파일에 정의한다.
    ● 반환값, 매개변수 정의(설계)를 먼저 한다.


3. 개발환경을 직접 만들 수 있어야 한다.

    ● 각 모듈마다 혹은 통합적인 Test program을 만든다.


4. 주석 사용

4.1. 프로그래밍 시작

    /*+======================================================

            Project Name: ???                    ☞??? : 프로젝트/회사이름

            File Name: FormatString.c

            Revision: 1.0

            Date: 2012.01.12

            Author : coz

            copyright (c) 2002-2003 ??? Co., Ltd.

            All Rights Reserved

    ========================================================+*/

4.2. 함수

    /*=======================================================
        insert                                                모듈이름

            Funtion: Insert                                 함수이름

            ProtoType: void Insert(char *)             인터페이스

            Author: coz 작성자

            Revision: 1.02012.01.12                 최초 작성 날짜

            Modified: 2012.01.12 By Lee           마지막 수정 날짜와 수정자

    ========================================================*/


5. 변수를 수직으로 명명 한다.

5.1. 소스의 가독성이 높아진다.

    ptr->ySize                       = 10;

    ptr->xStartPosition            = 205;

    ptr->yStartPosition            = 200;

    ptr->scale                       = 10;


6. 함수 튜닝에 좋은 습관

6.1. 의도하지 못한 에러를 방지 하고 소스의 신뢰성을 높인다.

    ● 매개변수를 사용하여 연산하지 않는다.
    ● 매개변수 검사문을 삽입한다.
    ● 반환값을 이용하여 함수의 실행 여부를 판단 할 수 있다.
    ● printf("[%s][%s][%d]\n", __FILE__, __FUNTION__, __LINE__); 을 사용
       한다.


7. 메모리 할당/해제는 함수로 처리한다.


8. 가독성을 높인다.

    ● if, case문을 적절히 사용한다.
    ● 3항 연산자를 사용한다. max = (a > c) ? a : b;
    ● 열거형을 사용한다. typedef, enum Grade {A=1, B, C, D=10, E};
    ● 띄어쓰기 한다. int a=3; (NO)int a = 3; (OK)


9. 전처리기를 사용한다.

9.1. #ifndef, #define, #endif

    ● 다중 파일 사용
    ● 디버깅

                #define DEBUG

                void main(){

                    #ifdef DEBUF

                        printf("디버깅 코드\n");

                    #else

                        printf("릴리즈 코드\n");

                    #endif

                }


10. 전역변수를 피한다.

    ● 매개변수와 구조체를 활용하여 전역변수 사용을 피한다.
    ● 프로젝트에서 다함께 쓰는 전역변수는 쓰지 않는다.
    ● 쓰게 된다면 헤더가 아니라 소스 내부에서 사용한다.


11. 자물쇠 const

11.1. void StringCopy(const char *sorce, char *dest)

11.2. 논리적 버그 예방할 수 있는 특징

    ● const 포인터가 가리키는 값을 변경할 수 없다. 단 포인터의 주소는 변경
        가능
    ● const 포인터는 일반 포인터로 할당될 수 없다.


12. 메모리를 제대로 알고 사용한다. 16진수 기법에 익숙해진다.

    ● 메모리 주소를 출력할 때 %#x 형식 지정자를 사용한다. (0x5a35ff)


13. 정적 함수로 접근권한을 준다.

    ● 함수가 정의된 파일 안에서만 함수를 사용할 수 있다는 특성을 이용한다.
    ● 모듈화 극대화와 디버깅 시간을 줄여준다.


14. 구조체 활용법.

14.1. 패킹 : 32비트 시스템들은 4바이트 정렬을 한다(네트워크 활용시 주의?).
[long(4byte), char(1byte) 로 6바이트처럼 보이지만  패킹 하지 않으면 8바이트가 된다]

    typedef struct{

            long a;

            char b;

            char c;

    }__attribute__((packed)) DATA

14.2. 배열과 구조체 포인터 연결하여 사용한다.(네트워크 활용)

배열 = "abcdef", 구조체.a(int형), 구조체.b(char형) 일때,
구조체 = 배열; 적용하면
             a엔 abcd에 대한 값이 들어가고
             b엔 e값이 들어간다.

14.3. 구조체 안에 구조체를 사용한다.


15. union

    typedef union _BYTE{

            unsigend char byte;

            struct _bit {

                        unsigned char B0 : 1;/* 1비트의 공간 할당 */

                        unsigned char B1 : 1;

                        unsigned char B2 : 1;

                        unsigned char B3 : 1;

                        unsigned char B4 : 1;

                        unsigned char B5 : 1;

                        unsigned char B6 : 1;

                        unsigned char B7 : 1;

            } bit;

    } BYTE;


16. 고수들 디버깅.

16.1. ASSERT(), VERIFY()함수를 이용한다.

    ● #define ASSERT(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__, #e))
        로 정의되어 있다.

둘다 비슷한 기능을 하지만 MSDN에 명시한 차이점은 이렇다. 

"
프로그램의 릴리스 버전에서는 ASSERT 식을 계산하지 않기 때문에 디버그 버전과 릴리스 버전에서 nM의 값이 다릅니다. MFC에서는

ASSERT 대신 VERIFY 매크로를 사용할 수 있습니다. 릴리스 버전에서 VERIFY는 식을 계산하지만 결과를 확인하지는 않습니다.

함수를 계산할 때 예기치 않은 의도하지 않은 연산이 발생할 수 있으므로 어설션 문에서 함수를 호출할 때는 특히 주의하십시오.

코드 복사 ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects
VERIFY ( myFnctn(0)==1 ) // safe

VERIFY는 디버그 버전과 릴리스 버전에서 모두 myFnctn을 호출하기 때문에 사용이 가능합니다. 그러나 릴리스 버전에서는 여전히 불필요

한 함수 호출의 오버헤드가 발생하게 됩니다.

"

이러한 관계로 verify보다는 디버깅 모드에서만 assert를 사용하는게 좋을듯 생각한다.

'정리' 카테고리의 다른 글

site  (0) 2012.10.30
push server  (0) 2012.10.22
뮤텍스와 세마포어  (0) 2012.03.12
posted by cozyboy
: