반응형

출처: 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
반응형

export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\] \W\[\033[m\]\$ "

export CLICOLOR=1

export LSCOLORS=ExFxBxDxCxegedabagacad

'develop > Mac OS' 카테고리의 다른 글

JD-GUI with java 8+  (0) 2021.06.07
Big Sur 업데이트 이후 Eclipse실행 오류 해결  (0) 2021.02.18
Mac에서 숨김파일/폴더 표시  (0) 2017.03.23
mac os에서 wget 설치  (0) 2014.03.27
반응형

아래의 내용을 app의 build.gradle에 추가하지 않으면 aar파일을 인식 할 수 없다


repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}

aar파일은 app/libs에 복사 후 아래와 같은 내용을 추가한다.


dependencies {
...
compile '{패키지명}:{aar 파일 이름}:{aar버전}@aar'
}


반응형

출처: http://freecandoall.blogspot.kr/2017/03/xcodebuild-error-invalid-option.html


기존에 정리한 xcode빌드 중 xcodebuild: error: invalid option '-exportFormat' 에러가 나면서 빌드 실패가 된다.

찾아보니 위에 잘 정리가 되어 있다. (감사^^)


8.3.0 이전 버전에서 경고가 나오긴 했었는데 무시하고 있다가 이번에 ios 10.3.1버전 빌드를 하기 위해 업데이트 했더니..... 


8.3.0 이전버전 빌드는 다음으로 가면 된다.




반응형

1. 각각의 센서를 저장한다.

sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
sensorAccel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorMag = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

2. 센서 등록은 onResume에서 센서 해제는 onPause에서 한다.

protected void onResume() {
super.onResume();
sensorManager.registerListener(this, sensorAccel, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorMag, SensorManager.SENSOR_DELAY_NORMAL);
}

protected void onPause() {

super.onPause();

sensorManager.unregisterListener(this);

}

3. 가속도 센서와 자기장 센서의 값을 모두 저장한다.

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accel[0] = event.values[0];
accel[1] = event.values[1];
accel[2] = event.values[2];
}
else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mag[0] = event.values[0];
mag[1] = event.values[1];
mag[2] = event.values[2];
}

4. 저장한 센서들의 값을 가지고 SensorManager.getOrientation() 메서드를 호출하여 기울기를 구한다.

SensorManager.getRotationMatrix(r, null, gravity, geomagnetic);
SensorManager.getOrientation(r, values);

final int azimut= (int) ( Math.toDegrees(values[0] ) + 360 ) % 360;
final int pitch = (int)Math.toDegrees(values[1]);
float rr = -values[2] * 180 / (float)Math.PI;

if (Math.abs(rr) > 90) {
    if (rr > 0)
        rr = 90 - (rr - 90);
    else
        rr = -90 + Math.abs(rr + 90);
}
final float roll = rr;

if (pitch <= -20) {
if (roll > 10) {
sb.append("left");
if (roll > 60)
sb.append(" fast");
else if (roll > 30)
sb.append(" normal");
else
sb.append(" slow");
}
else if (roll < -10) {
sb.append("right");
if (roll < -60)
sb.append(" fast");
else if (roll < -30)
sb.append(" normal");
else
sb.append(" slow");
}
}
else if (pitch >= 20) {
if (roll > 10) {
sb.append("left");
if (roll > 60)
sb.append(" fast");
else if (roll > 30)
sb.append(" normal");
else
sb.append(" slow");
}
else if (roll < -10) {
sb.append("right");
if (roll < -60)
sb.append(" fast");
else if (roll < -30)
sb.append(" normal");
else
sb.append(" slow");
}
}

기울기 텍스트에 대한 수치는 임시로 넣은 값이다.


참조: https://developer.android.com/reference/android/hardware/SensorManager.html













반응형

xcode에서 몇개의 Scheme를 추가해서 각 스킴에 맞춰 접속하는 서버를 변경하도록 코딩하고, 테스트 배포용으로 ipa파일을 만들기 위해 검색하여 만든 루비 스크립트 내용이다.


스크립트로 만들지 않고 직접 실행 할 경우 system함수의 내부 문자열만 복붙해서 사용하면 된다.


scheme = [

"dev_debug",

"prod_debug",

]


system("xcodebuild clean -project #{proj_name}/#{proj_name}.xcodeproj")

system("xcodebuild archive -project #{proj_name}/#{proj_name}.xcodeproj -scheme #{scheme[i]} -archivePath build/#{scheme[i]}.xcarchive")

system("xcodebuild -exportArchive -archivePath build/#{scheme[i]}.xcarchive -exportPath build/#{scheme[i]}.ipa -exportFormat ipa -exportProvisioningProfile #{profile}")



실행순서는 다음과 같다.


1. 프로젝트에서 생성된 파일들을 삭제

2.archive를 생성

3. ipa파일을 생성

3.1. ipa 파일 생성 시 사용하는 프로비저닝 프로파일은 xcode의 perference에서 계정탭 선택 후 보여지는 프로비저닝 프로파일의 이름이어야 한다.

(apple 개발자 사이트에서 프로비저닝 등록할 때 설정하는 이름이기도 하다)



반응형

출처: http://angrygoguma.tistory.com/55


터미널에서 다음을 입력


$ defaults write com.apple.finder AppleShowAllFiles -bool true

$ killall Finder


다시 숨기고 싶을때는 default의 설정값을 false로 바꾸고 같은 작업을 해준다.


'develop > Mac OS' 카테고리의 다른 글

JD-GUI with java 8+  (0) 2021.06.07
Big Sur 업데이트 이후 Eclipse실행 오류 해결  (0) 2021.02.18
터미널에 색상 넣기 및 프롬프트 변경  (0) 2017.06.20
mac os에서 wget 설치  (0) 2014.03.27
반응형

참조: 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를 발주 받아, 인도/중국인에게 개발 업무를 아웃소싱하고 국내 팀과 연계하여 국제적인 프로젝트를 진행할 수 있다

그리고

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

반응형

AVPlayer로 동영상 재생 중 간헐적으로 (특히 plus 기기에서) 동영상 소리만 들리고 화면은 나오지 않는 현상이 재현되었다.


이 현상을 수정하기 위해 기존 개발자가 개발한 코드에서 동영상 로딩 하는 부분을 50% 이상 뜯어 고쳐 아주 기본적인 로직으로만 동영상 재생이 되도록 수정하였으나 마찬가지로 동영상 화면이 간헐적으로 나오지 않는 현상은 고쳐지지 않았다.


그렇게 2주 가까이 다른 버그 수정과 기능 구현을 하는 틈틈히 구글링을 한 결과 다음과 같은 질답을 발견하였고, 답변에 있는데로 구현 후 현재까지 아주 잘 되고 있다.


2주 가까이 해결하지 못하고 있던것을 해결하니 기분이 참 좋다 ㅎㅎㅎ




출처: https://forums.developer.apple.com/thread/27589



Hello all.

 

I got the same problem with my implementation. After trying the solutions proposed here, I think I finally found the relable way to do things

 

The AVPlayerItemVideoOutput must be created AFTER the AVPlayerItem status is ready to play.

So

  1. Create player & player item, dispatch queue and display link
  2. Register observer for AVPlayerItem status key
  3. On status AVPlayerStatusReadyToPlay, create AVPlayerItemVideoOutput and start display link

 

Thanks to all for the inspiration

Renaud


+ Recent posts