TigerCow.Door


# 맥에서 matplotlib 오류 해결방안


RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.


맥에서 matplotlib 을 사용하려는 분들 중 위와 같은 오류가 발생하는 분들이 있을 것입니다.

이는 matplotlib 에서 사용되는 backend 를 알맞게 설정하지 못한 이유 때문에 발생하는 오류입니다.

이를 해결하는 방법으로는 matplotlib 의 자체적인 스크립트를 수정하는 방법 또는 매 프로젝트 마다 명시적으로 backend 를 설정하는 방법이 있습니다.

아무래도 첫번째 방법이 한번만 설정해두면 되기 때문에 간편한 점이 있습니다.



1. matplotlib 스크립트 수정하기


맥에서 터미널을 열어서 아래와 같은 명령어를 입력합니다.


echo "backend: TkAgg" >> ~/.matplotlib/matplotlibrc


아무말이 안떠야 정상입니다 :)

이후 matplotlib 을 사용해보면 정상적으로 되는 것을 확인할 수 있습니다.




2. 프로젝트에서 자체적으로 명시해주기


이는 프로젝트에서


import matplotlib


을 한 이후에 아래와 같은 코드를 작성해줍니다.


matplotlib.use('TkAgg')




이렇게 맥에서 matplotlib error에 대한 해결방법을 알아보았습니다.

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요! 문범우입니다.


이번 포스팅에서는 Github Student Developer Pack (깃헙 학생 개발자 팩)에 대해서 소개해드리려고 합니다.


많은 개발자분들께서 github을 사용하기도, 들어보기도 하셨을 겁니다.

헌데 github에서 repository를 만들때 private로 만드려면 결제를 해야한다는 것..

사실 private가 아니여도 큰 상관은 없을 수 있지만, 가끔은 필요할 때가 있고, 괜히 그러고 싶을때가 있잖아요?


이럴때, 학생분들에 한해서 가능한 방법이 있습니다!

바로 github student developer pack을 얻으면 가능하다는 것!

약 5분? 정도의 시간만 있으면 바로 가능합니다.


먼저 필요한 준비물은 다음과 같습니다.


github 계정

@~.ac.kr 형태의 학교 이메일


이 두가지만 있으면 github student developer pack을 얻을 수 있습니다.

게다가 해당 pack으로 얻을 수 있는 서비스들은 단순히 github repository를 private로 할 수 있는 것 뿐 아니라 매우 다양한 서비스를 제공받을 수 있습니다.


일단 바로 pack을 얻어보도록 하겠습니다,



1. Gihub에 자신의 학교 E-mail 등록하기


먼저 아래 Github 홈페이지에 접속하여 로그인합니다.


https://github.com/


로그인을 한 뒤, 오른쪽 상단의 자신의 프로필을 눌러 Settings 로 들어갑니다.



그럼 위와 같은 화면이 뜰텐데 여기서 왼쪽 메뉴들 중 Emails 를 누릅니다.

그리고 Add email address에 자신의 학교 이메일(~@~.ac.kr 형태)을 입력하고 Add버튼을 누릅니다.

그리고 자신의 학교 이메일을 확인해보면 인증메일이 오게되는데 거기서 인증을 진행합니다.



2. Student Developer Pack 신청하기


이렇게 Github에 학교 이메일을 추가했다면 이제 아래 사이트로 접속합니다.


https://education.github.com/pack



위의 사이트에서 하단에는 Student Pack을 통해 얻을 수 있는 서비스가 나와있습니다.

한번 쭉- 훑어 보시고

Get your pack을 누릅니다.


간단한 영어들이 나오니 확인 후 버튼을 눌러줍니다.


그리고 이메일을 1번에서 연결을 진행했던 학교 이메일로 하여 Student Developer Pack 신청을 합니다.


그리고 완료를 하면, 학교 이메일에 Student pack을 지급했다는 확인 이메일이 오게됩니다.


이후 Github에서 repository를 만들때 private로 만들어도 결제를 하라는 말이 안뜨는 것을 확인하실 수 있습니다. :)


해당 서비스 이외에도 아까 페이지 하단에 나와있는 서비스 모두 이용가능하다고 하니 관심있으신 분들은 다른서비스도 이용해보시면 좋을 것 같아요!

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc

# REST API란?

etc 2017.11.20 18:31


안녕하세요. 문범우입니다.

최근 프로젝트를 진행하면서 REST API를 작성해야할 일이 생겼는데, 아무것도 모르던 상태에서 무작정 해보려니 너무 복잡해서 조금씩 정리해가면서 작성해보려 합니다.

먼저 REST API의 개념에 대해서 알아볼텐데, 잘못된 부분이 있거나 궁금하신 점에 대해서는 언제든지 댓글을 남겨주세요 :)


1. REST(Representational State Transfer)


먼저 REST에 대해서 알아보록 할게요.

많은 분들이 아래와 같은 소개로 시작을 하더군요 ㅎㅎ


REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 이 용어는 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개되었다. 필딩은 HTTP의 주요 저자 중 한 사람이다. 이 개념은 네트워킹 문화에 널리 퍼졌다.

(출처: 위키피디아)


음.. 그렇다고 하네요!

위키피디아를 좀 더 살펴보면, 엄격한 의미로 REST는 네트워크 아키텍처 원리의 모음이라고 합니다. 이때 네트워크 아키텍처 원리란? 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는 말입니다. 

즉, 웹 상의 자료를 HTTP위에서 SOAP(Simple Object Access Protocol)이나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스입니다. 필딩의 REST 아키텍처 형식을 따르면, HTTP나 WWW이 아닌 아주 커다란 소프트웨어 시스템을 설계하는 것도 가능하다고 합니다.

이런 REST 원리를 따르는 시스템은 종종 RESTful이란 용어로 지칭됩니다. 



2. 기본 형태


우선, REST의 기본적인 내용들을 살펴볼게요!

REST의 요소로는 크게 메서드, 리소스, 메세지 3가지로 구성됩니다!

어떻게 구성된다는 것일까요?

예를 들어, "이름이 범우, 직업이 학생인 유저를 생성해"라는 호출이 있을 때

메서드는? "생성해"라는 행위가 되겠죠?

그리고 리소스는, "유저"로써 생성되는 것이며, 메세지는 "이름이 범우, 직업이 학생"이라는 것 입니다.

뒤에서 더 자세히 보겠지만, 위의 내용을 먼저 REST 형태로 표현해본다면,


HTTP POST , http://myblog/users/

{

"users":{

"name":"범우",

"job":"학생"

}

}


과 같이 표현될 수 있습니다.

첫번째 줄의, HTTP POST는 메서드가 되겠으며, 그 뒤에 http://myblog/users/ 라는 형태의 URI로써 리소스가 표현되고 생성되는 메세지는 그 아래 JSON 문서로 표현됩니다.

이제 메서드, 리소스, 메세지에 대해 대략적으로 이해가 가셨나요?

그럼 하나씩 더 깊이 살펴보도록 하겠습니다.



3. HTTP 메서드


REST 에서는 위에서 설명드린 것과 같이, 호출에서의 행위에 대한 메서드를 HTTP 메서드로 그대로 사용됩니다.

HTTP 에는 다양한 메서드가 존재한다고 하는데, REST에서는 단순히 CRUD(Create, Read, Update, Delete)에 해당하는 4가지 메서드만 사용합니다. 아래 표를 한번 확인해볼게요.


메서드

의미

멱등(Idempotent)

POST

Create

No

GET

Read(Select)

Yes

PUT

Update

Yes

DELETE

Delete

Yes


처음에 이야기 한 것 처럼, REST에서는 CRUD에 해당하는 4가지 메서드를 사용합니다.

POST, GET, PUT, DELETE의 메서드가 각각의 의미와 해당하며 추가적으로 멱등(Idempotent)라는 항목이 나와있는데, 멱등이라는 것은 '수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질' 이라고 합니다.

즉, 어떤 행위(메서드)를 여러번 수행했을 때 결과가 바뀌는지에 대한 개념입니다. POST 메서드의 경우 특정 리소스를 추가하는 행위이기 때문에 Idempotent하지 않지만, 나머지 GET, PUT, DELETE는 반복적으로 여러번 수행해도 Idempotent합니다. 하지만 블로그에서 어떤 글을 읽었을 때 조회수가 증가하는 기능이 있다면, GET 메서드 호출이 있을 때 조회수의 변화가 있기 때문에 Idempotent하지 않다고 볼 수 있습니다.


멱등(Idempotent)라는 개념을 설명드리는 이유는, 뒤에서 알아볼테지만, REST는 각 개별 API를 상태 없이 수행하게 됩니다. 그래서 해당 REST API를 다른 API와 함께 호출했다가 실패한 경우, 트렌젝션 복구를 위해 다시 호출을 해야 하는 경우가 있는데, 이때 Idempotent 한 메서드의 경우 단순히 반복적으로 메서드를 수행하면 되겠지만 Idempotent 하지 않은 메서드의 경우 기존의 상태를 저장했다가 다시 수행해야 하는 문제가 있습니다.



4. 리소스


REST는 모든 것을 리소스로 표현합니다. 리소스로 표현한다는 것은 간단히 말해서 명사로 표현한다는 것입니다. 그리고 세부적인 리소스는 id 붙여서 표현합니다.

즉, 사용자(유저)라는 리소스 타입을 정의한다면, http://myblog/users 라고 정의될 것이고 이에 따라 범우라는 id를 갖는 리소스는 http://myblog/users/범우 로 정의될 것입니다.

그런데 이러한 리소스가 명사로써 표현이 되다보니 명령, 행위와 같은 동작들은 API를 정의할 때 헷갈릴 수 있습니다.

예를 들어, "Check 메세지를 보내" 라는 호출이 있을 때는 어떻게 해야 할까요?

위의 형태를, "Check 메세지 요청을 생성해" 라는 형태로 변경해본다면, API 포맷은 POST/myblog/check 와 같은 형태가 될 수 있습니다.



5. REST API 예제


그럼, 위에서 알아본 내용들을 통해 간단한 REST API 예제를 살펴보도록 하겠습니다.


5-1. 생성(Create)


HTTP POST, http://myblog/users/

{

"name":"범우",

"job":"학생"

}


위의 형태는, http://myblog/users/ 라는 리소스를 이름은 범우, 직업은 학생이라는 메세지로 HTTP Post를 이용하여 생성하는 것입니다.



5-2. 조회(Read)


HTTP GET, http://myblog/users/범우


위의 형태는 http://myblog/users/ 라는 유저 리소스에서 이름(id)이 범우인 유저의 정보를 조회하는 것입니다.



5-3. 업데이트(Update)


HTTP PUT, http://myblog/users/범우

{

"name":"범우",

"job":"백수"

}


위의 형태는, http://myblog/users/ 라는 유저 리소스에서 이름(id)이 범우인 유저의 직업을 백수로 바꾸는 것입니다.



5-4. 삭제(Delete)


HTTP DELETE, http://myblog/users/범우


마지막으로 위의 형태는, http://myblog/users 라는 유저 리소스에서 이름(id)이 범우인 정보를 삭제하는 것입니다.



이렇게 해서 REST API에 대해 기본적인 것들을 알아보았습니다.

설명이 잘못 되었거나, 궁금하신 점은 언제든 댓글을 남겨주세요 :)

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc



안녕하세요.

이번에는 OSTAGRAM 이라는 인공지능으로 사진을 합성해주는 사이트 사용법과 사용후기를 알려드리려 합니다.

OSTAGRAM이 무엇인지 소개해드리기에 앞서서 사진들을 몇개 보여주면 좋을 것 같네요 :)





네.. 뭐 이런 사진들을 만들어주는 사이트입니다!

다시 말해서, OSTAGRAM은 인공지능을 이용하여 두개의 사진을 적절하게 하나의 사진으로 만들어주는?

그런 사이트입니다.

되게 색다른 느낌의 사진을 만들어내죠?

그래서 직접! 해봤습니다.




OSTAGRAM 사용법 및 후기


먼저 OSTAGRAM의 공식 사이트로 접속합니다.


www.ostagram.me/


위의 사이트를 통해서 들어가면 아래와 같은 사이트에 접속하게 됩니다.


그리고 빨간 동그라미가 쳐져있는 Process an image를 눌러 줍니다!




역시나 회원만 가능하네요!

바로 가입을 후다닥 해버립시다.

저는 Google을 이용해서 하려는데 무슨오류가 자꾸나서

그냥 아래 빈칸을 입력하고 Sign up 클릭!

그림 입력한 메일로 인증확인 메일이 와서 눌러주면 가입이 완료됩니다!

이제 진짜로 이미지를 만들어볼까요!




가입된 계정으로 로그인을 하고 다시 Process an image를 눌러줍니다.




그럼 이러한 창이 뜨게 됩니다!

Free / HD / UltraHD 세가지 종류가 있는 듯 한데..

아무고민없이 Free 누르고 진행... :'(

체크가 되어있는 곳을 눌러서 이미지 파일을 추가합니다.

여기서 추가하는게 기본적인 틀이 된다고 생각하시면 됩니다.





그리고 스크롤을 조금 내려서 필터를 설정해요!

개인이 가진 필터도 설정할 수 있고, 자신이 가진 파일을 필터로 설정할 수도 있는 듯 합니다.

저는 기본으로 제공해주는 것 중에서 골라봤어요 :)

그리고 맨 위에 있는 Process an image를 누르면!



이러한 창이 뜹니다!

그럼 체크가 되어있는

Get result in several minutes 를 눌러줍니다!(두근두근)


?!


무슨 결제 관련한 창이 뜬거 같아요..

이렇게 안되나.........했는데

우측 상단에 있는 collection을 눌러보니 합성이 진행 중 이더라구요?

그래서 약 5분 기다려보니 결과물이 아래와 같이 나왔습니다!




오! 생각보다 괜찮은 듯한..




마지막 쯤에 뜬 결제관련 창은 기부를 하라는 창이었거나,

한 계정당 몇 번만 무료로 할 수 있고 그 이상은 결제를 해야한다는 창 같았는데

그냥 아무렇지 않게 무시를 해버려서 놓쳐버렸네요..!

아무튼 한장 건졌으니 다음에 한번 더 이용해보도록하죠!

궁금하신점은 댓글이나 이메일(doorbw@outlook.com)으로 연락주세요!





블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc