반응형

파이썬에는 다양한 타입의 바구니가 있는데, 사용할 때마다 헷갈린다. 

Type

Description

Definition

Operation

List

가장 다양하게 사용.

여러 가지 타입을 답을 수 있음

a=[1,2,3,4,5,6]

b=['a', 'b', 'c']

a[0] => 1

a[-1] => 6

a[3:] => 4, 5, 6

if 'a' in b

a.append(7)

Tuple

서로 다른 형식의 데이터를 집합으로 생성 가능

튜플의 요소는 변조하거나 삭제 불가하고 추가는 가능

새로운 값을 넣으려 하면 오류 구문 출력

t1= 1234, 5678, 'abcd', 'efgh'

t2 = t1, (1,2,3,4,5)

t1.append(5)

Set

중복된 요소가 없는 정렬되지 않은 집합으로 중복 항목은 삭제됨

Union, intersection, difference, symmetric difference와 같은 수학적 연산 지원

market={'beef', 'pork', 'lamb', 'beef'}

market2=set('beef', 'pork', 'lamb', 'beef')

if 'beef' in market

a-b => 차집합

a|b => 합집합

a&b => 교집합

a^b => xor

Dictionary

값과 속성으로 이루어짐.

문자열, 정수, 배열, dict등 삽입 가능

data={'김영수': {'영어':80, '수학':90},

         '최희수': {'영어':70, '국어':100}}

data['김영수']['국어']=90

linked_entity_ids_per_entity_type_dct = defaultdict(list)

data['김영수']

data['김영수']['영어']

data.keys() => 키만 print

['Paul', 'Kim']

data.values() => 키 빼구 print

[{'Mathmetics': 90, 'English': 80}, {'Korean': 100, 'English': 70}]

data.items() => 전부 print

[('Paul', {'Mathmetics': 90, 'English': 80}), ('Kim', {'Korean': 100, 'English': 70})]

 

반응형
반응형

Windows10에서는 기본적으로 md5 checksum을 구할 수 있는 툴이 내장되어 있다.

이 md5 hash값은 MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다. 

사용 방법>

CertUtil -hashfile <path to file> MD5

사용 예>

certutil -hashfile aa.png md5

윈도우즈에서 쉽게 md5 체크썸 구하기

중요한 파일을 전송할 때는 원본파일과 이 해쉬값을 같이 보내면, 받는 쪽에서 중간에 원본 파일의 훼손이 있었는지 쉽게 파악 할 수 있다.

반응형
반응형

SW개발을 하다보면 언어(language)를 표기하기 위해 다양한 표기법을 사용해서 헷갈리기 쉽다.

영어를 예로 들어보면,

en, enu, eng 라고 표기하기도 하고, 어떤때는 en-GB, en-AU, en-US 등으로 표기하기도 한다.


우선, 지역적 특성을 빼고 언어만 표기하는 방법은 2가지로 정의되어 있다.

ISO 639-1 Code로 정의된 2 letter 표기법과 ISO 639-2 Code로 정의된 3 letter 표기법이 있다.

*참고링크 : ISO 639-1과 ISO 639-2 코드 테이블

Language 

ISO 639-1 Code

 ISO 639-2 Code

English

en 

eng 

French 

fr 

fre 

German 

de 

ger 


하지만 같은 표기의 문자라도 지역이나 나라에 따라 달라지는 부분이 있을 수 있기 때문에 이들을 구분할 수 있는 방법이 필요하다.

그러기 위해서는 각 지역이나 국가를 정의한 ISO 3166-1의 ALPHA-2 Code와 ALPHA-3 Code 를 알아야 할 필요가 있다.

*참고링크 : ISO ALPHA-2와 ISO ALPHA-3 코드 테이블

Country or Area Name

ISO ALPHA-2 Code 

ISO ALPHA-3 Code 

United Kingdom 

GB 

GBR 

United States of America 

US 

USA 

Australia 

AU 

AUS 


같은 언어라도 방언이나 말투의 차이를 위해서, 위에서 정의된 언어와 지역을 합쳐서 사용하게 되는데, 이는 태그로써 정확하게 그 언어의 의미를 파악 할 수 있게 된다.

(Language)-(Country or Area Name)

ex) en-GB, en-US, en-AU

플랫폼마다 조금씩 다르게 사용하지만, 

대개는 그냥 언어만 사용하기보다는 국제적으로 정의된 언어와 지역코드를 조합하여 정확한 언어를 표기하고 있다.


그 외에, ISO 639-3에서는 언어의 특성을 묶어 3 letter code를 사용하기도 한다.

ex) enu, eng, 

*참고링크 : ISO 639x table


반응형
반응형

인공지능, 빅테이타등 각광받는 분야에서 많이 사용하는 파이썬.

Python은 C/Java같은 언어에 비해 문법이 직관적이며, 쉽고 간편하게 필요로 하는 소프트웨어를 빠르게 개발 할 수 있다.

그동안 파이썬을 개발하면서 가장 불편했던 것이 디버깅이었는데, PyCharm(파이참?) 이라는 IDE로 스탭바이스탭으로 디버깅을 할 수 있는 것을 최근에 알게 되었다.

설치파일은 하기 사이트에서 받을 수 있으며, 

웹개발을 하지 않는다면 프로페셔널보다 용량이 적은 커뮤니티(Community)버전을 다운로드 받아도 상관없다.


설치는 특별한 것 없이 할 수 있고, 개발 할 파이썬 코드를 위해 새 프로젝트를 생성한다.

새 프로젝트를 만들고 난 후, 파이썬 개발에 필요한 파이썬 인터프리터의 위치를 설정 한다.

● File>Settings>Project>Project Interpreter 

디버깅 할 소스를 코딩한 후 실행을 위해 아래의 설정을 추가 할 수 있다.

● Run>Edit Configurations...

왼쪽에 초록색 + 를 눌러서 설정이 필요한 파이썬 스크립트 설정을 생성할 수 있다.

-Name : 스크립트를 구분 할 이름

-Script : 실행할 파이썬 파일을 설정한다.

-Script parameters : 파이썬 파일을 실행할 때 인자(Argument)를 추가한다.

-Environment variables : path같은 환경 변수들을 설정한다.

-Working directory : 파이썬 스크립트가 돌아가게 될 폴더를 지정한다. 파이썬 코드에서 외부파일을 불러들일 때 중요하다.


step by step으로 디버깅을 하기위해서는 코드 에디터창에 줄번호가 적힌 오른쪽 부분을 마우스로 클릭하여, 빨간색으로 된 Break Point를 지정해야 한다.

브레이크포인트를 설정한 다음 Run>Debug>실행하길 원하는 스크립트 선택(여러개 있을 경우) 하면, 프로그램이 BP가 위치한 곳까지 실행되다가 멈춘다.(아래 화면 참고)

이 상황에서 왼쪽 아래에 콜스택, 오른쪽 아래에 변수(Variable)들의 값들을 볼 수 있다.

이 때 부터는 한줄씩디버깅을 해볼 수 있다.

내가 짠 코드는 1차 함수 세개에 대한 그래프를 빨간색, 녹색, 파란색으로 순서대로 그리는 것인데,

아래와 같이 빨간색만 그리고 Break Point 에 멈춰있다.

파이썬 개발툴로 이클립스나 노트패드++ 같은것만 쓰다가, 파이참을 발견하니 마치 신세계를 발견한 느낌이다. ^^

파이참 단축키 : https://resources.jetbrains.com/assets/products/pycharm/PyCharm_ReferenceCard.pdf 


반응형
반응형

파이썬 거북이(turtle) api를 이용해서 1차 함수를 그래프로 그리는 코드를 작성해 보았다.

그냥 수학책을 보다가 함수를 그래프로 그려보면 좋다고 해서, 손으로는 그리기 귀찮아서 파이썬을 이용했다.

아래에는 세 개의 1차 함수를 그린 화면이다. 2차 함수, 3차 함수도 그려보았었는데 값이 커지니까 1차 함수처럼 이쁘게 찍기 힘들어서 생략했다.

코드는 아주 간단한데, 좌표를 그리고 세 개의 일차함수를 만들고 가각 루프(x는 -100부터 100까지)를 돌면서 각 함수에 해당하는 점을 찍는다.

세 개의 일차함수는 상수는 동일하고, 계수를 1씩 증가한 것으로 기울기를 다르게 하였다.

블로그에서 보기 좋게 하기 위해 http://colorscripter.com/ 를 이용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import turtle
 
= turtle.Pen()
 
def setPosition(x, y):
    t.setx(x)
    t.sety(y)
 
def drawDot(x, y):
    t.setx(x)
    t.sety(y)
    t.down()
    t.dot()
    t.up()
 
def drawCoordinate():
    line=400
    t.down()
    setPosition(00)
    t.backward(line)
    setPosition(00)
    t.forward(line)
    setPosition(00)
    t.right(90)
    t.forward(line)
    setPosition(00)
    t.backward(line)
    t.up()
 
def linearFunction1(x):
    y = (2*x) + 1
    return y
 
def linearFunction2(x):
    y = (3*x) + 1
    return y
 
def linearFunction3(x):
    y = (4*x) + 1
    return y
 
drawCoordinate()
maxRange = 100
 
t.color("red")
for i in range(-maxRange, maxRange):
    drawDot(i, linearFunction1(i))
 
t.color("green")
for i in range(-maxRange, maxRange):
    drawDot(i, linearFunction2(i))
 
t.color("blue")
for i in range(-maxRange, maxRange):
    drawDot(i, linearFunction3(i))
 
 
cs


반응형
반응형

개발을 하다보면, 제이슨(JSON)포맷으로 된 데이타를 봐야하는 경우가 있다.

아래와 같이 한줄로 쭉~ 적힌 텍스트를 보면 내용을 알아보기가 쉽지 않다.

이럴 경우에, 무료 에디터인 Notepad++와 플러그인을 이용하면, 아래와 같이 사람이 보기 좋게 줄바꿈과 띄어쓰기가 된 format으로 json데이타를 볼 수 있다.

일단 에디터플러스플러스가 깔려 있어야 한다. 구글에 검색하면 쉽게 받을 수 있다.

그리고 하기 사이트에서 노트패드용 json 플러그인을 받을 수 있다.

https://sourceforge.net/projects/nppjsonviewer/?source=typ_redirect


사이트에 들어가서 녹색으로 된 Download 아이콘을 클릭하면 다운로드가 시작된다.

다운로드가 된 압축파일에는 NPPJSONViewer.dll 가 포함되어 있는데, 이dll파일을 하기 폴더처럼 노트패드가 설치된 폴더의 플러그인 폴더에 복사를 해준다.

C:\Program Files (x86)\Notepad++\plugins\

노트패드를 다시 실행하고 json 텍스트를 마우스로 드래그해서 블럭으로 지정한 다음, 하기의 메뉴를 클릭하면 블록으로 지정한 텍스트가 보기 좋은 json포맷으로 바뀌게 된다.

Plugins->JSON Viewer->Format JSON 


반응형
반응형

apt-get은 우분투 같은 데비안 계열의 리눅스에서 패키지를 관리하는 툴이다.

보통은 sudo 를 이용하여 관리자 권한으로 명령어를 실행하여야 한다.


1) 패키지 리스트를 읽어오는 서버를 설정하는 파일

/etc/apt/sources.list

파일관리자에서 더블클릭해서 내용을 확인하면, 서버를 더 쉽게 확인하고 변경 할 수 있다.


2) 서버에 변경된 업데이트 정보를 업데이트

$apt-get update


3) 설치된 패키지를 최신 버전으로 업그래이드

$apt-get upgrade


4) 패키지 설치 

$apt-get install [package name]

ex) $sudo apt-get install samba

버전명을 적어서, 특정 버전을 설치할 수 있다.

ex)sudo apt-get install gparted=0.16.1-1


5) 패키지 재설치

$apt-get --reinstall install [package name]

ex) $sudo apt-get --reinstall install samba


6) 패키지 삭제

$apt-get remove [package name]

ex) $sudo apt-get remove smbfs

$apt-get --purge remove [패키지 명] 

=> 설정파일까지 삭제


7) 페키지 소스 이용

$apt-get source [package name]

$apt-get build-dep [package name]

$apt-get -d install [package name]


8) 페키지 검색
세 가지 방법으로 패케지를 찾아볼 수 있다.
$apt-cache search [package name]
$apt-cache show [package name]
$$dpkg -l | grep smbfs



반응형
반응형

Sikulix(시큘리스?)는 매번 귀찮게 수행하는 일을 자동화 해주는 오픈소스 툴이다. 물론 게임에서 오토라고 말하는 반복작업에도 사용할 수 있다.

스크립트 작성은 파이썬, 루비 및 자바나 자바스크립트로 할 수 있다.


1) 설치파일 다운로드

https://launchpad.net/sikuli/sikulix/1.1.0/+download/sikulixsetup-1.1.0.jar 


2) 다운로드 받은 jar파일을 실행시킨다. (Java 7 (JRE (runtime only) 또는 JDK (runtime + development kit)가 미리 설치되어 있어야 한다.)

3) 설치시에 원하는 옵션을 선택해야하는데, 나는 사용하는데 익숙한 Python을 선택한다.

4) 작은 팝업이 떴다 사라졌다를 반복하다가 설치과 완료되면, 아래와 같이 몇개의 파일들이 생기는 것을 볼 수 있다.

5) "runsikulix.cmd" 을 더블클릭하면 Sikulix IDE가 나타난다.

사용법은 매우 직관적으로, 오른쪽의 빈 공백에 원하는 스크립트를 넣고 "Run"아이콘을 클릭하면 된다.

그 옆에 있는 "Run in slow motion"은 스크립트가 너무 빨라서 잘 동작하지 않는 경우가 있을 때, 사용하면 된다.

6) 이제 모든 준비는 되었는데, 어떤 것을 작성해볼까?

여러가지를 해볼 수 있겠지만, 간단하게 두 가지 예를 시험해 보자.

예제 1)  cmd 창을 열어서 yahoo, google, naver 사이트에 ping 해 보기.

아래의 코드를 보면 간단하게 이해를 할 것이다. test를 할 커맨드를 배열로 정해놓고, for문을 돌면서 테스트할 커맨드의 갯수만큼 cmd창을 열어서 실행 하도록 하였다.

결과> cmd창이 세 개 생성이되고, 각각 사이트에 ping을 하고 있다.


예제 2) 알송을 실행하고 음악을 재생하기.

1번 예제에서 cmd 창을 실행하는것과 동일하게 알송을 실행하고, IDE왼쪽에 있는 wait함수를 이용해서 알송이 실행될 때까지 기다린다.(wait)

이 때, 최대 10초동안 기다리게 했고, 알송이 정상적으로 실행되면 click함수를 이용해서 플래이 아이콘을 누르도록 했다.

결과> 알송이 실행되고 자동으로 플레이 버튼이 눌러지고, 음악이 재생되고 있다.

기본적으로 제공되는 함수를 이용해서 간단한 예제를 만들어 보았다.

좀 더 자세한 내용은 아래의 링크에서 확인 할 수 있다. 

http://sikulix.com/quickstart/

반응형
반응형

Java로 간단한 윈도우 프로그램을 짜려고 할 때, 인자에 따라 동작을 다르게 구현할 수 있다.

ex) java hello.class 철수

out>> "hello 철수!"


그러나 자바 코딩을 편리함으로 인해 이클립스를 많이 사용하게 되는데, 이클립스에서 인자를 사용하는 방법을 알아보자.

1) 이클립스의 해당프로젝트에서 "Run>Run Configuration>Arguments 탭"으로 이동하여 "Variables..." 버튼을 클릭.

2) 리스트에서 "string_prompt"를 선택하고 "OK"를 클릭.

3) "${string_prompt}"가 Program arguments에 선택된 것을 확인하고 "Apply">"Close"를 클릭.

4) Run을 실행하면 인자를 입력할 수 있는 창이 뜨는데, 여기에 입력하고 싶은 인자를 입력할 수 있다.

예제)

반응형
반응형

이클립스에 파이썬 환경을 설정 할 수 있다.

먼저 이클립스와 파이썬은 설치가 되어 있어야 한다.

1) Eclipse - Help - Install New Software...

2) Add Repository 에 하기 URL을 추가하고 플러그인을 설치

설치URL - http://pydev.org/updates

[그림1]

3) Interpreter를 설정: 하기와 같이 Quick Audo-Config 를 클릭하면 설치되어 있는 Python을 자동적으로 설정이 된다. 

Eclipse - Window - Preferences - PyDev - Interpreters - Python Interpreter - Quick Audo-Config

[그림2]

4) python 파일을 하나 생성해서 테스트 해보자.

코딩을 하고 이클립스 메뉴에 위치한 "Interactive Console" 을 눌러서 편리하게 결과를 확인 할 수 있다.

[그림3]



반응형
반응형

Python에서 url을 이용하여 내용을 읽을려고 할 때, 403 Forbidden 에러가 발생을 하였다.

서버에서 사람이 아닌 자동으로 내용을 읽는 '봇(Bot)'같은 것이라 판단하고 차단을 하는 것 같다.

  File "C:\Python27\lib\urllib2.py", line 127, in urlopen

    return _opener.open(url, data, timeout)

  File "C:\Python27\lib\urllib2.py", line 410, in open

    response = meth(req, response)

  File "C:\Python27\lib\urllib2.py", line 523, in http_response

    'http', request, response, code, msg, hdrs)

  File "C:\Python27\lib\urllib2.py", line 448, in error

    return self._call_chain(*args)

  File "C:\Python27\lib\urllib2.py", line 382, in _call_chain

    result = func(*args)

  File "C:\Python27\lib\urllib2.py", line 531, in http_error_default

    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)

urllib2.HTTPError: HTTP Error 403: Forbidden 


최초의 코드

response = urllib2.urlopen(url)

return response.read() 


수정된 코드

hdr = {'User-Agent': 'Mozilla/5.0', 'referer' : 'http://m.naver.com'}

req = urllib2.Request(url, headers=hdr)

try:

page = urllib2.urlopen(req)

except urllib2.HTTPError, e:

print e.fp.read()

return page.read()

urllib2.urlopen()을 사용 할 때 위에 코드처럼 헤더를 추가해 주니까 정상적으로 페이지를 읽을 수 있다.




반응형
반응형

정규식을 잘 활용하면 아주 쉽게 스트링을 파싱 할 수 있다.





정규식은 문법을 작성하기도 까다롭고 검증하기도 힘들기 때문에, 검증을 하면서 작성을 하면 좋다.

하기 사이트들은 정규식의 문법, 샘플 뿐만 아니라 시각화를 해줌으로써 손쉽게 정규식을 작성할 수 있도록 도움을 준다.

*정규식 검증 : http://regexr.com/

*정규식 검증 및 시각화 : https://www.debuggex.com/


예제

정규식 : /([Kk]akao)[\s\-]?([Tt]alk)/

검출되는 예 : Group1-Kakao or kakao, Group2-Talk or talk

Kakao Talk

kakaotalk

KakaoTalk

kakao-talk 






반응형
반응형

Android M 프리뷰에서는 퍼미션에 대한 변경사항이 있다. 아마 해킹에 취약한 안드로이드의 오명으로 인해 보안을 강화하려는 의도로 보인다.

1) PROTECTION_NORMAL을 제외한 퍼미션의 경우, 접근 직전에 권한을 요구하도려록 변경

PROTECTION_NORMAL 로 분류된 퍼미션은 다음과 같다.

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS

android.permission.ACCESS_NETWORK_STATE

android.permission.ACCESS_WIFI_STATE

android.permission.ACCESS_WIMAX_STATE

android.permission.BLUETOOTH

android.permission.BLUETOOTH_ADMIN

android.permission.BROADCAST_STICKY

android.permission.CHANGE_NETWORK_STATE

android.permission.CHANGE_WIFI_MULTICAST_STATE

android.permission.CHANGE_WIFI_STATE

android.permission.DISABLE_KEYGUARD

android.permission.EXPAND_STATUS_BAR

android.permission.FLASHLIGHT

android.permission.GET_ACCOUNTS

android.permission.GET_PACKAGE_SIZE

android.permission.INTERNET

android.permission.KILL_BACKGROUND_PROCESSES

android.permission.MODIFY_AUDIO_SETTINGS

android.permission.NFC

android.permission.PERSISTENT_ACTIVITY

android.permission.READ_SYNC_SETTINGS

android.permission.READ_SYNC_STATS

android.permission.READ_USER_DICTIONARY

android.permission.RECEIVE_BOOT_COMPLETED

android.permission.REORDER_TASKS

android.permission.SET_TIME_ZONE

android.permission.SET_WALLPAPER

android.permission.SET_WALLPAPER_HINTS

android.permission.SUBSCRIBED_FEEDS_READ

android.permission.TRANSMIT_IR

android.permission.VIBRATE

android.permission.WAKE_LOCK

android.permission.WRITE_SETTINGS

android.permission.WRITE_SYNC_SETTINGS

android.permission.WRITE_USER_DICTIONARY

com.android.alarm.permission.SET_ALARM

com.android.launcher.permission.INSTALL_SHORTCUT


2) 퍼미션 정책 변경에 따른 동작
새로운 퍼미션 정책이 적용 안된 기존 앱에 대해서는 Crash가 가급적 발생하지 않도록 Exception대신 비어있는 데이터를 반환.
새 퍼미션 모델을 문제없이 사용하기 위해서는 퍼미션이 이미 있는지 확인하는 checkSelfPermission, 
없을 시 요청하는 requestPermission, 

if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (shouldShowRequestPermissionRationale(
            Manifest.permission.READ_CONTACTS)) {
        // Explain to the user why we need to read the contacts
    }

    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant

    return;
}

요청한 결과를 받는 onRequestPermissionsResult 메소드를 사용하여야 함.

@Override

public void onRequestPermissionsResult(int requestCode,

        String permissions[], int[] grantResults) {

    switch (requestCode) {

        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {


                // permission was granted, yay! do the

                // calendar task you need to do.


            } else {


                // permission denied, boo! Disable the

                // functionality that depends on this permission.

            }

            return;

        }


        // other 'switch' lines to check for other

        // permissions this app might request

    }

}



반응형
반응형

Activity 에 editor가 있으면 화면에 아래와 같이 키보드가 항상 뜨게 된다.



거추장 스럽게 느껴진다면 manifest파일에 해당 activity에 아래와 같이 속성을 주면 처음 Activity에 진입할 때 더이상 키보드가 나오지 않는다.

물론 에디터를 클릭하면 키보드가 나온다.

android:windowSoftInputMode="stateHidden"

        <activity

            android:name="com.xx.xxxActivity"

            android:label="@string/app_name"

            android:windowSoftInputMode="stateHidden"

            android:screenOrientation="portrait" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>



반응형
반응형

안드로이드 네이티브 Heap 메모리 확인

Android 에서 Dalvik Heap은 Leak분석을 확인하기 용이하지만, Native Heap의 Leak(메모리 누수)를 확인하는 것은 많은 분석을 요구한다.

윈도우즈 운영체제(Windows7)에서 네이티브 힙을 분석하는 방법이다.

1)App에서 사용하는 Memory 확인

C:\>adb shell dumpsys meminfo <package name>

 

2)Native Heap Memory 분석

-폰에 설정

$ adb shell setprop libc.debug.malloc 1

$ adb shell stop

$ adb shell start

 

-DDMS 설정

C:\Users\Gildong_Hong\.android\ddms.cfg

다음 내용 추가 : native=true

DDMS.exe실행 (sdk\tools\)

 

 


반응형
반응형

NDK를 이용해서 JNI 구 구현된 c나 cpp파일들을 컴파일 하는 방법을 알아보자.


1) Developer 사이트에서 NDK 다운로드 및 압축해제

- https://developer.android.com/tools/sdk/ndk/index.html


2) System path에 NDK가 설치된 폴더 추가


3) c파일에 로그 추가

- 안드로이드 MAKEFILE은 "Android.mk"이다. 이 파일을 열어서 "LOCAL_LDLIBS:= -llog"을 한 줄을 추가 

- 문자열을 출력할 파일에 "#include <android/log.h>"을 추가

- __android_log_print(ANDROID_LOG_DEBUG, "TAG", "test log");


4) Dos CMD를 이용한 sdk에 있는 jni를 Build

- 컴파일 할 mk파일이 있는 폴더로 이동 로 이동

- CMD창에서 ndk-build 명령 실행

- sdk\libs\armeabi 에 lib파일이 생겼는지 확인


6) 생성된 so(또는 a) 파일을 이용해서 프로젝트를 컴파일 하고 폰에 설치


7) 테스트로 넣은 로그 확인


반응형
반응형

HTC Nexus 9, the Motorola Nexus 6 와 함께 Android L의 정식 릴리즈가 10월 중순/말로 예상되고 있다. 공식 명칭은 롤리팝(Lollipop)이 유력한 가운데 레몬 머랭 파이 (Lemon Meringue Pie) 가 될 여지도 있는 상태이다.

  VS

구글에서 제공된 16주념 기념 사진에서 케잌의 제일위에 있는 롤리팝을 볼 수 있어서 더욱 롤리팝이 될 가능성에 무게를 두고 있다.



어쨌든 개발자의 입장에서 어떤 점이 바뀌는지를 미리 인지를 할 필요가 있는데, 

구글에서는 L Developer Preview 페이지를 제공하고 있으며, 여기에는 API Overview 페이지가 있어 어떤 점이 바뀌는지 확인 할 수 있다. 또한 한글화 및 리뷰가 잘 된 페이지도 존재한다.


API Overview

공식 : http://developer.android.com/preview/api-overview.html

한글화 및 리뷰 : https://medium.com/marojuns-android/l-developer-preview-api-4edad1a2a434


●Battery-historian

메모리 사용 내역을 확인 할 수 있는 툴을 신규로 제공하고 있는데, 현재는 GitHub 에서 다운로드 할 수 있다. Python으로 되어 있으며, Python을 다운받아서 실행시킬 수 있다.

https://github.com/google/battery-historian

For best results, you should first enable full wake lock reporting, to allow the Battery Historian tool to monitor uninterrupted over an extended period of time:

$ adb shell dumpsys batterystats --enable full-wake-history

You should also reset battery statistics at the beginning of a measurement:

$ adb shell dumpsys batterystats --reset

To generate an HTML visualization:

$ historian.par [-p powerfile] bugreport.txt > out.html 


●API Differences Report

클래스와 메소드 같은 API의 변경사항을 정리한 리포트이다.

KITKAT(API 19) 이후에 API 20과 L Preview가 추가로 나온 상태이다.

API 19 <-> API 20 : http://developer.android.com/sdk/api_diff/20/changes.html

API 20 <-> L preview : http://storage.googleapis.com/androiddevelopers/preview/l-developer-preview-reference.zip 


●Kitkat에서 ART 테스트

Kitkat에서 Option으로 제공되고 있는 ART를 확인해 볼 수 있다. 

하기 옵션을 ART로 선택하고 재부팅을 하면, Runtime을 art로 변경되면서 기존의 apk들이 ART에서 사용되는 바이너리로 변환된다.

 Settings> Developer Options> Select Runtime



벤치마크 : http://www.androidpolice.com/2013/11/12/meet-art-part-2-benchmarks-performance-wont-blow-away-today-will-get-better/



반응형
반응형

Android Kitkat(키켓)의 다음 버전인 L(Lollipop, 롤리팝)에서는 가장 큰 변화중에 하나가 Default Runtime ART로 변경되는 것이다.


 


KITKAT에서 ART Runtime 으로 설정을 할 수 있는 옵션을 제공하고 있어서, Test apk를 이용해서 테스트 해보았다.

Kitkat에서는 ART가 최적화가 안되어서 몇몇 App의 실행이나 동작에 문제를 일으키기도 한다고 하는데,

내가 사용하는 Test apk로 잠깐 테스트한 결과로는 특별히 문제가 되는 부분은 발견하지 못했다.


Test ART on Kikat

1) "Settings> Developer Options> Select Runtime" and choosing ART.
2) 재 부팅 되고 App ART 기계어로 변환 되는데  30 소요


Runtime 비교 및 Test Result

 

Dalvik

ART

Type

Just In Time

Ahead Of Time

Description

App 실행 기계어로 변환

App 설치 기계어로 변환

Pros

 

1) App 속도 증가
2) CPU
부하 감소
3) Battery
소모 감소

Cons

 

1) App 설치 시간 증가
2) App
공간 증가

Benchmark

1) increased speed in CPU floating operations by approx. 20%
2) increased speed in RAM operations by approx. 10%
3) increased speed in storage operations by approx. 10%
4) CPU integer operations - slight advantage goes to Dalvik

Kitkat에서 ART Test

Kitkat에는 옵션 사항, L에서는 Default Runtime
"Settings> Developer Options> Select Runtime" and choosing ART.
부팅 되고 App ART 기계어로 변환 되는데 30 소요

Test apk 전체 용량

30.41 MB

39.41 MB

Test apk 애플리케이션 용량

28.82 MB

37.80 MB

Test apk launch time

Boot 이후 
1st - 695 ms
2nd - 625 ms
3rd - 975 ms
4th - 765 ms
5th - 650 ms
after.. 695 ms

Boot 이후 
1st - 2620 ms
2nd - 3270 ms
3rd - 940 ms
4th - 940 ms
5th - 725 ms
after.. 560 ms 975 ms 600 ms 480 ms 610 ms


테스트 결과,

ART로 첫 부팅시 최초 몇 초간 시스템이 전체적으로 버벅되는 느낌이 있었으며, Test apk의 실행 속도가 빨라지는 것을 체감 할 수 없었다.



반응형
반응형

JSON을 이용한 개발이 활발히 이루어지고 있는데, 그냥 text 로 JSON 내용을 분석하거나 디버깅하는 것은 너무나 어렵다.

그래서 간단하게 온라인에서 JSON파일을 보기 좋게 볼 수 있는 viewer를 이용하게 된다.

http://jsonviewer.stack.hu/



Test JSON Sample

{"menu": {    

"header": "SVG Viewer",

    "items": [

        {"id": "Open"},

        {"id": "OpenNew", "label": "Open New"},

        null,

        {"id": "ZoomIn", "label": "Zoom In"},

        {"id": "ZoomOut", "label": "Zoom Out"},

        {"id": "OriginalView", "label": "Original View"},

        null,

        {"id": "Quality"},

        {"id": "Pause"},

        {"id": "Mute"},

        null,

        {"id": "Find", "label": "Find..."},

        {"id": "FindAgain", "label": "Find Again"},

        {"id": "Copy"},

        {"id": "CopyAgain", "label": "Copy Again"},

        {"id": "CopySVG", "label": "Copy SVG"},

        {"id": "ViewSVG", "label": "View SVG"},

        {"id": "ViewSource", "label": "View Source"},

        {"id": "SaveAs", "label": "Save As"},

        null,

        {"id": "Help"},

        {"id": "About", "label": "About Adobe CVG Viewer..."}

    ]

}}


JSON 온라인 뷰어 화면




반응형
반응형

안드로이드 개발을 할 때, 성능개선이나 불필요한 부분을 확인하기 좋은 툴이 바로 "Method Profiling"이다.

1. 이클립스를 통한Method profiling.

DDMS에서 프로파일링을 할 package를 선택하고 "Start Method Profiling" 아이콘을 클릭

확인할 부분을 어느정도 수집했다고 생각했을 때 다시 한번 아이콘을 클릭하면 프로파일링이 멈추고 창에 아래와 같이 수집된 정보를 보여준다.

 

현재시간을 구해서 파일명으로 사용할 수 있다.

// 현재 시간을 msec으로 구한다.

long now = System.currentTimeMillis();

// 현재 시간을 저장 한다.

Date date = new Date(now);

// 시간 포맷으로 만든다.

SimpleDateFormat sdfNow = new SimpleDateFormat("yyyyMMdd_HHmmss");

String strNow = sdfNow.format(date);


2. 코딩을 통한Method profiling.

코딩을 통한 방법은 정확한 기준을 가지고, 결과들에 대한 상대적인 비교를 할 수 있어서 아주 유용하다.

AndroidManifest.xml 에 Permission사용을 추가한다.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

프로파일링을 할 소스의 시작과 끝에 하기의 함수를 추가한다.

import android.os.Debug;

Debug.startMethodTracing("file name");

//… profiling 대상

Debug.stopMethodTracing();

 

/sdcard/"file name".trace(저장되는 위치는 폰마다 조금씩 다를 수 있음.) 파일이 생성된다.

생성된 파일을 이클립스에 Drag해서TraceView 를 볼 수 있다.

실제 실행되는 파일은 Android SDK에 포함되어 있다. 이를 이용하여 trace view를 실행 할 수 있다.

Tool위치 : sdk\tools\traceview.bat

ex) traceview /tmp/calc

 

 

3. adb을 통한 Method profiling.

adb shell

$ am profile <PPRCESS ID> start <TRACE FILE> (프로파일링 시작)

$ am profile <PPRCESS ID> stop (프로파이링 종료)

 

$ am profile 17211 start /sdcard/file_name.trace

$ am profile 17211 stop

 

▶Trace View관련 링크

http://developer.android.com/tools/debugging/debugging-tracing.html


반응형

+ Recent posts