2017년 10월 5일 목요일

맥에서 Eclipse 설정하기

자바 특히 스프링 개발환경을 설정해보려고 한다.

현재 OS 버전은 High Sierra (10.13) 버전이고 이 환경에서 이클립스와 톰캣등의 환경을 구축해 보려고 한다.

1. 다운로드
    1.1 이클립스 다운로드 ( https://www.eclipse.org/downloads/eclipse-packages/ )
          최신 버전은 Oxygen 버전으로 다운로드.
 
   1.2 톰캣 다운로드 ( https://tomcat.apache.org/download-80.cgi )
         최신버전은 9까지 나와 있으나, 한단계 아래인 8버전으로 다운로드

          9버전으로 다운로드하면 이클립스가 실행이 안되는 현상이 있어 8버전으로 다운로드

2. 다운로드 파일중, JDK, 이클립스는 DMG파일로 단계에 따라 설치 혹은 드래그앤 드롭으로 설치가 완료되지만, 톰캣은 finder에서 더블클릭하면 압축이 풀린다. 
    그대로 사용해도 되겠지만, 관리가 편한 위치로 이동시켜 놓는다.
    내 경우는 개발관련은 DevSpace 폴더를 따로 만들어 놓고 사용하기 때문에
    톰캣의 경우에도 DevSpace폴더로 이동, Tomcat폴더를 만들고, 
    버전(8.5.23)을 하위폴더로 하여 이동시켰다.
    2.1 톰캣은 업데이트를 하더라도 유연하게 적용될 수 있도록 아래처럼 추가작업을 한다.
          (원문 : http://egloos.zum.com/nicolec/v/5912922 )
          참고로 내 톰캣 경로는 ~/Documents/DevSpace/Tomcat/8.5.23 이다.
    2.2 링크를 만들자.
           sudo ln -s ~/Documents/DevSpace/Tomcat/8.5.23 ~/Library/Tomcat
    2.3 권한수정
           sudo chown -R <your id> ~/Library/Tomcat
    2.4 쉘 권한 설정
           sudo chmod +x ~/Library/Tomcat/bin/*.sh
    2.5 쉘을 이용하여 시작/종료
           sudo ~/Library/Tomcat/bin/startup.sh
           sudo ~/Library/Tomcat/bin/shutdown.sh

3. 이클립스를 실행하여 서버 설정
    서버 추가
 8.0이 아니라 8.5버전이다.


설정후, 이클립스상에서 서버 시작/종료해 보면 정상적으로 시작/종료됨을 알 수 있다.

추가 >> 서버 실행시, 로그에 대한  permission denied에러 발생시..
              로그 폴더에 권한등이 문제가 있는 것으로 권한설정을 하면 정상동작함.
추가 >> Eclipse Oxygen버전의 메뉴바가 비활성상태인 버그
              ( https://bugs.eclipse.org/bugs/show_bug.cgi?id=520176#c115 ) -> 열심히 토론
              ( https://git.eclipse.org/r/#/c/105553/1/features/org.eclipse.equinox.executable.feature/bin/cocoa/macosx/x86_64/Eclipse.app/Contents/Info.plist ) -> 결국 이클립스 Info.plist파일에서 <string>en</string> 를 삭제하면 됨.

JDK dwongrade

오래간만에 다시 자바 개발환경을 셋팅해본다.
 
포지션이 관리쪽에 기울어져 있어 지금과 같이 프로젝트에 들어가면 머리속이 다시 리셋되는 것을 반복에 반복을 하고 있다.
 
이러면 안되지 하면서 다시한번 정신차려보고자 자바 스피링 개발환경 셋팅을 시작해 본다.
 
서버는 자바, 파이썬을 공부삼아 하고, 클라이언트는 스위프트로 방향을 잡고 진행해볼 생각이다.
 
우선, 기존 스피일  STS를 설치했다가 다시 이클립스에 플러그인 환경으로 구성을 시도해보고자, 
 
신규 이클립스(oxygen)과 JDK 9을 다운로드 받아 설치해 보았으나,
 
이클립스 실행시 metadata/.log 에러가 발생.
 
이유를 찾아보니, 아직 JDK 9은 제대로 연결이 안되는 것 같다는 글을 보게되어 다시 8버전으로 다운그레이드를 진행하였다.
 
1. Mac에서 자바 제거하기 
    터미널에서
  sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
  sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
  sudo rm -fr ~/Library/Application\ Support/Java
  실행
2. JDK 제거 
  터미널에서
  /Library/Java/JavaVirtualMachines 로 이동
  제거하려는 버전을 제거
  예를 들어 8u6버전을 제거한다면. 
  rm -rf jdk1.8.0_06.jdk
   실행
 
3. JDK 재설치
 
위의 과정을 거친 후 이클립스를 재설치, 실행하니 정상적으로 동작하였다.

2017년 6월 6일 화요일

Heroku에 웹서비스 등록하기

Python을 이용한 웹서비스 구축 후 배포할 수 있는 공짜 서버인 Heroku 사용법을 정리해 본다.
 
물론 사용 트래픽이 많아지면 과금을 하는 것 같지만, 개인 테스트 서버를 구축하여 사용하기에는 좋을 것 같다.
 
홈페이지 : https://www.heroku.com
 
 
위 화살표 부분을 누르고 sign up을 눌러 계정을 생성한다.
 
웹페이지를 통해 등록도 가능할 것 같으나(해보지 않음), 터미널을 통해 이용하는 방법으로 주로 설명이 되어 있어 그에 따르도록 한다.
 
계정을 만들었으면, 터미널을 통해  heroku를 이용할 수 있도록  heroku tool belt(https://blog.heroku.com/the_heroku_toolbelt) 를 설치한다.
 
설치 후 터미널을 열고 로그인한다.
 
$heroku login
 
—> 등록한 이메일과 암호를 물어본다. 올바르게 입력하면 로그인되었음을 알리는 메시지가 나온다.
 
페이지 등록을 위하여 준비된 페이지가 없다면 python flask 샘플 웹페이지를 만든다.
 
최종적으로는 아래와 같은 구조를 갖게된다.
 
 
Procfile, requirements.txt, runtime.txt는 heroku 서비스 등록을 위해 필요한 파일로 이후 생성할 것이다. 
(이미지 파일은 등록이 되는데… 압축파일을 어떻게 올리는지가…..)
(아래 소스는 Udemy 강좌중 일부에서 사용된 것을 옮긴 것이다.)
 
<app4_script1.py>
 
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template("home.html")

@app.route('/about/')
def about():
    return render_template("about.html")

if __name__ == "__main__":
    app.run(debug=True)
 
 
<layout.html>
 
<!DOCTYPE html>
<html>
<head>
<title>Flask App</title>
<link rel="stylesheet" href={{url_for('static', filename='css/main.css')}}
</head>
<body>
<header>
<div class="container">
<h1 class="logo">Ardit's web app</h1>
<strong><nav>
<ul class="menu">
<li><a href="{{ url_for('home')}}">Home</a></li>
<li><a href="{{ url_for('about')}}">About</a></li>
</ul>
</nav></strong>
</div>
</header>
<div class="container">
{%block content%}
{%endblock%}
</div>
</body>
</html>
 
<home.html>
 
{%extends "layout.html"%}
{%block content%}
<div class="home">
<h1>My home page!</h1>
<p>This is a test website.</p>
</div>
{%endblock%}
 
<about.html>
 
{%extends "layout.html"%}
{%block content%}
<div class="about">
<h1>My about page!</h1>
<p>This is a test website again.</p>
</div>
{%endblock%}
 
<main.css>
 
body {
margin: 0;
padding: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #060;
}

/*
* Formatting the header area
*/

header {
background-color: #DFB887;
height: 35px;
width: 100%;
opacity: .9;
margin-bottom: 10px;
}

header h1.logo {
margin: 0;
font-size: 1.7em;
color: #fff;
text-transform: uppercase;
float: left;
}

header h1.logo:hover {
color: #fff;
text-decoration: none;
}

/*
* Center the body content
*/

.container {
width: 1200px;
margin: 0 auto;
}

div.home {
padding: 10px 0 30px 0;
background-color: #E6E6FA;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}

div.about {
padding: 10px 0 30px 0;
background-color: #E6E6FA;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}

h2 {
font-size: 3em;
margin-top: 40px;
text-align: center;
letter-spacing: -2px;
}

h3 {
font-size: 1.7em;
font-weight: 100;
margin-top: 30px;
text-align: center;
letter-spacing: -1px;
color: #999;
}

.menu {
float: right;
margin-top: 8px;
}

.menu li {
display: inline;
}

.menu li + li {
margin-left: 35px;
}

.menu li a {
color: #444;
text-decoration: none;
}
 
위 소스를 작성하고,
 
$python app4_script4.py를 실행 후,
 
웹브라우저에서 localhost:5000 을 실행하면 아래와 같은 화면이 나온다.
 
 
(위 예제는 flask가 설치되어 있어야 한다.)
 
이제 이를 heroku에 배포해 보자. 일반적?인 python 환경을 그대로 옮기게 되면, 불필요한 프레임워크 및 라이브러리까지 모두 옮겨지게 되므로
 
가상환경을 구성하여 웹서비스만을 위한 환경을 구성한다.
 
여러가지 방법이 있겠으나, 여기서는 miniconda를 이용하여 가상환경을 구축하기로 한다.
미니콘다는  https://conda.io/miniconda.html에서 다운로드 받아 설치한다.
 
1. 가상환경 만들기
$conda create -n myenv python=3.5
 
—> -n은 가상환경 이름을 지정하겠다는 옵션
—> python=3.5 는 python 버전 지정
 
2. flask 설치
$pip install flask
 
3. 샘플 웹페이지 루트 폴더로 이동(app4_script1.py 가 있는 폴더)하여 로컬에서 정상동작 테스트
$python app4_script4.py
브라우저에서 localhost:5000 -> 웹페이지가 정사적으로 로딩되는지 확인.
 
4. heroku 배포를 위해서는 gunicorn 설치가 추가적으로 필요 : python WSGI HTTP Server for UNIX
 
5. requirements.txt 파일 생성 : heroku에서 환경 구성을 위해 필요한 프레임워크, 라이브러리등을 알려주는 파일
$pip freeze

click==6.7

Flask==0.12.2

gunicorn==19.7.1

itsdangerous==0.24

Jinja2==2.9.6

MarkupSafe==1.0

Werkzeug==0.12.2

위와 같이 7개가 나타남. 이중 click==6.7은 conda에서 필요한 것으로 생각됨.(없어도 됨)
$pip freeze >> requirements.txt
—> requirements.txt 파일 생성
 
6. Profile 생성 : vi 등의 에이터를 이요하여 아래 내용 입력후 저장

web: gunicorn app4_script1:app

—> app4_script1은 웹서비스를 실행하는 python파일

—> app : 위 소스중 app4_script1.py를 보면 app = Flask(__name__) 한 부분이 있음. 즉, Flask 인스턴스를 받은 변수임.

 

7. runtime.txt : 동작환경으로 현재 동작하는 정확한 환경이라기 보다는 heroku에서 정해준 환경 중 하나를 선택해야 함.

Python-3.6.1

 

(https://devcenter.heroku.com/articles/python-runtimes) - Supported Python runtimes 부분을 보면 지원 환경이 나옴.

여기서는 3.5.x버전으로 환경을 구성하여, 가장 가까운 3.6.1로 설정함.

 

8. Heroku app 설정

$Heroku create appname

—> 중복된 appname이 있으면 생성되지 않음.(다른 사용자가 사용하는 것 포함.)

—> 성공하면, appname.herokuapp.com 으로 생성됨. (해당 페이지로 접근 가능함.)

 

9. 로컬 디렉토리(app4_script1.py가 있는) git  초기화

로컬 디렉토리로 이동 후

$git init

—> 로컬 디렉토리에 .git 파일 생성됨

 

10. git에 로컬 디렉토리 파일 추가

$git add .

 

11. git 이메일/사용자명 설정

$git config —global user.email “email@email.com"

$git config —global user.name “username"

 

12. commit

$git commit -m “first commit"

—> -m : message

 

13. heroku 에서 사용하고자 하는 app 설정

$git:remote —app appname

 

14. git에 push

$git push heroku master

 

15. 확인

$heroku open

 

 

2017년 5월 24일 수요일

Opencv for mac 설치 - miniconda

  • [Python - OpenCV 설치하기]
 
- 설치환경
OS : macOS 10.12 (Sierra)
 
파이썬 강좌를 공부하다 보면 응용사용법 중에  openCV를 이용하는 부분이 있다. 
그런데 강좌에서 진행되는 것과는 다르게 본인의 맥에서는 난리가 나며 openCV가 제대로 동작하지 않는 기이한 현상이 발생하여 잠시 포기상태에 있다가
패러럴즈 가상환경 구축을 통해 맥에 openCV를 구축해 보았다.
 
방법은 여러가지가 있는 것으로 보여진다. 앞오로 한두가지 정도는 더 시도해 볼 생각이지만, 이번에는 miniconda를 사용한 설치는 정리해 본다.
 
참고한 사이트는 아래와 같다.
 
 
miniconda를 이용하여 설치하는 방법은 의외로 간단했다.
 
다만!!!! python 버전을 타는게 문제였다.
 
Python.org 사이트에 접속하여 다운로드로 가면 현재(17.5월 기준) 3.6.1버전이 당당하게 보인다. 이거 설치하지 마라.. 맨 마지막에서 
 

Fetching package metadata .............
Solving package specifications: .

UnsatisfiableError: The following specifications were found to be in conflict:

  • opencv 2.4.11* -> numpy 1.9* -> python 2.6* -> openssl 1.0.1*
  • python 3.6*
    Use "conda info " to see the dependencies for each package.
이런식의 에러를 볼 수 있을 것이다.
 
그럼  miniconda를 사용하여 openCV를 설치해 보자
 
1. python 설치 : python.org 로 가서 3.5.X버전을 설치한다. (download -> all release) (17.5월 기준 3.5.3이 최신)
 
2. miniconda 설치 : https://conda.io/miniconda.html 사이트로 가면 OS X용이 있음(이건 python 3.6) 다운로드함.
   터미널을 열고, 다운로드 받은 위치로 가서
 
   $bash Miniconda3-latest-MacOSX-x86_64.sh 
 
   실행. 혹은 그냥 터미널을 열고
 
   $bash 를 친후 finder에서 ‘Miniconda3-latest-MacOSX-x86_64.sh’를 클릭하여 터미널로 드래그하면 경로까지 입력됨
 
   터미널을 닫았다가 다시 염.
   (원문에서는 $cd ~ 후, $. .bash_profile을 해도 동일한 효과라는데, 그냥 닫아다가 염)
 
   설치가 정상적으로 되었는지 확인
   $conda info
   …. < 뭐가 막 나옴.> ㅎㅎㅎ
 
3. 가상환경 구성 : 각각의 개발환경에 맞춘 가상환경 구성이 가능.
   $conda create -n myenv python=3.5.     —> 가상환경 구성
   $source activate myenv                         —> 가상환경 활성화 (프롬프트가 바뀜)
 
4. Numpy 설치 : OpenCV가 Numpy를 사용하기 때문
   $conda install numpy
 
5. 아나콘다 클라이언트 설치 : openCV는 직접적으로 miniconda에 제공되지 않고 아나콘다 저자소의 서드파티로서 제고되기 때문임
   $conda install anaconda-client
 
6. openCV 검색
   $anaconda search -t condo opencv3
 
   —> 여러 목록이 나오는데,  mempo/opencv3를 사용
 
7. Opencv 설치
   $conda install —channel https://conda.anaconda.org/menpo opencv3
 
   (위를 써도 되고…)
   $conda install -c menpo opencv3
   (이것도 된다)
 
8. 테스트
   $python
   >>> import cv2
   >>>
 
(이미지 변환을 위한 샘플 예제는 원문 사이트에 있으니 따라해봐도 좋다.)
 
샘플코드 실행 결과