Java Struct를 이용한 데이터 통신

 C 혹은 C++를 사용하여 구현된 시스템 간의 데이터 통신을 구현할 때, 통신 프로토콜을 struct로 정의하는 방법이 많이 사용된다. 수신 측에서는 바이트 순서(endian)를 고려하여, 수신한 데이터를 미리 정의된 struct 변수에 그대로 할당하기만 하면 된다. 하지만 송신 혹은 수신 측을 C가 아닌 언어로 구현해야 할 때는 약간의 수고가 따른다. 보통은 byte 배열을 사용해 미리 정의된 struct와 동일한 메모리 크기를 할당한 후, struct의 각 필드에 따라 일일히 데이터를 파싱해주어야 한다. 이러한 방법은 구현 시 실수가 발생할 가능성이 높고 자료구조의 수정이나 디버깅도 어렵다. Javolution  Javolution은 Java를 실시간 시스템에 적합하도록 지원하기 위해 고성능의 클래스와 유틸리티들을 제공해 주는 라이브러리이다. Java 표준 라이브러리에서 제공하는 StringBuilder, ArrayList, HashMap 등의 클래스는 최초 생성 시 지정된 capacity를 재조정하는데 큰 비용이 따르는데, Javolution에서는 이를 개선한 TextBuilder, FastTable, FastMap 클래스 등을 제공한다. 또한 C/C++과의 상호연결을 위한 Struct, Union 클래스도 제공한다. 본 글에서는 Javolution에서 제공하는 Struct와 Union을 이용하여 Java 환경에서 C로 정의된 struct 및 union과 같은 자료구조를 쉽게 구성할 수 있는 방법에 대해 소개한다. 보다 자세한 내용은 다음 웹페이지를 참조하기 바란다. http://javolution.org/ Struct 클래스  C/C++과는 다르게, Java 객체의 메모리 배치는 컴파일러에 의해 결정되지 않는다. 메모리 상의 객체들의 배치는 실행 시간(run time)에 이루어지며 인터프리터(또는 Just-In-Time 컴파일러)에 의해 결정된다. 이 방식은 Java에서 객체를 동적으로 로딩하거나 바인딩할 수 있게 해주지만, C/C

Android 커스텀 Dialog 내의 EditText 자동 포커스 해제

EditText를 포함하는 커스텀 Dialog 생성 시 EditText에 자동으로 포커스가 이동되는 경우가 있다. 이를 원하지 않으면 Dialog의 최상위 View 컴포넌트에 다음 속성을 추가한다. android:focusable="true" android:focusableInTouchMode="true"

Google 검색 키보드 단축키

이미지
 키보드에서 마우스로 손을 이동하는 것도 귀찮은 게으른 개발자를 위해, Google 검색엔진에서도 단축키를 사용할 수 있다. 원래는 실험실 기능으로 제공되던 것이 기본으로 제공된다. 단축키 동작 j 다음 검색 결과 항목으로 커서 이동 k 이전 검색 결과 항목으로 커서 이동 enter 검색 결과 항목 열기 / 검색창으로 커서 이동 esc 검색창에서 커서 해제 참고로 이 단축키들은 vi의 단축키와 같다.

Emacs Windows 환경에서 한영키 입력 전환 문제

이미지
1. 한글 입력 활성화  Emacs는 내장 한글 입력기를 사용하여 한글 입력을 처리한다. 내장 한글 입력기를 사용하려면 아래 명령을 Emacs 설정 파일( .emacs) 에 추가하면 된다. Windows 환경에서  .emacs  파일은 Windows 7을 기준으로  C:\Users\<USER_NAME>\AppData\Roaming\ 경로 안에 있을 것이다. ;; 한글 입력기 활성화 (set-language-environment "Korean") ;; UTF-8 인코딩 사용(optional) (prefer-coding-system 'utf-8)  기본적으로 ' Ctrl + \ ' 혹은 ' Shift + Space ' 명령으로 입력기를 전환할 수 있다. 한영키로 입력기를 전환하고 싶다면 아래 명령을 추가한다. ;; 한영키로 입력기 전환 (global-set-key (kbd "<kana>") 'toggle-input-method) 2. Windows 환경에서 한영키 입력 문제  Windows 환경에서 EmacsW32를 사용할 때, 한영키 입력 시 Emacs 내장 입력기가 전환되지 않는 문제가 있었다. 키보드의 한영키 입력을 시스템 IME에서 처리하고 애플리케이션에는 전달하지 않는 것으로 보였다. 즉, Emacs에서는 <kana>키(한영키) 입력을 전혀 받지 못했다.   제어판 - 국가 및 언어 - 키보드 및 언어 - 키보드 변경 에 들어가면 입력기를 설정할 수 있는데, 추가 버튼을 선택하여 한국어(대한민국) - 키보드 - 한국어 항목을 체크하여 한국어 입력기를 추가한다.  'Microsoft IME' 대신 '한국어' 입력기를 사용하면 Emacs에서 한영키를 정상적으로 입력 받는다. 그러나 이 '한국어' 입력기를 사용하면 시스템은 물론 Emacs 외의 다른 애플리케

Redmine 서버 백업 및 복원

Ubuntu 14.04 LTS에 설치한 Redmine을 Windows 환경으로 이전한다. 실행 환경  - Redmine 2.0.0 이상을 기준으로 한다.  - DB는 MySQL을 사용한다.  - Windows 환경에서는 Bitnami Redmine Stack을 사용한다. 1. 백업(Ubuntu) 1) MySQL DB 정보 확인  아래 경로의 파일을 열어 사용자 및 DB 정보를 확인한다. <REDMINE_INSTALLED_DIR> /apps/redmine/htdocs/config/database.yml  아래와 같이 사용자 및 DB 정보가 있다. production:   adapter: mysql2   database:  < DATABASE>   host: 127.0.0.1   username:  < USERNAME>   password:  < PASSWORD>   encoding: utf8   port: 3306 2) MySQL DB 백업 $ /usr/bin/mysqldump -u  < U SERNAME>  -p < P ASSWORD>   < DATABASE>  >  < PATH_TO_BACKUPS> /redmine_db.sql 3) 첨부 파일 백업 $ rsync -a  < REDMINE_INSTALLED_DIR> /apps/redmine/htdocs/files  < PATH_TO_BACKUPS> /files  rsync 명령에 대해서는 다음 링크를 참조한다.  Rsync 10가지 사용 예제들 2. 복원(Windows) 1) MySQL DB 복원 > mysql -u  < U SERNAME>  -p  < DATABASE>  < redmine_db.sql  Password를 물어보면 백업할 때와 동일하게 복원할 시스템의 Redm