Volley라는 라이브러리는 안드로이드로 서버와 통신함에 있어서 좀 더 빠르고, 효율적으로 코딩을 할 수 있게끔 도와주는 라이브러리입니다. (더 좋은 라이브러리도 있으니 찾아보시고, 보편적으로 사용되는 겁니다. 쓰기도 쉽구요)

먼저 처음에 Gradle에서 implement를 해야겠죠?

implementation 'com.android.volley:volley:1.1.0'

Gradle에 그대로 넣어주시면 됩니다.

다음으로 이제 본격적으로 사용하시면 되는데요.

 

사용하기전에 Queue, port, host는 미리 정의해 주시는게 사용하기 편리합니다.

대표적으로 GET방식과 POST방식에 이 있는데요.


GET 방식

이 방식은 우리가 서버로부터 어떤 데이터를 전달받고 싶을 때 사용합니다.

StringRequest를 사용하는데요. 괄호 안에다가 parameter를 총 4개를 입력해주게 됩니다.

  1. 방식(GET이냐, POST냐)
  2. url
  3. 서버 응답시 처리할 내용.
  4. 에러 시 처리할 내용

그리고 마지막으로

이미 사용한 것은 제거해주는 식으로 캐시를 관리해야 하니, setShouldCache(false);를 해주고,

마지막으로 큐에 add(Stringrequest)를 해주어 처리를 하게 됩니다.


POST방식

이 방식은 우리가 어떤 데이터를 서버에 보낼 때 사용하게 됩니다.

형식은 GET방식과 대부분 비슷하지만, getParams라는 override method가 추가됩니다.

끝에 getParams()라는 메소드가 추가되었죠? 이 부분이 서버가 요청하는 파라미터를 담는 부분입니다.

예를 들어, 서버가 id와 password를 요청한다면, 

Map<String, String> params = new HashMap<>();

paramas.put("id", "~");

params.put("password", "~");

해주고 return params를 하면 되겠죠?

 

여기까지 Volley에서 GET, POST방식의 이용법이었습니다. 사용하실 때 에러가 난다면,

기본적으로 

  1. 와이파이 등을 확인해서 서버연결을 할 준비가 되었는지 확인하세요.
  2. 서버가 요구하는 파라미터와 내가 코딩한 파라미터에 문제가 없는지 확인하세요.

 

Reference

edwith, 안드로이드 부스트코스 과정

 

종종 사용하던 어플을 보면, 왼쪽 상단에 햄버거모양으로 되어 있는 아이콘을 보실 수 있습니다.

이 아이콘을 클릭하면 왼쪽에서 오른쪽으로 작은 창이 열리면서, 여러 기능을 사용할 수 있는데요.

이를, 네비게이션 뷰라고 칭합니다.

 

편하게도 네비게이션 뷰의 전체 틀은 구글에서 제공해주고 있습니다.

에뮬레이터로 실행을 시켜보시면, 밑의 플로팅 버튼과 네비게이션 뷰를 볼 수 있습니다. 일단 이 글에서 플로팅 버튼을 다루는 게 아니기 때문에 mainActivity에서 플로팅버튼 관련 코드는 삭제해도 무방합니다 ^^


layout 에 보시면 총 4개의 파일을 볼 수 있는데요.

activity_main, app_bar_main, content_main, nav_header_main

근데 너무 많아서 관리하기가 어려워요. 그래서 activity_main에 보시면 <include ~ 라고 된 부분이 있을거에요

이 부분은 app_bar_main이라는 xml을 담고 있네요? 그러면 app_bar_main을 가서 복사를 하시고

include부분에 붙여넣기를 해줍니다.

빨간색으로 된 부분이 추가된 부분이고, 이제 layout에서 app_bar_main은 삭제하구요.

또 코드 안에 보시면 include가 하나 더 있죠? 

이번에는 content_main이라고 되어 있네요. 이 부분에 여러분이 작업을 하시면 되고 include는 지워줍시다. 

(보통 FrameLayout을 추가해서 프래그먼트로 사용하죠)


다시 네비게이션 뷰를 펼쳐보시면, 윗 부분에는 프로필, 아래에는 기능이 있을 거에요.

프로필 부분은 nav_header_main.xml에서 여러분이 원하는대로 변경하실 수 있구요.

여기서는 밑의 기능 부분을 보겠습니다.

기능은 아마 네비게이션 뷰를 만들면서 구글에서 menu파일을 만들어 주었을 거에요. 그 안에 보시면 activity_main_drawer.xml이 있을겁니다.

여기서 다른 부분은 그냥 item만 여러분이 원하시는대로 변경하시고, 맨 위에 checkableBehavior가 있을 거에요. 이 부분을 저대로 두고 실행을 시켜보고 기능을 눌러보세요.

그러고 다시 네비게이션 뷰를 켜보세요. 그러면 포커싱이 내가 전에 누른걸로 포커싱이 맞춰지게 되죠?

만약에 포커싱을 주고 싶지 않고, 다시 열었을 때 clear한 것을 원한다면, single -> none 으로 바꿔 주시면 됩니다.

 

또 각 아이콘에 기능을 넣고 싶다면

mainActivity에서 onNavigationItemSelected메소드를 수정해주면 되겠죠?

 

Measure theory라는 강의에 대한 내용을 정리하겠습니다. 

사실 이 부분은 처음이기도 하고 해서 아직도 제대로 이해가 되지는 않네요 ㅠㅠ.

우리가 사실 Set theory에서 집합을 어떻게 정의하고 어떻게 이루어져 있는지를 알 수 있어요. 

하지만 그렇다고 그 각각 개별에 대한 measure를 정의해놓은 것은 아니에요.

우리가 어떤 행위를 하려고 할 때 measure은 필수적이에요. 

 

예를 들어서, 사람들의 몸무게를 잰다고 가정할 때, 나이순으로 할지, 성별별로 할지, 몸무게 순으로 할지, 

이러한 measure를 아직 정하지 않았다는 소리에요.

 

그래서 간단하게 생각하면, 어떤 사람의 몸무게가 70kg다. 이게 measure이고, 어떤 두 사람의 몸무게를 재었더니 140kg이다. 

이 자체가 measure라고 표현할 수 있어요.

 

그래서 수학안에서는 이 measure를 측정하기 위해서, 

σ- field B 

 

라는 개념이 등장하게 됩니다.

 

이 시그마필드의 특징은 

1. 공집합이 들어가구요 

2. 10개의 집합에서 3개의 집합이 들어가있다면 나머지 7개의 집합도 들어가야 하구요(예를 들어서, 100명 중에 2명의 몸무게를 잴 수 있다면, 나머지 98명 또한 잴 수 있어야한다는 의미입니다) 

3. 또한, 시그마필드 내의 원소를 합쳤을 때, 그 합쳐진 원소도 시그마필드에 들어가 있어야 해요. (A와 B의 몸무게를 잴 수 있다면, A+B의 몸무게도 잴 수 있어야합니다.)

제일 쉽게 말하면 시그마 필드는 '면적을 주기위한 최소 단위' 라고 생각하시면 됩니다.

그래서 여러분이 제일 익숙할만한 시그마 필드는 power-set입니다. 2^A, 즉 모든 부분집합을 포함하는 집합이라는 거죠. 또는, 어떤 원소들을 제일 잘게 나눠서 가지고 있는 집합이라고도 표현할 수 있겠네요.

따라서, 위 특징에 따르면 어떠한 element가 시그마필드에 들어가 있지 않다면, 그는 measured될 수 없습니다.

예를 들면, 어떤 시그마필드에 0명의 몸무게와 100명의 몸무게가 원소로 들어있다면, 이는 각각의 몸무게는 잴 수 없다는 것입니다. 이때, 각각의 몸무게는 0도 아니고, 어떠한 수치를 가지고 있지 않습니다. 그냥 '불가능하다'라고 표현합니다.

이를 이용해서 수학자들은 measure space를 정의하게 됩니다.

 

1.  공간을 확장했다고 생각하면 됩니다. 원래는 사람밖에 없었는데 몸무게라는 measure를 추가함으로써 확장시킨 것이죠.

2. 그래서 measure의 정의가 뭐냐면, U라는 set이 있고, 그로부터 만들어지는 시그마 필드 B가 있을 때,

empty set은 0이어야하고, 시그마필드 안에서 겹치지 않는 원소들을 더해서 구한 measure와 각각의 measure을 더한 값이 같아야 합니다.

 -> A(X+Y) = A(X) + A(Y) 라고 쉽게 생각해보세요!

3.전체가 들어가면 1이 되는 normalized된 measure가 확률이다. 

(확률에서 전체를 더하면 1이 되죠? 이 개념을 설명할 때 measure theory를 이용하는 이유입니다.)

 

4. 

U라는 어떤 set이 있고, 

U의 element로 이루어진 subset들의 집합인 시그마필드가 있고, 

시그마필드의 각각의 원소에 양수를 부여할 수 있는 measure가 있고, 

그 measure가 1번과 2번의 조건을 만족한다면 그게 measure space로 정의 되어 질 수 있습니다.

 

Reference

edwith 강의, 최성준님

'# 기타 공부한 것들 > math' 카테고리의 다른 글

기댓값, 분산, 표준편차  (0) 2019.01.21
posterior과 bayesian  (6) 2018.10.20
Set theory  (0) 2018.07.26
Local Minimum, Local Maximum  (0) 2018.06.21
Convexity(2)  (3) 2018.06.20

여러분도 아시다시피 Set에서는 여러가지 정의가 있습니다. 

set, element, subset, universal set(집합을 덮을 수 있는 전체 집합), set operations.

위의 개념들은 초등학교에서 배우는 것으로 누구나가 다 알 수 있는 사실입니다. 다음으로

  • disjoint sets : A∩B = 
  • partition of A : 부분 집합
  • Cartesian product : 집합의 곱을 뜻합니다. 
    • example) A = {1, 2}, B = {3, 4, 5}
    • A * B = {(1,3), (1,4), (1,5), (2,3), (2,4), (2,5)}
  • power set : 집합 A의 모든 부분 집합을 뜻합니다 -> 2^A

 

  • cardinality A : finite, infinite, countable, uncountable, denumerable(countably infinite)
  • 쉽게 카디널리티는, 차원이라고 생각하면 조금 쉬울 수도 있습니다.
  • 집합(cardinality)에서 A(m), B(n)이라면 AB는 (mn)의 cardinality를 가지게 됩니다.
  • 두개의 집합이 one-to-one이라면, 두 집합의 cardinality는 같습니다.
  • countable : 예를 들어, 자연수의 집합(1,2,3,4 ....) 과 어떤 집합이 one-to-one 대응이 된다면 그를 countable (infinite)라고 부르게 됩니다.
  • 예를 들면, 정수들의 집합과 분수들의 집합은 countable이다. 둘은 자연수의 집합과 one-to-one대응이 되기 댸문이죠. 
  • 그렇다면 정수는 양수만 있는게 아니라 음수만 있는데 그게 어떻게 되냐? 라고 물어 보실 수 있는데요. 이 부분은 무한대에서 2를 곱하면 똑같이 무한대죠? 똑같은 개념입니다. 

 

그래서 이처럼 셀 수 있는 무한대의 집합을 denumerable이라고 부릅니다. 또한 이를, 수학적으로 aleph null이라고 부릅니다.

not countable한 것을 uncountable 이라고 합니다. 한마디로 셀 수 없는 무한 집합입니다. 또한 수학적으로 countinuum이라고 표현하빈다.

이를 설명할 때에는 대표적인 예시가 있습니다.

Q : 0과 1사이의 집합이 몇개 일까요?

A : 무한개요.

위의 답변이 이해가 가시나요? 당연한 얘기입니다. 그렇다면

Q : 0과 1사이의 집합과 정수에서의 집합은 둘 다 같은 무한대인가요?

 

네! 답은 '아니오' 입니다. 이를 증명한게 Cantor라는 수학자입니다. 이를 증명하는 과정은

C = [0, 1]

  1. C를 countable이라 가정
  2. C에 대응하는 시퀀스, S가 존재한다고 가정
  3. 우리가 0과 1사이의 숫자를 다루기 때문에 다음과 같이 표현할 수 있습니다.
  4.  

 

이와 같이 이진법으로 표현할 수 있습니다.

(시퀀스 S에 포함되는) x와 같이 표현하다 보면, 0과 1사이를 모두 표현할 수 있기때문에 countable하다는 것을 알 수 있습니다.

그런데 여기서 d = 1-d를 이용해서 하나씩 바꿔서 만든 x를 생각해 봅시다. 근데 이 새로 생긴 x는 S에 속하나요?

아니요. 0과 1을 바꿔서 만든 새로운 변수이기 때문에 S에 속하지 않고, C에 속하게 됩니다. 

이를 이용하여 모든 x를 바꿔가면서 생각해보면, 일부의 x가 아닌 모든 x에 대해서 생각을 하기 떄문에, 이를 uncountable이라고 표현할 수 있게 됩니다.

  • function or mapping f : U -> V
  • domain U, codomain V (input, output이라고 생각하세요)
  • image f(A) : A는 원소를 얘기하는 겁니다.
  • range f(U) 

 

사실 그래서 많은 machine learning 에서 푸는 문제가 preimage의 형태입니다.

어떠한 label을 가지고 개와 고양이를 train한 문제를 가지고 있을 때, 또 다른 data set, 즉 test set으로 이게 개인지 고양이인지를 파별해야하기 때문이죠.

마지막으로, 

  • one-to-one  or injective : f(a) = f(b) -> a = b
  • onto or injective : f(U) = V
  • invertible : one-to-one and onto 

설명은 그림을 보시면 잘 이해 되실겁니다!

 

Reference

edwith 강의, 최성준님

'# 기타 공부한 것들 > math' 카테고리의 다른 글

posterior과 bayesian  (6) 2018.10.20
Measure theory  (1) 2018.07.26
Local Minimum, Local Maximum  (0) 2018.06.21
Convexity(2)  (3) 2018.06.20
Convexity(1)  (4) 2018.06.20

Jupyter 주요 단축키 모음

여기 있는 단축키는 명령상태에서 [H]를 누르면 보실 수 있습니다.

여기에 없는 나머지 것은 위의 명령어를 통해 확인 하실 수 있습니다.

 

(1) 셀 선택 모드 (Command Mode)

  • 위로 셀 추가    [a]
  • 아래로 셀 추가    [b]
  • 선택 셀 삭제    [d][d] (d를 두번 누름)
  • 선택 셀 잘라내기 (삭제로 써도 무방)    [x]
  • 선택 셀 복사하기     [c] 
  • 선택 셀 아래에 붙여넣기    [p] 
  • 선택 셀과 아래 셀과 합치기    [shift] + [m]
  • 실행결과 열기/닫기    [o]
  • Markdown으로 변경    [m]
  • Code로 변경    [y]
  • 파일 저장    [cmd] + [s] 또는 [s] 
  • 선택 셀의 코드 입력 모드로 돌아가기    [enter]

 

(2) 코드 입력 모드 (Edit Mode)

  • 선택 셀의 코드 전체 선택    [ctrl] + [a]
  • 선택 셀 내 실행 취소    [ctrl] + [z]
  • 선택 셀 내 다시 실행    [ctrl] + [y]
  • 커서 위치 라인 주석처리    [ctrl] + [/]
  • 선택 셀 코드 실행    [ctrl] + [enter]
  • 선택 셀 코드 실행 후 다음 Cell로 이동 (없으면 새로 추가)    [shift] + [enter]
  • 커서 위치에서 셀 둘로 나누기    [shift] + [ctrl] + [-]
  • 셀 선택 모드로 돌아가기    [esc] 또는 [ctrl] + [m]

'# 기타 공부한 것들 > etc' 카테고리의 다른 글

ML 공부용 사이트들  (0) 2018.12.17
Google Colab GPU 사용  (0) 2018.11.27
Java Queue 간단 예제  (0) 2018.11.05
JAVA String reverse하기  (0) 2018.11.05
(Unity) 캐릭터 이동시키는 몇 가지 방법  (0) 2018.07.09