본문 바로가기

분류 전체보기158

[C#] - Microsoft Emotion API 1. API 소개 최근 마이크로소프트는 컴퓨터 비전, 음성 인식, 언어 분석 등의 기능을 Cognitive Services라는 이름으로 제공하고 있다. 마이크로소프트의 Cognitive Services는 일정 제약 조건 하에서 무료로 이용해볼 수 있으며, C# 및 Java, JavaScript, PHP, Python 등의 다양한 언어로 API를 이용할 수 있다. 이 글에서 소개하는 것은 Cognitive Services에서 제공하는 Emotion API이다. Emotion API는 사진을 입력받아서 사진에 나타나는 인물들의 감정을 분석하는 기능을 제공한다. Emotion API는 사진에 나타나는 모든 인물들의 감정을 아래와 같은 8가지의 감정으로 분석하여 JSON 형태의 결과값으로 반환한다. anger .. 2016. 10. 5.
[C#] - Visual Studio에서 Metro UI Framework 추가하기 1. Metro 디자인 Metro 디자인은 과도한 그래픽을 제외하고, 콘텐츠를 주로 하는 UI를 설계하는 것을 원칙으로 한다. 원래 Metro 디자인은 마이크로소프트에서 윈도우 폰과 윈도우 8, 윈도우 10의 개발을 위해 발전되었으나, 최근에는 웹 어플리케이션과 앱 어플리케이션 등 다양한 디자인 분야에서 이용되고 있다.Metro 디자인의 가장 큰 특징은 단색, 그라데이션의 제거 등과 같은 심플함이다. Metro 디자인의 심플한 아이콘과 콘텐츠 위주의 구성은 직관적이며, 누구나 쉽게 디자인 할 수 있다. 반대로 애플의 iOS 등은 실물을 단순화한듯한 디자인을 많이 이용하는데, 이는 Metro 디자인과 비교할 때 많은 차이점이 있다 [그림 1]. [그림 1] 애플의 다지인 컨셉과 마이크로소프트의 Metro .. 2016. 10. 3.
[최적화/전역 최적화] Tabu Search Tabu search는 simulated annealing, genetic algorithm 등과 같이 최적화 문제의 형태에 상관없이 주어진 최적화 문제를 풀기 위한 메타휴리스틱 (metaheuristic) 알고리즘이다. 기존의 simulated annealing, genetic algorithm과 같은 최적화 알고리즘들은 기본적으로 neighbor search를 기반으로 동작하기 때문에 current solution이 개선되는 방향으로만 진행하려는 성질이 있다. 이러한 성질로 인해 simulated annealing 및 genetic algorithm은 빈번하게 [그림 1]과 같은 지역 최적점 (local optimum)에 수렴한다. Tabu search는 빈번하게 지역 최적점에 수렴하는 문제를 해결하.. 2016. 9. 28.
[수리적 최적화] 유전 알고리즘 (Genetic Algorithm)과 전역 최적화 1. 유전 알고리즘 (Genetic Algorithm) 소개유전 알고리즘은 생물체가 환경에 적응하면서 진화해가는 모습을 모방하여 최적해를 찾아내는 최적화 방법이다. 유전 알고리즘은 이론적으로 전역 최적점을 찾을 수 있으며, 수학적으로 명확하게 정의되지 않은 문제에도 적용할 수 있기 때문에 다양한 응용에서 매우 활발히 이용되고 있다. 일반적으로 유전 알고리즘에 대해 알고리즘이라는 표현을 이용하지만, 유전 알고리즘은 특정한 문제를 풀기 위한 알고리즘이라기 보다는 최적화 문제를 풀기 위한 일반적인 방법론에 가깝다. 즉, 모든 문제에 적용 가능한 하나의 알고리즘이나 소스 코드가 있는 것이 아니기 때문에 유전 알고리즘의 원리를 이해하고, 이를 자신이 원하는 문제에 적용할 수 있도록 설계하는 것이 중요하다. 유전 .. 2016. 9. 16.
[C#] - 클래스 정의와 상속 1. 클래스 정의 C#에서는 class 키워드를 이용하여 클래스를 정의할 수 있다. 아래의 [코드 1]은 C#에서 Parent 클래스를 정의한 것이다. 1234567891011121314151617181920212223242526272829303132namespace ex{ class Parent { private string name; public Parent(string name) { this.name = name; Console.WriteLine("constructor - parent"); } ~Parent() { Console.WriteLine("destructor - parent"); } public void PrintName() { Console.WriteLine(name); } } class.. 2016. 9. 15.
[C#] - 메소드 (Method) 1. Call by value와 Call by reference 프로그래밍을 배우다 보면 call by value와 call by reference라는 개념을 한 번쯤은 접해봤을 것이다. 간단히 설명하면, call by value는 변수의 값을 복사해서 전달하는 것이고, call by reference는 메모리상의 주소와 같이 변수에 직접 접근할 수 있는 정보를 전달하는 것이다. 예를 들어, A가 어떠한 문서를 필요로 하는 상황에서 해당 문서를 복사해서 복사본을 전달하는 것은 call by value이고, 해당 문서의 원본 자체를 전달하는 것은 call by reference이다. 기본적으로 int, double과 같은 원시 자료형 (primitive data type)으로 선언된 매개변수에 대해서 C#.. 2016. 9. 15.
[JavaScript] - Web Notification API와 알림 기능 1. 알림 (Notification) 기능 안드로이드나 iOS와 같은 모바일 환경에서는 notification이라는 기능을 이용하여 스마트폰 이용자에게 새로운 정보, 어떠한 작업의 완료 등과 같은 정보를 알릴 수 있다 [그림 1]. [그림 1] 안드로이드와 iOS의 알림 (notification) 기능 그동안 모바일 환경에서 매우 유용하게 이용되고 있는 notification 기능을 데스크톱 브라우저 환경에서 이용하기 위해서는 자바스크립트를 이용하여 직접 notification 기능을 구현하는 수 밖에 없었다. 그러나, 최근에 크롬, 파이어폭스, 사파리에 Web Notification API라는 것이 추가되면서 자바스크립트를 이용하여 간편하게 notification 기능을 구현할 수 있게 되었다. 2. .. 2016. 9. 13.
[JavaScript] - 네임스페이스 (Namespace) 1. 네임스페이스 네임스페이스는 이름이 존재하는 공간과 같다. 우리는 이름이 C로 같은 두 사람을 구분할 때, A 지역에 거주하는 C와 B 지역에 거주하는 C로 구분하기도 한다. 이러한 구분에서 이름이 C로 같은 두 사람이 A와 B라는 서로 다른 지역 (공간)에 존재했기 때문에 우리는 두 사람을 식별할 수 있었다. 복잡한 프로그램을 개발하거나, 협업을 하다보면 전역 범위에 위의 예시와 같이 이름이 같은 변수, 함수, 객체 등을 정의하는 경우가 발생한다. 네임스페이스는 이러한 경우에 발생할 수 있는 충돌을 방지하기 위해 이름이 존재하는 공간을 정의하는 기능을 제공한다. 네임스페이스 기능을 제공하는 대표적인 언어로는 C++와 자바가 있다. C++에서는 아예 namespace라는 키워드를 이용하여 변수, 함수.. 2016. 9. 11.
Java 환경에서 트위터 API를 이용한 SNS 분석 1. 트위터 어플리케이션 생성 트위터 API를 이용하기 위해서는 트위터 가입 및 트위터 어플리케이션 생성이 필요하다. 트위터 가입은 특별한 사항이 없으므로 생략하고, 트위터 어플리케이션 생성에 대해 설명한다. 1) 트위터 어플리케이션을 생성하기 위해 https://apps.twitter.com/에 접속하여 트위터 계정으로 로그인한다. 그 다음, 우측에 있는 Create New App 버튼을 클릭한다 [그릠 1]. [그림 1] 트위터 어플리케이션 생성 1 2) 페이지에 나타난 Name, Description, Website 항목을 입력한다 [그림 2]. 테스트용으로 생성할 경우에는 Website 항목에 임의의 URL을 입력해도 된다. [그림 2] 트위터 어플리케이션 생성 2 3) 어플리케이션 생성 후 나타.. 2016. 9. 9.
[JavaScript] - 자바스크립트와 객체지향 프로그래밍 1. 자바스크립트와 객체지향 프로그래밍 자바스크립트(JavaScript)는 이름에서도 알 수 있듯이 스크립트 프로그래밍 언어이다. 그러나 정확히 말해서 자바스크립트는 객체 기반의 스크립트 프로그래밍 언어라고 할 수 있다. 자바스크립트를 이용하여 웹 어플리케이션을 개발하고자 프로그래밍할 때 많이 사용하는 DOM 객체, XMLHttpRequest 객체 등 자바스크립트에는 많은 객체가 존재한다. [그림 1] 자바스크립트 대부분의 자바스크립트 코드는 브라우저 환경에서 실행된다. 불과 몇 년 전에는 브라우저에 탑재된 자바스크립트 엔진의 성능이 지금보다 매우 떨어졌었기 때문에 자바스크립트 코드가 많은 웹 페이지는 잘못 만들어진 페이지라고 말할 수 있었다. 그러나 지금은 웹 OS라는 말이 나올 정도로 브라우저가 어플.. 2016. 9. 4.
[JavaScript] - 전역 변수의 문제점과 해결 방법 1. 전역 변수의 문제점 자바스크립트는 몇가지 뛰어난 강점을 갖고 있지만, 사실 프로그래밍 언어의 관점에서 보면 잘 디자인된 언어는 아니다. 언어의 잘못된 디자인으로 인해 발생하는 문제 중 대표적인 예시가 전역 변수에 대한 것이다. 자바스크립트에서는 아래의 [코드 1]과 같이 전역 변수를 선언하고, 함수 내부에서 전역 변수를 이용하거나 그와 이름이 똑같은 지역 변수를 선언할 수 있다. 12345function Person(fullName, gender, age) { this.fullName = fullName; this.gender = gender; this.age = age;}Colored by Color Scriptercs[코드 1] 전역 변수로 인한 문제가 발생하는 코드 [코드 1]의 실행 결과는 .. 2016. 9. 4.
[JavaScript] - 코드 블로킹 (Code Blocking) 방지 1. 코드 블로킹 (Cdoe blocking) 코드 블로킹은 어떠한 코드가 실행됨에 따라 해당 코드의 실행 때문에 다른 코드를 실행할 수 없는 현상을 말한다. 아래와 같이 자바스크립트로 작성된 [코드 1]이 있다. 1234567891011121314151617181920212223242526272829 start function func() { document.getElementById('result').innerText = test1(); document.body.style.backgroundColor = '#008299'; } function test1() { var num = 0; for (var i = 0; i 2016. 9. 4.