'분류 전체보기'에 해당되는 글 18건

  1. 또 다른 블로그!
  2. Boost 1.60 + Visual Studio 2015 빌드
  3. 그래프 여러개를 한 화면에 (Python + matplot)
  4. Scala 개발 환경 구축
  5. 프로젝트를 github와 빠르게 연동하기!
  6. 빌드와 테스트를 한방에! 1편 jenkins 환경구축
  7. boost log 사용하기
  8. boost를 이용한 json 파일 읽기 1
  9. [읽는 중] 다윗과 골리앗 : 강자를 이기는 약자의 기술
  10. JavaScript Web Application : 제이쿼리, Node.js, 웹소켓, 스파인, 백본, 자바스크립트MVC

또 다른 블로그!

bootstrap.bat


b2 -j8 toolset=msvc-14.0 variant=debug,release link=static threading=multi address-model=64 runtime-link=static



끝!

'Framework > Boost' 카테고리의 다른 글

boost log 사용하기  (0) 2014.02.22
boost를 이용한 json 파일 읽기  (1) 2014.02.20

여러개의 필드로 구성된 실수형 데이터의 그래프를 보고 싶었다.

엑셀에서는 동적으로 보기에 불편하고, 속도도 느렸다. 

python + matplot 조합으로 csv 파일에서 읽어서 뿌리기로 했다.


소스 : 필드가 40개인 csv 파일 

# -*- coding: utf-8 -*-

# Written by LEE GUNHO(fiadot@gmail.com)


import matplotlib.pyplot as plt

import csv


  md_list = dict()


  for i in range(1, 41):

    md_list[i] = list()


  file_name = 'md_score.csv'

  with open(file_name) as csvfile:

    reader = csv.reader(csvfile) 

    

    for row in reader:

      col_count = 0

      

      for count in row:

        if col_count is 0:

          tagTurnNo = count # 첫 레코드는 필드명

        else:

          #print count

          md_list[col_count].append(count)


        col_count += 1

        


  plt.figure(1)

  plt.subplots_adjust(hspace=.5)


  cols = 10

  rows = 4  

  

  for i in range(1,41):

    plt.subplot(rows, cols, i)

    plt.title(str(i))

    plt.plot(md_list[i])

    #plt.xlabel('timeSeq')

    #plt.ylabel('score')

    plt.axis([0, 5000, -0.01, 0.090])  

    #plt.xticks(range(0, 5000, 2000))

    

  plt.show()

  





결과 :


Scala 개발 환경 구축

Scala 개발 환경 구축


Scala

Programming Language!!! 

몇년 사이 이슈가 되고 있는 node.js와 scala 트렌드를 살펴보자.


node.js를 해봤을 때 생산성 하나는 기가 막히더라. 

java script를 배우면서 프로젝트를 진행하는데도 그냥 생각나는대로 치니까 돌아가는 느낌!

 아무래도 메모리 해제에 대해 신경쓸 필요가 없다. (GC), 

비동기 작업에 있어서도 async같은 모듈로 이쁘게 쉽게 간단하게 작성할 수 있다.

json도 당연히 지원하는것은 물론이다.

성능도 생각보다 그리 나쁘지 않다. (성능측정해보니 C에 비해 30%정도 느렸던걸로... 2년전에 해봐서 지금은 전보다 나아졌겠지... 아마도?)

단점이라면 타입 체킹과 불편한 디버깅(VS에서 지원해준 줄것이라고 하지만...)이다.


그래서 Scala를 한번 해보면 어떨까? 

대표적인 특징은 Object-oriented, Functional, statically typed, run on the JVM!

JVM에서 돌아가니 기본적으로 cross platform 문제도 없고, 기본적인 안정성은 확보된 상태다.

타입체크도 가능하고, 함수형언어의 특징을 잘살리면 비동기 처리를 통해 병렬성도 가져갈 수 있다.

이클립스에서 디버깅을 해보니 괜찮다. 





버젼 정보

JDK : 1.7.0_45

Scala IDE : For scala 2.11.1 (최신)

SBT : 0.13.5 (최신)

* Windows 7 64Bit OS에서 개발 및 테스트를 진행 한다.

리눅스나 맥을 사용 한다면 https://class.coursera.org/progfun-004/wiki/ToolsSetup 에서 자세한 설치방법을 볼 수 있다.



설치 및 환경변수 설정 

JDK : http://www.oracle.com/technetwork/java/javase/downloads

ScalaIDE  : http://scala-ide.org/download/sdk.html

SBT : http://www.scala-sbt.org/download.html

위의 3개를 다운 받고 설치 or 압축해제 한다.


환경변수는 JAVA_HOME에는 JDK 정보를, PATH에는 JDK와 SBT/bin을 추가 한다.



프로젝트 시작

1. 임의의 프로젝트 디렉토리를 생성한다. (D:\ScalaStart 로 가정)


2. build.sbt 파일 생성(단순 텍스트 파일)  - 1줄 간격을 유지

D:\ScalaStart\build.sbt

name := "ScalaStart "


version := "0.1.0"


scalaVersion := "2.11.1"



3. plugins.sbt 파일 생성

D:\ScalaStart\Project\plugins.sbt

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")


4. D:\ScalaStart 에서 cmd 창에서

D:\ScalaStart>sbt 

$>update

$>eclipse

이제 이클립스에서 import 할 수 있는 파일들이 생성 되었다.


 java.lang.OutOfMemoryError: PermGen space 오류 발생시 command 창에서 다음과 같이 perm size와 관련해서 환경변수를 셋팅 해준다. 

SET JAVA_OPTS=-Xmx512m -XX:PermSize=1024M -XX:MaxPermSize=4096M



5. Scala IDE를 실행시킨 후 Import - Existing Projects into Workspace를 하고 D:\ScalaStart 를 지정하면 프로젝트를 가져 온다.


6. helloworld.scala 파일을 추가 

object helloworld {


    def main(args: Array[String]): Unit = {

        println("Hello World!");

    }

}


7. Run As - Scala Application 을 하면 실행 된다.





Scala 참고 자료

[Book] Scala For the Impatient : 다른 언어를 다뤄본 경험이 있다면 추천!

[Link] (한) 기본 문법 요약 정리 : http://arisu1000.tistory.com/category/Program/Scala

[Link] Scala 공식 홈페이지에 나와있는 튜토리얼 : http://docs.scala-lang.org/tutorials/

[Link] (한) 트위터 : http://twitter.github.io/scala_school/ko/index.html

[Link] 간결한 문법 요약 : http://www.tutorialspoint.com/scala/index.htm

[Link] 패턴매칭 상세 슬라이드 : http://www.slideshare.net/czechscala/scala-essentials-pattern-matching-and-case-classes



다음에는... 

Scala + json4s : Json 사용하기

Scala + MS-SQL : JDBC를 이용해 MS-SQL 접근해보기

Scala + Redis : 이것도 한번...

위에 3개에 대한 소스는 https://github.com/FiaDot 


Play framework도 2.3.0 이 나와서 한번 보고 있다. 기회가 되면 이것도 한번...











처음부터 github를 통해 프로젝트를 생성해서 clone 하지 않고, 

기존에 진행하던 프로젝트가 있는데 뭐 불편하게 clone 해서 파일 복사하고 ...

지지고 볶고 할 필요 없이 간단하게 remote 정보만 추가해서 하는 방법에 대해서 정리한다. 

* 매번 할 때 마다 까먹는다


1. github에서 repositories에서 new 를 해서 적당한 프로젝트명과, 설명을 넣는다.

https://github.com/FiaDot/scala-json-serialize.git


2. 디렉토리 생성 (프로젝트명 : scala-json-serialize )

mkdir scala-json-serialize


3. git bash 실행

git remote add origin https://github.com/FiaDot/scala-json-serialize.git

git pull origin master







연재 계획

1편 jenkins 환경구축

2편 native cpp(msvc) + boost test framework

3편 spring + junit + maven

4편 Troubleshooting



상황!

#1 Windows 

MS Visual Studio를 이용하여 개발하고 Native C++, C# 프로젝트가 있다. 이 프로젝트들은 Windows Server에서 운영된다. 유닛테스트 프레임워크로 boost test를 사용한다. 추가적으로 Python으로 작성된 스크립트를 이용해 몇몇 데이터를 변환해서 배포전에 수행해야 한다. 프로젝트에 따라서는 SVN에서 몇몇 리소스를 받아 DB에 저장하는 단계가 포함 된다.


#2 Linux 

Spring framework + Junit 을 이용해 개발하는 Application Server가 있으며 Cent OS(Linux)에서 운영된다. maven을 이용해서 test, deploy 를 수행한다.


#3 Unity for android, ios

유니티 프로젝트를 수행할 경우 안드로이드 빌드와 ios빌드, 빠른 테스트를 위해 PC버젼까지 빌드해야 한다.


모든 소스는 SVN을 저장소로 이용하고 있으며, 개별 빌드와 배포를 수동으로 하면 1시간 이상이 소요된다. 사람이 하기에 가끔씩 배포시 단계를 빼먹고 난감한 상황이 연출 될 때도 있다.


요약> 여러환경에서 개발되고, 다양한 환경에 배포를 해야되는 상황에서 빌드, 배포 과정에서 사람의 실수가 발생 할 수 있다.



우리에게 필요한건 CI!

일반적으로 빌드하면 컴파일, 링크만 생각하기도 하는데 좀 더 큰 범주에서 생각해보자. 우리가 하고자 하는건 어떠한 코드를 작성하고 최종적으로 본인이 사용하던지, 서비스로서 타인에게 제공되기도 한다. 이런 환경에서 빌드를 하게 되면 테스트를 진행한 후 배포를 하게 된다. 물론 사람이 손으로 일일이 하는 경우도 있을것이고, test framework을 도입해서 자동화 했을 수도 있다. 어쨌든 컴파일에러가 없다고 배포를 해도 된다는 위험한 발상을 가지지는 않을 것이다. 지금은 unit test, regression test 등 test 에 대한 내용은 아니기에 자세한 내용은 생략한다. 


여튼 요구사항의 변경, 리펙토링, 신규 투입인력의 잘못된 사용으로 인한 에러등 무수히 많은 상황에서 빌드가 깨지기도 하고, 테스트가 실패하기도 하는데 이를 자동화 해서 적정시점에 알려줄 수 있다면? 그리고 우리는 빌드를 위해 키보드에서 손놓고 커피타임과 담배타임으로 업무시간을 뺏기지 않고 칼퇴근을 이룩할 수 있다면 이보다 더 좋은것이 어디 있겠는가?! 


요약> 품질과 안정성을 위해 빌드와 테스트를 자동화하면 칼퇴근 확률을 높일 수 있다.



Jenkins?


Cruise Control.Net, Hudson, jenkins 결국 다 빌드를 자동화 하자는게 핵심이다. 근데 CC.Net은 설정이 너무 복잡하다. 6년전쯤으로 기억되는데 프로젝트 4개정도에 CC.Net을 도입하는데 1주일 정도가 소요되고 불의의 사고로 서버가 죽었는데(HW문제), 그 뒤로는 해당프로젝트에서 환경구축을 하지 않았다. 너무 귀찮다는 느낌이 강하다. Hudson 개발자들이 나와서 jenkins를 만들었다고 하니 jenkins 1표! 장점은 웹에서 모든 설정을 다 할 수 있고, 설정이 간편하다. 그리고 다양한 플러그인을 통해 왠만한건 다 할 수 있다. 



빠르게 시작하기!


http://jenkins-ci.org/


웹서버가 구축되어 있다면 war 파일 다운로드 받아서 사용하면 된다. 웹서버가 구축되어 있지 않더라도 war 파일을 독립적으로 실행 할 수 있다.

  java -jar jenkins.war --httpPort=8080

위의 방식으로 실행한 뒤 웹 브라우져에서 http://localhost:8080/jenkins 로 접속하면 바로 화면을 볼 수 있다.


각 OS에 맞게 설치패키지를 다운받아서 사용 할 수도 있다. 개발용 windows server가 한대 있어서 windows native package를 다운로드 받아서 설치 했다.

설치시 경로는 되도록 빈칸을 빼고 설치하기를 권장한다. 몇몇 플러그인이나 빌드 환경에 따라서 파일을 못 읽어오는 경우도 있다. (특히 윈도우!)

그래서, 깔끔하게 C:\Jenkins에 설치했다.


환경설정

설치가 완료되었으면 기본적으로 플러그인 몇개를 깔아줘야 한다. MSBuild, Subversion, xUnit plugin 이다. 



필터에 방금 언급한 플러그인 이름을 넣으면 잘 걸러서 보여준다. 앞에 체크 박스를 선택하고 제일 하단에 "재시작 없이 설치하기"를 누르면 설치된다.  

이제 설치된 플러그인에 맞는 정보와 각종 환경 설정을 할 차례다.


Jenkins 관리 - 시스템 설정에 들어가면 뭐가 많이 보인다. 자바를 사용한다면 Maven, JDK, Ant 등의 정보를 넣고 MSBuild에 경로 정보를 ... 이렇게 말하면 너무 귀차니즘에 차있는거 같으니, 그냥 이미지로 보자. ㅡㅡ;

JDK는 대부분 JDK_HOME 등의 정보로 자동으로 되긴 하지만, JDK를 여러개 사용하는 관계로 경로를 지정해주었다. MSBuild는 자동으로 안되고 해당 경로에 MSBuild가 있는지 확인해야 한다. 64비트 빌드시에도 Framework64를 사용하지 않고 Framework 경로를 사용한다는것에 유의한다.



Maven 경로도 수동으로 적어줘야 한다. Jenkins Location 정보는 현재 사용되는 서버 주소와 jenkins에서 빌드가 깨졌을 때 메일을 보내줄때 sender의 메일 주소를 적어주면 된다. 넣어줘야 메일 필터링 하기가 좋다. (실제 계정은 없어도 무관하다.) E-mail로 알려줌 SMTP 서버 정보를 넣어준다.  SMTP설정이 제대로 되었는지 확인하기 위해서 Test Configuration by sending test e-mail 체크를 하고 Test e-mail recipient에 메일 주소를 넣어주고 Test configuration을  선택해서 메일이 잘 오는지 확인한다. 잘온다. 그럼 된것이다. 저장하고 마무리!


보안설정

안그래도 은행권, 통신사 보안 얘기가 빵빵 터지는 지금의 상황에서, 우리도 보안에 관심을 가지자... 라고 하는것은 아니고. 최소한 외부에서 접근가능한 서버라면 해줄 필요가 있겠다.

보안설정이라고 복잡할 것이 없다. Jenkins 관리 - Configure Global Security 에 들어가보자. 보안 사용을 선택해주고 사용자 가입을 허용 해주고, 계정을 추가하고, 권한을 주면 된다. 



맺음말

글로 쓰니 길어보이지만 실제 셋팅에 걸리는 시간은 10분도 안걸린다. 실제 item 추가 방법에 대해서는 다음에... 오랜만에 포스팅을 하자니 은근 피곤하다. jenkins 설정과 관련해 검색해보면 많이 나오지만 OS에 따라서 환경변수도 다르고, 실제 사용된 값이 적혀있었다면 좀 더 쉽게 했을텐데 하는 아쉬움에 포스팅을 하게됐다.


현재 셋팅된 프로젝트를 한번 찍어봤다. 하나의 프로젝트에 비가오고 있다. 나의 마음 같구나~ ㅠㅠ 








boost log 사용하기

Fork me on GitHub
로그 종류

프로젝트에 기본적으로 들어가는 기능중에 하나로 로그가 있다.
개발단계에서 디버깅을 하거나 서비스 중에 상태를 모니터링, 통계에 대한 수집등 다양한 목적으로 사용된다.
log는 크게 diagostic log , transacion log 2가지 의미로 사용되는데, DB에서 사용할 로그가 아니므로 전자에 해당하는 기능이 필요했다.


내가 필요한 것

필요로 하는 기능을 열거하자면, 
  • 일정 시간이나 주기 단위로 파일이 나눠서 저장되었으면 좋겠다.
  • 일정 용량을 넘을경우 LRU 적용이 된다면 관리하기 편하겠다.
  • 멀티스레드는 당연히 지원 해야지!
  • 화면, 파일, 혹은 VS 디버그 창에 까지 로그 남겼으면 좋겠다. (DB나 네트워크 전송은 옵션으로...)
  • 레벨에 따른 필터가 적용이 되면...
  • 로그 포맷팅을 할 수 있었으면...
  • 빨라야 된다!

대략적으로 log4cpp나 glog 정도가 눈에 띄었는데, 최종적으로 boost에 1.54 부터 들어간 boost:log로 결정했다.
위의 요구사항을 전부 만족하면서 성능, 확장성, 간결함이 선택한 이유이다.
성능이 필요한 시점에서는 파일에 저장시 order를 보장하지 않는 기능과 severity에 대한 user define 적용의 편의성도 선택한 주요한 요소다.



소스


참고자료

Boost log : http://www.boost.org/doc/libs/1_55_0/libs/log/doc/html/index.html


'Framework > Boost' 카테고리의 다른 글

Boost 1.60 + Visual Studio 2015 빌드  (0) 2016.01.19
boost를 이용한 json 파일 읽기  (1) 2014.02.20
Fork me on GitHub

jsoncpp(0.5.0)를 이용해 json 파일을 파싱하는데, 정상적인 문법인데도 에러나 가서 그냥 버렸다. 



설정파일 

소스



'Framework > Boost' 카테고리의 다른 글

Boost 1.60 + Visual Studio 2015 빌드  (0) 2016.01.19
boost log 사용하기  (0) 2014.02.22

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.

Node.js 를 통해 JavaScript(JS)를 접하고 나서부터 front-end에 대한 관심이 부쩍 늘었다.

그러던 찰나 보게된 책이다.



MVC 모델에 대한 익숙한 이야기 부터 이벤트, 모델(ORM), 컨트롤러, 뷰&템플릿, 의존성, 테스트&디버깅,배포 등 정말 front-end의 모든 내용을 다루고 있다. 거기에 jQuery와 CSS3의 소소한 설명들 까지 덫붙이고 있다. 부제 처럼 개별 프레임워크들에 대한 설명도 녹아 있다.


그럼에도 불구 하고 360여 페이지 정도로 책의 두께는 얇다!

언어적 기본 내용은 배제하고 얘기를 하니 최근의 모던 웹 프론트는 이런걸 쓰는구나 파악하는데는 충분히 도움을 준다.

깊이가 부족하다고 느껴질때 즈음해서 책이 끝나버리니 뭔가 아쉽다. 


HTML5, CSS3, JS를 필두로 front-end쪽은 너무 슉슉 바뀌는 마당에 개별 프레임워크 하나에 집중하는 책이 나온다고 한들 조금 지나면 사용법이 달라지는 일이 부지기수라 접근 방법만 제시하는 선에서 마무리한것이 오히려 장점으로 부각할 수 있지 않을까하는 생각도 든다.



한줄 요약 : 모던 웹 개발의 큰 그림을 살펴 볼 수 있다.