TechNote. 354

Kotlin - Kotlin on Android (Android Studio for Windows)

Kotlin에 관심을 가지게 된 이유는 Android를 위한 App build가 가능하다는 점 때문이었다. Kotlin을 개발한 IntelliJ에서 Android Studio 또한 개발하고 있다. 이 때문인지 Android Studio 상에서 Kotlin을 통해 쉽게 android app build가 가능하다. 먼저 Android Studio 3.0 이상에서 기본적으로 지원이 되고, 그 이하 버전에서는 별도로 kotlin plugin 을 설치해 주어야 한다고 한다. The Kotlin plugin is bundled with Android Studio starting from version 3.0. If you use an earlier version, you'll need to install the K..

Language/Kotlin 2018.07.16

Kotlin - Packages

Kotlin은 Java와 마찬가지로 Package 개념을 사용한다. Java에서 그러하듯이 Kotlin에서도 source 파일은 package 선언으로 시작한다. 이에 따라 source 파일 내 class나 function들과 같은 contents들은 package 를 통해 표현이 가능한데, 예를 들어 아래의 baz() 는 foo.bar.baz로, Goo 는 foo.bar.Goo 로 표현이 가능하다. package foo.bar fun baz() {} class Goo {} Package가 명시되지 않았다면 해당 파일의 content들은 이름이 없는 "default" package에 포함되었다고 보면 된다. Default Imports많은 수의 package들이 기본으로 모든 kotlin 파일에 impo..

Language/Kotlin 2018.07.16

Kotlin - Kotlin on JVM (the IntelliJ IDEA Community Edition for Windows)

Kotlin을 제일 쉽게 접할 수 있는 방법 중 하나로 Windows 상에서 IntelliJ IDEA Community Edition을 깔아 코딩해 보는 방법이 있다. 1) The IntelliJ IDEA Community Edition download page 접속. http://www.jetbrains.com/idea/download/index.html 상기 주소로 접속해서 Windows, mmacOS, Linux 중 Windows (기본값)을 선택하고 Community version을 다운로드 받는다. Ultimate version이 있지만 개인 개발자가 사용하기에는 Community version도 부족함이 없다. 2) 다운로드 받은 ideaIC-2018.1.5.exe 설치 다운로드 받은 파일을 ..

Language/Kotlin 2018.07.12

Kotlin - Strings (문자열)

문자열은 String type으로 표현된다. 한번 할당된 문자열은 변하지 않는다. 문자열 내 문자들은 index를 통해 배열을 접근하듯이 접근 가능하다. 아래와 같이 하면 문자열 내 문자를 하나씩 반복 접근 가능하다. for (c in str) { println(c) } String concatenationstring concatenation 은 + operator로 할 수 있다. 문자열로 시작할 경우 다른 type의 값들도 concatenate 가능하다. val s = "abc" + 1 println(s + "def") String literalsKotlin은 두 종류의 string literals를 가지고 있다. escaped stringraw stringescaped string은 escaped c..

Language/Kotlin 2018.07.11

Kotlin - Arrays (배열)

배열은 get, set function과 size property를 가진 Array class로 표현된다. class Array private constructor() { val size: Int operator fun get(index: Int): T operator fun set(index: Int, value: T): Unit operator fun iterator(): Iterator // ... } 배열을 만들기 위해서는 다양한 방법이 있다. arrayOf()arrayOfNulls()Array constructor[] operation Java와는 다르게 Kotlin은 Array의 값이 한번 정해지면 변하지 않는다.

Language/Kotlin 2018.07.11

Kotlin - Characters (문자)

문자는 Char type으로 표현된다. fun check(c: Char) { if (c == 1) { // ERROR: incompatible types // ... } } Character literal은 따옴표로 표시한다. 'a' 특수 문자들은 여타 다른 언어들과 마찬가지로 backslash를 가지고 표현한다. \t, \b, \n, \r, \', \", \\, \$ 일반 ascii 가 아닌 여타 다른 character로 encode 하기 위해서 Unicode escape sequence syntax를 사용한다. character type을 Int type으로 변환 시킬 수 있는 경우도 있다. fun decimalDigitValue(c: Char): Int { if (c !in '0'..'9') thr..

Language/Kotlin 2018.07.10

Kotlin - Numbers (숫자)

Kotlin은 numbers를 다음과 같은 built-in type을 가지고 있다. Type Bit width RangeByte8-128 ~ 127Short16-32768 ~ 32767Int32-2147483648 ~ 2147483647Long64-9223372036854775808 ~ 9223372036854775807Float32 -Double64 - 일부 언어(e.g. C언어)에서는 chararacter 형이 숫자로 표현되기도 하지만 Kotlin에서 문자는 numbers가 아니다. 1) Byte bit width : 8range : -128 ~ 127 (8-bit signed two's complement integer) 일반적으로 memory 사용을 줄이기 위해 [-128, 127] 사이의 int..

Language/Kotlin 2018.07.10

Kotlin - 기본 자료형, 그리고 변수의 선언 및 할당

Kotlin에서는 변수들의 member function과 property를 호출할 수 있다는 점에서 변수들이 object로 되어 있다는 것을 알 수 있다. 일부 type의 경우 내부적으로는 primitive value로 관리될 지라도 사용자는 일반적인 class로 인지한다. (numbers, characters, booleans) Kotlin에서 일반적으로 사용되는 기본 변수 type은 다음과 같다. numberscharactersbooleansarraysstrings Kotlin에서 변수를 선언하고 값을 할당하는 방법은 2가지로 var과 val을 사용하는 방법이 있다. var과 val의 차이 val (Immutable reference) - val을 통해 선언된 변수는 한번 할당되면 수정이 불가능하다...

Language/Kotlin 2018.07.09

Kotlin - Kotlin 이 가지는 의미.

Android java api를 찾아볼 일이 생겨 android developers 에 오랜만에 접속하였다. Android Jetpack 이라는 메뉴가 보였다. Android app을 만들기 위해 Google이 새롭게 내놓은 library/tool의 모음이겠거니 생각이 들었다. Android Jetpack components are a collection of libraries that are individually adoptable and built to work together while taking advantage of Kotlin language features that make you more productive. 하지만 Android jetpack을 설명하는 문구 중에 Kotlin langu..

Language/Kotlin 2018.07.09

HTTP에서 HTTPS로의 전환 (with Let's encrypt)

언젠가부터 크롬 브라우저의 주소창 옆에 "안전하지 않음"이라고 표시되기 시작했다. 국내 대형 포털 중 하나인 daum.net 의 2차 도메인에도 안전하지 않음이 보인다. 왜 안전하지 않다고 하는 것일까. 위에 언급한 다음을 예로 들면 우리가 인터넷을 하는 컴퓨터와 포털 서버 사이에 아무런 암호화없이 데이터가 오가고 있는 중이라고 이해하면 좋을 것이다. 암호화 없이 데이터가 오간다는 것은 그 중간에서 누군가 그 내용을 들여다 볼 수 있다는 것을 의미하는 것이다. 예를 들면 현재 인터넷을 하고 있는 컴퓨터 바로 옆에 연결된 컴퓨터에서 무엇을 하고 있는지, 어떤 사이트에 들어가서 무엇을 하는지 다 알 수 있다는 것이다. 현재 글을 작성하고 있는 technote.kr 도 마찬가지이다. 현재 티스토리 기반으로 운..

Wordpress - functions.php 과 plugin의 사용의 차이

wordpress 의 기본 동작을 바꾸는 방법에는 두가지가 있다. 각 theme 폴더에 포함되어 있는 functions.php 파일을 사용.plugin 설치하여 사용. plugin과 functions.php 파일을 사용의 차이 Wordpress plugin을 사용하였을 경우Plugin 패널에서 활성화되었을 경우만 사용 가능모든 theme에 적용됨유일하고 특정한 Header text 필요 (아직 까지는 무슨 말인지 정확히 판단 불가, 원문: Requires specific unique Header text)wp-content/plugins 의 하위 디렉토리에 위치 functions.php 파일을 사용하였을 경우현재 활성화된 theme 의 디렉토리에 있는 functions.php 만 수행해당 theme 에 ..

Python - package와 module의 차이

Python에 있어 module은 하나의 python 코드 파일을 의미한다. 파일 이름 자체가 module을 나타내는 이름이다. 반면 package는 module을 모아 놓은 directory 구조하고 할 수 있다. module 과 package 사용의 예> import ModuleName import PackageNamefrom PackageName import ModuleName import를 하게 되면 해당 ModuleName 혹은 PackageName 이 Loading 상태인지 확인 후 Loading이 되지 않은 상태라면 다음의 위치에서 존재를 확인한다. 1) sys.path 에 선언된 위치2) 현재 실행 위치 Ubuntu 14.04 python 2.7에서 sys.path를 확인해 보면 다음과 같..

Language/Python 2018.06.16

Python - datetime/time module, 현재 시간 출력 방법

datetime 혹은 time module 중 하나를 이용하여 현재 시간을 표시할 수 있다. 먼저 datetime 을 이용한 현재 시간 표현은 다음과 같다. import datetime now = datetime.datetime.now() print now 결과> $ python now_datetime.py 2018-06-05 10:30:06.986065 반면 time module을 이용하면 좀 더 세분화/정교화하여 표시할 수 있다. import time now = time.localtime() print "%04d/%02d/%02d %02d:%02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) 결과..

Language/Python 2018.06.16

Python - email package, raw email message 다루기

poplib 를 이용해 raw email message를 받아오더라도 MIME (Multipurpose Internet Mail Extensions, 전자 우편을 위한 인터넷 표준 포맷)이기 때문에 막상 출력해 보면 알아보기 힘든 문자열들로 표현되어 있다. 이에 따라 원하는 값을 추출하기 위해 추가적인 코드를 작성하여야 한다. MIME 형식의 raw email message를 parsing 하기 위해서는 python의 email package를 사용하면 된다. poplib의 M.retr()[1] 을 통해 구한 raw email string은 아래의 코드를 통해 하나의 string으로 표현이 가능하다. raw_email = b"\n".join(M.retr(mList+1)[1]) 이렇게 구해진 raw_ema..

Language/Python 2018.06.15

Python - poplib, POP3 를 통한 이메일 수신

이메일을 웹 Interface가 아닌 별도의 프로그램을 통해 수신하기 위해서는 POP3 혹은 IMAP 을 사용하여야 한다. 가볍게는 POP3가 많이 사용되고, 좀 더 구체적인 기능을 위해서는 IMAP을 사용하면 된다. python에서 POP3을 사용해 이메일 수신하는 방법 python2 : https://docs.python.org/2/library/poplib.html python3 : https://docs.python.org/3/library/poplib.html python2나 python3나 POP3를 위한 python library - poplib 를 가지고 있다. 간단하게 네이버 메일에서 POP3를 통해 이메일을 수신하는 코드를 살펴보자. import getpass, poplib M = po..

Language/Python 2018.06.15

netfilter

iptables : linux kernel의 firewall (netfilter) 를 설정하는 user-space program로 netfilter core 팀에 의해 작성 좀 더 구체적으로 protocol에 따라 아래와 같다.iptables : IPv4ip6tables : IPv6arptables : ARPebtables : ethernet frames bridge iptables 는 user-space program을 말할 때 사용되기도 하지만 kernel-space의 IPv4 firewall을 말할 때도 사용된다.4개의 방화벽 구조를 통틀어 Xtables 라고 하기도 한다. kernel 3.13 이후 new packet classification framework라고 해서 ntftables가 기존 ..

카테고리 없음 2018.05.27

Python - divmod(), 두 숫자를 나누어 몫과 나머지를 tuple로 반환하는 함수

divmod >>> divmod(x, y) 두 숫자를 인자로 전달 받아 첫번째 인자를 두번째 인자로 나눈 몫과 나머지를 tuple 형식으로 반환한다. __builtin__ module에 포함된 function 이다. argument x - 복소수(complex)가 아닌 숫자.y - 복소수(complex)가 아닌 숫자. return value 몫과 나머지를 tuple로 반환한다. example 모든 인자가 양의 정수일 경우) >>> divmod(4,2) (2, 0) >>> divmod(8,3) (2, 2) 인자 중 음의 정수가 있을 경우) >>> divmod(10,-3) (-4, -2) >>> divmod(-10,-3) (3, -1) >>> divmod(-10,3) (-4, 2) 인자 중 실수가 있을 경우..

Language/Python 2018.01.13

Python - callable(), 호출 가능한 object 여부를 판단하는 함수

callable >>> callable(object) 전달받은 object 인자가 호출 가능한지 여부를 판단한다. __builtin__ module에 포함된 function 이다. argument object - 호출 가능 여부를 판단할 object 인자 하나를 넘겨준다. return value 인자로 전달받은 object가 호출 가능한 object일 경우 True, 아닐 경우 False를 반환한다. example 호출 불가능한 변수형 object 와 호출 가능한 함수형 object 의 예) >>> sample = 1 >>> callable(sample) False >>> def funcSample(): ... print('sample') ... >>> sample = funcSample >>> call..

Language/Python 2018.01.12

Python - dir(), object의 속성(attribute) 목록을 보여주는 함수

dir >>> dir([object]) 전달받은 object 인자의 속성 목록(attribute list)를 보여준다. 만약 아무런 인자가 전달되지 않았다면 현재 local scope내 사용 가능한 모듈(module) 혹은 object 목록이 표시된다. __builtin__ module에 포함된 function 이다. argument object (optional) - dir() 함수는 object가 가지는 모든 속성(attribute)들을 반환한다. return value 인자로 전달받은 object의 유효한 속성들의 목록을 반환한다. example dir() 함수 사용시 argument가 없는 경우) >>> dir() ['__builtins__', '__doc__', '__name__', '__pac..

Language/Python 2018.01.12

Python - int(), 정수(integer)를 반환하는 클래스

int >>> int(x=0)>>> int(x, base=10) 전달한 숫자 혹은 문자열, x를 기반으로 정수 값을 돌려준다.만약 인자가 없다면 기본 값 0을 돌려준다. 인자가 숫자일 경우, plain integer, long integer, floating point number가 입력될 수 있다. plain integer의 경우 int 형으로 반환하고, long integer의 경우 long 형으로 반환한다. (참고> plain integer와 long integer 범위)반면 floating point number의 경우는 소수점 이하는 버리고 int 혹은 long 형으로 반환한다. 인자가 앞서 언급한 숫자형이 아니거나 base(진법) 인자가 같이 넘어올 경우 문자열이나 unicode object가..

Language/Python 2018.01.04

Python - slice(), slicing하기 원하는 index를 정의하는 클래스

slice >>> slice(stop) >>> slice(start, stop[, step]) 잘라내기 원하는 index 들을 정의하는 클래스이다. slice object에 대해 한마디로 표현하기가 쉽지 않다. 원활한 이해를 위해 예를 들면 다음과 같다. 먼저, sample = "abcdefghijklmn" 이라는 문자열이 있다고 하자. 이 중 sample[2] 부터 sample[5] 전 까지의 문자열만 빼내고 싶다면 어떻게 하면 될까? (즉, index 2부터 4까지 표시한다.) >>> sample = "abcdefghijklmn" >>> sample[2:5] 'cde' 위와 같이 colon (:) 을 이용하여 추출해 내면 된다. [Slice Notation ":" 을 이용한 나누기] >>> a = "..

Language/Python 2018.01.04

Python - xrange(), 순차적인 숫자를 만들 수 있는 generator를 생성하는 클래스

xrange >>> xrange(stop) >>> xrange(start, stop[, step]) 전달받은 인자를 바탕으로 순차적인 숫자를 만들 수 있는 generator를 생성한다. 기본적인 사용법은 [range 함수] 와 동일하다. 하지만 range 함수는 미리 숫자를 생성하여 list 형태로 메모리에 미리 올려 놓는 반면 xrange 함수는 실제로 사용을 요청받았을 때 숫자를 생성한다. range 함수와는 다르게 불필요하게 메모리에 생성하지 않는다는 장점이 있다. xrange 함수가 리턴하는 형태는 xrange type이다. xrange type은 immutable sequence 로 일반적으로 반복문에 사용된다. xrange type의 장점은 range와는 상관없이 xrange object 자체..

Language/Python 2018.01.03

Python - range(), 순차적인 숫자를 가지는 list를 생성하는 함수

range >>> range(stop) >>> range(start, stop[, step]) 전달받은 인자를 바탕으로 순차적인 숫자를 가지는 list를 생성한다. 인자는 plain integer형 이어야 한다. 인자 중 stop은 반드시 입력되어야 하는 반면, start는 생략되면 기본값으로 0, step은 생략되면 기본값으로 1이 주어진다. 순차적인 숫자가 다음과 같은 규칙으로 생성된다. [start, start + step, start + 2 * step, start + 3 * step, ...] step 이 양수이면 start + i * step 이 stop 보다 작을 때까지,step 이 음수이면 start + i * step 이 stop 보다 클 때까지 생성된다. step은 0이면 안된다. __..

Language/Python 2018.01.03

Python - float(), 실수(float)를 반환하는 클래스

float >>> float(x) 전달한 숫자 혹은 문자열, x를 기반으로 실수 값을 돌려준다. 문자열을 argument로 넘겨줄 경우 해당 문자열은 부호가 있는 정수나 실수여야 한다. ([+|-]nan 또는 [+|-]inf eh argument가 될 수 있다.) 문자열이 아니라면 integer, long integer 또는 float 형의 숫자가 전달되어야 한다. 만약 argument가 전달되지 않는다면 0.0을 반환한다. __builtin__ module에 포함된 class 이다. 예제) 인자로 숫자를 의미하는 문자열이 전달되었을 경우 >>> float("1.2") 1.2 >>> float("-3") -3.0 인자로 [+|-]nan 또는 [+|-]inf 가 전달되었을 경우 >>> float('nan'..

Language/Python 2018.01.02

Python - hasattr(), object의 속성(attribute) 존재를 확인하는 함수

hasattr >>> hasattr(object, name) object의 속성(attribute) 존재를 확인한다. 만약 argument로 넘겨준 object 에 name 의 속성이 존재하면 True, 아니면 False를 반환한다. 내부적으로 getattr(object, name)을 이용하는데 해당 함수 수행시 exception이 발생하는지 하지 않는지를 통해 판단한다. __builtin__ module에 포함된 function 이다. 예제에 앞서 delattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 해당 ob..

Language/Python 2018.01.02

Python - delattr(), object의 속성(attribute)을 제거하는 함수

delattr >>> delattr(object, name) object에 존재하는 속성을 제거한다. __builtin__ module에 포함된 function 이다. 예제에 앞서 delattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 기존 속성을 제거하는 경우 >>> delattr(c, 'x') >>> getattr(c, 'x') Traceback (most recent call last): File "", line 1, in AttributeError: sample instance has no attribute..

Language/Python 2018.01.02

Python - getattr(), object의 속성(attribute) 값을 확인하는 함수

getattr >>> getattr(object, name[, default]) object에 존재하는 속성의 값을 가져온다. __builtin__ module에 포함된 function 이다. 예제에 앞서 getattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 기존 속성의 값을 가져오는 경우 >>> getattr(c, 'x') 1 getattr을 사용하지 않고, c.x를 하여도 동일한 결과를 얻을 수 있다. >>> c.x 1 기존에 존재하지 않는 속성을 가져오려 하는 경우 (기본값이 없는 경우)>>> getattr..

Language/Python 2018.01.02