검색결과 리스트
Computer에 해당되는 글 79건
- 2007.02.27 STL - MAP
- 2007.02.27 컨테이너 초기화및 Functor 예제
- 2007.02.27 STL lower_bound function 사용하기 Sample...
- 2007.02.27 원격 데스크탑에서 MATLAB 사용하기 3
- 2007.02.24 Linux 방화벽 설정하기 (IPtables) 1
- 2007.02.24 Cygwin에 ACE Library 설치하기
- 2007.02.24 Open Source Streaming Server Video Lan setting 3
- 2006.07.10 아이디어를 개념화하는 방법? 2
- 2006.04.28 CS... 어떻게 공부하는가? 1
- 2006.01.05 석사과정에 입학하여 박사학위를 받을 때까지 최단기간은 얼마나 됩니까? 2
글
STL - MAP
STL 맵들은 기본 컨테이너들 중에서 아마 가장 복잡하고도(상대적으로 말해서) 가장 다목적인 컨테이너들일 것이다. 이 글에서는 가장 기본적인 맵인 map에 대해서만 이야기하고, 다른 트리 기반 구조체(set, multise, mulitimap) 들에 대해서는 생략하겠다. 한 종류의 맵에 대해서는 확실히 알게 되면 다른 것들도 쉽게 이해할 수 있다.
map은 본질적으로 키-값 쌍들을 담는 컨테이너이다. map에는 임의의 두 종류의 데이터들이 키/값 상의 형태로 저장된다. 키를 통해서 값을 조회하는 데 걸리는 시간은 O(log n)인데, 해시 테이블보다는 비효율적이지만 속도의 차이는 무시할 수 있는 정도이며 삽입과 함께 정렬이 수행된다는 추가적인 장점이 존재한다. 다시 말해서는 map의 항상 정렬된 상태로 존재하는 것이다. 이는 map의 저장 방식 자체(균형 이진 트리(balanced binary, tree), 또는 적흑 트리(red-black tree)라고도 한다)가 가지고 있는 장점이다.
#pragma warning(disable:4786)
#include <map>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//. 맵 컨테이너들을 비교하는데 쓰이는 템플릿
template <class F, class S>
class value_equals
{
private:
S second;
public:
value_equals(const S& s) : second(s) {}
bool operator() (pair <const F, S> elem)
{
return elem.second == second;
}
};
//. 코드의 입력과 가독성을 돕기 위한 typedef들
typedef map<int, string> isMap;
typedef isMap::value_type isValType;
typedef isMap::iterator isMapItor;
void main()
{
isMap c;
//. 키-값 쌍들을 삽입
c.insert(isValType(100, "One Hundered"));
c.insert(isValType(3, "Three"));
c.insert(isValType(150, "One Hundred Fifty"));
c.insert(isValType(99, "Ninety Nine"));
//. 모든 키들과 값들을 출력
for(isMapItor itor = c.begin(); itor != c.end(); ++itor)
cout << "Key = " << (*itor).first << ", Value = " << (*itor).second << endl;
//. 맵을 연관 배열처럼 다룰 수 있다.
cout << "Key 3 Displays value " << c[3].c_str() << endl;
//. 다음과 같은 방식으로 키 - 값 쌍을 삽입하는 것도 가능하다.
isMapItor pos = c.find(123);
if(pos != c.end())
{
//. 요소를 삭제하면 그것을 가리키는 반복자는 무효화 된다.
//. 그 상태에서 그냥 pos++ 를 호출하면 정의되지 않은
//. 행동이 발생할 것이다.
c.erase(pos);
}
//. 값에 기반해서 특정한 요소를 찾고 제거한다.
pos = find_if(c.begin(), c.end(), value_equals<int, string>("Ninety Nine"));
if(pos != c.end())
c.erase(pos);
//. 루프 도중에 요소를 제거하는 경우에는 이런식으로..
for(isMapItor itr = c.begin(); itr != c.end();)
{
if(itr->second == "Three")
c.erase(itr++);
else
++itr;
}
}
value_type이라는 새로운 중간 데이터형은 컨테이너 안에 키 - 값 쌍의 형태로 저장되는 요소들은 나타내기 위한 것이다. 편의를 위해서, typedef를 이용해서 이 데이터형과 다른 데이터형들을 좀더 쓰기 쉬운 형태로 정의했다.
요소(키-값 쌍)를 컨테이너에 삽입할 때에는 insert() 함수를 이용한다. 다른 컨테이너들과 유일한 차이는 map::value_type 형의 값을 넣는다는 점이다. map은 요소가 삽입될 때 자동적으로 그것을 정렬하므로 컨테이터는 항상 키에 의해 정렬된 상태를 유지한다. map을 루프로 돌려서 키들과 그에 연관된 값들을 출력하므로 이 점을 확일 할 수 있다.
map은 두 개의 항목(키와 데이터)을 쌍으로 저장하는 컨테이너이므로 하나의 반복자로 두 개의 항목들에 각각 접근하는 것이 가능하려면 또다른 구조체가 존재해야 한다. 그것이 바로 value_type 구조체이다. 반복자를 역참조하면 value_type 구조체를 얻게 된다. value_type에는 first와 second라는 두 개의 데이터 멤버들이 있는데, first 키 값을 담고 있으며 second는 데이터 값을 담고 있다.
map은 키 값을 통한 임의 접근도 허용한다. 이 경우 map은 연관 배열(또는 희소 배열)과 동일한 방식으로 작동하게 된다. 요소들에 접근하거나 요소들을 추가할 때에는 index() 연산사를 사용한다. 이 연산자를 사용할 때에는 주의할 점이 있다. 이 연산자로 아직 존재하지 않은 요소에 접근하려 하면 에러가 발생하는 대신 기본 생성자에 의해 새 요소가 생성되고 그것이 map에 삽입된다. 에러를 발생시키지 않고 새 요소를 추가한다는 것은 논리적인 버그의 원인 될 수 있으므로 주의하기 바란다.
코드 후반부에는 find() 함수로 특정 키에 해당하는 요소를 찾는 부분이 나온다. 키들을 정렬되어 있으므로, find()의 수행 시간은 O(log n) 이다.
값에 기반해서 요소를 찾는 것은 조금 더 복잡하다. 요소들은 키에 기반해서 정렬되어 있으므로 값에 기반해서 요소를 찾는데 필요한 시간은 O(n)가 된다. 이번 예제에서는 루프 구조 대신 find()_if()라는 범용적인 STL 알고리즘을 이용해서 검색을 수행한다. 이 알고리즘에는 세 개의 인자들을 통해서 검색의 시작 위치를 뜻하는 반복자와 종료 위치를 뜻하는 반복자, 그리고 알고리즘이 검색 성공 여부를 판단하는 데 사용할 함수 객체를 지정해야 한다. 두 반복자는 자명하므로 설명할 필요가 없겠지만 함수 객체(functior)에 대해서는 족므 설명이 필요할 것 같다.
STL에서는 함수들 대신 중복된 함수 연산자들을 가진 클래스들이 쓰인다.(함수 연산자를 중복하는 것이 가능하다는 것을 처음 알게 된 독자도 있을 것이다) 이러한 방식은 일반적인 프로그래밍 문제에 캡슐화된, 그리고 형에 안전한 해결책의 제공을 가능하게 한다. 이번 예제에서 지정한 함수 객체는 단순 value_pair의 second 값을 비교하고 그 결과를 돌려 준다. STL에는 대부분의 문제들에서 코드에 즉시 써먹을 수 있는 함수 객체들이 준비되어 있다. 여러 알고리즘들과 그에 사용할 수 있는 함수 객체들에 대해서는 STL 관련 서적을 참고하길 바란다.
find_if() 기법은 컨테이너에서 어떠한 값을 찾을 때 권장되는 방식이나, map을 직접 루프로 돌려서 요소들을 제거해야 하는 경우도 생길 수 이 있다. 코드 마지막 for 루프가 그에 대한 것이다. 그런데 STL 설계자들은 다른 컨테이너들에서와 달리 map에 대해서는 erase() 함수가 다음의 유효한 위치를 돌려주도록 구현하지 않았다.(아마 속도상의 문제 때문일 것이다.) 이 때문에 다른 컨테이너들에서와는 조금 다른 방식으로 요소들을 제거해야 한다. 요소의 제거에 따른 반복자의 무효화 피하기 위해서는 약간의 우회책이 필요하다.
이번 예제에서는 for 루프문 안에서 반복자를 증가시키는 대신 루프의 본문 안에서 조건에 따라 바복자를 증가시킨다. 요소를 제거해야 하는 경우에는 후행 증가(반복자를 참조한 후 증가시킨다.)를 사용했고, 요소를 제거하지 않는 경우에는 선행 증가(먼저 증가시킨 후 참조)를 사용했다. 이런 방식을 이용하면 임시적인 반복자에 유효한 위치를 보존하는 등의 번거로움을 피할 수 있다. 그러나 선행 증가와 후행 증가의 차이에 의존하는 것은 코드를 이해하기 힘들게 만들며 디버깅이나 유지보수에도 좋지 않다. STL 설계자들이 map의 erase()를 다른 컨테이너들의 erase()와 동일한 방식으로 만들더라면(속도를 희생하더라도) 도 좋지 않았을까 싶다. 표준 위원회가 이러한 문제를 이해해서 다음 버전의 STL에서는 보다 낭느 방향으로 개선이 이루어지길 바란다.
여기에서는 교과서적인 이야기를 하나 하고 넘어가야 할 것 같다. 루프 안에서는 항상 선행 증가를 사용하는 것ㅇ이 좋은 이유는 무엇일까?
효율성 때문이라는 것이 정답이다. 후행증가 연산자는 변수의 이전 값을 돌려주므로 이전 값을 담을 임시적인 변수를 만들고 파괴하는 과정이 일어나게 된다. 후행 증가로도 선행증가와 동일한 방식의 루프를 만드는 것이 가능하지만, 후행 증가를 사용할 특별한 이유(위의 예제 나온 것 등)가 없다면 항상 선행 증가 또는 선행 감소 연산자를 사용하는 것이 바람직하다.
- 출저 : Game Programming Gems 1 중에서-
'Computer > C/C++' 카테고리의 다른 글
| #pragma (1) | 2007.08.08 |
|---|---|
| vprintf, vsprintf,... 가변 인수 함수. (0) | 2007.08.01 |
| bitset 클래스 (0) | 2007.07.02 |
| 컨테이너 초기화및 Functor 예제 (0) | 2007.02.27 |
| STL lower_bound function 사용하기 Sample... (0) | 2007.02.27 |
설정
트랙백
댓글
글
컨테이너 초기화및 Functor 예제
Retrieved From : http://blog.naver.com/ziralist?Redirect=Log&logNo=7708214
====================================================
가령 int형 배열을 생성시켜서 이를 난수로 초기화하려면 아래
예제처럼 하면될 겁니다만...(참고로 실행환경은 VC60입니다)
#include <iostream>
#include <algorithm>
#include <stdlib.h>
int main( )
{
int nums[5];
std::generate_n(nums, 5, rand); //여기서 난수로 초기화
for(int i = 0; i < 5; i++)
std::cout << nums[i] << ' ';
system("pause");
return 0;
}
이렇게 STL algorithm 헤드파일에 선언된 generate 계열함수를 사용하면
되지만 문제는 세번째 인수인 함수포인터가 반드시 int (*)(void)형의 데이
터 타입을 가져야하기 때문에 random() 같은 함수를 사용하여
일정 범위내의 난수로 초기화하는데 어려움을 겪게 됩니다. 하지만 이 경우
함수객체 Functor를 사용하면 어느정도 융통성을 발휘할 수가 있게 됩니다
일단 rand() 함수를 객체화하려면 함수호출 연산자 ()를 오버로딩하여
class CRand
{
public:
int operator() (void) { return rand();}
};
이렇게 하면 됩니다 이것은 정확한 int rand(void)함수의 객체입니다
여기서 int random(int)와 같은 기능을 하는 객체로 진화시켜 봅니다
class CRandom
{
public:
CRandom(int limit = RAND_MAX) : _limit(limit) {}
int operator() (void) { return rand() % _limit;}
private:
int _limit;
};
이렇게하면 적어도 기능상으로는 random() 함수와 완전히 같아지게 됩니다
또한 동시에 generate 계열 함수에도 성공적으로 적용됩니다 왜냐하면 STL
의 generate() 계열 함수는 템플릿으로 설계되어 있어
그 세번째 인수로 함수명을 넘기면 함수 포인터를, 클래스를 넘기면 클래스
를 파라미터로 받는 generate()가 생성되기 때문입니다. 다만 generate()
는 내부적으로 호출하는 함수의 prototype으로
(*)(void) 데이터형을 요청하기 때문에 generate()에 투입되는 함수객체의
operator() 멤버함수는 반드시 (*)(void) 데이터타입을 지켜줘야 한다는 제
약이 따르게 됩니다 하지만
이러한 제약이 따르는 상황에서도 함수객체, 즉 Functor는 생성자 함수를
사용하여 지맘대로 파라미터를 설정하여 인수로 넘길 수 있게되어, 다채로
운 함수작동 환경을 보다 델리케이트하게 조율할 수 있습니다
일케 알기쉽게 함수포인터의 갑갑함을 벗어나 보다 유연하게 코딩하며 STL의
이른바 "일반화 알고리즘"의 혜택을 만끽할 수있다는 것이 함수객체의 자랑입
니다 또한 함수객체의 멤버함수 operator()를 인라인으로 처리하면
generate()와 같이 내부적으로 루프 속에서 Functor::operator()를 반복적
으로 수행하는 함수의 경우 상당한 속도개선 효과를 기대할 수 있다는 잇점도
따르게 됩니다 아래에 완성된 예제를 싣습니다
#include <iostream>
#include <algorithm>
#include <stdlib.h>
class CRandom
{
public:
CRandom(int limit = RAND_MAX) : _limit(limit) {}
int operator() (void) { return rand() % _limit;}
private:
int _limit;
};
int main( )
{
int nums[5];
std::generate_n(nums, 5, CRandom(100));
for(int i = 0; i < 5; i++)
std::cout << nums[i] << ' ';
system("pause");
return 0;
}
'Computer > C/C++' 카테고리의 다른 글
| #pragma (1) | 2007.08.08 |
|---|---|
| vprintf, vsprintf,... 가변 인수 함수. (0) | 2007.08.01 |
| bitset 클래스 (0) | 2007.07.02 |
| STL - MAP (0) | 2007.02.27 |
| STL lower_bound function 사용하기 Sample... (0) | 2007.02.27 |
설정
트랙백
댓글
글
STL lower_bound function 사용하기 Sample...
#include <string>
#include <set>
#include <algorithm>
#include <vector>
#include <ostream>
#include <list>
#include <iterator>
using namespace std;
class DataTuple {
private:
int sourceID;
int value;
int high;
public:
DataTuple();
DataTuple(int sourceID, int value) {
this->sourceID = sourceID;
this->value = value;
this->high = value+10;
}
bool operator<(const int &a) const
{
return (value<=a);
}
// Getters and Setters
int getSourceID() {return sourceID;}
void setSourceID(int sourceID) {this->sourceID = sourceID;}
int getValue() {return value;}
void setValue(float value) {this->value = value;}
};
DataTuple::DataTuple(){
;
}
class Something{
public:
bool operator()(DataTuple a, DataTuple value) {
return ( a.getValue() <= value.getValue() );
}
};
int main()
// illustrate the use of the generic set algorithms
{
list<DataTuple> a;
list<DataTuple>::iterator ait, bit;
DataTuple c1 = DataTuple(1,1);
DataTuple c2 = DataTuple(2,11);
DataTuple c3 = DataTuple(3,21);
DataTuple c4 = DataTuple(4,31);
a.push_back(c1);
a.push_back(c2);
a.push_back(c3);
a.push_back(c4);
int aaa = 31;
DataTuple sample1;
sample1.setValue(30);
bit = --lower_bound(a.begin(),a.end(),sample1,Something());
cout<<bit->getSourceID()<<endl;
return 1;
}
compare operator에 const같은 것을 안쓰긴 했지만 아무튼...
이런식으로 사용된다.
'Computer > C/C++' 카테고리의 다른 글
| #pragma (1) | 2007.08.08 |
|---|---|
| vprintf, vsprintf,... 가변 인수 함수. (0) | 2007.08.01 |
| bitset 클래스 (0) | 2007.07.02 |
| STL - MAP (0) | 2007.02.27 |
| 컨테이너 초기화및 Functor 예제 (0) | 2007.02.27 |
설정
트랙백
댓글
글
원격 데스크탑에서 MATLAB 사용하기
----------------------------------------------------------------------------
제목 그대로 이번에 소개 해 드릴 간단한 팁은 원격 데스크톱 연결시 실행이 제한된 공학용 프로그램을 실행 가능하게 하는 방법입니다. 그 중
에서도 아래의 응용 프로그램들은 공대생들중 전자과에 적을 두고 있는 분들이시라면 사용 빈도가 상당히 높으리라 생각합니다.
그런데 위의 공학 프로그램들은 하나의 공통점이 있습니다. 바로 터미널에서의 프로그램 실행이 제한되어 있다는 겁니다. 공대생 분들은 다들
공감 하시리라 생각 합니다만, 급하게 공학 프로그램을 사용해서 레포트를 제출 해야 하는 상황이 닥쳐도, 라이센스 문제로 인해 학내 전산실에
는 위와 같은 공학용 프로그램이 설치되어 있는 PC 는 한정되어 있기 때문에 이러지도 저러지도 못하는 상황을 겪게 됩니다. 그래서 급하게
집에 설치되어 있는 PC 로 터미널 접속하여 프로그램 실행을 시도 해 보면 아래와 같은 경고 메세지가 출력이 되죠.
( 윈도우 XP 에서 지원하는 터미널 서버는 글꼴 다듬기 기원을 지원하지 않아서, 저처럼 맑은 고딕 글꼴을 사용하면 터미널 상에서는 글꼴의 중
간계조를 제외한 나머지 색 성분만 출력이 되게 됩니다 ) 다시 본론으로 돌아와서, 마음도 급한데 저런 메세지를 보게되면 "도대체 왜 막아 놓은
거야! 바빠 죽겠는데" 를 연발하며 짜증만 내게되죠. 이 문제를 해결할 수 있는 매우 간단한 팁을 알려 드리기 전, 도대체 왜 프로그램 제작사에
서 터미널 상에서의 프로그램 실행 기능을 제한 해 놓았는지 그 이유가 궁금하시지 않나요?
아시는 분은 아시겠지만, 첫번째로 언급했던 MATLAB 의 경우 라이센스의 형태에 따라 상업용, 교육용으로 버전이 나뉘어 있는데요. 상업용 버
전의 경우 모든 패키지를 설치 할 경우 가격이 수백만원에 달합니다. 이에 반해 교육용은 상대적으로 저렴해서 수십만원 이내에서 구입이 가능
하구요. 그런데 MATLAB 같은 경우는 여타 프로그램에 비해서 상대적으로 시스템의 그래픽 성능 의존도가 낮은 편입니다. Iteration 같은 것을
수행할 때에도 실행 PC 의 연산 속도가 중요할 뿐이죠. 즉 프로그램을 사용할때 로컬에서 실행하나, 터미널에서 실행하나 사용 환경에 있어서
별반 차이가 없다는 예기가 됩니다. 이는 OrCAD 도 마찬가지구요. 조금 불편하긴 하지만 두 프로그램 모두 터미널에서 아무 문제 없이 사용 할
수 있습니다. 이 문제는 프로그램 제조사에게 있어서 굉장히 중요한 문제인데요. 예를 하나 들어 보겠습니다. 만약 제가 회사를 운영하고 있는
사장이고, 위와 같은 공학용 툴을 사용하여 제품을 개발 한다고 가정한다면 갑자기 들이 닥칠지도 모르는 불법 소프트웨어 단속을 피하기 위해
서라도 어쩔수 없이 설치된 PC 의 대수만큼 해당 프로그램의 라이센스를 구매 해야만 합니다. 그러나 터미널 접속으로 프로그램 실행이 가능하
고 또한 그 성능에 있어서 별반 차이가 없다면 ( 규모가 작은 ) 기업일수록 편법을 쓰게 되겠죠. 단속을 대비하여 해당 프로그램은 1~2 Copy 정
도만 구매하고 실제 작업은 터미널로 하면 되니깐요. 바로 이런 이유들로 인해 점차 터미널 사용 환경이 좋아지고 널리 보급 되고 있는 시점에
서 프로그램 제작사에서 터미널을 통한 프로그램 실행을 적극적으로 제한 하려고 하는 것입니다.
그런데, MATLAB 에서 내보내는 오류 메세지를 읽어보면 중간단락 정도에 왠지 익숙한 회사의 웹 사이트가 눈에 띕니다.
바로 Macrovision 이라는 회사인데요. 이 회사는 하드웨어 / 소프트웨어 컨텐츠 보안 솔루션을 개발해서 먹고사는 회사입니다. 이 회사가 대박이
난건 1980년대 말, VHS 시절 메이져 영화사들과 계약을 체결하여 VHS 복제 방지 솔루션을 제공 한 것이 그 계기였습니다. 한때 VHS 복사 방지
체계를 "매크로 비전이 걸려 있어" 라고 했을 정도로 끝발을 날린 회사죠. 사족이지만, 저도 어린시절 친구에게서 디즈니 만화 비디오를 빌려와
서 공 테이프에 복사하려다가 저 회사의 프로텍션 때문에 실패한 아픈 기억이 있습니다. 물론, 복사 방지 해제기가 얼마 지나지 않아서 나오긴
했습니다만, 하드웨어 기반의, 상대적으로 고가로 암암리에 판매되는 장치였기 때문에 그다지 널리 보급 되지는 못했습니다. ( 참고로 해제기의
경우 매크로 비전 신호, Vertical Blanking Signal 을 오류가 없는 신호인 원래 검정색으로 되돌리는 회로로 구성되어 있습니다 ) 결론적으로 이
회사의 VHS 프로텍션은 일반인의 접근을 막아낸, 꽤 성공적인 솔루션이었습니다. 여튼, 이를 계기로 Macrovision 은 5대 메이저 영화사들의 전
폭적인 지지와 신뢰를 얻게 되고, 현재는 메이저 영화사들이 제시하는 표준 복제 방지 솔루션으로 지정되기에 이릅니다. 앞서 언급했듯 이 회사
는 하드웨어 기반의 컨텐츠 보안 솔루션 뿐만 아니라 소프트웨어 기반의 컨텐츠 보안 솔루션도 판매하고 있는데요, 그 중 하나가 Macrovision
社가 특허를 가지고 있는 FLEXnet Publisher 입니다.
http://www.macrovision.com/products/flexnet_publisher/enhanced_security_module.shtml
링크에도 소개 되어 있듯이, 모듈에서 지원하는 중요한 기능 중 하나가 터미널 서버에서의 응용 프로그램 실행을 막는 기능인데요. 이 기능을
아래의 간단한 팁으로 쉽게 무력화 시킬 수 있습니다. :)
터미널 상에서의 응용 프로그램 실행제한은 크게 두가지 방법으로 해제가 가능합니다. 첫번째는 직접 배치파일을 만들어서 응용 프로그램을
실행하는 방법, 두번째는 프로그램의 속성 탭에서 직접 호환성 모드를 수정 해 주는방법 입니다. 먼저 첫번째는 다음과 같은 배치파일을 생성함
으로서 실행이 가능하게 하는 방법입니다. ( 아래에 제시된 내용은 Matlab 기준입니다 )
@echo off
setlocal
set MATLAB=C:\Program Files\MATLAB71\bin\win32\MATLAB.exe
set REGKEY=HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
reg add "%REGKEY%" /f /v "%MATLAB%" /t REG_SZ /d NT4SP5 > nul
start "" "%MATLAB%"
reg delete "%REGKEY%" /f /v "%MATLAB%" > nul
그리고 두번째 방법은 프로그램의 속성탭에서 프로그램의 실행 방법을 호환성 모드로 바꿔주는 방법입니다.
위의 그림처럼 Windows NT 4.0 호환성 모드로 실행하시면 아무런 문제 없이 응용 프로그램이 구동 됩니다. 생각보다 너무 간단한 방법으로 문
제가 해결되죠? 조금 더 설명을 드리면, 호환성 모드의 경우 Windows 에서 하위 OS 에서 동작하는 프로그램의 상위 호환성을 구현하기 위해
별도의 계층을 만들어 응용 프로그램을 실행하는 방법입니다. Windows 2000 으로 넘어 오면서 응용 프로그램의 동작 세션 확인이 가능해 졌
는데요, 위의 프로그램들은 연결 세션을 확인하여 프로그램 실행을 허가, 불허 하는 방식으로 프로텍션이 동작합니다. 다만, 단점도 있는데요. 확
인결과 호환성 모드로 실행하면 실행속도가 아주 약간 느려지는 것을 확인 했습니다. ( Matlab 에서 간단한 Iteration 수행으로 확인 ) 그러나 거
의 체감 할 수 없는 수준이기에 사용에 아무런 문제가 없다고 생각합니다. 추가적으로, 응용 프로그램 호환성 기술에 대해 궁금하신 분이 계시
면 아래의 링크를 참조 해 주세요.
http://www.microsoft.com/korea/technet/prodtechnol/winxppro/plan/default.asp
정말 간단한 팁 이지만 이 글이 레포트 쓰느라 고생하시는 공대생들에게 도움이 되었으면 좋겠네요. :)
'Computer > ETC' 카테고리의 다른 글
| Microsoft Word 단축키 (1) | 2007.03.31 |
|---|---|
| ARP (Address Resolution Protocol ) (0) | 2007.03.14 |
| + 익스플로러 새창이 안뜰때의 대처법 (2) | 2005.10.10 |
| 윈도우 XP 팁들. (1) | 2005.07.06 |
| re: 소노마 방식은 무엇이고 ddr2는 무엇이지요?? (5) | 2005.05.10 |
설정
트랙백
댓글
글
Linux 방화벽 설정하기 (IPtables)
1. vi /etc/sysconfig/iptables 를 수행 후 편집
2. root에서 iptables 명령을 활용한다.
설정한 후,
/sbin/service iptables restart
를 수행하여 방화벽 재시작.
'Computer > Linux Tips' 카테고리의 다른 글
| gcc로 윈도우즈 API 프로그램 만들기 (0) | 2007.03.15 |
|---|---|
| ftp mget 사용법 (0) | 2007.03.07 |
| Linux Network Emulator (0) | 2007.03.06 |
| Cygwin에 ACE Library 설치하기 (0) | 2007.02.24 |
| Open Source Streaming Server Video Lan setting (3) | 2007.02.24 |
설정
트랙백
댓글
글
Cygwin에 ACE Library 설치하기
Versions: Cygwin CYGWIN_NT-5.1
ACE 5.5.1
g++ 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
(cmake is available by cygwin project)
Before making ACE
- Get and decompress tar ball (e.g. /work/ACE_wrappers).
- Set an environment variable;
export $ACE_ROOT=/work/ACE_wrappers
- Create some symbolic links;
cd $ACE_ROOT/include/makeinclude
ln -s platform_cygwin32.GNU platform_macros.GNU
cd $ACE_ROOT/ace ln -s config-cywin32.h config.h
Setting include path
Compiling ACE generates many errors by default of cygwin. It is because the preprocessor of g++ on cygwin behaved in a strange way. It regards the lines "signal.h" or so on in /usr/include/*.h files as the same name files in ACE.
Solution: To avoid this errors, you should export an environment variable like:
export CPLUS_INCLUDE_PATH
=/usr/include:/usr/local/include:$CPLUS_INCLUDE_PATH
and
make
Then you can compile ACE without any errors. This issue is not declaired at the official homepage of ACE/TAO.
Local Installation
To install ACE to your cygwin,
cp -r $ACE_ROOT/ace /usr/local/include
cp $ACE_ROOT/lib/* /usr/local/lib
To tell your cygwin where is the ACE dynamic libraries,
export PATH=/usr/local/lib:$PATH"
cygwin cannot search the libraries without setting PATH variable properly. It's a specification of cygwin.
Additional step to test ACE:
cd $ACE_ROOT/tests
make
perl run_test.pl
'Computer > Linux Tips' 카테고리의 다른 글
| gcc로 윈도우즈 API 프로그램 만들기 (0) | 2007.03.15 |
|---|---|
| ftp mget 사용법 (0) | 2007.03.07 |
| Linux Network Emulator (0) | 2007.03.06 |
| Linux 방화벽 설정하기 (IPtables) (1) | 2007.02.24 |
| Open Source Streaming Server Video Lan setting (3) | 2007.02.24 |
설정
트랙백
댓글
글
Open Source Streaming Server Video Lan setting
Open source streaming server인 Video Lan Server를 Fedora Core 5 에 설치를 했다.
http://www.videolan.org/doc/
http://www.videolan.org/vlc/download-fedora.html
http://www.videolan.org/doc/streaming-howto/en/ch04.html#id294801
http://www.videolan.org/doc/vls-user-guide/en/ch02.html#id289076
http://www.videolan.org/vlc/streaming.html
다운로드와 기타 등등은 상기 사이트 참조,
Install 중 삽질
Error: Missing Dependency: libgnutls.so.11(GNUTLS_REL_1_0_9) is needed by package vlc
Error: Missing Dependency: libdbus-1.so.1 is needed by package vlc
Error: Missing Dependency: libgnutls.so.11 is needed by package vlc
요런 에러가 나서,
http://forum.videolan.org/viewtopic.php?t=31880&highlight=libdbus1++needed+package+vlc
http://forum.videolan.org
위 사이트 들을 참조하여,
이렇게하니 해결됨.
'Computer > Linux Tips' 카테고리의 다른 글
| gcc로 윈도우즈 API 프로그램 만들기 (0) | 2007.03.15 |
|---|---|
| ftp mget 사용법 (0) | 2007.03.07 |
| Linux Network Emulator (0) | 2007.03.06 |
| Linux 방화벽 설정하기 (IPtables) (1) | 2007.02.24 |
| Cygwin에 ACE Library 설치하기 (0) | 2007.02.24 |
설정
트랙백
댓글
글
아이디어를 개념화하는 방법?
Scenario, Concept, Technology의 3가지 원으로 되어있는 다이어그램으로 만들어보면 재미있게 나오는근영.
랩 세미나중에 잠시 메모.
'Computer > Research' 카테고리의 다른 글
| Computer System Design Principles (1) | 2007.03.07 |
|---|---|
| CS... 어떻게 공부하는가? (1) | 2006.04.28 |
| 석사과정에 입학하여 박사학위를 받을 때까지 최단기간은 얼마나 됩니까? (2) | 2006.01.05 |
| Impact Factor의 정의와 특징 (2) | 2005.09.12 |
설정
트랙백
댓글
글
CS... 어떻게 공부하는가?
1. 논문 Review 요령?
Motivation만 읽고 '같은 상황에서 나는 어떻게 해결할 것인가'를 궁리.
이후 읽으며 비교. 계속 훈련해라. -> 논문의 idea와 비슷해질때까지? -_-
2. 다양한 지식 축적.
자신과 상관없는 분야로 보이는 seminar, ... 등에도 참석. 읽고,...!
Read Widely..
3. 최신분야를 알아야한다.
지금 다른 사람은 어디까지 했는가?
최근 논문, Conference, ... 등등 주의깊게.
ACM -> CACM
IEEE -> Computer 등의 학술잡지 구독해라.
4. 여러사람과 같이 일하는 법을!
자기 생각을 남들에게 자주 표현하도록 해라.
Design 과정에서 남들과 계속 feedback해라.
5. 시간싸움이다. 평소에 기초 Skill정도는 연마가 되어있어야.
6. 논문 많이 읽어라..
-- OS 수업시간. by 김진수 교수님
'Computer > Research' 카테고리의 다른 글
| Computer System Design Principles (1) | 2007.03.07 |
|---|---|
| 아이디어를 개념화하는 방법? (2) | 2006.07.10 |
| 석사과정에 입학하여 박사학위를 받을 때까지 최단기간은 얼마나 됩니까? (2) | 2006.01.05 |
| Impact Factor의 정의와 특징 (2) | 2005.09.12 |
설정
트랙백
댓글
글
석사과정에 입학하여 박사학위를 받을 때까지 최단기간은 얼마나 됩니까?
카이스트도 전기전자 홈피가 더 잘되어있는듯하다 ;;
CS는 왜들 홈피에 신경을 안쓸까? -_-
-----------
A) 석사과정 입학 1 년 후 성적이 우수하면 석사/박사통합과정으로 진학할 수 있습니다. 이 경우 박사학위요건에 필요한 교과목 이수학점을 2 년간 채우고 동시에 학위논문을 작성하고 통과되면 총 3 년이 소요됩니다. 이상은 이론적인 최단기간이며 일반적으로는 여러가지 이유에서 이것보다 오래 소요됩니다.
전일제 학생의 경우 한 학기 수강 학점은 최소 9 학점, 최대 12 학점이고, 학과장 승인이 이으면 15 학점까지도 가능합니다. 시간제 학생은 최소 3 학점, 최대 8 학점입니다.
--------------
이론상 3년이라... 3년보다 더 빨리 박사까지는 불가능한건가?
+ 3년에 석박사를 마치는것도 불가능인가?
여러가지 이유는 뭘까? -_-
대학원 생활은 궁금한게 너무 많아횻! ㅡㅡ;
'Computer > Research' 카테고리의 다른 글
| Computer System Design Principles (1) | 2007.03.07 |
|---|---|
| 아이디어를 개념화하는 방법? (2) | 2006.07.10 |
| CS... 어떻게 공부하는가? (1) | 2006.04.28 |
| Impact Factor의 정의와 특징 (2) | 2005.09.12 |