* 참고: OSD(On Screen Display)란?

모니터의 화면을 사용자가 직접 최적화시킬 수 있도록 해주는 조정 기능. 화면에 나타난 OSD 창을 통해 조정하는데 테스트 프로그램을 사용하여 최적화 작업을 하는 것으로, 조정할 수 있는 항목은 모니터에 따라 조금씩 다르지만 주로 화면 밝기(brightness)와 대비(contrast), 동조, RGB 조정, 화면의 상하 좌우 크기 및 위치 조정 등이 포함된다.

- 출처: [네이버 지식백과] OSD [On Screen Display] (IT용어사전, 한국정보통신기술협회)

 

 

즉, 쉽게 말해서 모니터의 MENU버튼을 눌렀을때 뜨는 설정 화면이다.

 

알파스캔(Alphascan) 모니터에서 메뉴 버튼을 눌렀을 때 『OSD 잠김』이라고 표시되면서 메뉴가 열리지 않을 때는

 

전원버튼과 메뉴버튼을 동시에 약 1초정도 누르고 있으면 된다.

 

다시 잠글 때도 동일한 방법을 사용한다. 즉 토글(Toggle) 형태로 되어있다.

 

 

이 때, 버튼을 동시에 눌러도 반응이 없는 듯 한 경우가 있는데

 

그럴 경우에는 전원버튼을 메뉴버튼보다 살짝 먼저 눌러보는 것이 좋다.

 

 

제대로 두 버튼을 눌렀다면, 화면이 약 1~2초 정도 꺼졌다가 다시 켜지며 OSD 잠금 설정이 변경된다.

 

* 주의: 모든 기종에 대해 테스트해보지는 않았으므로 일부 기종은 적용되지 않을 수도 있음.

 

+ 내용추가: 알파스캔 홈페이지의 고객지원 메뉴에 모델별 OSD 락 해지 방법이 나와있다.

 

http://www.alphascan.co.kr/customer/faq_view.asp?number=478&boardcode=&cur_page=1

 

 

 

Posted by Kugi
,



리눅스 민트 13에서 파이어폭스를 실행시켰는데

 

다음과 같은 프로필 미싱 메시지가 뜨며 실행이 되지 않았다.

 

 

 

원인은 한국어 파일이 충돌이 생기기 때문인 듯 하다.

 

Your Firefox profile cannot be loaded. It may be missing or inaccessible.

 

이 문제를 해결하기 위해서는 터미널에 다음과 같이 입력하면 된다.

 

sudo apt-add-repository 'deb http://us.archive.ubuntu.com/ubuntu/ lucid-security main'
sudo apt-get update
sudo apt-get install firefox/lucid-security

 

 

또는 아예 한국어 패치파일을 삭제하면 된다.

 

이 경우 한글 사용이 불가능한 것은 아니지만 파이어폭스 자체의 언어는 다른 언어로 사용해야 한다.

 

한국어 패치파일의 기본 경로는 다음과 같다.

 

/usr/lib/firefox-addons/extensions/langpack-ko@firefox.mozilla.org.xpi
Posted by Kugi
,



리눅스 민트(버전13)을 설치하고 한글 언어 설정을 하려고 했는데 다음과 같은 형태의 Failed가 떴다.

 

(정확한 내용은 기억이 나질 않아서 유사한 형태의 메시지를 첨부한 것이다. 서버 IP 주소는 91.189.91.13 : 80 으로 동일하다.

...
Failed to fetch http://security.ubuntu.com/ubuntu/dists/nadia-security/main/binary-amd64/Packages  404  Not Found [IP: 91.189.92.200 80]
...
Failed to fetch http://mirror.umd.edu/linuxmint/packages/dists/nadia/restricted/source/Sources  404  Not Found
...

 

터미널에서 apt-get 을 이용해서 시도해보아도 마찬가지 결과였다.

 

구글링을 통해 해결 방법을 찾았는데, 터미널에 다음과 같이 입력함으로써 간단하게 해결 가능하다.

sudo rm /var/lib/apt/lists/* -vf 
sudo apt-get update 

 

apt의 리스트 변수 목록을 제거하고 새로 업데이트 하는 명령어로 보인다.

 

이것을 입력하여 처리한 뒤 Language Support에서 한국어 Install을 다시 시도하였더니

 

이번엔 Failed가 되지 않고 제대로 진행이 되었다.

'Development > Linux' 카테고리의 다른 글

[Linux Mint 13] FireFox Profile Missing  (3) 2013.07.19
Posted by Kugi
,



 

 

 

Posted by Kugi
,



안드로이드의 ViewPager 및 BitmapFactory를 이용해서 몇 종류의 이미지들을 모아 보여주는 기능을 구현하였는데

다음과 같이 OOM(Out Of Memory Error)를 맞닥뜨렸다.

 

07-08 00:21:48.309: E/dalvikvm-heap(28645): Out of memory on a 13498800-byte allocation.
07-08 00:21:48.309: I/dalvikvm(28645): "main" prio=5 tid=1 RUNNABLE
07-08 00:21:48.309: I/dalvikvm(28645):   | group="main" sCount=0 dsCount=0 obj=0x40cfc460 self=0x1969d88
07-08 00:21:48.309: I/dalvikvm(28645):   | sysTid=28645 nice=0 sched=0/0 cgrp=default handle=1075004776
07-08 00:21:48.309: I/dalvikvm(28645):   | schedstat=( 0 0 0 ) utm=789 stm=548 core=1
07-08 00:21:48.309: I/dalvikvm(28645):   at android.graphics.Bitmap.nativeCreate(Native Method)
07-08 00:21:48.319: I/dalvikvm(28645):   at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
07-08 00:21:48.319: I/dalvikvm(28645):   at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
07-08 00:21:48.319: I/dalvikvm(28645):   at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
07-08 00:21:48.319: I/dalvikvm(28645):   at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:524)
07-08 00:21:48.319: I/dalvikvm(28645):   at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
07-08 00:21:48.319: I/dalvikvm(28645):   at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
07-08 00:21:48.319: I/dalvikvm(28645):   at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:374)
07-08 00:21:48.319: I/dalvikvm(28645):   at

...

 

 

07-08 00:21:48.749: E/AndroidRuntime(28645): FATAL EXCEPTION: main
07-08 00:21:48.749: E/AndroidRuntime(28645): java.lang.OutOfMemoryError
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.Bitmap.nativeCreate(Native Method)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:524)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:374)
07-08 00:21:48.749: E/AndroidRuntime(28645):  at

...

 

이 문제를 해결하기 위해서 이틀 정도를 고생했다.

 

원인은 예상치 못했던 곳에 있었다.

 

어느 정도 감이 있는 사람이라면 다음의 로그를 보고 알아차릴 수 있을 것이다.

 

이 로그는 어플리케이션을 실행해서 이미지들을 보여주는 기능을 수 차례 반복 수행 하면서 기록된 것이다.

 

 

07-08 00:18:30.756: I/_PracticePagerAdapterClass(28645): parent: onPageSelected()=4
07-08 00:18:31.357: I/_PracticePagerAdapterClass(28645): destroyItem: position=1/13, bitmapSize=8191152
07-08 00:18:31.527: I/_PracticePagerAdapterClass(28645): instantiateItem: position=6/13, bitmapSize=8191152
07-08 00:18:43.208: I/_PracticePagerAdapterClass(28645): parent: onPageSelected()=5
07-08 00:18:43.839: I/_PracticePagerAdapterClass(28645): destroyItem: position=2/13, bitmapSize=8992608
07-08 00:18:44.109: I/_PracticePagerAdapterClass(28645): instantiateItem: position=7/13, bitmapSize=18348016
07-08 00:19:15.260: I/_PracticePagerAdapterClass(28645): parent: onPageSelected()=4
07-08 00:19:16.191: I/_PracticePagerAdapterClass(28645): instantiateItem: position=2/13, bitmapSize=8992608
07-08 00:19:16.191: I/_PracticePagerAdapterClass(28645): destroyItem: position=7/13, bitmapSize=18348016
07-08 00:19:32.987: I/_PracticePagerAdapterClass(28645): parent: onDestroy()
07-08 00:19:40.224: I/_PracticePagerAdapterClass(28645): parent: onCreate()
07-08 00:19:41.075: I/_PracticePagerAdapterClass(28645): instantiateItem: position=0/13, bitmapSize=13498784
07-08 00:19:42.716: I/_PracticePagerAdapterClass(28645): instantiateItem: position=1/13, bitmapSize=8191152
07-08 00:19:42.897: I/_PracticePagerAdapterClass(28645): instantiateItem: position=2/13, bitmapSize=8992608
07-08 00:19:54.408: I/_PracticePagerAdapterClass(28645): parent: onDestroy()
07-08 00:20:00.544: I/_PracticePagerAdapterClass(28645): parent: onCreate()
07-08 00:20:01.435: I/_PracticePagerAdapterClass(28645): instantiateItem: position=0/13, bitmapSize=13498784
07-08 00:20:01.585: I/_PracticePagerAdapterClass(28645): instantiateItem: position=1/13, bitmapSize=8191152
07-08 00:20:01.825: I/_PracticePagerAdapterClass(28645): instantiateItem: position=2/13, bitmapSize=8992608
07-08 00:20:06.319: I/_PracticePagerAdapterClass(28645): parent: onDestroy()
07-08 00:21:47.618: I/_PracticePagerAdapterClass(28645): parent: onCreate()

...

 

다음의 이미지에서 확인할 수 있듯이, 페이지는 항상 Instantiate 되었지만 정작 Destroy 되는 순간은

 

현재 보고 있는 페이지가 이동하면서 준비된 페이지의 수가 설정된 최대 준비페이지 수(여기서는 5개)보다 많아졌을 때 뿐이었다.

 

따라서 각각의 Page에 연결되었던 Bitmap Drawable들은 해제되지 못한 채 가비지 컬렉터(GC)에서 처리되지 못 하고 마는 것이다.

 

 

 

 

 

그래서 나는 ViewPager를 포함한 parent에서 onDestory()가 호출될 때 pagerAdapter에 따로 만들어 둔 비트맵 리사이클 메서드를 호출하도록 하였다.

 

결과는 만족스러웠다. 몇 번 액티비티를 들락날락거리면 죽어버리던 앱이 몇 십번을 반복해도 이상이 없었다.

 

참고로, 어떤 식으로 해결했는지에 대해 말하자면

 

adapter 클래스에 전체 페이지 갯수만큼의 크기의 boolean 배열과 ImageView 배열을 만들어서

 

각각의 위치의 페이지들이 instantiate 되었는지 아니면 destory 되었는지 체크해 두었다가

 

parent Activity의 onDestroy()에서 해당 배열을 처리하는 메서드를 호출하는 방법을 사용하였다.

 

예를 들면 다음과 같은 소스코드이다.

 

 

 

 

 

덧붙여 말하자면, ViewPager를 좌, 우로 넘기기만 헀을 뿐인데도 메모리 에러가 생기는 경우는

 

destroyItem()에서 리소스의 뒷처리를 하지 않았기 때문일 가능성이 크다.

 

Posted by Kugi
,