distance는 KM단위
100 미터는 0.1


select *, (6371 * acos(cos(radians(".$_GET['lat'].")) * cos(radians( lat )) * cos( radians( lon ) - radians(".$_GET['lon'].") ) + sin( radians(".$_GET['lat'].") ) * sin( radians( lat ) ) ) ) AS distance from gps where distance <= 0.1;

jdk 1.3

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase13-419413.html


jdk 1.4

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase14-419411.html


jdk 1.5

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html


jdk 1.6

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html


jdk 1.7

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html


jdk 1.8

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

ssh 설정
ssh -L [local port]:[remote]:[remote port] -i [pem path] [user]@[host]

ssh -L 10001:192.168.0.1:3306 -i ~/Documents/dev/db.pem ec2-user@aws.com -N

-L : 로컬 포트 포워딩
-i : PEM 파일 경로
-N : ssh 포트포워딩만 사용(host 접속은 안함)
-f : 백그라운드 모드로 실행


포트포워딩 된 로컬 포트로 접속
mysql -P 10001 -h 127.0.0.1 -p -u coke

-h를 지정하지 않으면 접속되지 않는다

출처: https://developer.vuforia.com/forum/cylinder-targets/pepsi-max-can


  1.     Obtain the dimensions of the CanArtwork_PepsiMAX.JPG artwork (=2500H x 1301W)
  2.     Determine the scene unit length you want to specify (for CylinderPepsiMaxCanMeasured.zip, you used 90) - this corresponds to the artwork's height in #1
  3.     Use an aspect ratio conversion tool to calculate the new height-to-width ratio, based upon the scene unit length used. This will give the updated "width" in scene units (=173) - this corresponds to the artwork's width in #1. Note that the aspect ratio of the original artwork is preserved, which is critical to detection and tracking performance.
  4.     Considering that the scene unit "width" of the can is actually the circumference, convert this to the diameter (=55)
  5.     Create your cylinder target using: Length=90, Top Diameter=55, Bottom Diameter=55


'develop > 공통' 카테고리의 다른 글

JDK SE 구버전(1.3~1.7) 설치 URL  (0) 2017.12.19
ssh 포트포워딩(mysql) 및 접속  (0) 2017.11.07
GCM, FCM 서버에서 데이터 전송 형태  (0) 2017.03.15
신입 개발자 역량평가(퍼옴)  (0) 2017.03.04
sqlite  (0) 2014.12.18

참조: https://developers.google.com/cloud-messaging/http-server-ref


GCM 전송 주소: https://android.googleapis.com/gcm/send

FCM 전송 주소: https://fcm.googleapis.com/fcm/send


header : Content-Type : application/json Authorization : key="{서버 API키}" body : { "content_available":true, "notification":{ "sound":"default", "title":"{title string}", "body":"{message string}" } "to": "push token", {"registration_ids":["token1", "token2",...],} "data": { "param1":value1, "param2":value2, } }

'develop > 공통' 카테고리의 다른 글

ssh 포트포워딩(mysql) 및 접속  (0) 2017.11.07
vuforia cylinder target 이미지 dimention 설정  (0) 2017.06.20
신입 개발자 역량평가(퍼옴)  (0) 2017.03.04
sqlite  (0) 2014.12.18
NAT의 종류  (0) 2014.02.17

출처 : https://github.com/EBvi/dev-matrix/blob/master/%E1%84%89%E1%85%B5%E1%86%AB%E1%84%8B%E1%85%B5%E1%86%B8%20%E1%84%80%E1%85%A2%E1%84%87%E1%85%A1%E1%86%AF%E1%84%8C%E1%85%A1%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%85%E1%85%A3%E1%86%BC%20%E1%84%91%E1%85%A7%E1%86%BC%E1%84%80%E1%85%A1.md




신입 개발자 역량 평가

  • 각 단계의 마지막 mastery는 우리가 기대하는 신입의 수준을 넘어갑니다만, 가끔은 이런 단계에 오른 신입들도 존재하기 때문에 넣어뒀습니다
  • 평가 그 자체에 너무 부담을 갖지는 말아주세요. 저희는 신입 개발자가 가져야될 가장 중요한 자질로 잠재력에 초점을 두고 있습니다
  • 맨 마지막 항목에 여러분의 잠재력을 어필해주세요

퍼블리싱

1. 웹페이지 코딩

  • 간단한 HTML 문법과 CSS 문법을 알고 사용할 수 있다
  • div로 레이아웃을 잡고 코딩을 할 수 있다 (Box model을 이해한다)
  • 웹 표준을 어느 정도 이해하고 있다 (DTD를 알고 있다)
  • 웹 접근성과 시맨틱한 마크업에 대해 숙지하고 있으며 관심이 깊다

2. 크로스 브라우징

  • 인터넷 익스플로러밖에 사용해 보지 않았다
  • 특정 모바일 디바이스에 최적화된 페이지를 만들어 본 경험이 있다
  • 각 브라우저의 렌더링 이슈를 알고 있으며 해결해 본 경험이 있다
  • 브라우저핵의 존재를 알고 있으며, 우아한 퇴보 기법의 일부를 숙지하여 코딩할 수 있다

3. jQuery

  • 간단한 셀렉터와 실행 문법을 알고 있다
  • 다양한 플러그인을 사용해본 경험이 있다
  • 제법 복잡한 셀렉터를 다룰 수 있고, 메소드 체이닝을 알고 있으며, 거의 모든 문법을 자유 자재로 다룰 수 있다
  • 플러그인 제작이 가능하고 jQuery가 어떻게 구현되었는지 상당 수준을 이해한다

4. JavaScript

  • 아주 기초적인 JavaScript 문법을 알고 있다
  • Context의 역할과 this의 용법을 안다
  • closure를 이해하고 익명함수를 다룰 수 있다
  • 각 브라우저별 JavaScript 엔진의 차이를 이해하고 크로스 브라우징이 가능한 코드를 작성할 수 있다

운영체제

1. 리눅스 경험

  • 윈도우밖에 사용해 보지 않았다
  • 몇 종류의 리눅스를 사용해 보았으며 쉘 명령어를 좀 알고 있다
  • 리눅스에 특정 벤더사의 서버를 설치, 세팅해본 경험이 있다
  • 리눅스로 서비스를 운영해 보았으며 각종 트러블 슈팅에 대한 경험이 있다

2. 윈도우 경험

  • 특별한 경험이 없다
  • 백업과 복원을 할 줄 알고, 시스템을 새로 설치하는 데에도 문제가 없다
  • 각종 고급 테크닉을 숙지하고 있으며 최적화나 튜닝에 대해서도 관심이 많다
  • 오류가 발생하면 덤프를 뜨고 로그를 읽어 어떤 문제가 발생했는지 알고 해결할 수 있다

전산학 이해

1. 자료구조

  • 배열(array)과 List의 차이를 모른다
  • 배열과 Linked List, dictionary의 차이를 설명할 수 있다
  • 트리와 그래프를 알고 사용할 수 있다
  • 각종 상황에서 효율적인 자료구조를 결정할 수 있다

2. 알고리즘

  • 배열에 들어있는 값의 평균을 낼 줄 모른다
  • 정렬, 검색, 순환 알고리즘을 안다
  • 퀵 정렬에 대해 설명할 있고, 직접 코드를 작성할 수 있다
  • 다익스트라나 A*, 또는 그 밖의 알고리즘을 알고 있다

3. 시스템 프로그래밍

  • 컴파일러, 링커, 인터프리터를 구분하지 못한다
  • 컴파일러, 링커, 인터프리터를 설명할 수 있다
  • 커널모드/유저모드 차이를 설명할 수 있다
  • 스레딩/멀티스레딩, 동기화와 락을 이해하고 어떻게 구현되었는지 설명할 수 있다

설계

1. 객체 지향

  • 인터페이스를 왜 써야하는 지 모른다
  • 캡슐화와 추상화를 이해하고 어떤 상황에서 써야하는지 알고 있다
  • 디자인 패턴과 안티 디자인 패턴을 상당수 알고 있다
  • 이를 통해 프레임워크를 구축해본 경험이 있다

2. DI

  • DI나 IoC가 무엇인지 모른다
  • 왜 빈을 주입해야 하고 왜 이것이 낮은 결합도를 만드는지 안다
  • 스프링에서 DI가 어떻게 구현되어 있는지 알고 있다
  • DI와 IoC에 대해 하루종일 설교할 수 있다

3. 모델링

  • 논리적 모델과 물리적 모델이 무엇을 말하는지 모른다
  • 논리적 모델과 물리적 모델을 구분하여 모델링할 수 있다
  • L자형 테이블이 왜 위험한지 알고 있다 (필드가 많이 늘어나는 것이 어떤 영향을 미치는지 이해한다)
  • 정규화를 알고 이를 적용하여 모델링을 할 수 있다

Java

1. 문법

  • 간단한 문법을 이해하고 프로그램을 작성할 수 있다
  • 리플렉션을 이해하고 사용할 수 있다
  • 어노테이션을 어떻게 쓰고 어떻게 구현할 수 있는지 알고 있다
  • 인터페이스와 클래스의 각종 고급 문법을 알고 적용할 수 있다. 디자인 패턴의 존재를 알고 있다.

2. 빌드

  • IDE(이클립스)가 아니면 빌드를 할 수 없다
  • 커맨드라인으로 빌드를 만들 수 있다
  • 빌드 스크립트를 직접 작성할 수 있다
  • 문서, 설치 스크립트, 릴리스 노트를 포함한 빌드 스크립트를 작성한다

3. 테스트

  • 테스트를 하지 않는다
  • System.out.print를 사용하여 문자열을 찍어본다
  • 유닛 테스트를 작성한다
  • TDD를 이해한다 (반드시 TDD를 하고 있어야 한다는 의미가 아님)

데이터베이스

1. 쿼리 작성

  • 기본적인 CRUD를 작성할 수 있다
  • inline view를 사용하여 복잡한 질의문을 작성할 수 있다
  • 각종 join을 다룰 수 있으며, 집계 쿼리, group by 등을 사용할 수 있다
  • 100만 건 이상의 데이터가 누적되어 있는 상황에서 쿼리를 작성해본 경험이 있다

2. 대용량 데이터베이스

  • 실행 계획이 뭔지 모른다
  • Clustered Index와 Non-clustered Index의 차이를 안다
  • 실행 계획을 변경하기 위해 hint를 사용할 수 있다
  • 파티셔닝과 병렬 처리를 제어할 수 있고, 각종 튜닝 방법에 대해 알고 있다

3. 데이터베이스 개념

  • 제대로 데이터베이스에 대한 개념을 학습하지 못했다
  • ACID, 정규화, 트랜잭션을 이해한다
  • 스키마를 정규화해서 정의할 수 있고, 뷰, 스토어드 프로시저, 트리거, 사용자 정의 타입을 다룰 수 있다
  • 쿼리 트랜스포머를 어느 정도 이해하고 있으며, 내부적으로 인덱스가 어떻게 저장되어 있고 작동하는지 이해하고 있다

기타

1. 책

  • 간단한 문법을 다룬 책을 위주로 몇 권 읽어 봤다
  • 코드 컴플리트를 비롯한 스티브 맥코넬의 저서 또는 켄트벡이나 마틴 파울러의 저서를 읽어 봤다 (방법론에 대한 책)
  • 이펙티브 C++, 이펙티브 Java, 그 외 각종 실용적이면서 중급 사용자에게 적절히 도움이 되는 책을 읽어 봤다
  • 아트 오브 컴퓨터 프로그래밍, 자바스크립트 닌자의 비밀, 대용량데이터베이스 솔루션 등의 고급 서적을 읽어 봤다

(어떤 책을 읽어봤는지 추가로 서술해주셔도 좋습니다)

2. 인터넷 커뮤니티 활동

  • 개발과 관련된 어떠한 커뮤니티 활동도 하지 않는다
  • 자주 가는 블로그, 또는 개발자 위주로 된 트위터 리스트를 갖고 있다
  • 프로그래밍에 관한 개인적인 통찰이나 생각을 표현하는 블로그를 갖고 있으며 이것을 다른 개발자와 공유한다

3. 외국어 수준

  • 한국어가 아닌 자료로는 기술 습득이 불가능하다
  • 영어로 된 기술 교재를 읽고 기술을 파악한다
  • 미국인/영어권 사용자로부터 개발 업무를 지시받고 업무 수행 후에 결과를 보고할 수 있다
  • 영어권 사용자로부터 SW를 발주 받아, 인도/중국인에게 개발 업무를 아웃소싱하고 국내 팀과 연계하여 국제적인 프로젝트를 진행할 수 있다

그리고

무엇이라도 좋습니다. 사진, 그림그리기, 만화, 인터넷 활동, 음악, 글쓰기, 잉여력 발산, 게임 등 지금까지 했던 활동 중에서 어떤 걸 어디까지 알고 있는지 자랑할 만한 것이 있으면 기술해주세요. 다만 너무 길게 쓰지는 말아주세요. 저희는 이 항목에 대한 평가를 가장 중요하게 생각합니다.

쿼리시 다음을 입력하면 보기 좋게 출력된다.

sqlite> .header on

sqlite> .mode column



참조: http://en.wikipedia.org/wiki/Network_address_translation#Methods_of_port_translation


크게 2종류

- Symmetric NAT

- Cone NAT


- Full cone

- 매핑된 NAT 포트로 외부의 어느 호스트에서든 패킷을 송/수신할 수 있다.

- Address Restricted cone

- A 호스트와 NAT간 패킷을 송/수신하기 위해 포트가 매핑 된 경우, 해당 포트로 다른 호스트와의 패킷 송/수신이 불가능

- A 호스트와 패킷 송/수신 시 매핑 된 포트가 아니여도 패킷 송/수신 가능

- Port Restricted cone

- A 호스트와 NAT간의 포트가 매핑 된 경우, A 호스트는 다른 포트를 통하여 패킷을 송/수신 할 수 없다. (Symmetric NAT와 비슷)

- Symmetric NAT

- A 호스트와 NAT간의 패킷 송/수신시 외부 호스트 별로 NAT의 포트가 1:1 매핑된다.

- 매핑 된 포트로는 매핑 될 당시의 외부 호스트와만 패킷 송/수신이 가능하다.



설정방법은 여기 참조



추가 1. 관련 RFC

RFC 5780과 RFC 3489간에 관계
[RFC5780] EIM + EIF = [RFC3489] Full Cone
[RFC5780] EIM + ADF = [RFC3489] Restricted Cone
[RFC5780] EIM + APDF = [RFC3489] Port Restricted Cone
[RFC5780] ADM + EIF
[RFC5780] ADM + ADF
[RFC5780] ADM + APDF
[RFC5780] APDM + EIF
[RFC5780] APDM + ADF
[RFC5780] APDM + APDF = [RFC3489] Symmetric


 understand Life Cycle (iPhone / Android)

enter image description here


'develop > 공통' 카테고리의 다른 글

sqlite  (0) 2014.12.18
NAT의 종류  (0) 2014.02.17
소켓 Close시 TIME_WAIT 문제(C언어)  (0) 2013.12.30
DualStack Mobile IPv6 with Multiple Care of Address  (0) 2013.06.24
IPv4, IPv6 체크 정규식  (0) 2013.04.02

TIME_WAIT는 소켓 close를 호출하는 쪽에서 설정되는 소켓의 상태이다.


netstat을 사용하여 각 소켓의 상태를 확인할 수 있다.


짧은 작업을 위한 소켓인 경우, Server에서 close를 호출하는 경우가 생기는데, 이 때 부하가 많을수록 TIME_WAIT 상태인 소켓이 많아져 Client에서 Server로 접속을 못하는 경우가 생긴다.


다음과 같이 강제적으로 TIME_WAIT상태를 거치지 않고 소켓을 종료할 수 있다.

(기본적으로 TIME_WAIT는 소켓의 필수 상태이니 테스트 필수!!)


struct linger ling;

ling.l_onoff = 1;

ling.l_linger = 0;

shutdown(sockfd, SD_BOTH);

setsockopt(fd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));

#define WIN32

sockclose(fd);

#else

close(fd);

#endif



apache proxy loadbalancer를 사용하는 경우, native 데몬(혹은 tomcat등의 proxy와 연결되는 daemon)과 apache proxy사이의 소켓은 즉시 종료 되나, 클라이언트와 apache간의 소켓은 apache의 KeepAlive설정에 따라 달라진다. KeepAlive를 On으로 설정하는 경우, 클라이언트의 소켓이 close를 먼저 하게 되므로 서버쪽에서는 소켓이 남지 않고, Off로 설정하는 경우, 서버에서 먼저 close를 호출하므로 서버쪽에 소켓이 남게 된다. (남게 되는 소켓은 전부 TIME_WAIT 상태의 소켓을 뜻함)

+ Recent posts