HW#02 : 연습문제 풀이HW#02 : 연습문제 풀이

Posted at 2011. 5. 15. 22:10 | Posted in Computer Science/정보보호이론

Chapter 9.

17.

22.

27.

'Computer Science > 정보보호이론' 카테고리의 다른 글

HW#01 : 연습문제 풀이  (2) 2011.04.04
에바리스트 갈루아  (0) 2011.03.31
//

Java 언어에서 레지스트리 생성, 삽입, 삭제, 수정 방법Java 언어에서 레지스트리 생성, 삽입, 삭제, 수정 방법

Posted at 2011. 5. 13. 17:19 | Posted in 카테고리 없음
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinReg;

public class Test {
	private static String regPath;
	private static String regName;
	private static String regValue;
	
	Test() {
		regPath = null;
		regName = null;
		regValue = null;
	}
	
	public static void main(String args[]) {
		// 경로, 이름, 데이터 변수 초기화
		regPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
		regName = "MyProgram";
		regValue = "\"C:\\Program Files\\SetReg\\SetReg.jar\" /autorun";
		
		// 시스템 사용자 이름 출력
		System.out.println("Your Name is " + Advapi32Util.getUserName() + ".");

		// 레지스트리 키 생성
		Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, regPath, regName);
		
		// 레지스트리 값 설정
		Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, regPath, regName, regValue);
		
		// 레지스트리 값 읽기
		System.out.println(Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, regPath, regName)); 
		
		// 레지스트리 값 삭제
		Advapi32Util.registryDeleteValue(WinReg.HKEY_CURRENT_USER, regPath, regName);
		
		// 레지스트리 키 삭제(값 삭제가 선행)
		Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, regPath, regName); 
	}
}
다음은 Java 언어에서 레지스트리를 생성, 삽입, 삭제 그리고 수정하는 방법이다. 구글 검색을 통해 다양한 방법을 찾아보았지만 각자 나름의 장단점이 있었다. 그 중에서 가장 마음에 드는 것은 JNA(Java Native Access)를 사용하여 레지스트리를 접근하는 방법이다. Advapi32Util 클래스를 사용하여 레지스트리를 조작할 수 있다. Java에서 기본적으로 레지스트리를 조작하기 위해 제공해주는 클래스가 있지만 이 클래스는 레지스트리 트리의 Root 접근이 불가능하다. 아마도 보안 문제이기 때문에 그러한 것이라 생각한다.
//

Java Native AccessJava Native Access

Posted at 2011. 5. 13. 16:57 | Posted in 카테고리 없음

Java Native Access provides Java programs easy access to native shared libraries without using the Java Native Interface. JNA's design aims to provide native access in a natural way with a minimum of effort. No boilerplate or generated glue code is required.

현재 JNA 최신 버전은 3.2.7 인데 최근에 3.2.8로 업데이트 되었다. 이것이 필요하게 된 이유는 JAVA를 이용하여 윈도우 프로그래밍을 할 경우 한계점이 발생하기 때문이다. 예를 들어 레지스트리를 제어(생성, 삽입, 삭제, 수정)하기 위해서는 JNA가 필요하다.

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
 
/** Simple example of native library declaration and usage. */
public class HelloWorld {
    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
            (Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
        void printf(String format, Object... args);
    }
 
    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Hello, World\n");
        for (int i = 0; i < args.length; i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}

위의 예제는 위키디피아에서 Java에서 printf 함수를 사용하여 "Hello, World"를 출력하는 소스 코드이다. 이것을 실행하기 위해서는 jna.jar 파일과 platform.jar 파일을 외부 라이브러리로 등록해 주어야 한다.

//

HW#15 : The 0/1 Knapsack Problem을 DP으로 구현하고 동작 예제를 보이시오.HW#15 : The 0/1 Knapsack Problem을 DP으로 구현하고 동작 예제를 보이시오.

Posted at 2011. 5. 12. 03:57

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

UNLOCK!

Android SDK를 복사하여 실행한 경우의 문제점Android SDK를 복사하여 실행한 경우의 문제점

Posted at 2011. 5. 9. 01:06 | Posted in 카테고리 없음

Android SDK를 설치 후 업데이트 시간이 많이 소모 되어 업데이트가 완료된 것을 USB에 복사해 놓고 실행을 하였는데 실행이 되지 않았다. 분명 비설치 모드의 SDK를 제공해주기 때문에 SDK를 복사해서 사용해도 정상적으로 될 것이라 생각하였다. 하지만 아무리 Eclipse에서 "Android SDK and AVD Manager" 실행하여도 오류 메시지만 발생하고 실행이 되지 않았다. 분명 Preferences - Android 에서 Location 위치를 정상적으로 설정해 주었다.

문제의 원인은 환경 변수 중 PATH를 설정해 주지 않아서 발생하는 문제였다. PATH를 설정하고 나서 다시 실행을 해 보면 정상적으로 동작을 하고 Preferences - Android 들어가보면 사용가능한 Android 에뮬레이터 버전이 출력된다.
//

제인 구달 박사님과 이미지화 기억제인 구달 박사님과 이미지화 기억

Posted at 2011. 5. 8. 21:53 | Posted in 카테고리 없음

심리학을 공부하는 분들이라면 제인 구달을 잘 알 것이라 생각한다. 아직도 생생하게 기억나는 것이 침팬지의 울음 소리로 침팬지와 의사소통하는 장면이였다. KBS 다큐멘터리에서 인간의 기억력과 관련된 주제로 방송을 하였다. 그 중 침팬지에 대한 이야기가 나왔다. 화면에 특정 숫자를 보여 주고 기억하는 실험에서 아유무는 단 몇 초 이하로 보여주는 숫자들에 대해 작은 수부터 큰 수까지 찍어낸다. 제인 구달 박사님은 그것을 보고 Photographic Memory 라고 설명한다. 너무 부러운 능력이다. 화면에 보여지는 것을 보고 화면 자체를 기억하는 것이다.

이 능력만 있다면 나는 책을 문자 또는 문자열 단위로 처리하는 것이 아니라 화면 단위로 처리하여 공부하는데 유용할 수 있겠지만 만약 이러한 능력이 인간에게 있다면 그것은 큰 불행일 수도 있다는 생각을 하였다. 화면 자체를 저장한다면 얼마나 많은 시신경 세포들이 작용해야 할까? 아마도 미처버릴 수도 있을 것이다.
//

사마의의 한 마디사마의의 한 마디

Posted at 2011. 5. 8. 21:39 | Posted in 카테고리 없음

사마의가 제갈량과의 전투에서 이렇게 말한다. "하늘이 왜 난 돕지 않는지" 가슴이 아프다. 난 사마의의 마음을 십분(十分) 이해할 수 있다. 사람의 능력에는 한계가 있다. 노력으로 열심히 하면 능력 바로 아래까지 갈 수 있지만 결국 그 능력을 뛰어넘을 수 있는 것이 운, 운명, 천명이다. 하늘의 뜻을 얻지 않고서는 대성하기가 힘들다.
//

안드로이드 네트워크 프로그래밍 필수 사항안드로이드 네트워크 프로그래밍 필수 사항

Posted at 2011. 5. 7. 23:13 | Posted in Computer Science/네트워크응용설계
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Swing 대신 Android 껍데기를 씌워났다고 생각하면 금방 프로그래밍을 할 수 있었다. 어차피 필요한 모듈은 일반적인 자바 클래스로 만들면 되기 때문이다. 그런데 같은 소스를 JRE 환경에서 실행하면 잘 동작하고 Android 환경에서 실행하면 Socket 연결이 안되는 것이였다. 너무 아리 송송하였다. 심지어 다른 분들의 예제 역시 동작하지 않았다.

혹시 네트워크 환경이 잘 못되었는가 의심이 들었다. 그러던 중 안드로이드와 네트워크 관련된 사항을 찾아보았다. 문제는 단 한 줄 이였다. 안드로이드는 접근 권한이 있었다. AndroidManifest.xml 파일에 저 위에 있는 한 줄을 추가시켜 주지 않으면 절대 Server Socket 이든 일반 Socket 이든 접속을 하지 않는다. ㅜㅜ

정말 오늘 많은 것을 배웠지만 그 만큼 많은 시간을 소비하였다. 책을 다 읽어 보기에는 분량이 있었기에 앞에 내용만 살짝 보고 프로그래밍한 결과이다. 결국 빠르게 갈 수 있는데 멀게 돌아왔다는 생각이 들었다.
//

HW#03 : 안드로이드 플랫폼 기반의 메일 전송 프로그램HW#03 : 안드로이드 플랫폼 기반의 메일 전송 프로그램

Posted at 2011. 5. 7. 21:08 | Posted in Computer Science/네트워크응용설계

네트워크응용설계 과목의 세 번째 숙제는 안드로이드 플랫폼 기반의 메일 전송 프로그램을 작성하는 것이다. 정말 평생 안드로이드 프로그래밍을 할 일이 없을 것이라 생각하였다. 난 영원한 C 프로그래머로 남고 싶었다. 특히 임베디드 C 프로그래머가 되고 싶었다. 한정된 자원에서 가장 효과적인 개발을 하기 위해서는 고도의 기술이 요구되고 난 그러한 기술을 배우고 싶다. 아무튼 이번 프로젝트는 재미있는 것 같다. 일단 스마트폰에서 개발 하기 위해 첫 번째 요소는 UI(User Interface)이다.

프로그램을 완성시키고 나머지 글을 완성해야 하겠다.

//

Fat Jar Eclipse Plug-InFat Jar Eclipse Plug-In

Posted at 2011. 5. 7. 19:46 | Posted in Computer Science/DB시스템및프로그래밍


참조하는 모든 라이브러리를 포함하여 프로젝트를 하나의 "덩치큰(fat)" 실행가능한 JAR 파일로 만들어 주는 이클립스 플러그인이다. 레퍼런스는 프로젝트 설정으로부터 획득되어지는데, 그래서 아무런 메뉴얼 설정이 필요하지 않다.

제작자의 홈페이지에 있는 문장을 그대로 해석하니 조금 이상할 수 있다. 제작자가 말하는 fat의 의미란 실행가능한 형태의 JAR 파일 내부에 참조되고 있는 외부 JAR 파일을 같이 묶어서 하나의 JAR 파일로 만들어 준다는 것이다. 또한 프로그램에서 사용되는 아이콘도 같이 묶어 주어 반드시 필요하다.

만약 실행에 필요한 JAR 파일이 포함되어 있지 않다면 그러니깐 단순히 실행가능한 JAR 파일로 추출(Export)한 경우 프로그램이 실행되지 않는다.

http://fjep.sourceforge.net/


'Computer Science > DB시스템및프로그래밍' 카테고리의 다른 글

DB프로그래밍의 교훈  (0) 2011.05.07
SQL Injector  (2) 2011.05.03
Mass SQL Injector  (0) 2011.05.03
DB시스템및프로그래밍 프로젝트 첫 모임  (2) 2011.04.08
XML 관련 문제 풀이 정리  (0) 2011.04.04
//