1. Now you have the db folder.  Then go inside the folder to create a subfolder "data" for holding the actual mongo Data
    /home/ubuntu$ cd db
    /home/ubuntu$ mkdir data
몽고디비에서 실제 적으로 데이터가 적재 될 경로를 생성해준다. 
그러한 후에 노드를 깔기 전에 먼저 몽고를 설치한다. 다음의 명령들을 따르면 된다. 

http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

1. 간단히 말해, 다음과 같이 하면 된다.
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee
/etc/apt/sources.list.d/10gen.list
$ sudo apt-get update
$ sudo apt-get install mongodb-10gen

몽고 디비를 가져와서 update시키고 몽고 설치를 진행하면 된다. 

2. 몽고가 설치가 끝나면 몽고는 실행한다. 하지만 몽고를 지정한 경로로 재실행 필요가 있기 때문에 다음과
같이 몽고를 STOP 끄면 되겠다.
$ sudo service mongodb stop

3. 우리가 지정한 DB의 데이터 위치 home/ubuntu/db/data로 경로를 지정하여 다시 몽고를 실행하겠다.
$ sudo /usr/bin/mongod --dbpath /home/ubuntu/db/data


AWS에서 필요한 몽고와 PC측에서 접근하여 접속하는 방법을 다루는 것이 필요하겠다. 

Posted by slender ankles
,

컬렉션의 배열에서 해당하는 원소를 찾아내는 조건문

유용한 사용 구분은 $eleMatch 부분이다. JSON형태의 배열이 아니면 찾아지지 않는다는 점을 알았고, 그래서 일부러 배열의 형태를 JSON형태로 만들었다. 몽고의 초기버젼에는 지원하지 않는 부분이라고 한다. 


위 JSON배열에서 각 객체에 printedlist란 배열에서 asdfasdf란 user_id를 포함하는 객체들만 골라서 리턴해주는 쿼리문을 짜고 싶었다. 

다음과 같이 수행하면 된다.

find_statement = {"printedlist" : {$eleMatch : {"userId" : "asdfasdf"}}};

collection.find(find_statement).sort(sort_statement).toArray(function(err, items){

            필요한 callback 명령

}

'mongodb' 카테고리의 다른 글

ubuntu에서 mongodb 설치하는 방법  (0) 2015.03.04
Posted by slender ankles
,

indexOf

Javascript 2015. 3. 4. 01:52

배열이나 string에서 

특정 원소 또는 문자열이 있는지 검사하는 하고 

있다면 그 인덱스를 반환하고 없다면 -1을 반환한다.


예를 들어

var array = ["samsung""apple""lg""hankuk"];
if(array.indexOf("samsung"!= -1){
console.log("삼성이 있다");
}
cs


Posted by slender ankles
,

node.js를 설치 하기 위해 먼저 터미널을 실행합니다.(단축키 : Ctrl + Alt + T)


Linux에는 데비안과 레드햇 계열이 있습니다. Ubuntu는 데비안 계열입니다.

위 내용을 한 이유는 패키지 매니저 때문입니다. 데비안의 경우는 apt-get 레드헷은 yum 이렇게 있습니다.


Ubuntu 이기 때문에 apt-get으로 환경을 구성하겠습니다.



sudo apt-get install python-software-properties

node.js에서 필요한 플러그인을 설치하고 컴파일 하기 위함입니다. 그 이유는 node.js 플러그인 경우에 속도를 위해 javascript로 되어 있는 것이 아닌 c++로 되어 있는 경우가 있습니다.



sudo apt-get install build-essential

node.js 를 컴파일할 때 쓸 c++ 빌더 설치를 하기 위함입니다. 그 이유는 node.js는 구글의 V8엔진을 기반으로 만들어졌고 V8엔진의 경우 크롬에 포함되어 있으며, 크롬은 여러 환경에 구동가능하게 c++로 구성이 되어 있습니다.



일단 sudo로 권한 획득 후 설치를 해줍니다. 위 내용은 노드를 구동하기 위해 기본으로 설치되어야 하는 것들입니다.



sudo add-apt-repository ppa:chris-lea/node.js

sudo apt-get update

apt-get repository에 node.js 추가 후 목록 갱신



sudo apt-get install nodejs

node.js 설치



sudo npm install -g express => 이건 이전버젼에서 사용하는 방법

node.js 플러그인 중 express 설치 -g라는 옵션은 전역으로 설치하겠다는 옵션


sudo npm install -g express-generator

이 방법을 사용해야 함 버젼 4.0 이상이라고 나와있음


express helloworld

express [프로젝트 이름] 형식으로 하면 현재 폴더에서 새로운 폴더가 생성되고 그 안에 express 기본 세팅이 됩니다.



sudo npm install -d

현재 폴더에서 package.json 파일을 찾아서 그 안에 명시된 플러그인 자동 설치합니다.



위 내용까지 하셨으면 기본 프로젝트 준비는 끝났습니다. 인제 실행하는 것만 남았습니다.

프로젝트 폴더에서 app.js가 있는 경로에서 node app.js 입력 후 Enter

'Node.js' 카테고리의 다른 글

node.js의 중요한 특징  (0) 2015.05.09
nodejs express의 모듈화  (0) 2015.04.01
windows -> ubuntu linux 로의 nodejs 변경에 따른 이슈  (0) 2015.03.05
Posted by slender ankles
,

ls

현재 디렉토리들의 파일들을 검색

mkdir

디렉토리를 생성

rm

파일을 삭제 옵션을 걸어주어야 하는 것 같다. 옵션에 대해 알아봐야겠다

(-r 은 디렉토리의 모든 파일들을 삭제한다)

rmdir 

디렉토리를 삭제한다. 

sudo

superuser do 를 뜻함(윈도우를 뜻하자면 관리자 권한으로 실행?)

root접근을 하는 것을 뜻하는 듯 하다.


Linux에는 데비안과 레드햇 계열이 있다. Ubuntu는 데비안 계열입니다.

위 내용을 한 이유는 패키지 매니저 때문입니다. 

데비안의 경우는 apt-get , 레드헷은 yum 이렇게 있습니다.


Ubuntu 이기 때문에 apt-get으로 환경으로 구성한다.





rm -rf  지우고싶은파일,폴더


안에 있는 파일까지 모조리 지운다.





Posted by slender ankles
,

Instance란 무엇인가?

인스턴스란 컴퓨터 하나를 인스턴스라고 한다. 예를들어 인스턴스 4개를 만든다는 표현은 4개의 컴퓨터를 AWS 인프라 위에 생성한다는 뜻이 된다.

Instance 생성

EC2 콘솔로 접속한다. 사이드바의 메뉴 중에 인스턴스를 선택한다. 

인스턴스 화면 중에 Launch Instance를 선택한다.

아래와 같은 화면이 나타나면 그림에 표기된 순서대로 처리한다.

표기된 순서대로 처리한다.

위의 그림에 대한 부가적인 설명은 아래와 같다.

  1. 인스턴스를 생성하는 3가지 방법 중에 하나를 선택한다. 우리는 Quick Launch Wizard를 이용하겠다. AWS Marketplace는 미리 준비된 운영체제와 에플리케이션을 쉽게 사용할 수 있는 방법을 제공한다. 무료도 있고 유료도 있다.
  2. 인스턴스를 쉽게 식별 할 수 있도록 이름을 지정한다.
  3. 키(key)란 인스턴스에 원격으로 접속 할 때 사용하는 비밀번호와 같은 역할을 하는 파일이다. EC2의 인스턴스에 접속할 때는 비밀번호 대신에 이 키를 사용한다. Select Existing은 이미 발급 받은 키를 사용할 때 선택하는 옵션이고, Create New는 새로운 키를 생성하는 옵션이다. None는 키를 사용하지 않을 때의 옵션이다. 키가 없으면 인스턴스에 접속할 수 없다.
  4. 키의 이름을 지정한다.
  5. 키를 다운로드 받는다. 키는 단 한번만 발급되기 때문에 보관에 유의해야 한다. 또한 인스턴스에 접속하는 유일한 방법이기 때문에 안전한 곳에 보관해야 한다. 만약 키를 분실했다면 인스턴스를 이미지로 만들고 해당 이미지로 인스턴스를 새로 생성하는 방법을 사용한다. 이미지는 후속 수업에서 설명한다.
  6. 운영체제를 선택한다. Free tier eligible 표시가 있는 인스턴스만 일년간 무료사용이 가능하다. (우리 수업에서는 Ubuntu Server 버전을 사용한다.)
  7. 이상의 절차를 완료하면 Continue 버튼이 활성화 된다.

인스턴스는 아래와 같은 설정으로 생성될 것이다. 설정을 변경하고 싶으면 Edit detail를 선택한다.



아래는 처리 결과를 표시한다. Close를 누르면 instance 화면으로 복귀한다.

성공적으로 생성한 인스턴스는 아래와 같이 인스턴스 목록에 표시된다. State가 running이 되면 접속 가능하고, 서비스 가능한 상태가 된 것이다.


인스턴스 접속


인스턴스에 접속 할 때는 SSH 라는 방법을 이용하는데, SSH에 대한 세부적인 내용은 원격제어 모듈의 SSH 토픽을 참조하자. http://opentutorials.org/module/432/3738


인스턴스에 접속하기 위해서는 우선 인스턴스에 접근 할 수 있는 URL을 알아야 하고, 두번째로는 인스턴스를 제어할 수 있는 클라이언트가 필요하다. SSH는 원격에 있는 컴퓨터를 제어하는 프로그램 혹은 통신방법인데, 리눅스나 맥에는 내장되어 있고, 윈도우에서는 따로 설치를 해야 한다. 아래 설명은 SSH를 이용해서 인스턴스를 제어하는 방법에 대한 것이다. 

우선 접속하고자 하는 인스턴스를 선택하고 오른쪽 클릭을 해서 Connect 항목을 선택한다. 

아래의 화면에서 'Connect with a standalone SSH Client'를 선택하면 Public DNS 항목이 있는데 이것이 인스턴스에 접근 할 수 있는 URL이다. 

이 정보를 바탕으로 인스턴스에 접속하게 되는데 운영체제 별로 인스턴스에 접속하는 방법은 아래와 같다. 
















'Amazon AWS' 카테고리의 다른 글

aws에 mongodb mongovue 연결(connection)하기  (0) 2015.03.04
Posted by slender ankles
,

RGB거리 문제이다.

전형적인 DP문제라고 생각한다.

조건 1 RGB거리에 있는 집들은 빨강 , 초록, 파랑 색으로 칠해져야만 한다.

조건 2 이웃한 집과는 색깔이 달라야 한다.


가장 적은 돈으로 거리를 색칠 할 수 있게 할려고 할 때 그 비용은 얼마인가?


-----------------------------------------------------------------

느낌은 전체의 경우의 수를 다 구해보는 것 인데 그렇게 해도 답을 나올 것 같다. 하지만

배열을 활용한 dynamic programming방법이 더 좋을 것 같아 이 방법을 토대로 답을 구하고자 한다. 


풀이 정리

1. 우선 입력 받은 각 집들의 RGB 비용들을 arr이라는 배열에 입력 받았다. 

문제에서 

3 26 40 83 49 60 57 13 89 99

과 같이 입력 받는다.

배열은 arr[집의개수][4]; 와 같이 설정하였따. 

RGB 세가지 색깔이지만 나는 배열을 0부터 접근하는 것보다 1부터 접근하는 것을 좋아하므로 2차원 배열을 4로 선언하였다. 

1, 2, 3이렇게 접근 할 생각이다.

배열의 1차원 인덱스에는 집의 번호를 말한다. 

배열의 2차원 인덱스는 3개로 구성되는데 R , G,  B 의 비용을 입력받는다.  

arr[1][1] = 26, arr[1][2] = 40, arr[1][3] = 83

arr[2][1] = 49, arr[2][2] = 60, arr[2][3] = 57

arr[3][1] = 13, arr[3][2] = 89, arr[3][3] = 99

와 같이 입력 될 것이다. 


2. 이렇게 입력 받은 것에서 최소비용을 구해야 하는 것이 이 문제의 핵심인데

dp[집의개수][4]라는 배열을 선언하였다.

우선 dp[1][1], dp[1][2], dp[1][3]에는 arr[1][1], arr[1][2], arr[1][3]의 값들은 그대로 넣는다. 

초기 값을 선언하는 것이다. (첫 번째 집까지는 자신의 값들이 최소비용이다)

두 번째 집부터 연산을 시작하게 된다. 

2번째 집에서의 특정 RGB값 + 앞쪽까지의 RGB의 최소값에서 자신과 다른 색의 조합에서의 최소값

이라는 점화식을 세워서 풀었다. 

위의 말이 무엇이냐면

2번째 집에서 Red를 택하면 

1번째 집까지의 Green Or Blue의 색상으로 선택된 최소값과 자신(Red)을 더하여 최소값을 구하는 것이다. 

2번째 집에서 Green을 택하면

1번째 집까지의 Red Or Blue의 색상으로 선택된 최소값과 자신(Green)을 더하여 최소값을 구하는 것이다.

..........

3번째 집에서 Red를 택하면

2번째 집까지의 Green Or Blue의 색상으로 선택된 최소값과 자신(Red)를 더하여 최소값을 구하는 것이다. 

점화식을 구하자면

dp[i][j] = (j를 제외한 dp[i - 1][k] 중에서 최소값 ) + arr[i][j]가 된다.


이런식으로 dp를 수행하므로써 그때그때마다 모든 경우의 수를 세는 것보다

메모이제이션(?)을 적용하여 빠른 연산을 할 수 있으며, 사실 더 복잡하지도 않은 것 같다. 


이렇게 이차원 배열을 이용해서 dp를 수행하는 것은 처음해보는 데 기본적인 문제이지만 많은 도움이 됐던 거 같다. 

 




 






'알고리즘문제풀이' 카테고리의 다른 글

더블릿_최소자리바꿈  (0) 2015.03.24
2477_참외밭  (0) 2015.03.07
10158_개미  (0) 2015.03.06
9655 돌게임  (0) 2015.03.01
10157_자리배정  (0) 2015.02.28
Posted by slender ankles
,

1차원적으로 생각했다. 

돌게임에서 수근이 또는 창영이는 자신의 턴마다 1개 또는 3개를 가져 갈 수 있다고 했다. 

결국 어떠한 형태로 가져가든 간에 1개씩 가져가든 3개씩 가져가든, 홀수개만큼을 가져가는 것이기 때문에 누구의 턴에서 끝나는지는 사실 정해져 있다는 것을 깨달았다. 


나의 풀이 방법은 

(전체 돌의 개수 /  3) + (전체돌의개수 % 3)

와 같다. 이렇게 게임이 최종 몇 번안에 완료가 되는지를 구하고


그 완료된 게임의 횟수가 짝수이면 창영이가 승! 홀수이면 수근이가 승!이라고 판정했다.



// 풀고나서 생각해보았는데

어차피 전체 돌을 한 개씩 가져가면서 시행되는 게임의 횟수를 짝수인지 홀수인지 계산하면되므로 

전체돌의 개수 % 2 == 0  이면 창영 승

전체돌의 개수 % 2 == 1  이면 수근 승 

이렇게 판정하면 된다. 





'알고리즘문제풀이' 카테고리의 다른 글

더블릿_최소자리바꿈  (0) 2015.03.24
2477_참외밭  (0) 2015.03.07
10158_개미  (0) 2015.03.06
1149_RGB거리  (0) 2015.03.01
10157_자리배정  (0) 2015.02.28
Posted by slender ankles
,