기본 콘텐츠로 건너뛰기

2013의 게시물 표시

[XMPP] Spark 플러그인 개발하기

1. 들어가기     XMPP 프로토콜을 지원하는 메시징 클라이언트 Spark는 플러그인 방식으로 새로운 기능을 추가할 수 있도록 한다. 이 문서는 Spark 플러그인을 개발하는 과정을 간략히 정리한 것이다. 2. 개발 환경     Windows 7 (64-bit)     JDK 1.6.0_45 (64-bit)     Ant 1.7.1     Spark 2.6.3     Sparkplug Kit 2.0.7 3. Sparkplug Kit 설치     3.1 다운로드         아래의 위치에서 Sparkplug Kit 2.0.7을 다운로드한다.             http://www.igniterealtime.org/builds/sparkplug_kit/sparkplug_kit_2_0_7.zip     3.2 설치         압축을 풀고 원하는 위치로 옮긴다.           3.3 sparkplugs\builder\build\build.xml 수정           1) Sparkplug Kit 내에 포함되어 있는 Spark의 API 버전이 낮기 때문에 새로 설치한 Spark 2.6.3을 가리키도록 spark.home 속성의 값을 수정한다.                   -    <property name="spark.home" value="${plug.dir}/../spark" />         ...

Windows에 AMP와 MediaWiki 설치하기

1. 들어가기     AMP는 Apache + MySQL +  Perl/PHP/Python에 대한 줄임말이다. LAMP (Linux + AMP)라고 하여 Linux에 설치하는 것으로 많이 소개하고 있지만 Windows에서도 간편하게 설치하여 사용할 수 있다.       이 글은 Windows 7에 Apache + MySQL + PHP를 설치하고 그 기반에서 MediaWiki를 설치하여 실행하는 과정을 간략히 정리한 것이다. 2. MySQL     * 버전 5.6.12     1) 다운로드         http://dev.mysql.com/downloads/installer/         MySQL Installer 5.6.12         Windows (x86, 32-bit), MSI Installer         (mysql-installer-web-community-5.6.12.0.msi)     2) 다운로드한 MSI 파일을 더블클릭하여 설치를 진행한다.           설치 위치:                   C:\Program Files\MySQL               선택 사항:                       Install MySQL Products             Choosing a Se...

Cygwin에서 홈 디렉토리의 위치

이상한 일이다. 어제 내 PC의 Cygwin bash shell에서 개발서버에 좀 더 편하게 접속하기 위하여 암호를 입력하지 않는 방식으로 ssh를 사용하여 서버에 로그인할 수 있도록 설정하였다. 그런데 오늘 출근해서 다시 서버에 로그인하려고 하니 암호를 입력하라고 묻는다. 그래서 혹시 서버에서 public key를 저장해 놓는 authorized_keys 파일에 어떤 변경이 가해졌는지 살펴 보았더니 이상이 없다. 이번에는 내 PC에 저장해 놓은 key pair가 정상인지 확인해 보기 위하여 아래와 같은 명령을 실행해 보았다.   $ cd .ssh   $ ls -l 어라! 어제 ssh-keygen으로 생성해 놓았던 key pair가 보이지 않는다. 이게 어찌된 일인가? 정상이라면 다음 두 개의 파일이 있어야 한다.   id_rsa   id_rsa.pub 나중에 발견하게 된 일이지만, 특이하게도 Cygwin bash shell을 실행할 때 사용자의 홈 디렉토리 위치가 일정하지 않았다. 이를 확인해 보기 위하여 다음과 같은 순서로 bash shell을 실행해 보자. 참고로 내 PC의 환경은 아래와 같다.   Cygwin 설치 디렉토리 - C:\Apps\cygwin   Windows 사용자 홈 디렉토리 - D:\Profiles\myid 1) 시스템에서 첫번째 bash 프로세스가 실행될 때에는 아래 위치를 사용자의 홈 디렉토리로 사용한다.   C:\Apps\cygwin\home\myid 2) 이번에는 다른 DOS창을 열어서 bash shell을 실행해 보았다. 이것은 두 번째의 bash 프로세스를 생성하는 것이다. 이 bash shell은 아래 디렉토리를 홈 디렉토리로 사용한다.   D:\Profiles\myid 3) 계속해서 bash shell을 실행하고 홈 디렉토리를 확인해 보면 2)번의 결과와 같음을 알 수 있다. 4) 현재 실행중인 모든 bash...

[BLE] 저전력 블루투스 이해 - 프러파일, 서비스, 특성, 속성

1. 들어가기 저전력 블루투스를 응용하여 애플리케이션을 개발하고자 한다면 소프트웨어 개발자 입장에서 꼭 이해해야 할 용어들이 있다. 그 중에 네 가지를 꼽으라면 아래와 같다.     1) 프러파일 (profile)     2) 서비스 (service)     3) 특성 (characteristic)     4) 속성 (attribute) 특성과 속성은 영문이나 우리말로 번역한 것이나 어감이 다소 어색하고 의미가 모호하게 느껴지지만, 자주 사용하다 보면 익숙해질 것이다. 이해를 돕기 위하여 정확히 일치하지는 않지만 명절 때 주고 받는 종합선물세트에 비유해 보았다.     1) 프러파일 명세서는 상품 목록과 소개서이다. 주문을 통해서 받는 대상이 아니라 잠재적인 구매자에게 제공하는 정보이다.     2) 서비스 명세서는 종합선물세트의 내용물을 규정한다. 서비스는 종합선물세트이다.     3) 특성은 종합선물세트에 담긴 물품이고, 구매자가 실제로 이용하는 것이다.     4) 속성은 각각의 물품을 놓을 수 있는 틀이다. 이제 건강 온도 프러파일(Health Thermometer Profile)을 가지고 각각의 용어들이 구체적으로 무엇을 의미하는지, 그리고 서로 어떤 관계를 가지는지 설명해 보고자 한다. 2. 프러파일 (profile) 프러파일 명세서는 어떤 서비스들을 제공할 것인지를 규정하는 문서이다. 건강 온도 프러파일은 아래 두 가지 서비스를 제공하도록 규정하고 있다.     Health Thermometer Service     Device Information Service 여기서 주목할 것은 프러파일은 실제로 제공되는 것이 아니기 때문에 연결하는 상대편 장치의 입장에서 보면 프러파일이란 실체는 없는 것이다. 3. 서...

[XMPP] Openfire 플러그인 개발하기

1. 들어가기     Openfire는 XMPP 프로토콜을 지원하는 메시징 서버이다. 그리고 새로운 기능을 추가하고 Admin Console에 UI를 추가할 수 있도록 플러그인 방식을 지원하고 있다. 이 문서는 Openfire를 리눅스 서버에 설치해서 실행하고 윈도우 환경에서 플러그인을 개발하는 과정을 간략히 정리한 것이다. 2. 개발 및 운영 환경     2.1 개발 환경         Windows 7 (64-bit)         JDK 1.6.0_45 (64-bit)         Ant 1.7.1         Openfire 3.8.1 소스     2.2 운영 환경         Ubuntu 12.04 LTS (64-bit)         JDK 1.6.0_45 (64-bit)         Openfire 3.8.1 3. Openfire 설치 및 실행     3.1 다운로드         아래의 위치에서 Openfire 3.8.1을 다운로드한다.             http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_8_1.tar.gz     3.2 설치         아래와 같이 압축을 풀고 원하는 위치로 옮긴다.             $ tar -xzvf openfire_3_8_...

[BLE] TI CC2540 Mini DK 사용하기 - JavaSimplePeripheral 프로그램

1. 들어가기     USB 동글과 KeyFob이 서로 연결되어 있는 상태에서 PC 프로그램인 JavaSimplePeripheral을 사용하여 다음 두 가지를 테스트해 보았다.           1) KeyFob의 단추 누름 상태를 Notification 방식으로 전송하도록 JavaSimplePeripheral이 KeyFob의 설정을 변경한다.         2) JavaSimplePeripheral은 KeyFob의 단추 누름 상태를 전송받아서 화면에 표시한다. 2. 이미지 다운로드     USB 동글에는 HostTestRelease 이미지, 그리고 KeyFob에는 SimpleBLEPeripheral 이미지를 SmartRF Flash Programmer 프로그램을 이용하여 각각 다운로드한다. HostTestRelease는 외부 장치로부터 HCI 명령을 전달받아서 실행하고, 이벤트나 응답을 외부 장치로 전달하는 역할을 수행한다. SimpleBLEPeripheral은 Simple Keys Service를 구현하고 있다.     2.1 USB 동글용 프로젝트 및 이미지 위치           프로젝트:                       BLE-CC254x-1.3\Projects\ble\HostTestApp\CC2540\HostTestRelease.eww                   이미지:                   BLE-CC254x-1.3\Accessories\HexFiles\CC...

[Java] 자바 직렬 통신 개발 환경

1. 들어가기     64비트 Windows 7 운영체제에서 자바로 직렬 통신을 할 수 있는 환경에 대하여 조사해 보았다.  Java Communications API 2.0에 대한 오라클 구현과 gnu.io.*을 패키지명으로 사용하는 RXTX 구현을 비교해 보았는데, 다음과 같은 이유로 오라클 구현보다 RXTX 구현을 사용하는 것이 바람직 하다.              오라클 구현은 OS 지원 대상이 제한적이고, 64비트 바이너리를 제공하지 않으며, 무엇보다도 업데이트가 멎은 듯하다.          2. Oracle 구현 사용 방법              Java Communications API 3.0에 대한 오라클 구현이 지원하는 OS는 아래와 같은데, Windows 버전을 제공하지 않으므로 2.0버전을 사용해야 한다.              Solaris SPARC         Solaris x86         Linux x86     2.1 JDK 설치              64비트 JDK에서는 오라클 구현이 제공하는 win32com.dll을 사용하지 못하므로 32비트 JDK를 설치해야 한다.                      설치 파일: Windows x86를 위한 jdk-7-windows-i586.exe     2.2 환경 변수 설정     ...

[BLE] TI CC2540 Mini DK 사용하기 - Notifications

1. 들어가기     KeyFob과 USB 동글이 서로 연결을 맺고 있다. KeyFob이 어떤 상태를 감지하고 나서 USB 동글 쪽으로 데이터를 보내는 방법에는 두 가지가 있다.           Notifications         Indications     Notification은 보내고 나서 수신 확인을 하지 않는 것이고, Indication은 보내고 나서 수신자로부터 확인을 받는 것이다. KeyFob에서 가속도의 변화를 감지할 때마다 USB 동글 쪽으로 가속도 값을 보내는 상황에서는 어느 방식이 더 적합할까? 대개의 경우 시간에 따른 가속도 값의 변화 추이를 살펴 보는 것이 완벽한 수신율을 보장하는 것보다 더 중요하기 때문에 수신 확인을 받을 필요가 없는 Notification이 Indication을 사용하는 것보다 적합할 것이다.       그렇다면 KeyFob이 제공하는 characteristic 중에서 Notification 방식으로 보내는 것이 무엇인지 어떻게 알 수 있는가? 그리고 그 값을 Notification 방식으로 보내도록 하려면 어떻게 해야 하는가? KeyFob은 현재 KeyFobDemo 애플리케이션을 실행하고 있는 중이다. 2. 가속도 측정 및 전송     KeyFobDemo 애플리케이션이 제공하고 있는 가속도계 서비스는 블루투스 SIG 표준이 아니라 TI에서 예제로 구현한 것이다. 아래 문서의 Figure 27에서 가속도계 서비스에 대한 attribute 테이블을 찾을 수 있다.         Bluetooth Low Energy CC2540/41 Mini Development Kit User's Guide (http://www.ti.com/litv/pdf/swru270c)     2....

[BLE] TI CC2540 Mini DK 사용하기 - Advertising Data 형식

1. 들어가기     USB 동글에서 KeyFob을 찾을 때 BTool의 로그창을 보면 아래와 같은 Rx 데이터를 발견할 수 있다.         [3] : <Rx> - 09:58:23.157         -Type : 0x04 (Event)         -EventCode : 0xFF (HCI_LE_ExtEvent)         -Data Length : 0x18 (24) bytes(s)          Event : 0x060D (GAP_DeviceInformation)          Status : 0x00 (Success)           EventType : 0x00 (Connectable Undirect Advertisement)          AddrType : 0x00 (Public)          Addr : 78:C5:E5:A0:0D:4C          Rssi : 0xDB (219)          DataLength : 0x0B (11)           Data : 02:01:05:07:02:03:18:02:18:04:18         [4] : <Rx> - 09:58:23.183         -Type : 0x04 (Event)    ...

[라이브러리] 하나의 16진 문자를 정수로 변환하기

문자열을 숫자로 바꾸어 주는 C 표준 API는 있지만, 하나의 문자를 숫자로 바꾸어 주는 API는 없는 것 같다. 그래서 아래와 같이 문자를 정수로 바꾸어 주는 함수를 두 가지 방식으로 구현해 보았다. #include <stdio.h> #include <string.h> int ctoi_v1(char c) { if (c >= '0' && c <= '9') { return (c - '0'); }  else if (c >= 'A' && c <= 'F') { return (c - 'A' + 0x0A); } else if (c >= 'a' && c <= 'f') { return (c - 'a' + 0x0A); } else { return -1; } } int ctoi_v2(char c) { switch (c) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'A': return 0x0a; case 'B': return 0x0b; ...

GIT과 함께 vimdiff 편리하게 사용하기

GIT으로 관리하고 있는 소프트웨어 프로젝트에서 수정한 파일들을 마지막으로 commit한  파일들과 비교하여 수정 내용을 간단히 확인하고자 할 때에는 아래 명령을 사용할 수 있다.      $ git diff 하지만 수정한 내용이 많거나, 비교를 하면서 편집을 계속하고자 한다면 아래의 명령을 사용하는 것이 더욱 편리하다.      $ git difftool -y -t vimdiff 위 명령을 실행하면 여러 종류의 비교 도구 중 하나인 vimdiff로 수정 내용을 보여 줄 것이다. vimdiff 창에서 수정 내용을 확인하고 편집을 하는데 편리하게 사용할 수 있는 명령들을 정리해 보았다. 1. 윈도우간 이동      CTRL-W w  : 다음 윈도우로 이동      CTRL-W h  : 왼쪽 윈도우로 이동      CTRL-W j  : 아래쪽 윈도우로 이동      CTRL-W k  : 위쪽 윈도우로 이동      CTRL-W l  : 오른쪽 윈도우로 이동 2. 윈도우 위치 옮기기      CTRL-W H  : 왼쪽으로 옮기기      CTRL-W J  : 아래쪽으로 옮기기      CTRL-W K  : 위쪽으로 옮기기      CTRL-W L  : 오른쪽으로 옮기기   수직 분할 상태에서 윈도우를 상하로 이동시키면 수평 분할로 바뀐다.  3. 폴더 열기 및 접기   폴더 표시 (+, -)가 있는 행에서 아래 문자를 치면 폴더가 열리고 접힌다. ...