작년과 올해 발표된 가트너의 Hype Cycle을 기반으로 빅데이터, IoT 기술의 동향을 정리해 보려고 한다. 2014년에는 "빅데이터", "데이터 과학", "사물인터넷" 이 언급되었었는데, 2015년에는 "빅데이터"가 사라지고 "기계학습", "고급 분석", "시민 데이터 과학", "사물인터넷", "사물인터넷 플랫폼"이 등장했다. Gartner's 2014 Hype Cycle 빅데이터는 이제 환상을 점차 걷어내고 있는 추세로 2014년 가트너는 이야기했다. 그래도 안정화까지는 5~10년 정도 소요 될 것으로 보고 있다. 데이터 과학은 떠오르고 있는 분야로 설명하고 있고, 최고 정점에 올라 있는 것으로는 사물인터넷(IoT)를 이야기 하고 있다. Gartner's 2015 Hype Cycle 2015년에는..
자바스크립트를 통해서 브라우저를 확대 축소하는 방법을 정리해 보려고 한다. 태그의 style 속성 중 하나인 zoom을 활용하면 쉽게 구현할 수 있다. 브라우저 확대 축소 자바스크립트 구현 20%씩 확대하고 축소하는 자바스크립트 구문은 다음과 같다. scale 값을 기본값인 1로 설정하고, 확대의 경우 20%를 곱하고 축소는 20%로 나누어서 계산하도록 했다. 그리고 document.body.style.zoom 값을 변경해서 확대 축소를 구현할 수 있다. 다양한 브라우저 지원 그러나 위 예제는 인터넷 익스플로러, 구글 크롬, 사파리에서만 동작한다. 파이어폭스나 오페라 등을 지원하기 위해서는 CSS3의 Transform을 활용해야 한다. 이 부분까지 적용한 전체 소스는 다음과 같다. 미니의 확대/축소 테스..
Sitemesh를 사용하다보면 웹 페이지에서 Decorator 파일에 현재의 위치를 전달해야 할 경우가 있다. 예를 들어 네비게이션 메뉴가 있다면, 현재 선택한 페이지를 다르게 표시할 때 주로 사용한다. 다음과 같은 화면을 구성한다고 생각해 보자. Sitemesh를 사용해서 상단 네비게이션까지 공통영역으로 처리했는데, 세번째 메뉴 선택시 상단의 네비게이션을 각 페이지에 맞춰서 선택한 형태로 변경할 때 바로 이 기능을 사용하면 된다. 메타 태그 넣기 먼저 각 페이지에 다음과 같이 메타 태그를 삽입한다. 미니 메뉴 첫번째 첫번째 메뉴를 선택한 화면입니다. 5번째 줄에 이름이 "selection"이고, 값이 "mini1"인 메타 태그를 추가한 것을 볼 수 있다. 다른 페이지에도 각각의 고유한 값을 가진 메타 ..
대부분의 프로그래밍 언어처럼 R에서도 디버깅 툴을 제공한다. R에 내장되어 있는 디버깅 툴을 살펴보도록 하자. traceback 간단하게 사용할 수 있는 디버깅 툴로 traceback()이 있다. traceback()은 함수들을 호출한 콜 스택을 보여주는 것이다. x 값이 할당되어 있지 않기 때문에 에러가 발생했고, traceback()으로 함수 호출 스택을 살펴보면 mean() 함수 하나만 나온다. 좀 더 복잡한 선형 회귀 분석을 계산하는 lm() 함수를 살펴보자. lm(y ~ x)를 처리하기 위해서 eva(), eval(), model.frame() 등을 순차적으로 호출한 것을 알 수 있다. 그러나 traceback은 함수를 어떤 순서로 호출했는지만을 알려주고 있다. debug 실제로 함수들을 만들었..
일반적으로 쿠키나 세션을 활용해서 로그인 처리를 많이 한다. 스프링 기반에서 인터셉트를 통해 세션 로그인 처리를 하는 부분을 정리해 보려고 한다. 전체적인 과정은 다음과 같다. 로그인 체크 인터셉터를 만든 다음, applicationContext.xml에 해당 인터셉터를 설정한다. 마지막으로 로그인 처리 중에 세션에 정보를 저장하면 된다. 이후, 인터셉터가 지정된 URL에 접근할 때는 로그인 체크 인터셉터를 통해서 로그인 여부를 확인하게 된다. 인터셉터를 활용한 흐름도는 다음과 같다. 로그인 체크 인터셉터 먼저 세션 정보가 있는지 여부를 확인하는 인터셉터를 만들어 보자. package kr.co.acronym.mini.util; import javax.servlet.http.HttpServletReque..
R에서 시뮬레이션을 위해서 임의의 변수를 생성하는 경우가 종종 있다. 이번에는 다양한 랜덤 변수를 생성하는 방식을 정리해 보려고 한다. Sample 가장 일반적으로 임의의 수를 생성하는 함수는 sample() 이다. sample() 함수는 다음과 같이 범위를 지정해 주고 추출할 수의 개수를 지정하면 된다. 첫번째 예제는 1~10 사이의 임의의 수 4개를 추출한 것이다. 마지막 예제는 letters에 저장된 알파벳 26자 중에서 5개를 임의로 생성한 것이다. 만약 동일한 값이 중복해서 생성해도 된다면, 다음과 같이 replace = TRUE를 지정하면 된다. 그리고 다음 예제를 살펴보자. set.seed(1)를 사용하고 있는데, 잘 보면 set.seed(1)이 호출된 다음에 sample() 함수의 결과가 ..
R의 apply 함수들을 살펴봤는데 이와 함께 사용할 수 있는 유용한 split() 함수에 대해서 알아보도록 하자. split split은 말 그대로 데이터를 나누는 함수이다. 벡터, 리스트, 데이터셋과 같은 객체를 지정된 팩터(factor)에 따라 분리하는 기능을 한다. split을 이해하기 위해서 먼저 데이터를 생성해보자. rnorm(10)을 이용해서 평균 0, 표준편차 1인 정규분포의 수 10개를 생성하고, runif(10)를 이용해서 균등분포를 갖는 10개의 수를 만들고, rnorm(10, 1)을 통해 평균 1, 표준편차 1인 정규분포의 임의의 숫자 10개를 만든다. 그리고 gl(3, 10)을 통해 3개의 팩터(factor)1, 2, 3에 해당하는 각각의 수 10개를 만든다. 이후 split(x,..
지난번엔 R의 lapply, sapply, vapply를 살펴봤다. 이어서 다른 종류의 apply를 알아보도록 하자. apply lapply와 sapply는 모두 리스트를 입력으로 받아서 각 리스트에 함수를 적용한다고 했다. 만약 리스트가 아닌 행렬(matrix)을 입력으로 넣으면 어떻게 될까? rnorm()으로 평균 0, 표준편차가 1인 정규분포를 갖는 20x10 행렬을 만들었다. 그리고 lapply로 평균을 구해보니, 결과가 무려 200개의 리스트가 나온다. 즉, 행렬의 각각의 요소를 리스트의 개별 요소로 보고 처리한 것이다. 보통 행렬에서는 각각의 행이나 열에 대해 함수를 적용하는 것이 필요하다. 이런 경우에 apply를 사용하면 된다. apply 함수의 두번째 인자로 1을 넣으면 행(row)에 대..