티스토리 툴바

  블로그   태그   위치로그   이웃로그   방명록
          
 
 
 
 
     
 
  루팅, 백업, Wipe, SD card partitioning, Rom up  +   [Sapzil -_-]   |  2011/08/04 02:05

 1. 루팅
  - 진저브레이크 apk 파일을 폰에 설치하여 사용.
  - SD카드는 설정 메뉴를 통해 초기화했다.  그러기 위해서 SD 카드 강제설치 했던 어플들을 다시 폰으로 옮겼고, 그러다보니 내장용량 초과해서 몇몇 어플들은 지워야했다. 꼭 그럴 필요가 있었는진 잘 모르겠다.

2. 백업
  - 루팅을 먼저 한 이유는 Mybackup root를 사용하기 위해서였다.
  - 성능은 상당히 만족스러웠음! 마켓에서 받은거건 안받은거건 상관없이 기존에 있었던 어플의 거의 모든 설정과 데이터가 복원되었다. 하지만 폰 사고나서 한번도 메시지 쪽 정리를 안했더니 이쪽에서 시간이 오래 걸렸다. 데이터 데이터.. 

3. Rom Manager를 통한 리커버리 설치 & 리커버리 모드 부팅 
  - 이건 마켓에서 슥슥... RA recovery를 사용했다. 
  - 리커버리 모드로 부팅하는데, 이상하게 설치하고나서 재부팅 메뉴 선택해야만 작동했다. 다시 말해서, 처음에 설치 -> 재부팅 -> 별짓 안하고 일반 모드로 재부팅 -> 다시 rom manager 실행하여 리커버리 모드로 재부팅 선택 .... 일 경우엔 느낌표 뜨면서 안된다는거다. 1 설치에 1 재부팅? 왜 그런진 몰라두. 

4. Nand backup
  - 필요했는지는 모르지만 여튼 이 기능을 사용해서 기존에 사용하던 정품롬을 백업했다. 
 
5. Wipe, SD card partitioning
  http://www.gili4u.com/390 를 참고하여 진행했음미.. SD 카드 파티션 나누면 컴터에서 이동식 메모리로 인식 안된단 제보가 있던데 ㅠㅠ 진짜일까? 그냥 CM7 자체 문제란 이야기도 있구.. 여튼 저게 롬업후 겪고 있는 문제 중 하나임

6. CM7, 구글앱, A2SD 패치 설치
http://download.cyanogenmod.com/?type=stable&device=passion
http://wiki.cyanogenmod.com/index.php?title=Latest_Version#Google_Apps
http://forum.xda-developers.com/showthread.php?p=7025105


설치 방법은 역시 위에 링크한 포스트에 나온대로.. 그렇게 SD card 최상위 폴더에 옮기고, flashing! 

7. 재부팅 후 이런 저런 설정 
 Flashing 후 쫌 기다리면 재부팅된다. 첨에는 부팅 화면이 계속 반복되어서 이게 말로만 듣던 무한재부팅 현상인가 하고 후덜덜했는데 한 두세번? 반복된 끝에 CM7의 찬란한 부팅 화면 등장!! 올레!! 

그 뒤엔 넥원이 첨 샀을때 봤던 안드로보이의 등장. 하지만 그 상태에서 그 아이를 터치하지 말고 A2SD 설정을 손봐주라는 http://sihloh.egloos.com/2074982 포스트의 내용을 따랐더니, 무난히 A2SD가 적용된 것을 확인할 수 있었다 (Quick system info Pro에서 A2SD storage를 볼 수 있다)

그 다음엔.. 왠지 모르게 USB 연결이 안되니 swiftp 이용해서 백업 파일 SD 카드로 옮긴담에 어플, 어플데이터, 문자, 통화기록 등등 전부 다 말끔히 복원했고 (Launcher pro 의 데이터가 복원된 결과인지 홈스크린 구성 및 위젯, 바로가기 배치까지 완벽 복원!! 단 위젯의 경우 표시할 수 없다고 뜬게 대부분이라 다시 만들어줘야 하긴 했다)..

그래두 롬업을 했으니 좀 디자인을 바꿔봐야 하지 않을까 싶어서 테마를 바꿔볼까 하기도 하고 이래저래 고민하다가 귀찮아서 때려침... -_-  


애시당초 MIUI대신 CM7을, ADW launcher 대신 launcher pro를 택했을 때부터 각오해야 했던 바이긴 하지만 롬업을 한다고 확 드라마틱하게 이뻐지는건 아닌거 같다. 이거저거 많이 얹어진  커펌대신 그냥 CM7을 설치했으니 무슨 블랙마켓? 이니 유료 어플 정품이니 하는 것들이 들어가있는 것도 아니구.. 뭐 그래두 넥원이 산지 1년만에 이짓을 하기로 결심하게 된 결정적 계기인 A2SD가 잘 동작되었으니 대만족. 말로만 듣던 FM 라디오, 녹음, 캡쳐 기능도 만족. BC 카드 어플이 안되는건 약간 불만족... 하지만 이건 궁극적으로 key ring으로 옮기면 될테고. 



** 마이크 먹통, 스피커 volume 줄어드는 버그: 이미 보고되어 있음. 
  후자의 경우 한번 겪었는데, 재부팅 후에 다시 안나타나고 있음. 전자의 경우, Wildmonk's kernel 올려서 해결.
  (커널 올리는법: zip 파일 받아서 sd카드 최상위폴더에 넣어둔 다음에 복구모드에서 flashing)

 
 
TRACKBACK 0    COMMENT 0
  Android Programming - Hello World  +   [Study/Research/CSE]   |  2010/10/17 23:16
1. Package 구조
  HelloWorld - src - net.npaka.helloworld - HelloView.java & HelloWorld.java

(※ net.npaka.helloworld - 클래스명의 충돌을 피하기 위한 이름공간. 보통은 <자기 사이트명 역순>.<프로젝트명 in 소문자> 라는 convention으로...)


2. HelloWorld.java

* 회색 글자: 처음 프로젝트 생성했을 때 완성되어 있는 부분
package net.npaka.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class HelloWorld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(new HelloView(this));
    }
}

  ① 사용할 라이브러리
* 기본적으로 자바 언어의 표준 API 중 일부와 안드로이드의 독립적 API를 사용 가능

  안드로이드 API 레퍼런스: http://developer.android.com/reference/packages.html

* android.app.Activity: 이게 바로 그 유명한 액티비티.... HelloWorld 클래스는 이 아이의 자식 클래스임.

- android.app: High-level classes encapsulating the overall Android application model. The central class is Activity(화면 상에서 표시되는 작업), with other top-level application components being defined by Service(백그라운드에서 지속되는 작업) and, from the android.content package, BroadcastReceiver(다른 어플이나 OS가 보내오는 인텐트-액티비티나 서비스가 메시지 교환에 사용하는 메시지 객체-를 수신) and ContentProvider(데이터베이스의 데이터를 다른 어플에 제공). It also includes application tools, such as dialogs and notifications.
- Activity: An Activity is a specific operation the user can perform, generally corresponding to one screen in the user interface. It is the basic building block of an Android application. Examples of activities are "view the list of people," "view the details of a person," "edit information about a person," "view an image," etc. Switching from one activity to another generally implies adding a new entry on the navigation history; that is, going "back" means moving to the previous activity you were doing.

* android.os.Bundle: Activity의 onCreate()에 Bundle 객체가 인자로 들어감.
* android.view.Window: view는 문자 그대로 화면에 디스플레이 되는 것들. 그 중 하나가 Window 인거..


  ② 액티비티의 라이프사이클
액티비티의 라이프 사이클 (출처: Google Android API Reference)
* android.app.Activity 클래스를 상속받은 HelloWorld 클래스는 (이하 HelloWorld 액티비티) onCreate()를 오버라이딩하고 있음.
* onCreate()는 Bundle 타입 객체를 입력받아 실행되도록 정해져있음. 액티비티가 재시작 되거나 하는 경우엔 이전까지 저장된 데이터들이 전달되는거고, 아닌 경우엔 널값인 느낌?
* HelloWorld의 onCreate()는 Activity의 onCreate()가 하는 기본적인 일은 다 해놓고(= super의 onCreate()를 호출), 그 다음에 추가적으로 뭔가를 더 하는 식으로 작동함
  - requestWindowFeature(Window.FEATURE_NO_TITLE): 타이틀 없는 창을 쓸거라고 선언
  - setContentView(new HelloView(this)): 창에 뿌려줄 내용물을 세팅. 뭘 뿌려줄거냐고? HelloView 클래스의 constructor가 하는 짓거리가.


3. HelloView.java

package net.npaka.helloworld;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class HelloView extends View {
    // Constructor
    public HelloView(Context context) {
        super(context);
        setBackgroundColor(Color.WHITE);
    }
   
    // 결국 이짓거리 하나 하자고 주구장창...
    @Override
    protected void onDraw(Canvas canvas){
        canvas.drawText("Hello World!", 0, 12, new Paint());
    }
}

  ① 사용할 라이브러리
* android.content.Context: Constructor의 인자로 넘겨짐. 대략 해당 어플리케이션의 전반적 환경 정보에 접근할 수 있게 해주는 인터페이스 객체라고 보면 됨.. (그 정보를 바탕으로 VIew를 구성하라는 거지)

  android.content contains classes for accessing and publishing data on the device. It includes three main categories of APIs: the Resources for retrieving resource data associated with an application; Content Providers and ContentResolver for managing and publishing persistent data associated with an application; and the Package Manager for finding out information about the application packages installed on the device. In addition, the Context abstract class is a base API for pulling these pieces together, allowing you to access an application's resources and transfer data between applications.This package builds on top of the lower-level Android packages android.database, android.text, android.graphics.drawable, android.graphics, android.os, and android.util.

* android.view.View: 화면 상에 비치는 직사각형 영역을 의미. 구성 요소를 그려내고, 각종 이벤트를 처리하는 일이 여기서 이뤄짐. 그런고로 HelloView가 View를 상속하는 것. HelloView의 constructor는 View의 constructor가 하는 기본적인 일을 다 해놓고(=super의 constructor 호출), 거기에 추가적으로 한가지 더함. 배경화면을 하얀 색으로 셋팅하는거....

* android.graphics.Color/Canvas/Paint: 뭔가 이름만 봐도 빤한 일들을 실제로 수행하고 있음.
  - Color: 배경 화면 셋팅 함수에 인자로 들어감.
  - Canvas:   HelloWorld 어플의 가장 핵심적 기능이라 할 수 있는 'Hello World!'의 출력은  View의 onDraw()를 오버라이딩함으로써 이뤄진다. 이 메소드는 어플을 실행할 때, 또는 화면을 다시 그릴 필요가 있을 때 호출된다. 이 함수의 인자로 들어가는게 캔버스. 캔버스를 줄테니, 여기다가 화면에 보이고 싶은 내용을 그려내란 소리.
  - Paint: 캔버스에 뭔가를 그린다 = 캔버스 클래스의 각종 메서드들을 호출해라. 그래서 Hello World! 라는 텍스트를 출력하기 위해 호출되는 함수가 Canvas.drawText(). 이 함수의 스펙은 다음과 같다.

 public void  drawText  (String text, float x, float y, Paint paint)

Draw the text, with origin at (x,y), using the specified paint. The origin is interpreted based on the Align setting in the paint.

  비유하자면 캔버스 안에 사는 애한테 출력시킬 문구와, 띄워보일 위치, 그리고 적절한 도구를 쥐어주고 명령을 내리는 것과 같다. Paint 객체를 통해 색깔, 사이즈, 스타일 등을 지정할 수 있다. 여기선 그냥 기본 컨스트럭터를 불렀음.


4. 응용
  ① 배경은 까맣게, 글자는 하얗게, 글자 크기도 좀 키우고 위치를 화면 한가운데로 해보긔
My truly first
* HelloView 컨스트럭터에서 배경색 셋팅 검은색으로

setBackgroundColor(Color.BLACK);

* onDraw()에서 페인트 객체 하나 만들고, 글자 크기와 색상 및 정렬방식 설정

        Paint paint = new Paint();
        paint.setTextSize(50);
        paint.setColor(Color.WHITE);
        paint.setTextAlign(Paint.Align.CENTER);

* canvas.drawText()에서 (x, y) 좌표를 전체 화면 사이즈의 중간 지점으로 설정하고, 위에서 셋팅한 페인트 객체를 인자로 넘김

canvas.drawText("Hello World!", getWidth()/2, getHeight()/2, paint);

※ 주의: 중앙정렬시 지정하는 좌표는 문자열의 중간지점이 됨!!! (i.e., 좌표를 (0, getHeight()/2)로 할 경우 문자열 왼쪽 절반이 짤림)


  ② 삭막하게 글자만 넣지 말고 이미지도 넣어보긔

* 넣을 이미지(test.png)를 HelloWorld package의 res/drawable-nodpi 폴더에 복사 (폴더 없으니깐 만들 것)

* 필요한 추가 라이브러리
  - android.content.res.Resources: 이름그대로, 리소스 타입의 객체

android.content.res contains classes for accessing application resources, such as raw asset files, colors, drawables, media or other other files in the package, plus important device configuration details (orientation, input types, etc.) that affect how the application may behave.

  - android.graphics.Bitmap: 비트맵 이미지 타입의 객체
  - android.graphics.BitmapFactory: 실제 이미지 파일(리소스 객체)과 비트맵 객체를 대응시키는 메소드 포함

android.graphics.BitmapFactory creates Bitmap objects from various sources, including files, streams, and byte-arrays.

*  HelloView 클래스에 비트맵 타입 instance를 private으로 선언하고, constructor 안에서 실제 리소스에 대응시킨다.

public class HelloView extends View {
    private Bitmap image;
   
    public HelloView(Context context) {
        super(context);
        setBackgroundColor(Color.BLACK);
       
        // Read the image
        Resources r = context.getResources(); // 현 패키지 내의 모든 resource를 읽어들임. 
        image = BitmapFactory.decodeResource(r, R.drawable.test); // 모든 resource 모음과 그 중 내가 원하는 resource의 ID를 주고, 그 결과값을 비트맵 객체에 반환받는다. ID 지정 방식에 주목..
    }


* 이미지 그리기는 onDraw에서, canvas.drawBitmap 함수 사용.

    protected void onDraw(Canvas canvas){
        int screenWidth = getWidth();
        int h = image.getHeight();
        int w = image.getWidth();
       
        // Draw the image
        canvas.drawBitmap(image,(screenWidth/2)-(w/2), 150, null);
        // 마지막 파라미터는 paint 객체가 들어가는 자리
       
        // Draw "Hello World!"
        Paint paint = new Paint();
        paint.setTextSize(60);
        paint.setColor(Color.WHITE);
        paint.setTextAlign(Paint.Align.CENTER);
       
        canvas.drawText("Hello World!", screenWidth/2, 150+h+80, paint);





 
TAG Android Programming
TRACKBACK 0    COMMENT 0
  PAMIE & BeautifulSoup  +   [Sapzil -_-]   |  2010/10/12 04:02
1. 모듈 못찾는 문제
  >> \Lib\site-packages\ 폴더에 확장자 pth인 파일을 만들고, 그 안에 압축 푼 폴더 명을 적는다 (eg. pamie20). 그리고 python 재실행.

2. PAMIE 코딩의 기본 마인드
  ① PAMIE로 할 수 있는 일 = 글 입력, 리스트·체크박스·라디오박스 선택, 링크 및 버튼 클릭 등을 자동으로 시키기
                                         (가장 좋은 레퍼런스: PAMIE 압축 풀면 나오는 readme.html)
  ② 기본 틀
 
     - 초기화: 현 페이지에 대한 객체 ie를 생성한다.

ie = PAMIE()
ie.navigate(주소)

     - 현 페이지 내에 있는 element 들 중 원하는 것을 지정하여, 클릭하거나 특정 값을 셋팅한다.
       (a href 링크는 link~ 로 시작하는 함수들, 아뒤 비번 입력창은 textbox~로 시작하는 함수들을 쓰면 됨)

     - 지정법: 그 element에 이름이나 id가 지정되어 있는 경우는 제일 쉬움(Set function에 그걸 인자로 넘겨주면 됨), 그렇지 않을 경우는 그 페이지 내에 있는 모든 element의 리스트를 얻은 뒤 대충 HTML source 내에서의 위치를 기준으로 이것 저것 쳐보면서 건드리고픈 녀석의 인덱스를 파악 → 그렇게 얻은 object를 set function에 인자로 넘김


3. BeautifulSoup
  ① 단순한 작업은 그냥 urllib로 특정 페이지의 내용을 받아온 뒤 처리해도 무방. 하지만 로그인이 필요하거나 이런저런 양식을 채워야 열리는 화면의 경우엔 PAMIE와 함께 해야 할 것.

  ② PAMIE로 현 페이지의 HTML source 얻기 (text format)

    source_list = ie.pageGetText()
    source_list = source_list[source_list.find('<BODY'):] // 저 string은 현 페이지의 타이틀, 주소, HTML source가 한데 뭉쳐친 것이기 때문에 source만 얻기 위해 <BODY..> 지점을 시작으로 slicing

  ③  그 다음은 일반적인 BeautifulSoup 사용법 - 즉 ParseTree 생성 → 태그 기준 검색

    soup_list = BeautifulSoup(source_list)
    allLinks = soup_list.findAll('a') // <a href> </a> 같은 애들이 모두 들어간 리스트가 반환됨

  ④ 유니코드 문제: BeautifulSoup에서 한글은 무조건 유니코드. 근데 이렇게 되면 그냥 텍스트 파일로 출력이 안된다던가, 다른 라이브러리 함수가 갑자기 익셉션 내면서 뻗는 등의 불상사가 생김.

  >> 해결법: (스트링).encode('euc-kr')



 
TAG Beautifulsoup, PAMIE, Python
TRACKBACK 0    COMMENT 0
  TFT-LCD: TN & LPS  +   [Study/Research/Sci/Eng]   |  2010/09/27 01:54
1. LCD의 원리
  각 픽셀 = 편광판 사이에 액체 결정(Liquid Crystal) 분자들을 배치함
   → 전압 유무에 따라 빛의 통과 허용 or 차단
       백색광의 편광에 의해 R, G, B 빛 발생

픽셀의 배 상태(출처: wikipedia/Pixel)



2. TN (Twisted Nematic)
  * Nematic - a. 네마틱(상태)의 = 액정(液晶)의 가는 분자가 서로의 위치는 불규칙하지만 모두 일정 방향으로 향하고 있는 상태의
  * 두 편광판의 결은 90도 어긋나게 배치된 상태. 편광판의 평면 = 모니터 평면
  * 사이의 액정분자는 전압이 없을땐 홈을 따라 배치되어 있음 → 그대로 있으면 빛이 꼬아져서 통과됨
                                        있을땐 편광판에 수직으로 배열됨 → 빛 차단 (빛을 꼬는 효과가 사라지므로)
 

출처: http://www.pctechguide.com/43FlatPanels_Principles.htm


  * 장점: 구동전압과 생산비용이 낮다
  * 단점: 시야각에 따라 색변화와 휘도변화가 큼

출처: http://www.parkoz.com/zboard/view.php?id=my_tips&no=9642



3. IPS (In-Plane Switching)
  * 액정분자를 모니터 평면과 동일 평면상에서 회전시킴으로써 편광이 이뤄짐
    (How? 각 분자의 양 끝에 전기장 걸기 - "lateral electric field")

출처: 윗그림과 동일..


  * 장점: TN에서 문제가 되었던 현상들이 안일어남 → 고품질 발색!
  * 단점: 명암비가 약함 (화면이 '흑'일때도 백라이트의 누수현상이 커서 진한 '흑'이 안나옴)
            응답속도 느림 (회전에 시간이 오래 걸리나봄...)


※ 이런걸 알아보게 된 이유: 아이폰4의 레티나 디스플레이 = LG의 IPS-HD LCD :)

 
TAG IPS, LCD, TN, 레티나 디스플레이, 아이폰4
TRACKBACK 0    COMMENT 0
  재미난 대화  +   [Feel/Read]   |  2010/09/25 21:49
독일 출신 W모씨(1889-1951) 曰

  6.53 말해질 수 있는 것, 그러므로 자연 과학 이외의 명제들-그러므로 철학과는 아무 상관없는 어떤 것-이외에는 아무것도 말하지 말고, 다른 어떤 사람이 형이상학적인 어떤 것을 말하려고 할 때는 언제나, 그가 그의 명제들 속에 있는 어떤 기호들에다 아무런 의미도 부여하지 못하였음을 입증해 주는 것,- 이것이 본래 철학의 올바른 방법일 것이다. 이 방법은 그 다른 사람에게는 불만족스럽겠지만-그는 우리가 그에게 철학을 가르쳐 주었다는 느낌을 가지지 않으리라-이 방법이 유일하게 엄격히 올바른 방법이다

  6.54 (생략)

7. 말할 수 없는 것에 관해서는 침묵해야 한다.


마찬가지로 독일 출신인 S모씨(1880-1936) 曰

....개념과 사물, 원인과 결과, 결론과 과정은 관념적으로 말하자면 완전히 일치하고 있기 때문에, 추상적인 사상가는 언제나 사고 '과정'을 직접적으로 도형과 표로, 즉 공간적으로 표시하려는 유혹의 포로가 되고 있었던 것이다. 도형이 없는 곳에는 철학이 없다-이것은, 입 밖에 내지는 않지만 모든 체계학자가 '직관하는 자'에 대해 마음속 깊이 남몰래 자신의 우월을 느끼면서 품는 편견이다. 그래서 칸트는 플라톤적인 사고 양식을 화난 듯이 '수다스럽게 지껄이는 기술'이라고 말하고, 또 그래서 강단철학자는 오늘날에도 괴테의 철학을 묵살하고 있다. 모든 논리적인 방법은 그림으로 그릴 수 있다. 모든 체계는 사상을 취급하는 기하학적인 방법이다. 그래서 시간은 어떤 '체계' 속에도 자신의 자리가 없거나, 그렇지 않으면 그 방법의 희생물이 되는 것이다.


...아냐, 어쩐지 W씨를 악의적으로 비방하고 있는 느낌이 들어. 차라리 영국출신 R씨가 한 말이라면 좀더 드라마틱했을텐데...



 
TAG 논리-철학논고, 비트겐슈타인, 서구의 몰락, 슈펭글러
TRACKBACK 0    COMMENT 0
 
 
<<이전   | 1 | 2 | 3 | 4 | 5 ... | 29 |   다음>>
 

니힐이's Blog is powered by Daum & tistory