달력

3

« 2024/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

Azuer와 AWS의 가상화된 인스턴스에서는 잘 동작하던 코드가, 사내 또는 특별한 환경에서 동작하지 않을 때가 있는데, 이경우는 보안 강화를 위해 설정된 방화벽과 Proxy 서버를 통해서 외부로 나가는 Traffic의 통제를 받기 때문일 것이다.


node js의 패키지를 설치를 위해서 사용하는 NPM을 사용할 때도 Proxy의 영향을 받아서 Repository에서 다운받을 패키지 설치가 원활하지 않을 수 있을때 다음과 같이 CLI상에서 명령을 실행하여 해결할 수 있다.


예로 proxy 서버의 주소가 '192.168.10.1' 이고 Port가 8080이라고 할때, 다음과 같이 실행하면 된다.

(이미 npm과  nodejs가 설치 되어있는 환경에서 실행)


   npm config set proxy http://192.168.10.1:8080

   npm config set https-proxy http://192.168.10.1:8080

   npm config set strict-ssl false


가장 마지막에 있는 strict-ssl은 HTTP Strict Transport Security(HSTS)를 사용하여 항상 HTTPS  프로토콜을 사용하도록 강제하기 위한 옵녓인데, 여기서는 False로 설정했다. 




:
Posted by 행복상자
2016. 4. 16. 19:22

Visual Studio Code 1.0 정식 Released 공부하는 것2016. 4. 16. 19:22

지난 몇개월동안 내가 제일 많이 이용하는 Editor는 "Eclipse" 도 아니고 "Visual Studio" 도 아닌 바로 MS의 "Visual Studio Code" 라는 Editor이다. 정식으로 1.0 버전이 아닌데도, Mac, Window PC 할 것 없이 설치해서 사용해 왔다. 

"Vi"나 "Ultra Editor" 만큼 가볍고, 사용하기 좋은 Editor...는 아니지만, 사실 "Vi" 보다는 무겁고, "Ultra Editor"보다는 많이 가볍다. 

빠른 기능 개발에 따른 버전 업그레이드는 타의 추종을 불허할 만큼 빠르게 진행되어 왔다. 더군다나, Edior 개발은 "Eclipse"를 개발해 왔던, 에릭 감마의 참여는 많은 부분들을 기대하게 만들었고, 어떤 부분들은 "Eclipse를 많이 닮았다"라고 생각하게 만들었다. (특히 단축키에서 )


이전에 Visual Studio의 코드의 일부를 오픈 소스로 재단에 기부하면서, 초기 버전으로 사용 되었던 이름은 "Code" 였었는데, 언제 부터인가 설치시에 "Visual Studio Code"로 바뀌었다.  더군다나, "Node JS"와 "NPM"이 윈도우즈 설치 버전에는 기본적으로 설치되어 있어서, Node JS를 공부하기 좋았다. (디버깅 기능도 제공된다.)


이렇게 바로 어제까지도 베타 버전을 사용하고 있었는데, 오늘 드디어 "Visual Studio Code"가 공식적으로 "1.0" 버전을 릴리즈 하게 되었다.


"Code"는 사용하기도 쉽지만 정말 가볍고, 필요한 Plug-in과 Extension들이 많이있어 사용하기가 편하고, 필요한 단축키들에 대해서 User가 직접적으로 수정하거나, 생성도 가능하다. 이번에 1.0 버전이 되면서 좋은 것은 "한글화"인데, 이전까지는 영문 버번으로만 만났었다. 

사용하는데는 영문 버전도 별로 불 편함이 없기는 하였지만, 이는 더 많은 한글화를 지원할 거라는 생각을  갖게 만들어 준다. 그러나 아직 "Editor"상에서의 한글 입력은 좀 불편하다. 입력시 잔상(?)이 남고, 커서의 위치도 입력하는 문자열이 중첩되는 것처럼 보여, 위치가 정확하지 않아 보인다. 그러나, 입력후 스페이스나 엔터키를 입력하면, 바로 정상화 되어 사용 못할 정도는 아니다.


관련된 세부 내용은 다음의 링크를 참고하면 된다.

- Visual Studio Code 1.0발표 : https://code.visualstudio.com/blogs/2016/04/14/vscode-1.0

- Visual Studio Code : https://code.visualstudio.com/

- Extension Market Place : https://marketplace.visualstudio.com/vscode


아래는 현재 가장 인기있는 Extension들이다.




'공부하는 것' 카테고리의 다른 글

새로운 Text.Json APIs  (0) 2019.06.16
요즘 내가 공부하는 것  (1) 2019.06.07
알고리듬 성능비교 - Selection Sort  (0) 2016.02.27
Byte and Bit에 대해서...  (0) 2009.10.20
GRails 공부 자료들...  (0) 2009.10.04
:
Posted by 행복상자
2016. 2. 27. 17:55

알고리듬 성능비교 - Selection Sort 공부하는 것2016. 2. 27. 17:55

회사에서 요구하는 자격조건을 만족시키기 위해서 알고리듬을 공부해야한다.

공부하는 것은 싫어하지는 않지만, 그동안 내가 개발에 필요한 알고리듬은 천재적인 어떤 사람들이 만들어 놓은 Library를 이용하는 된다고 생각해서, 만들어 놓을 것을 잘 파악해서 내가 필요한 곳에 적절하게 사용하면 된다라고 생각해 왔고, 이러한 나의 생각은 지금까지도 변함이 없다.

그런데, 대학 생활 이후로는 크게 관심을 가지지 않았었는데, 다시 되집어 가면서 보아야 하는 상황이 나에게 왔다. 

뭐, 그래도 즐기면서 하면되니까, 즐겁게 하련다.


아래의 코드는 "창의적 알고리듬"에 나오는 코드인데, 이를 조금 개선해 보았다.

코드는 다음과 같다. (코드는 짦기 때문에 따로 설명하지 않았다.)

[코드 1: 개선전]

#include "stdafx.h"

#include <stdlib.h>

#include <time.h>


int n, S[100000];


void print_array()

{

for (int i = 0; i < n; i++)

{

printf("%d ", S[i]);

}

printf("\n");

}


void swap(int ai, int bi)

{

int t = S[ai];

S[ai] = S[bi];

S[bi] = t;

}


void selection_sort(void)

{

for (int i = 0; i < n; i++)

{

for (int j = i + 1; j < n; j++)

{

if (S[i] > S[j])

{

swap(i, j);

}

}

}

}


void selection_sort(void)

{

int idx = 0;


for (int i = 0; i < n; i++)

{

idx = i;

for (int j = idx + 1; j < n; j++)

{

if (S[idx] > S[j])

{

idx = j;

}

}

swap(idx, i);

}

}


int main()

{

srand(time(NULL));

scanf("%d", &n);


for (int i = 0; i < n; i++)

{

S[i] = rand();

}


int start = clock();

selection_sort();


printf("result=%.3lf(sec)\n", (double)(clock() - start) / CLOCKS_PER_SEC);

    

print_array();

return 0;

}


아래 코드는 위 코드에서 swap함수를 호출하는 부분에서 비교 결과에 대한 array index값을 변수에 저장하여 swap()함수의 호출수를 줄였다. (아래 "코드 2"의 붉은 박스 부분 참조)

[코드 2: 개선후]

#include "stdafx.h"

#include <stdlib.h>

#include <time.h>


int n, S[100000];


void print_array()

{

for (int i = 0; i < n; i++)

{

printf("%d ", S[i]);

}

printf("\n");

}


void swap(int ai, int bi)

{

int t = S[ai];

S[ai] = S[bi];

S[bi] = t;

}



void selection_sort2(void)

{

int idx = 0;


for (int i = 0; i < n; i++)

{

idx = i;

for (int j = idx + 1; j < n; j++)

{

if (S[idx] > S[j])

{

idx = j;

}

}

swap(idx, i);

}

}


int main()

{

srand(time(NULL));

scanf("%d", &n);


for (int i = 0; i < n; i++)

{

S[i] = rand();

}


int start = clock();

selection_sort2();


printf("result=%.3lf(sec)\n", (double)(clock() - start) / CLOCKS_PER_SEC);

    

print_array();

return 0;

}

PC의 성능에 따라 다르겠지만, 코드를 실행하여, 100개에 대해서는 거의 같은 성능을 보이나, 1000개 이상에서는 성능차이가 보인다.

내 PC에서 1000개에 대해 소팅을 실행할 경우에, 
"[코드 1]"은 0.013초가 결렸고, "[코드 2]"는 0.002초로 걸린다. 약 6배정도 "[코드 2]"가 빠른 결과를 가져온다고 볼수 있다.

   


'공부하는 것' 카테고리의 다른 글

요즘 내가 공부하는 것  (1) 2019.06.07
Visual Studio Code 1.0 정식 Released  (2) 2016.04.16
Byte and Bit에 대해서...  (0) 2009.10.20
GRails 공부 자료들...  (0) 2009.10.04
Silverlight 3 Released  (0) 2009.07.11
:
Posted by 행복상자

최근에 AWS와 node.js를 이용하여, 프로젝트를 진행하고 있다.

이전에 Azure룰 개인적으로 이용하곤 했는데, AWS는 실제 개발과 운영의 업무가 나누어져 있어서 나는 누군가가 만들어준 인스턴스를 이용하기만 하였지, 직접 하나 하나 건들일 일이 없었다. 

그런데, 지난 1월 7일에 Amazon 한국 리젼이 오픈을 하게되면서, 나도 개인 계정을 만들어 인스턴스를 생성하고, 몇몇 기능들와 서비스들을 이용해 보고 있다. 

최근에는 S3에 파일을 업로드 하거나, 다운 받는 코드를 AWS Lambda를 이용해서 실행하도록 만들었는데, Lambda는 AWS의 S3로 새로운 파일을 올리거나 받을때, 이벤트에 따라 필요한 코드를 실행할 수 있도록 도와주는 기능인데, 따로 서버를 운영하지 않아도(돈을 아낄수 있어서 좋다.) 된다.


아래는 AWS S3로 mytest.txt라는 파이을 zlib를 이용하여 압축을 한후에, S3로 업로드하는 

코드이다.

var AWS = require('aws-sdk');

AWS.config.loadFromPath('./config.json');


var s3 = new AWS.S3({ region: 'ap-northeast-2' }); 

var fs = require('fs');

var zlib = require('zlib');


var body = fs.createReadStream('C:/mytest.txt').pipe(zlib.createGzip());

var s3obj = new AWS.S3({params: {Bucket: 'seoulbucket9999', Key: 'myKey.zip'}});

s3obj.upload({Body: body}).

  on('httpUploadProgress', function(event) { console.log(event); }).

  send(function(err, data) { console.log(err, data) });


간략하세 설명을 하면  첫줄의 'var AWS = require('aws-sdk');'는 aws-sdk 패키지를 npm을 이용해서 설치한 후에 실행할때 넣어주면 된다. 

명령은 다음과 같다.  (사용을 위해서는 윈도우와 리눅스 또는 맥에 node와 npm 패키지가 이미 설치 되어져 있어야 한다.)

npm install aws-sdk

그리고,  'AWS.config.loadFromPath('./config.json');' 는 S3에 필요한 Access-key와 secret key를 별도의 config파일에 저장해서 가져오는 기능이다. 


마지막으로 아래의 코드는 로컬에 있는 mytest.txt 파일을 zlib를 이용하여 압축해서 S3에 올리는 코드이다. 

var body = fs.createReadStream('C:/mytest.txt').pipe(zlib.createGzip());

var s3obj = new AWS.S3({params: {Bucket: 'seoulbucket9999', Key: 'myKey.zip'}});

s3obj.upload({Body: body}).

  on('httpUploadProgress', function(event) { console.log(event); }).

  send(function(err, data) { console.log(err, data) });


:
Posted by 행복상자