- 2009.09.10 JNI 활용한 "Hello World" / Double-J
- 2009.06.18 노트북 스탠드(쿨러포함) 엑토 NBS-07H 사용기 4 / Double-J
- 2009.05.28 출근길..덕수궁 분향소 모습 09/05/28 / Double-J
- 2009.03.07 [Tips] 구글 캘린더(Google Calendar) 에서 음력을?!? / Double-J
- 2009.01.31 MP3P를 구입했습니다. (yepp Q1) 9 / Double-J
- 2009.01.12 [Tips] 특정사이트만 꼼수(?)로 차단하기 6 / Double-J
- 2009.01.11 플랭클린 플래너로 한해의 계획을.. / Double-J
- 2009.01.10 객체지향(Object Oriented)에 대한 간단한 고찰.. / Double-J
- 2008.12.31 2008을 보내면서..블라블라.. 2 / Double-J
- 2008.12.30 Pipeline과 RISC 2 / Double-J
Double-J's World » Search » Results » Articles
My life와 관련된 글 60개
Double-J's World » Programming/JAVA
JNI 활용한 "Hello World"
Double-J | 2009. 9. 10. 15:59
Main Code 작성
패키지명 : jnitest
파일명 : JNITest
JNITest.java
public class JNITest {
static{
System.loadLibrary("NativeHello");
}
public static void main(String[] args) {
NativeHello obj = new NativeHello();
obj.sayHello();
}
}
호출할 함수 원형 작성
패키지명 : jnitest
파일명 : NativeHello
NativeHello.java
package jnitest;
public class NativeHello {
public native void sayHello();
}
위의 두 소스가 작성되었다면 메뉴에서 Run -> Build (혹은 Clean & Build) 실행.
제대로 빌드가 되었다면 "build/classes" 란 폴더 아래 패키지명과 동일한 폴더와 *.class 파일이 생성됨을 볼 수 있다. (아래의 캡쳐화면 참고)
javah 로 c/c++ 형태의 헤더파일 생성하기
콘솔창에서 해당 프로젝트의 classes 폴더까지 이동 한후
위와 같은 명령어를 실행한다. 실행하면 *.h 파일이 생성된다. (아래 화면 참고)
DLL 파일 생성
Visual Studio 을 통해 MFC DLL 프로젝트를 생성 후 "Solution Explorer" 에서 프로젝트명을 마우스 우클릭하여 (VS2008 기준)
Properties 에서 다음과같이 %JAVA_HOME%\include 와 %JAVA_HOME%\include\include\win32 폴더를 추가한다.
include directory 작업을 완료한 후 좀전 작업에서 생성되었던 헤더파일의 내용을 생성된 프로젝트의 헤더파일에COPY-PASTE 를 한다. (파일 자체를 복사해도 큰 문제는 없는듯..) 기존의 내용은 가급적 주석처리.
프로젝트내의 헤더파일명과 동일한 *.cpp 파일에서 기본으로 생성된 필요 없는 내용은 주석처리를 한 후 헤더파일에 작성되어있는 함수를 실제로 구현해준다. (다음 그림참고)
작성후 빌드 하면 *.dll 파일이 생성된다. 이 파일을 JAVA프로젝트에 복사한다. (다음 화면 참고)
이제 Run 을 하면 실제 동작화면을 볼 수 있다.
이 글은 스프링노트에서 작성되었습니다.
노트북 스탠드(쿨러포함) 엑토 NBS-07H 사용기
Double-J | 2009. 6. 18. 18:46
출근길..덕수궁 분향소 모습 09/05/28
Double-J | 2009. 5. 28. 09:49
Double-J's World » Com...Tips!
[Tips] 구글 캘린더(Google Calendar) 에서 음력을?!?
Double-J | 2009. 3. 7. 01:24
평소에 iGoogle을 많이 사용하는터라 구글캘린더도 유용하게 잘쓰고 있습니다.
구글 캘린더를 사용하신 분들은 아시겠지만 음력이 표시안되서 사용하기 불편하셨을 겁니다.
다음에서 제공되고있는 캘린더 서비스도 우리나라 실정에 잘 맞춰져있어서 쓰기는 편하지만
Google서비스를 많이 이용하는 저로서는 캘린더 만으로 다음으로 왔다갔다 하기가 불편해서
그냥 그런대로(?) 사용하고 있었습니다.
그런데 웹서핑중 구글캘린더에서 음력을 이미 만들어서 공유해주시는 분들이 계시더군요^^
저도 이제야(?) 공개된 캘린더 추가해서 잘 사용하고있습니다.
공개해주신 예슬아빠님 감사드립니다. 예슬아빠님 블로그로 이동해서 음력달력을 추가해보심이 어떠신지?^^
음력달력 사용 관련 포스팅 --> 고고싱
MP3P를 구입했습니다. (yepp Q1)
Double-J | 2009. 1. 31. 17:36
Double-J's World » Com...Tips!
[Tips] 특정사이트만 꼼수(?)로 차단하기
Double-J | 2009. 1. 12. 15:44
원리는 PC에서 접속하고자 하는 Host Name을 강제로 특정 IP 주소(IP Address)와 mapping시켜서 실제 주소로 접속하지 않고 강제로 정해진 IP 주소로 접근하도록 하는 방법을 약간 꼼수(?)로 활용한 것 입니다.
방법은 다음과 같습니다. 일단 자신의 컴퓨터에서 아래와 같은 경로를 찾아가세요.
그러면 위와 같이 hosts 라는 파일이 있을 겁니다. 메모장이라든지 텍스트 에디트를 이용해서 파일을 읽습니다.
파일을 열면 위와 같이 나오는데 16, 17번째 줄의 주석처럼 보시고 활용하시면됩니다. 19번째 줄에는 127.0.0.1 이라는 아이피주소와 localhost라는 host name 과 mapping시켜줬습니다. 즉 지금 pc상에서 localhost 라고 치면 자신의 컴퓨터로 다시 접속되게 될 수 있죠.(127.0.0.1 이라는 IP주소는 자기자신의 IP주소를 나타내는 특별한 주소입니다.)
이를 응용하는 것입니다. 한번 꼼수를 써볼까요?
어떤 이유로인해 www.temp.com 이라는 주소를 내 컴퓨터에선 접속 못하게 하고 싶다!! 하지만 다른 유해사이트프로그램이라든지 이런건 깔기 싫은데 공유기 설정은 괜히 머리아프고!!! ㅡ.ㅡa 다른방법 없을까??
위와 같은 시나리오라면 다음과 같이 하는겁니다.
20번째줄에 다음과 같이 추가해보세요.
그리고 저장한 후에 컴퓨터를 재부팅해보세요. 그러면 특정 사이트로 접속할 수 없게됩니다. www.temp.com 이라는 도메인으로 접속을 시도하면 127.0.0.1 이란 IP주소로 강제 mapping 되서 연결되는 것이죠.
플랭클린 플래너로 한해의 계획을..
Double-J | 2009. 1. 11. 14:31
스티븐 코비 박사를 아시나요? "성공하는 사람들의 7가지 습관" 의 저자 입니다.
4세대 시간관리로 매우 유명세를 타고 있는 분이죠.
그가 세운 회사가 "플랭클린 코비 사"입니다. 물론 처음부터 스티븐 코비박사가 설립한건 아니지만 큰위치를 차지하고있음에 틀림이 없습니다. (회사명에 Covey 라고 떡하니 있으니깐요...ㅎㅎ;)
스티븐코비 박사가 주장하는 바를 정말정말 짤막하게 요약하면 "중요한것" 과 "긴급한것" 은 서로 다른 것이고 이를 잘 구분해서 개인별로 자신에게 "중요한것" 을 위해 계획하고 살면 마음의 평화를 얻을 수 있고 성공적인 시간과 인생관리를 할 수 있다는 것입니다.
길게 얘기하자면 좀 많이 길어집니다..;;
조만간에 관련 책 소개를 포스팅하겠습니다..
저는 예전부터는 알고 있었는데 귀차니즘에 실천을 못해보다가 2009년에서야 스티븐 코비 박사의 이론과 계획 방법론이 잘 담겨져있는 "플랭클린 플래너"를 마련하게 되었습니다.
위의 사진은 여친님 것과 같이 찍은 것입니다.;; 검은색이 제것인데 사진으로 봐서는 크기가 비슷해보이지만
제것이 크기가 조금 더 큽니다. ( 제것 : Compact 여친님 : Pocket )
올해는 정말 계획성 있게 살아봐야 겠네요.
플랭클린 플래너 처음이신분들은 종각 영풍문고에 플랭클린플래너 매장이 있으니 직접 눈으로 보셔도 좋을듯 합니다. 밑에는 플랭클린플래너의 국내에서 공식으로 제공해주는 '한국성과향상센터' 와 웹에서도 무료로 플랭클린플래너를 접해볼 수 있는 '플랜데이즈' 사이트입니다.
한국성과향상센터 : http://www.franklinplanner.co.kr
플랜데이즈 : http://www.plandays.com
Double-J's World » Programming/JAVA
객체지향(Object Oriented)에 대한 간단한 고찰..
Double-J | 2009. 1. 10. 02:14
C/C++ 로 배우는 자료구조론(한빛미디어) 의 객체 지향 방법론 부분을 보면 코끼리를 냉장고에 넣는 객체 지향적 방법중 하나로 "조교에게 시킨다" 라고 나옵니다. 참 단순하면서도 잘 맞아떨어지는 말이라 할 수 있지요.
객체(Object)는 현실세계의 어떤 형태든 프로그래밍 방법론 적으로 표현한 대상이라고 볼 수 있습니다. 그리고 실제 프로그래밍에선 그 객체는 고유한 '속성'과 더불어 '동작 혹은 기능(속성을 마음대로 바꿀 수있는..)' 이라는 것을 가지고 있습니다.
현실 세계의 물체를 예를 들어보겠습니다. 아주 간단하게 라디오를 생각해보면(아주 단순한 라디오청취기능만 있다고 가정...) 라디오 자체가 가지고 있는 속성(특징)은
- 소리
- 주파수
정도가 있을 겁니다. 그리고 이러한 속성(특징)을 제어하는 동작 혹은 기능은
- 소리를 크게하는(volume up) 기능
- 소리를 작게하는(volume down)기능
- 주파수 내리기
- 주파수 올리기
정도로 생각 해볼수 있겠죠.
바로 이것이 코딩시 그대로 적용되는 부분들입니다.
Java를 예를 들어보면 클래스의 field부분엔 바로 변수 형태로 위에서 말한 속성(소리, 주파수)들이 적용되고 method는 위에서 말한 제어하는 기능 들을 구현해주게 됩니다. 이 두가지 가 합쳐서 하나의 클래스를 이루는 것입니다.
더불어 이러한 클래스를 메모리상에서 실체화 시켜서 동작하게끔 해주면 마치 객체 자체가 알아서 모든 것을 다 해주는 것 처럼 할 수 있죠.
이처럼 문제해결을 할때 객체위주로 묶어가며 해답을 찾는 방법론이 바로 객체 지향 (Object Oritented)라고 말할 수 있습니다.
2008을 보내면서..블라블라..
Double-J | 2008. 12. 31. 13:47
2008년은 참 바쁘게 지나온 해 인것 같습니다.
언론에서 들려오는 무수한 소식들... 그리고 저 자신에게도 참 바쁘게 지내온 나날들이었죠.
올해는 4학년 졸업반이었습니다. 다행히 지금은 취업은 되었지만(아직 정식직원은 아니지만?;;)
끊이지 않는 취업대란의 소식에 발을 동동 굴렀던 것은 사실입니다.
나름대로 노력한다고는 했지만 열성적으로 최선을 다한것 같지는 않아 아쉬움이 많이 남는 한해 입니다.
티스토리에 블로그도 개설하여 많은 포스팅을 해보려고 했지만 게으름에 못이겨 못한것도 사실이구요.
제 전공 분야도 컴퓨터 공학이고 취업한 회사도 SW 회사라 조금 더 부지런해 볼까합니다.
2009년부터는 좀더 계획적이고 스스로를 단련시키는 하루하루를 보내고 2009년에는 더욱 성장하는
모습이 되고싶습니다.
모든 분들 한해 마무리 잘하시고 새해 복많이 받으세요^^
Pipeline과 RISC
Double-J | 2008. 12. 30. 23:55
RISC구조의 CPU가 좀더 Pipeline적용에 수월하다는 것이죠.
(CISC에도 Pipeline이 적용되어있습니다. 80486부터 당당하게요^^)
그럼 RISC는 어떻길래 Pipeline에 적용이 더 수월하다는 것일까요?
일단 Pipeline이 적용되지 않은상태에서 데이터 처리과정을 보겠습니다..
위의 그림은 어떤 두가지의 다른 데이터처리(job1, job2)가 CPU의 클럭에 맞춰 처리되는 상황을 표현한것입니다.
Pipeline이 적용되지 않는다면 다음과 같이 CPU에 입력된 순서대로 데이터 처리를 할 것입니다.
문제는 없어보입니다. 다만 JOB1이 모두 처리된후 JOB2가 모두 처리되기까지의 시간이
너무 길다는것이죠(4cycle이나..)
Pipeline이 적용된 상태에서의 데이터 처리과정은 다음과 같습니다.
파란색 부분 4조각을 합쳤을때 JOB1 이고 빨간색 부분 4조각을 합쳤을때가 JOB2와 같습니다.
마지막 끝나는 시간을 보면 총 8cycle로 이게 적용되나 적용되지 않으나 큰차이가 없어보입니다.
하지만 JOB1이 끝나자마자 1cycle후 JOB2가 끝났다는게 다른점이죠
물론 처음 한번 되기까지가 여러 cycle이 걸리지만 일단 첫번째 입력된 데이터 처리가 끝나기만하면
그다음부터는 1cycle씩 마다 데이터처리(JOB)이 처리되기 시작합니다.
마치 공장의 컨베이어벨트 처럼 자동차 한대를 만드는데 여러작업이 있는데 컨베이어벨트가 이동하면서
맡은 작업이 이루어지고 공장이 가동된지 가장 처음 나오는 자동차가 만들어지는 시간은 오래 걸리지만
일단 한번 처음 만들어진 자동차가 나오기 시작하면 그다음부터는 계속 생산되는것 처럼 상상해보시면
됩니다.
제가 그림 그리는것의 귀차니즘(?)의 압박이 있어 데이터 처리과정을 두개밖에 표현을 안했지만
저 데이터처리과정이 수천개 수만개가 되면 파이프라인의 효과는 체감상 엄청난 것입니다.
물론 위는 제가 가상으로 정한 시나리오입니다. 1cycle마다 된다는 보장도 없고 여러cycle이 걸릴수도 있고
일련의 데이터처리 사이에 다른 작업이 들어있을수도있지만 최대한 단순화시켜서 표현해본것 입니다.
그런데 위의 Pipeline동작은 데이터 처리과정에 입력(input)되는 데이터의 크기가 일정해야지 Pipeline의 효과를
극대화할 수 있습니다. 입력되는 데이터들마다 크기가 제각각이라면 특정 클럭에서 특정 작업을 해야하는데 그것이 되지 않으면 더 오래 걸리는것 처럼요.
좀전에 자동차공장을 얘로들었었는데 만약 승용차 공장에서 갑자기 트럭1대를 컨베이어벨트에서 만든다고 가정하면 부품의 갯수도 다르고 만들어지는 과정의 수도 다르기때문에 공장의 컨베이어 벨트 시스템은 효율적이지 못할 것입니다. Pipeline도 이와 마찬가지 입니다.
RISC는 명령어 형태가 단순, 고정되어있어서 연산을 해야하는 대상이 항상 일정하게 유지되어 Pipeline의 적용시 엄청난 효과를 보게 되는것입니다. SISC는 명령어형식이 RISC보다는 복잡해서 Pipeline의 적용시 데이터의크기가달라질때마다 손해(?)를 보는것입니다.
ps : 사실 컴퓨터구조 및 다른 이론서에는 저런형식으로 나와있지 않습니다. 이해를 돕기위해 그림을 그리다보니^^;
어쩌면 더 혼란스러워지실지도;; 개념적으로 설명한것이기때문에 참고만 하세요.
실제로는 계산방법도 있고 뭐 그런데...여기에 모두 적기에는..무리가;; 책도 더 찾아봐야하고..ㅎㅎ;
실제 "Computer System Architecture (3rd edition) - M. Morris Mano" 책에 나온 그림을 인용한
그림은 아래 따로 첨부한 그림을 참고하세요. 밑의 그림은 Space-time diagram for pipeline 라는 figure입니다.