레이블이 iPhone인 게시물을 표시합니다. 모든 게시물 표시
레이블이 iPhone인 게시물을 표시합니다. 모든 게시물 표시

2015년 2월 10일 화요일

Beacon의 이해



비이컨 기술의 가장 기본적인 사용법은 모바일 디바이스에서 비이컨까지의 거리를 측정하는 것이다. 하지만 비이컨으로 거리를 측정하는걸 해 본 사람들은 누구나 알고 있는 것처럼 거리 추정은 상당히 오차가 크다. 5미터 떨어진 비이컨의 경우 추정 거리는 2미터에서 10미터까지 왔다갔다 한다. 

이렇게 추정 거리가 변하는 이유와 이런 오차를 줄이기 위한 방법은 비이컨에 관해 가장 흔한 질문이다. 추정에 영향을 미치는 요인은 전파 신호의 난반사, 장애물, 휴대폰과 비이컨의 방향등 매우 다양하다. 

하지만 거리 추정에 무었보다 가장 큰 요인은 전파 노이즈이다. 백그라운드 전파 노이즈는 어디에건 존재한다. 강한 전파(즉, SNR이 큰)의 경우 약한전파보다 노이즈는 별로 문제가 되지 않는다. 이런 이유 때문에 비이컨에서 10미터 이상 떨어진 경우보다는 가까운 거리에서는 좀 더 정확한 거리 추정이 가능하다. 

Apple의 권장사항




애플이 iOS7에서 iBeacon 기술을 소개했을 때, 애플의 문서는 거리 추정치를 직접 사용하지 않는걸 권장했다. 비이컨 범위 정보를 제공하는 CLBeacon 클래스는 비이컨과의 거리 추정치를 미터 단위로 제공하는 필드를 가지고 있다. 하지만 이 속성을 distance라고 부르는 대신 애플은 accuracy라고 이름붙였다. 권장하는 사용법은 이 값을 여러 비이컨들 중에 어느것이 가장 가까운가 비교하는 용도로만 사용하는 것이다. 또한 CLBeacon 클래스는 proximity라는 속성을 제공해 거리 추정치를 “immediate”, “near”, “far”로 그룹핑 한다. 이 각 그룹의 정의는 명확하지 않지만, 실험 결과 0.5미터 이내의 거리는 “immediate”, 0.5~3m 정도는 “near”, 그 이상은 “far”로 구분한다고 볼 수 있다.



이런 내용이 비이컨을 사용해 직접적으로 거리를 측정할 수 없다는걸 의미하지는 않는다. 단지 비이컨의 동작 원리와 결과값의 품질에 어떤 한계가 있는지를 먼저 이해할 필요가 있다는걸 의미한다.

Reference Transmitter Power


비이컨 전송은 transmitter power 필드를 포함하고 있어 특정 거리에서 신호 세기가 얼마의 세기가 되어야 하는가를 나타낸다. 예를들어 iBeacon 기술을 사용할 때, 표준 측정값은 비이컨에서 1미터 떨어진 곳에서 iPhone 5S(iOS7이 발표되었을 때 최신 모델)이 측정한 것이다. 비이컨은 표준거리에서 신호레벨(RSSI)을 측정한 후 비이컨이 표준값을 송신하도록 calibrate되어야만 한다.  RSSI 값은 dBm 단위를 사용하고 1미터 거리에서 calibrate 된 비이컨의 통상 RSSI 값은 -59 dBm이다. 각 송신기와 안테나는 서로 다른 세기의 전파를 송신하기 때문에 여러 비이컨의 실제 calibration 값은 서로 다르다. Radius Network의 RadBeacon같은 일부 제품은 출력파워를 조정할 수 있다.

How distance estimates work


모바일 디바이스는 비이컨의 신호레벨을 레퍼런스 신호레벨과 비교함으로서 비이컨과의 거리를 추정할 수 있다. 비이컨이 adv한 패킷이 수신될 때 마다 블루투스 칩은 비이컨의 신호레벨 측정값을 RSSI로 제공한다. 각 비이컨 전송은 위에서 언급한 calibration 값을 포함하고 있기 때문에, 실제 시그널 레벨을 1머터에서 기대되는 시그널 레벨과 비교해서 거리를 추정할 수 있다. 예를들어 비이컨 adv 패킷이 -65 dBm 시그널 레벨로 수신되었고 송신기의 출력 calibration값은 -59 dBm이라고 해 보자. -65 dBm은 -59dBm보다 약한 신호레벨이므로, 즉 비이컨은 1미터보다 먼 거리에 있을 가능성이 크다는걸 의미한다.

거리를 추정하기 위해 이 두 숫자를 공식에 집어넣을 수 있다. 아래 공식은 Android Beacon Library에 사용한 것이다. 공식의 3개의 상수(0.89976, 7.7095, 0.111)는 여러 정해진 거리에서 넥서스4를 사용해 측정한 신호 세기에 기반해 best fit으로 계산한 값이다. 


protected static double calculateDistance(int txPower, double rssi) {
  if (rssi == 0) {
    return -1.0; // if we cannot determine distance, return -1.
  }

  double ratio = rssi*1.0/txPower;
  if (ratio < 1.0) {
    return Math.pow(ratio,10);
  }
  else {
    double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;    
    return accuracy;
  }
} 


위의 예제의 경우 txPower에 -65를, rssi에 -59를 넣으면 거리 추정치는 2미터가 된다.

Filtering for noise


신호 노이즈때문에 RSSI 측정치만으로 거리를 추정하는것은 좋은 생각이 아니다. 비이컨 패캣의 RSSI 측정값을 보면 신호 레벨은 여러 곳에서 갑자기 점프하는걸 볼 수 있다. 이 노이즈를 제거하는 가장 간단한 방법은 RSSI 측정치의 running average를 사용해서 노이즈를 부드럽게 변하도록 해 주는 것이다. 또한 데이터 셋에서 이상하게 높거나, 이상하게 낮은 값은 제외해 버리는것도 일반적이다. Android Beacon Library에서 사용한 알고리즘은 20초 샘플링 구간 측정치의 상위 및 하위 10%를 버리고 나머지를 평균한다. 

이 방법의 장점은 거리 추정이 좀 더 정확하고 안정적이라는 것이다. 단점은 모바일 디바이스가 움직이면 거리 추정치가 움직인 위치를 정확히 따라잡는데 20초의 시간이 걸린다는 것이다.

20초 샘플링 구간은 iOS에서 사용하는 방법과 유사하다. 아래 그래프는 아이폰4S가 비이컨에서부터 0.5미터 거리에서 3미터로 빠르게 이동했을 때 (빨간선)  CLBeacon 클래스의 accuracy 필드가 어떻게 변하는가를 보여준다. 그래프에서 볼 수 있는것처럼 디바이스가 이동한 후 거리 추정치(파란선)이 안정화되는데 약 20초가 걸린다.


Device Variations


아이폰 4S, 5, 5S, 6 모델들의 블루투스 회로, 안테나, 케이스 디자인은 큰 변동이 없기 때문에 비이컨 거리 추정은 대부분의 iOS 디바이스에서 일관되게 동작한다. 하지만 항상 그런것은 아니다. 아이팟 터치에서의 거리 추정치는 블루투스 신호 수신 감도를 높이기 위해 안테나를 다른 식으로 배치했기 때문에 일반적으로 좀 더 가깝게  추정된다.

디바이스간의 variation은 안드로이드에서 훨씬 더 큰 문제이다. 각 안드로이드 모델은 완전히 다른 블루투스 칩셋, 안테나, 케이스 디자인을 가질 수 있기 때문이다. 이 모든 요인이 신호 수신 레벨에 영향을 미치므로 거리 추정치에도 영향을 미치게 된다. 넥서스4, 넥서스5와 갤럭시S4 모델은 비이컨과 같은 거리에서 상당히 크게 다른 신호 레벨로 받는다. 이런 이유때문에 Radius Networks는 다양한 안드로이드 디바이스에 대해 거리 공식 DB를 구축하기 시작했다.

Setting Expectations


비이컨에서의 거리를 추정하는게 가능하지만 이 측정치는 말 그대로 ‘추정’치라는걸 잊으면 안된다. 디비아스가 비이컨에서 더 멀어질수록, 이 추정치는 점점 더 정확하지 않게 된다. 비이컨에서 20미터 떨어진 디바이스는 거리 추정치에 +-10미터의 오차를 가지게 된다. 폰이 주머니에 들어있는가 여부, 어느 방향으로 놓여있는가, 간판 뒤쪽에 있는가, 또는 많은 사람들 무리에 막혀있는가등에 따라 비이컨과의 거리 추정치는 크게 영향을 받게 된다. 

그러므로 어떤걸 할 수 없는가를 인식하는게 중요하다.

  • 비이컨이 1미터 떨어져 있는지 아니면 10미터 떨어져 있는지는 쉽게 말할 수 있어도, 10미터 떨어져 있는지 아니면 20미터 떨어져 있는지는 말할 수 있을거라고 기대하면 안된다.
  • 노이즈를 제거하기 위해 running average를 사용하기 때문에 사용자가 움직이면 움직임을 거의 리얼타임으로 추정할 수 있을거라고 생각하면 안된다.
  • 비이컨이 있는 방향을 결정할 수 있을거라고 생각하면 안된다. 비이컨은 보통 전방향 송신기이기 때문에 거리를 추정할 수는 있어도 방향은 추정할 수 없다.
  • 비이컨과의 거리를 추정할 수 있다는것이 모바일 디바이스가 방 안에 정확히 어느 위치에 있는지 결정할 수 없다는걸 이해해야 한다. 비이컨이 실내 위치 시스템에서 구성요소로 사용될 수는 있어도 비이컨 거리 추정만으로는 문제를 해결할 수 없다.
  • 몇개의 비이컨으로 삼각측량법을 사용해 간단한 실내 위치 시스템을 만들수 있을거라고 기대하면 안된다. 거리 추정의 정확도는 거리가 멀어질수록 나뻐지기 때문에 실내에서 위치를 알기 위해 삼각측량을 사용하는건 정확한 위치 추정을 할 수 없다.

하지만 비이컨 거리 추정으로 할 수 있는 유용한 어플리케이션도 많다. 예를 들자면

  • 비이컨이 매우 가까워(5미터 이내)질 때 어떤 동작을 시작
  • 수미터 이내에 있어 신호를 수신할 수 있는 여러 비이컨들중에 어느것이 가장 가까운가를 결정하기 
  • 특정 위치를 찾는 사용자에게 거리 피드백을 제공 (예: 보물찾기)

Best Practices


최대한 정확한 거리 추정치를 얻기 위해서 Radius Networks는 다음의 내용을 권장한다.

  • 비이컨에서 가능한 최대 출력의 송신 레벨을 사용한다. 강한 시그널 레벨은 높은 SNR을 의미하기 때문에 좀 더 정확한 거리 추정이 가능하다.
  • 비이컨의 송신 빈도를 최대한 높여준다. 모바일 디바이스에 advertising 패킷이 더 많이 수신될수록, 노이즈를 제거하기 위해 평균해야 하는 샘플이 많아진다. 
  • 가능한 Radius Networks의 RadBeacon USB같이 외부에서 전원을 공급받는 비이컨을 사용한다. 그래야 배터리 수명을 걱정할 필요 없이 가장 고출력과 빠른 송신 빈도로 패킷을 advertising 할 수 있다.
  • 비이컨을 제대로 보정한다.
  • 명확하게 시야에 들어오는 장소에 비이컨을 설치한다. 사람들이 붐비는 장소라면 바닥보다는 높은 곳에 설치하는게 더 좋다.
  • 특정 안드로이드 모델을 위한 앱을 계획하거나 설치하려고 하면 거리 추정 공식이 해당 모델에 최적화 되어 있는가 확인해야 한다. Radius Networks의 Android Beacon Library는 다양한 안드로이드 모델을 위해 확장 가능한 거리 추정 공식 DB를 제공한다. 

원문은 http://developer.radiusnetworks.com/2014/12/04/fundamentals-of-beacon-ranging.html








2015년 2월 2일 월요일

에디슨에서 pushetta를 사용해 스마트폰으로 푸쉬 메시지 보내기

Pushetta documentation에 보면 실제로 메시지를 보내는 간단한 예제들을 찾아볼 수 있다.
여기서는 에디슨에서 바로 사용할 수 있는 python과 node.js를 사용해 메시지를 보내보겠다.

python 의 경우 documentation에 있는 코드를 그대로 사용하면 된다.


import
urllib2 import json data = { "body" : "Hello World", "message_type" : "text/plain", "expire" : "2015-01-01" } req = urllib2.Request('http://api.pushetta.com/api/pushes/my%20%edision%20alert/') req.add_header('Content-Type', 'application/json') req.add_header('Authorization', 'Token c4d......89') response = urllib2.urlopen(req, json.dumps(data))

위의 코드에서 빨간색 볼드체 부분만 자신의 경우에 맞게 수정해주면 된다. 'Hello World' 부분이 자신이 실제로 보내고자 하는 메시지가 되고, my%20edision%20alert에는 자신이 만든 채널 이름을, c4d......07 부분에 자신의 API key (Pushetta 홈페이지의 Dashboard에서 확인할 수 있음)을 넣어주면 된다.

만일 위의 코드를 pushettatest.py라는 이름으로 저장했다면 다음과 같이 실행하면 된다.

# python pushettatest.py


실행한 후 스마트폰을 보면 아래와 같이 메시지가 온걸 확인할 수 있을 것이다.


Node.js에서도 유사한 방법으로 메시지를 보낼 수 있다.

# cat pushettatest.js
var http=require('http');

var opt = {
  host: 'api.pushetta.com',
  path: '/api/pushes/my%20edison%20alert/',
  headers: {'Content-type': 'application/json',
            'Authorization': 'Token c4d....89'},
  method: 'POST'
};

cb = function(resp) {
  var str = '';
  resp.on('data', function(chunk) {
    str += chunk;
  });

  resp.on('end', function() {
    console.log(str);
  });
}

var msg = {'body':'Hello from nodejs'};
msg.message_type='text/plain';
msg.expire='2015-12-31';

var req = http.request(opt,cb);

req.write(JSON.stringify(msg));
req.end();
# node pushetta.js
{"success": true, "error_code": ""}
#



여기서는 에디슨에서 실행을 시켰지만 리눅스를 실행하는 다른 보드(Raspberry pi, Beaglebone Black 등)에서도 동일하게 적용할 수 있다. 또한 documentation을 참고하면 아두이노에 ethernet shield를 붙여서도 메시지를 보낼 수 있다.




2015년 2월 1일 일요일

아이폰이나 안드로이드폰으로 원하는 푸쉬메시지를 보내는 방법....Pushetta

아이폰이나 안드로이드 폰에 푸쉬를 통해 리얼타임으로 원하는 notification message을 보낼 수 있는 방법으로 pushetta 가 있다.


먼저 pushetta에 가입을 해야 한다. (http://www.pushetta.com)

이메일 주소만 있으면 무료로 쉽게 가입할 수 있다.


가입을 한 후 로그인 하면 나오는 초기화면이다.


Dashboard로 가 보면 자신의 API 키를 확인할 수 있다. 이 API 키를 알아야 추후 푸쉬 메시지를 보낼 수 있다.


이제 'New Channel' 버튼을 눌러 새로운 채널을 생성한다.


'Add a Channel' 버튼을 눌러준다.


새로 만들 채널에 대한 정보를 넣어준다. 채널 사진은 꼭 256x256 픽셀 크기여야만 한다. Channel Name은 나중에 이 채널을 검색할 때 사용하기 때문에 정확하게 넣어줘야 한다. 자신의 채널 이름이 다른 사람에게는 보이지 않게 하려면 'Hidden'을 체크해주면 된다.


'Create' 버튼을 누르면 채널이 생성되었고 위와 같은 채널에 대한 화면이 나오게 된다.

이제 스마트폰에 Pushetta 앱을 설치한다.



앱을 실행하면 아래와 같은 초기화면이 나타난다.


화면 좌측 상단의 '+' 버튼을 클릭해 채널을 등록해준다.


아까 만든 채널 이름을 넣어주면 된다.


채널을 선택하면 바로 메시지를 받을 수 있는게 아니고 채널 오너에게 요청메일이 날라가게 되고 오너가 허가를 해 줘야 메시지를 받을 수 있게 된다.

가입할 때 기입한 이메일로 요청이 왔다는 메일이 날라오게 된다. 메일의 링크를 클릭하면 pushetta 페이지의 채널 정보 페이지로 가게 되고 pending request가 있다고 표시가 되어 있다.


빨간색 'Pending requests' 버튼을 클릭하면 아래 화면이 나오게 된다.


디바이스 정보를 확인하고 녹색 체크 표시를 클릭해주면 허가를 해 주는 것이다.


오른쪽 아래에 방금 허가해 준 장치가 표시되어 있는걸 확인할 수 있다.

이제 스마트폰에서도 앱의 My Channel 탭으로 가 보면 채널이 등록된걸 볼 수 있다.


이제 실제로 푸쉬 메시지를 보내보도록 하겠다. 웹페이지의 'Push a message' 부분에 자신이 원하는 메시지를 써 넣고 'Send' 버튼을 누르면 된다. 버튼을 누르면 스마트폰에 곧바로 푸쉬 메시지가 전송된다.



앱의 'Notification' 탭으로 가 보면 방금 보낸 메시지의 내용을 확인할 수 있다.



이렇게 간단하게 자신이 원하는 메시지를 푸쉬를 통해 스마트폰에 리얼타임으로 바로 보낼 수 있다. 여기서는 테스트를 위해 홈페이지에서 메시지를 보냈지만 표준 web API를 사용하고 있기 때문에 다양한 언어(python, javascript 등등)및 여러 디바이스(아두이노, Raspberry Pi, Edison 등등)에서 스마트폰으로 푸쉬 메시지를 보낼 수 있어 매우 다양한 방법으로 사용할 수 있다.

다음 포스트에서는 에디슨에 센서를 연결해 사람이 문으로 들어오면 스마트폰으로 알려주는 데모를 만들어 보도록 하겠다.

2011년 8월 12일 금요일

어학학습에 유용한 앱 Robick


Robick은 딕테이션이나 어학공부에 매우 유용한 아이폰/아이팟 터치용 앱이다.
$2.99로 앱스토어에서 구입하면 된다.


플레이 범위 설정 모드이다. 빨간색 범위가 플레이를 원하는 부분이고 오렌지색이 현재 플레이 될 부분이다. 다만 Repeat mode가 위와 같이 비활성화 되어 있을때는 빨간색 범위는 아무 의미가 없다.


Repeat mode를 위와 같이 변경해 주면 빨간색 범위만 재생이 된다. 재생이 끝나면 다시 빨간색 앞부분으로 돌아가 반복적으로 재생된다.


조작법을 잘 모를때는 화면 우측 아래의 'i' 버튼을 누르면 화면에 각 버튼의 동작이 오버레이로 표시된다.


Change mode 버튼을 누를때마다 곡에서 플레이 할 범위 및 반복설정 -> 키/피치/톤 설정 -> 이퀄라이져 -> 플레이 할 범위 및 반복설정 .... 순으로 모드가 바뀐다.
위의 화면은 키/피치/톤 설정 모드이다. 현재 조작할 컨트롤이 원의 가장 바깥쪽 띠가 되고 그에 해당하는 색으로 바뀐다. 위에서는 현재 피치 변경 모드이고 피치에 해당하는 색의 띠가 원의 가장 바깥쪽에 나와 있는걸 볼 수 있다.


이퀄라이져 모드이다.


 오른쪽 맨 아래 두개의 버튼은 각각 플레이리스트 수정과 옵션설정이다.


 옵션 설정 모드이다. 다양한 옵션을 바꿔줄 수 있고 Reverse Playback을 On으로 해 주면 곡을 꺼꾸로 플레이 할 수도 있다.


플레이리스트 수정 모드이다. 아이폰/아이팟 터치에 들어있는 곡들을 플레이 리스트에 추가하거나 플레이 리스트에서 곡을 삭제할 수 있다.

동작 동영상이다.





2010년 2월 12일 금요일

iProcessing - 아이폰용 프로세싱 (Processing for iPhone)

iProcessing이라는 아이폰용 Processing이 나왔다.

Processing은 Ben Fry와 Casey Reas가 만든 오픈소스 프로그래밍 언어로 배우기 쉬워 미디어 아트나 예술계 쪽 학생들이 취미나 프로토타이핑, 미디어 아트 작품 제작에 많이 사용되고 있다.


맥, 윈도우, 리눅스등 플랫폼을 가리지 않고 동일하게 사용할 수 있다.


이전 포스트에서도 한번 소개했던 것처럼 Mobile Processing이라고 java를 지원하는 휴대폰에서 실행되는 Processing도 있고 Wiring 보드에서 실행되는 코드를 만들어주는 Wiring이라는 Processing 도 있다.

모바일 프로세싱 - 휴대폰에서 프로세싱을 사용하기 (Mobile Processing runnng on a cellphone)

모바일 프로세싱을 사용해 보기 (Using Mobile Processing)

그런데 아이폰은 아쉽게도 java를 지원하지 않기 때문에 Mobile Processing을 사용할 수 없었는데 이번에 아이폰에서 동작하는 코드를 만들어주는 Processing인 iProcessing 나온 것이다.



다만 다른 Processing과 차이점은 위의 화면과 같이 프로그램상에서 직접 코드를 집어넣어 실행파일을 만들어 주는게 아니고 아이폰용 앱을 만들 수 있는 프레임웍 형태로 제공된다.


iProcessing을 다운받아 압축을 풀으면 위와 같은 파일이 생긴다. Processing이나 Mobile Processing과는 달리 별도의 실행파일은 없다.


examples 폴더로 들어오면 이런식으로 각각의 예제 프로젝트가 들어있다.


Animator 폴더의 내용이다. Xcode 프로젝트 파일이 들어있는게 보인다. 저 파일을 더블클릭하면 Xcode가 실행되고 프로젝트가 열린다.


main 폴더의 내용이다. 다른 부분은 프레임웍의 일부분으로 손 댈 필요가 없고 main.pde를 수정해서 자신이 원하는 동작을 하게 해 줄 수 있다.


이 파일을 수정해 원하는 프로그램을 만들어 준 다음 Xcode에서 빌드하면 아이폰 시뮬레이터에서 직접 실행시켜 동작을 확인할 수 있다.

기본적인 processing의 기능 이외에 추가로 멀티터치, 가속도센서, 방향(가로/세로), 위치, 사운드 플레이/녹음 등등 아이폰의 다양한 기능도 사용할 수 있다. 또한 따로 Objective-C를 배우지 않아도 간단하게 아이폰 앱을 만들어 줄 수 있다.


2009년 12월 6일 일요일

아이폰 팁) Apps가 메모리 부족이라고 설치되지 않을 때...(When apps can not be installed by memory shortage..)

아이폰/터치팟 플래쉬 용량이 작은건 아니지만 음악에 apps들을 넣다보면 어느새 부족해지기 쉽상이다.
그 중 좀 황당하고 골치아픈 문제중 하나가 아이튠에서 apps를 구입한 다음 아이폰/터치팟과 싱크를 시키는데 '메모리 부족'이라는 에러를 내고 설치가 되지 않는 경우이다.

지도 데이터를 모두 포함하고 있어 용량이 큰 apps중 하나인 Playmap 같은 경우 아이튠에서 봤을 때 343MB 용량이다.

그런데 free space가 4~500MB 정도 남아있는 아이폰으로 옮기려고 sync를 하면 메모리가 부족하다고 에러가 나고 설치가 진행되지 않는다.

그 원인은 아이폰/터치팟의 apps는 ipa라는 확장자를 가지는데 확장자만 다른 이름일 뿐 실제로는 zip 파일이다. 아이폰에 설치할 때 일단 아이튠에서 아이폰으로 ipa파일이 전송된 다음 아이폰에서 압축을 풀어 설치하게 되기 때문에 설치를 위해서는 아이폰에 apps 파일 크기보다 최소 2배 이상의 free space가 있어야만 한다. 실험해 본 결과 800MB 이상의 빈 공간이 있어야만 Playmap이 설치가 가능했다.
하지만 설치가 끝나면 ipa파일은 압축을 푼 다음에는 아이폰에서는 자동으로 삭제되어 버리기 때문에 Playmap이 설치되고 난 다음에 확인해 보면 아이폰에는 약 350MB의 빈 공간이 남아있다.



그러므로 apps설치 시 apps 크기보다 빈 공간이 아직 남아 있는데도 이런 에러가 생기는 경우 해결책은 크기가 작은 apps들을 지우거나 음악/비디오 파일을 지워 충분한 공간을 만들어 줘서 원하는 apps를 설치한 다음 지웠던  apps/음악/비디오를 다시 넣어주면 된다.

즉 예를 들어 app A의 크기가 300MB이고 빈 공간이 500MB인데 메모리 부족으로 설치가 안된다면 이미 설치도어 있는 약 150MB크기의 app B를 지워준다. 그러면 빈 공간은 500+150=650MB가 되어 app A를 설치할 수 있게 된다. App A가 설치되고 나면 빈 공간은 다시 약 350MB정도가 남기 때문에 app B를 재설치하는데는 문제가 없다.

2009년 12월 2일 수요일

아이폰 필드테스트 모드 들어가기(Entering iPhone field test mode)

아이폰에서 필드테스트 모드로 들어가는 방법은 다음과 같다.


아이폰 전화 모드에서 '*3001#12345#*'를 넣고 통화(Call) 버튼을 누르면 바로 Field Test 모드로 진입한다.

Field Test 모드 메뉴 화면이다.




각 메뉴로 들어가면 위와 같은 무선망에 대한 상세 정보를 직접 확인이 가능하다.

* 필드테스트 모드에서 확인할 수 있는 내용은 상당히 전문적인 값들이라 휴대폰 기술 관련되어 각 용어와 의미를 아는 사람이 아니면 별로 필요 없는 내용이다.


2009년 11월 30일 월요일

아이폰에서 풀사이즈의 사진을 메일로 보내기

아이폰에서 사진을 찍은 다음 그 사진을 메일로 보내면 사진 크기가 자동을 800*600(원래 크기의 1/4)으로 리사이즈 되어 보내지게 된다.
웹사이트에 첨부하거나 싸이에 올리는데는 충분한 크기지만 인쇄를 하거나 후보정을 원하는 경우는 풀사이즈(1600*1200)의 사진이 필요하다.

먼저 'Photos' 앱을 실행한다.

Photos 앱에서 왼쪽 아래의 버튼을 누른다.


사진을 선택할 수 있는 상태가 되었다.


메일로 보낼 사진들을 터치해서 선택해 준다. 선택된 사진은 체크 표시가 나타난다. 선택이 끝나면 아래쪽의 Copy 버튼을 눌러준다. 그리고 Photos 앱은 종료하고 Mail 앱을 실행한다.


메일 앱에서 메일 작성을 선택하고 메일 내용에 가서 한 지점을 약간 오래 터치하고 있으면 메뉴가 나타나게 되고 그 메뉴중에 Paste를 선택해서 사진을 첨부해주면 된다.

이렇게 해서 메일을 보내면 사진이 자동으로 리사이즈 되지 않고 원래의 풀사이즈로 보내진다.

2009년 8월 22일 토요일

아이폰/터치팟 아답터 충전회로의 차이점 (Difference between iPhone/iPod Touch charging circuit)

이전 포스트에서 아이폰/아이팟 터치 충전회로에 대해 설명한 적이 있었다.
저항을 4개 사용한 회로를 소개했는데 인터넷을 찾아보면 2개의 저항을 사용한 회로도 있고 실제로 그 회로를 사용해도 충전에 문제가 없다.
그래서 그 차이점을 알아 보았다.

이전 포스트에서 사용했던 저항 4개를 사용한 회로이다. 여기서 R3은 150Kohm, R4는 100Kohm, R1/R2는 둘 다같은 값의 저항(100Kohm을 사용하면 무난)을 사용해주면 된다.


저항을 2개만 사용하는 회로이다. 여기서 R1/R2는 둘 다 같은 값의 저항(50Kohm이나 100Kohm정도)을 사용하면 된다.



위쪽 회로의 경우 D-는 2.5V, D+는 2V가 걸리게 되고 아래쪽 회로의 경우는 D-, D+ 모두 2.5V가 걸리게 된다. 아이폰/아이팟 터치의 충전회로는 D+, D-에 걸리는 전압을 측정해서 얼마만큼의 전류를 사용할 수 있는지 판단한다.
위쪽의 저항을 4개를 사용한 경우에는 750mA의 전류를 사용하고 아래쪽의 저항을 2개만 사용한 경우에는 500mA의 전류를 사용한다.

즉 충분한 전류를 공급할 수 있는 경우 위쪽의 회로를 사용해주면 좀 더 빨리 충전이 되고 그렇지 않은 경우 아래 회로를 사용해도 충전은 되지만 시간이 조금 더 걸리게 된다.