'분류 전체보기'에 해당되는 글 52건

  1. 분석과 설계에 대한 생각
  2. 1인치의 혁신
  3. 독서 토론 진행과 방법 2
  4. C언어 pthread 사용 방법
  5. 두 절대경로에서 상대경로 구하기
  6. 스텔라는 어떻게 농장을 구했을까
  7. 우분투 아파치 서버로그 분석 (awstats)
  8. 안드로이드 ADB Shell 권한변경 (su)
  9. 이클립스에서 NDK 디버깅하기 3
  10. Ubuntu 이클립스 실행오류 해결 4

분석과 설계는 어떤 개발을 하든지 중요합니다.

요 근래 저희 팀의 문제와도 연결되어 있어 더욱 그러하게 생각합니다.


저만 느낀건 아니죠 !!!?




생각해 보세요~ 나에게 주어진 재료는 한정되어 있어요.


이 재료를 통해 하늘을 나는 비행기를 만들어야 해요


아무 생각 없이 우선 만들고 보자라는 식으로 재료를 사용하며 만들면 비행기는 제대로 날 수 있을까요?


재료 또한 한정되어 있어 만들고 고치고, 만들고 고치고 반복 하다보면


금새 재료가 동날 것이에요



주어진 재료를 생각해서 미리 머리속에서 시뮬레이션 하고, 


어떻게 만들지 미리 생각해야 되요. 분석과 설계의 첫 단추라 할수 있어요


그 다음 단추는 머릿속에서만 시뮬레이션 했던것을 더욱 명확하게 하기위해


문서등으로 형식화 하구요..


뿌옇게 모호했던 부분이 드러나게 되고 좀더 체계적으로 바뀌어가게 되요.


그 다음엔 형식화 한대로 만들면 되구요~





물론 100% 형식화 한대로 만들어 지지는 않을거에요. 


만들다 보면 또 다른 문제가 발생할 수 있죠.


그래도 이런 과정 없이 앞에서 얘기 했던 것처럼 뚝딱뚝딱 만들어 버린다면


비행기는 비행기인데 날개가 없는 괴물이 되어 버릴수 있어요.


조금씩 다듬으면서 형식과 실체를 일치화 시켜나가는 것이에요~


가장 중요하면서 가장 힘든 부분이기도 해요


마치 장거리 달리기를 하는 것처럼 힘들기도 한 것 같아요


아무래도 이런 힘듦 때문에 분석과 설계를 싫어하는 것이 아닌가 생각도 들구요


그리고 이겨낸다면 파아란 하늘 창공을 높이 가르는 비행기는 만들어질 것이에요



여러분은 어떤 비행기를 만들고 싶은가요 ?



'일상생활' 카테고리의 다른 글

석촌동 백제고분 유적지 답사  (0) 2012.05.13



1인치의 혁신... 저자는 끊임없이 1인치 만큼의 작은 '변화' 강조한다.

 

작은 변화들이 쌓여 변화를 이루듯 변화는 혁신으로 다가온다.

 

나는 부분에 공감을 했다.

 

혁신이라는 단어를 처음 접했을 창의적이고 독특한 아이디어를 통해 ~ 바뀌어버리는 현상인줄 알았다.

 

하지만, 혁신을 접하면서, 이해하면서, 체험하면서 달라졌다.

 

혁신은 갑작스런 아이디어에서 튀어나오지 않는다.

 

혁신은 시간에 이루어지지 않는다. (물론 천문학적인? 예외는 있을 있다)

 

끊임없이 작은 변화되는 과정에서 실패와 실수 많은 고통을 느끼고 이를 해쳐나가야만 얻는 것이다라고 이제는 생각한다.

 

단번에 이루어 지지 않고 느긋하게 다가온다.

 

기다려야 한다.

 

우리 회사도 팀도 개인도 혁신의 미세한 변화 속에서 같이 동화되어 변하기를 기대한다.

 

혁신 속에서 !



'독서' 카테고리의 다른 글

스텔라는 어떻게 농장을 구했을까  (0) 2014.03.02
안철수의 생각  (0) 2012.09.03
오리진이 되라  (0) 2012.05.12
글로벌 소프트웨어를 꿈꾸다  (0) 2012.05.11

독서 토론은 우리의 지적 능력을 향상시키는데 큰 도움을 줍니다. 자기의 생각을 논리적이며 효율적으로 표현할 수 있게 해주고, 사고의 폭 또한 넓어지게 해줍니다. 그러나! 이 좋은 독서 토론을 막상 하려고 하면 토론 진행은 어떻게 해야 하는지, 또 어떻게 토론해야 하는지 막막할 따름입니다.

학계 방면에 연구한 자료가 있을것이라 생각하여 논문을 검색하였고, 독서 토론 진행과 방법에 대한 유용한 정보가 있어 포스트 합니다.


독서 토론 목적
  1. 책을 읽으면서 이해하지 못했던 내용들을 이해할 수 있다.
  2. 책을 아주 정확하게 읽는 습관을 기를 수 있다.
  3. 자기의 생각을 논리적이며 효율적으로 표현하는 능력을 기를 수 있다.
  4. 상대방의 의견을 존중하는 태도로 민주적인 소양을 기를 수 있다.
  5. 발표능력을 기르고 다른 사람의 의견을 듣는 미덕을 기를 수 있다.
  6. 독서 치료적인 차원에서 정신 건강에 크게 도움이 된다.

독서 토론 방법
  1. 자유토론식 : 원탁식 토론으로 사회자 중심으로 진행하는 형식.
  2. 세미나식 : 대 주제를 두고 소 주제 3~4개를 각각 발표자와 질문자가 발표하고 전 회원이 토론하는 형식.
  3. 심포지엄식 : 발표자와 질문자 각각 3~4명이 의견을 말하고 그 의견들을 바탕으로 참석자가 질의 응답하는 형식.
  4. 찬반론식 : 미리 주제와 결론을 정해 놓고 찬반을 논하는 형식.
  5. 포럼식 : 한 사람 또는 여러 사람이 발표하고 청중이 질문하면서 토론하는 형식.
  6. 패널식 : 4~6명이 대립되는 의견을 대표자 자격으로 청중 앞에서 논의하는 방식.
  7. 연극식 : 책 내용의 주인공역을 맡아 연극하는 형식이 있다.


토론 진행을 맡은 사회자 유념 사항

  1. 사회자 자신의 발언으로 너무 많은 시간을 낭비해서는 안 된다.
  2. 주제별로 토론할 때 한 주제에 시간을 많이 낭비하지 않도록 해야 한다.
  3. 토론에 참여한 회원 중에 발언을 않고 있는 회원에게는 유도 질문으로 참여하도록 해야 한다.
  4. 발언하는 회원들이 한 두 회원에게 집중되지 않도록 발언자들을 배려해야 한다.
  5. 회원들이 엉뚱한 이야기로 시간을 낭비할 때는 곧 조절해야 한다.
  6. 회원이 발언하면서 물증을 보일 경우 도와주고 확인 해 주어야 한다.
  7. 토론의 결과에 대하여 결론을 내리려 하지 말고 적당한 선에서 다음 주제로 넘어가도록 한다.


references

  • 김승환, “독서토론의 활성화를 위한 독서자료 활용에 관한 연구”, 2004.


pthread를 이용하여 스레드를 구동하기 위해서는 pthread_create 함수를 사용합니다.


간혹 스레드를 사용하고 나서 스레드 종료시키는 것을 잊어 버리게 되는데요…
간단한 테스트 프로그램에서는 문제가 되지 않지만, 고객이 사용하는 프로그램이나 전문적인 프로그램에서는 프로그램이 종료 되기 전 반드시 스레드가 먼저 종료 되어야 합니다.


스레드가 동작 중일 때 프로그램이 먼저 종료 될 경우 에러나 예기치 않는 문제가 발생할 수 있기 때문입니다. 따라서, pthread_join 함수를 사용하여 생성된 스레드가 종료 될 때까지 기다리고 프로그램이 종료 되도록 구현합니다.


다음은 pthread 사용 방법 소스코드 입니다.

#include <pthread.h>
 
static pthread_t p_thread;
static int thr_id;
static bool thr_exit = true;
 
/**
 * 스레드 함수
 */
void *t_function(void *data)
{
	while(!thr_exit)
	{
		...
	}
 
	pthread_exit((void *) 0);
}
 
/**
 * 스레드 시작
 */
void start_thread()
{
	thr_exit = false;
	thr_id = pthread_create(&p_thread, NULL, t_function, NULL);
}
 
/**
 * 스레드 종료
 */
void end_thread()
{
	thr_exit = true;
	pthread_join(p_thread, (void**)NULL);	// 해당 스레드가 종료되길 기다린다.
}

/**
 * 메인 함수
 */
void main()
{
	start_thread();

	...

	end_thread();
}



references


'개발이야기 > C, C++' 카테고리의 다른 글

포인터 배열 테스트 코드  (0) 2012.08.07
C코드 메모리릭 잡기  (0) 2012.07.18
부모 클래스의 기본생성자가 없을때 메모리 누수 현상  (2) 2012.06.12
마방진 원리 및 문제  (4) 2012.05.19
Mangled Name  (0) 2012.05.13

두 절대경로에서 상대경로를 구하는 JAVA 코드입니다.

  • fromPath : C:\Windows\System32\drivers\etc
  • toPath : C:\Program Files
  • Result : ../../../../Program Files
/**
 * fromPath 절대경로에서 toPath 절대경로에 대한 상대경로를 반환
 * 
 * @param fromPath 절대경로
 * @param toPath 절대경로
 * @return 상대경로
 */
public static String makeRelativePath(String fromPath, String toPath) {
 
	if( fromPath == null || fromPath.isEmpty() ) 	return null;
	if( toPath == null || toPath.isEmpty() ) 		return null;
 
	StringBuilder relativePath = null;
 
	fromPath = fromPath.replaceAll("\\\\", "/"); 
	toPath = toPath.replaceAll("\\\\", "/");
 
	if (fromPath.equals(toPath) == true) {
 
	} else {
		String[] absoluteDirectories = fromPath.split("/");
		String[] relativeDirectories = toPath.split("/");
 
		//Get the shortest of the two paths
		int length = absoluteDirectories.length < relativeDirectories.length ? 
				absoluteDirectories.length : relativeDirectories.length;
 
		//Use to determine where in the loop we exited
		int lastCommonRoot = -1;
		int index;
 
		//Find common root
		for (index = 0; index < length; index++) {
			if (absoluteDirectories[index].equals(relativeDirectories[index])) {
				lastCommonRoot = index;
			} else {
				break;
				//If we didn't find a common prefix then throw
			}
		}
		if (lastCommonRoot != -1) {
			//Build up the relative path
			relativePath = new StringBuilder();
			//Add on the ..
			for (index = lastCommonRoot + 1; index < absoluteDirectories.length; index++) {
				if (absoluteDirectories[index].length() > 0) {
					relativePath.append("../");
				}
			}
			for (index = lastCommonRoot + 1; index < relativeDirectories.length - 1; index++) {
				relativePath.append(relativeDirectories[index] + "/");
			}
			relativePath.append(relativeDirectories[relativeDirectories.length - 1]);
		}
	} 
 
	return relativePath == null ? null : relativePath.toString();
}



references




1년전… 다니고 있는 회사가 혁신에 직면하면서 관련된 책들을 많이 읽어왔습니다. 혁신하려면 이런 이론이 필요하다. 저런 법칙들이 있다라는 등의 어려운 이야기들만 가득했죠. 하지만 스텔라는 어떻게 농장을 구했을까는 지금까지 읽어왔던 혁신에 대한 책과 달리 동화의 한 스토리 처럼 재미있게 구성되어 읽기 수월했습니다.

읽어 나가면서 특히 공감되는 부분에 책을 접어가며 표시해 두었는데요 다음과 같습니다.


“인간이 기계를 이용하기 시작한거야. 인간은 더 나은 트랙터를 만들고 사용하면서 자신들이 운영하는 농장의 효율성을 비약적으로 향상시켰어”

  • 농장에 위기가 찾아왔습니다. 무언가 ‘결단‘을 내리지 않는다면 인간의 비약적인 농장운영으로 말미암아 점차 경쟁성을 일어갈 것입니다.
  • [불]은 더 열심히 일하자! [마커스]는 지금과 다른 것이 필요하다! 라고 주장합니다.


“우리에게 필요한 것은 완전히 새로운 사업에 대한 기발한 아이디어 입니다.”

  • 혁신의 시작을 알리는 말입니다. ‘담대함‘과 ‘인내‘라는 단어가 떠오르네요..
    혁신은 담대하게 새로운 사업을 펼쳐 나가야 하며 인내하는 과정이 필요하기 때문입니다.


“더 열심히 일해야 한다”

  • 불의 명언이죠.. 이 말에 토를 달고 싶은 생각은 없습니다. 맞는 말입니다.
    하지만 ‘한계‘라는 것이 있습니다. 아무리 일해도 성과과 나아지지 않는다면 문제가 있는 것입니다.


“하지만 그들에겐 현재의 주력사업이 더욱 중요했다”

  • 새로운 사업은 큰 ‘의심‘을 받습니다.
    처음에는 결과가 눈으로 나타나지 않고 자원의 이동으로 오히려 더 결과가 나빠보입니다. 이 상황에서 누가 현명하게 앞을 내다 볼 수 있을까요?


“한 명의 리더에게 즉시 뭔가를 해내라고 지시하고 무작정 기다리는 것은 혁신적인 아이디어를 진행하는 방법으로는 한심스러울 만큼 부적절한 접근법이다”

  • 혁신에는 ‘협력‘이 필요합니다. 팀이 협력하고 ‘하나‘되지 않는 다면 불을 보듯 뻔합니다..
    사람과 사람이 하나되어..
    마치 몸의 장기들은 각기 다르지만 한 몸을 이루듯 한 사람 한 사람 조화롭고 일치하는 마음으로 혁신의 과제를 직면한다면 어떤 과제든 꼬인 실을 풀어 가리라 생각합니다.


“우리는 반드시 성격이 전혀 다른 두 가지의 일을 동시에 해 나가야 할 방법을 찾아야만 합니다”

  • 너무나도 혁신은 어렵습니다. ‘동시성‘ 이라는 문제를 해결해야 하기 때문입니다.
    전화 통화를 하면서 티비를 보고 코딩(?)을 하고 밥을 먹기는.. 어렵습니다. 흐음.. 고민일 수 밖에 없는것 같습니다.


“윈저 농장은 이렇게 빠른 성장에 익숙하지 않았다. 마브와 람보는 많은 알파카의 도착에 맞춰 계획을 제대로 세우지 못했다”

  • 혁신은 빠르게 ‘변화‘되는 환경에 대처해야 합니다.
    비유를 통해서 본다면 혁신 한다는 것은 장님이 길을 걸어 가는것이라 생각됩니다. 혁신과제의 미래는? 눈먼 장님과 같이 컴컴하며 앞이 안보입니다. 장님은 길을 걸어가면서 보도 블럭이 튀어나오거나 찻길을 건널때 위협을 받습니다. 이러한 변화되는 환경을 빠르게 알아차리고 대처해야 안전합니다.


“첫째, 가설세우기, 둘째, 예측하기, 셋쨰, 결과를 측정하기, 넷째, 예측치와 실제 산출물을 비교 평가하기!”

  • 아인슈타인의 말입니다. ‘가설‘과 ‘예측‘이 눈에 들어옵니다. 혁신은 앞이 안보이기 때문에, 미래가 안보이기 때문에 최대한 눈에 보여 측정할 수 있게끔 한다라는 주장입니다. 왠지 ‘끈질길‘것 같습니다. 눈에 안보이는 것을 눈에 보이게 만든다는 것은.. 미적분과 같이 계속 그 차이를 좁혀가는 노력이 필요해 보이기 때문입니다.


글을 쓰면서 문뜩 든 생각인데 참으로 혁신은 알다가도 모르겠습니다. 스텔라의 농장처럼 성공하면 다행이지만 실패라는 크나큰 아픔도 있기 때문입니다. 따라서 성공하면 혁신이고 실패하면 혁신이 아니라는 주장이 있습니다. 애플의 아이폰이 성공하지 않았다면 과연 아이폰을 혁신이라고 불렀을까요 ? 이 문제에 대해서는 머리 아파지기 시작합니다.. 마치 닭이 먼저냐 알이 먼저냐 묻는것 같습니다.


마지막으로, 현재의 회사가 아니면 자신에게 혁신이 필요하다고 생각한다면 이 책 읽어보시기를 추천드립니다!


'독서' 카테고리의 다른 글

1인치의 혁신  (0) 2014.05.07
안철수의 생각  (0) 2012.09.03
오리진이 되라  (0) 2012.05.12
글로벌 소프트웨어를 꿈꾸다  (0) 2012.05.11

서버(Server)를 아파치로 구축했다면 내 서버에

  • 몇명이 접속 했는지,
  • 어떤 페이지가 가장 호출되었는지,
  • 어느 국가에서 접속했는지,
  • 어떤 IP에서 접근했는지,
  • 머무른 시간은 어떠한지,
  • 어떤 파일을 다운로드 받았는지 등

수 많은 정보를 서버로그를 통해 다음과 같이 분석할 수 있습니다.


우분투환경에서 아파치 서버로그는 awstats를 이용하여 분석합니다.


1. awstats 패키지 설치
  • 다음 명령어로 awstats를 설치합니다.
  • geo 라이브러리는 방문자를 나라별로 분류해서 볼 수 있게 하기위해 설치합니다.
$ sudo apt-get install awstats libgeoip1 libgeoip-dev libgeo-ip-perl

2. awstats 환경 설정
$ sudo vim /etc/awstats/awstats.conf
  • 122번째줄 : LogFormat=4 를 LogFormat=1 로 변경. ubuntu apache 기본값이 1번입니다.
  • 153번째줄 : SiteDomain=”” 를 SiteDomain=”mydomain.com” 로 변경. 작업중인 파일명을 참고하여 변경하세요.
  • 168번째줄 : HostAliases=”localhost 127.0.0.1” 를 HostAliases=mydomain.com localhost 127.0.0.1” 로 변경. 현재 설정파일과 동일하게 취급할 도메인을 띄어쓰기를 구분자로 하여 적어줍니다.
  • 188번째줄 : DNSLookup=1 을 DNSLookup=0 으로 변경. dnslookup 은 부하가 많이 걸리므로 꺼두는게 좋습니다.
  • 905번째줄 : Lang=”auto” 를 Lang=”ko” 로 변경. 강제로 한국어를 지정합니다. awstats에는 한글UI를 지원합니다.
  • 1305번째줄 : LoadPlugin=”hashfiles” 를 LoadPlugin=”geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat” 로 변경. 방문자를 나라별로 분류해서 볼 수 있습니다.

3. awstats 보안 설정
# awstats.도메인명.conf 를 자동으로 불러옴
$ sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.windwing.co.kr.conf

# 보안을 위해서 기본샘플파일인 awstats.conf 파일명을 awstats.conf_ 로 변경
$ sudo mv /etc/awstats/awstats.conf /etc/awstats/awstats.conf_

4. 아파치 환경 설정
  • 아파치 환경설정 파일을 읽어옵니다.
$ sudo vim /etc/apache2/sites-enabled/000-default
  • 환경설정 파일에서 VirtualHost 태그 안에 awstats 설정 추가합니다.
<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>


    ## -- awstats 설정 ##
    Alias /awstatsclasses "/usr/share/awstats/lib/"
    Alias /awstats-icon/ "/usr/share/awstats/icon/"
    Alias /awstatscss "/usr/share/doc/awstats/examples/css"

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ...
</VirtualHost>
  • 아파치 서버 재시작
$ sudo /etc/init.d/apache2 restart

5. 로그정보 업데이트
  • 시스템에서 주기적으로 업데이트 하기위해 crontab 설정합니다. (반드시 sudo를 붙여 관리자 crontab에 등록)
sudo crontab -e
  • 다음과같이 crontab에 awstats 업데이트 구문을 등록합니다. (30분 주기)
# awstats
00,30 * * * * /usr/lib/cgi-bin/awstats.pl -config=mydomain.com -update > /dev/null

6. 결과 확인



references


'개발이야기 > Linux' 카테고리의 다른 글

Ubuntu 이클립스 실행오류 해결  (4) 2012.09.26
Ubuntu 12.04에서 java 설치  (0) 2012.09.12
ptrace 설명 및 사용법  (0) 2012.07.19

안드로이드 폰을 루팅하였음에도 불구하고 커멘드에서 adb shell 을 입력하였을때 바로 su 권한을 얻지못하고 $표시로 나오는경우, 아래와 같은 방법으로 su 권한을 획득할 수 있다.

1. adb shell 

2. su  

3. mount -o remount,rw /system (or: adb remount)

4. ls -la /system/bin/sh
   lrwxr-xr-x root shell 2012-11-10 15:20 sh -> mksh  

5. chmod 4755 /system/bin/sh

6. ls -la /system/bin/mksh 
   -rwsr-xr-x root shell 157520 2012-11-10 09:54 mksh (notice the suid bit is set)  

7. ^D (exit) 

8. adb shell


su 권한을 획득하면 개발환경에서 프로그램의 빌드후 실행이나 adb install 명령어 설치등 제대로 동작하지 않는다.

따라서 이때는 su권한을 풀어주어야 한다.

1. adb shell

2. mount -o remount,rw /system (or: adb remount)

3. chmod 755 /system/bin/sh

4. ^D (exit)

5. adb shell


'개발이야기 > Android' 카테고리의 다른 글

이클립스에서 NDK 디버깅하기  (3) 2012.11.01
1. CDT 설치
The NDK plugin currently works with CDT 7.0.2 or CDT 8.0.2.
    1. Download Eclipse for Java.
    2. Install CDT from Eclipse update site http://download.eclipse.org/tools/cdt/releases/indigo. (indigo: 버전이름)
    3. Install Android SDK + NDK Plugins from Eclipse update site https://dl-ssl.google.com/android/eclipse/

2. NDK 플러그인 사용
1. First set the path to SDK and NDK:
    Eclipse -> Window -> Preferences -> Android -> set path to SDK
    Eclipse -> Window -> Preferences -> Android -> NDK -> set path to the NDK

2. Right click on an Android project and select `Android Tools -> Add native support`.
Note that you will not be able to add native support if the project already has C/C++ nature.

At this point, you will be able to build your applications using Project -> Build All.

3. NDK 디버깅
1. Update your build config to include NDK_DEBUG = 1.
    Right click project -> properties -> C/C++ Build:
2. Set a breakpoint in your C code. 3. Right click on your project, select Debug As -> Android Native Application Note: There is a delay of a few seconds between when the activity is launched and when native debugging starts. If your code is already executed by that point, then you won’t see the breakpoint being hit. So either put a breakpoint in code that is called repetitively, or make sure that you call JNI code after you see that ndk-gdb has connected.

4. 이클립스 환경설정
Eclipse -> Window -> Preferences -> C/C++ -> Code Analysis
Syntax and semantic Errors 체크 해제 (체크 해제 안할 경우 구문에러 인식하여 빌드되지 않습니다.)


참조: http://tools.android.com/recent/usingthendkplugin


'개발이야기 > Android' 카테고리의 다른 글

안드로이드 ADB Shell 권한변경 (su)  (0) 2013.01.02


Ubuntu 환경에서 이클립스를 설치하고 실행했더니 다음과 같은 오류가 발생하였습니다.

(An error has occurred. See the log file ...)


경고창에 적힌 See the log file 문구대로 로그파일을 gedit를 이용하여 읽어보았습니다.



로그 내용중 빨간 밑줄을 보시면 SWT library를 찾을 수 없다라고 나옵니다. (Could not load SWT library)

또한 /home/mooyou/.swt/lib/linux/x86_64/ 폴더에서 SWT library를 찾는 것을 볼 수 있습니다.

이것 때문에 문제가 발생한 것입니다.


따라서 다음과 같이 터미널에 입력하여 SWT library 파일들을 링크시켜주면 해결됩니다.

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/


'개발이야기 > Linux' 카테고리의 다른 글

우분투 아파치 서버로그 분석 (awstats)  (0) 2014.03.01
Ubuntu 12.04에서 java 설치  (0) 2012.09.12
ptrace 설명 및 사용법  (0) 2012.07.19