728x90
반응형
728x90
반응형
728x90
반응형
///
/// If the object is const, both the function and the variable become read-only.
/// (Korean) 객체가 const 인 경우, 함수와 변수 모두 읽기 전용 값이 된다.
///
class ConstTest
{
public:
ConstTest() { a = 10; }
int a;
const int b = 1000;
public:
int get_a_const() const { return a; }
int get_a() { return a; }
int get_b() { return b; }
};
void test( const ConstTest* pConst, ConstTest* pNonConst )
{
int ret1 = pConst->get_a_const(); /// OK
// int ret2 = pConst->get_a(); /// COMPILE ERROR
int ret3 = pNonConst->get_a_const(); /// OK
int ret4 = pNonConst->get_a(); /// OK
}
int main(int argc, char* argv[])
{
ConstTest ct1, ct2;
test( &ct1, &ct2 );
const ConstTest ct3;
ct3.get_a_const(); /// OK
// ct3.get_a(); /// COMPILE ERROR
ConstTest ct4;
ct4.get_b(); /// OK
// ct4.b = 300; /// COMPILE ERROR
const ConstTest ct5;
// ct5.a = 100; /// COMPILE ERROR
return 0;
}
728x90
반응형
728x90
반응형

맑은 고딕 글꼴이 나오기 전, 윈도에서 가장 일반적으로 사용되어 오던 글꼴이 Fixedsys 라는 것입니다.
지금도 물론 고정형 글꼴중 하나로 윈도에서 지원되고 있습니다.
이 글꼴의 truetype 형 글꼴을 제공해 주는 싸이트와 글꼴은 아래와 같습니다.
(라이센스는 GPL 라이센스 적용.)

http://fixedsys.moviecorner.de

fixedsys500c.zip
다운로드

728x90
반응형

'글꼴' 카테고리의 다른 글

글꼴 (나눔 D2 KoPub)  (0) 2024.04.10
Fixedsys 글꼴 (Truetype)  (0) 2011.05.01
Windows 명령 프롬프트(cmd.exe) 글꼴 변경 및 추가 방법  (0) 2010.09.23
728x90
반응형
 
요약하자면, iPhone 3 App 개발 시 가용한 메모리 양(memory size)은
  • 3GS 기준 총 128MB
  •  process 가용양 : 46MB
 
728x90
반응형

'iOS' 카테고리의 다른 글

iOS Objective-C Hello World  (0) 2024.10.27
728x90
반응형
// code from Dr.Dobbs (http://www.drdobbs.com/)
// StreamingException.h
//
#ifndef STREAMING_EXCEPTION
#define STREAMING_EXCEPTION
#include <iostream>
#include <sstream>
#include <memory>
#include <stdexcept>
class StreamingException : public std::runtime_error
{
public:
StreamingException() :
std::runtime_error(""),
ss_(std::auto_ptr<std::stringstream>
(new std::stringstream()))
{
}
~StreamingException() throw()
{
}
template <typename T>
StreamingException & operator << (const T & t)
{
(*ss_) << t;
return *this;
}
virtual const char * what() const throw()
{
s_ = ss_->str();
return s_.c_str();
}
private:
mutable std::auto_ptr<std::stringstream> ss_;
mutable std::string s_;
};
#endif
// testException.cpp
#include "StreamingException.h"
int main (int argc, char * const argv[])
{
try
{
if (5 != 3)
throw StreamingException() << 5 << " is not equal to " << 3;
}
catch (const StreamingException & e)
{
cout << e.what() << endl;
}
return 0;
}
728x90
반응형
728x90
반응형

복수개의 탐색기간의 파일 복사/이동, 여러 경로의 파일 보기 등등이 가능한 프로그랩인 Q-Dir 4.16 입니다...




728x90
반응형

'정보기술' 카테고리의 다른 글

Apache FOP example : Generate a PDF  (0) 2013.10.29
Windows XP 에서 iCloud Control Panel 설치(INSTALL)  (4) 2011.10.25
VMWare Fusion Windows 설치와 F8 키  (0) 2009.08.06
IEEE 1471  (0) 2009.05.18
Ghostscript & GSview for Windows  (4) 2009.01.13
728x90
반응형

1> Wireshark 1.2.3 (SVN Rev 30730) 를 다운받는다.
   http://media-2.cacetech.com/wireshark/osx/Wireshark%201.2.3%20Intel.dmg

2>  Readme  문서의 설치 절차에 따라 설치한다.

 2-1>  Wireshark.appApplications 에 드래그앤 드랍
 2-2> Utilities  / Command Line 경로아래에 있는 것들을  /usr/local/bin 아래로 복사한다.
             권한문제가 있기 때문에,
             sudo cp * /usr/local/bin 등으로 복사한다.

 2-3> ChmodBPF  경로를 StartupItems 로 드래그앤 드랍한다.
         (그안의 실행파일을 실행하면 권한 문제를 해결해 준다...)

3> wireshark.app 을 실행한다. 실행시에 X11이 함께 실행된다.

4> 실행하면 다음과 같은 경고 창이 계속 뜬다. (약간 버그...)

The following errors were found while loading the MIBS:
-:0 1 module-not-found failed to locate MIB module `IP-MIB'
-:0 1 module-not-found failed to locate MIB module `IF-MIB'
-:0 1 module-not-found failed to locate MIB module `TCP-MIB'
-:0 1 module-not-found failed to locate MIB module `UDP-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMPv2-MIB'
-:0 1 module-not-found failed to locate MIB module `RFC1213-MIB'
-:0 1 module-not-found failed to locate MIB module `IPV6-ICMP-MIB'
-:0 1 module-not-found failed to locate MIB module `IPV6-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-COMMUNITY-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-FRAMEWORK-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-MPD-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-NOTIFICATION-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-PROXY-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-TARGET-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-USER-BASED-SM-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-USM-DH-OBJECTS-MIB'
-:0 1 module-not-found failed to locate MIB module `SNMP-VIEW-BASED-ACM-MIB'


5> 그럴 경우는 다음과 같이 처리한다.
Edit / Preferences 메뉴를 선택 ...
• Wireshark: Preferences / Name Resolution 선택
SMI (MIB and PIB) paths 에서 Edit 버트 클릭
SMI Paths 창에서 the New 버튼 클릭
SMI Paths: New 창의 name 텍스트 박스에서, /usr/share/snmp/mibs/ 를 입력

6> wireshark 를 재시작한다.

7> 성공적인 설치 상태이면, 캡춰 옵션에서 네트워크 카드가 잡힌다. (en0, en1 등)
 
--------------
...위와 같은 과정으로 해도 문제가 있는 이는
...리플을 달아주십시오...
728x90
반응형
728x90
반응형

※ 하단 글은 2009년에 작성된 글이며, Windows에서 Linux를 원격으로 연결하는 방법은 아래 링크가 더 유용합니다.


http://j2doll.tistory.com/532  Wireshark와 Putty로 원격 Linux 패킷 캡춰하기



[글/2009년]


Packet Sniffing 등의 용도로 사용되는 ethereal의 후예인 Wireshark는 무료로 제공되기 때문에 더더욱(?) 유용하면서 많이 사용되는 프로그램이다. 그리고, GTK를 지원하므로 윈도우즈 이외에도 리눅스, 맥 등에서 사용가능하다. 자세한 Wireshark 사용 방법은 다른 글을 참조하고, 이 글은 Wireshark를 사용할 줄 아는 이가 원격 타겟의 패킷 정보를 알고 싶은 경우만을 기술한다.

 일단 대상은 다음을 대상으로 한다.

-       Linux : x86, 32bit

-       Winpcap 4.0

-       Wireshark 0.99

 

 * 원격 Wireshark 연결 *

 

 1> 테스트 파일은 x86(i386) 32bit Linux 만 지원

 

 2> 타겟 linux에서 rpcapd 실행

 

   # ./rpcapd -n

 

    -n : 사용자 계정없이 연결

    -h : 도움말 출력

    -4 : ipV4만 지원 (ipv6는 지원하지 않는다.)

   : 윈도우즈 Wireshark일 경우, 
     C:\Program Files\WinPcap\rpcapd.exe 를 실행하면, 인자는 동일하다.

 

  3> 실행후, 데몬인 rpcapd는 포트 2002 tcp서버로 작동한다.

     ( -p 옵션을 주면 포트를 조정할 수 있다.)

 

  4> 원격지에 wireshark-setup-0.99.8.exe 를 설치한다.

     (wireshark 버전 주의)

 

  5> capture options / capture / interface

    

     rpcap://192.168.0.38/eth0

 

    의 형식으로 입력한다.

    (192.168.0.38 ip주소이고, eth0는 타겟의 이더넷 카드 정보이다.)
    물론, 존재하지 않는 이더넷인 경우 접속이 실패한다.



 

  6> 연결이 성공하면, wireshark capture상태가 된다.

     (필요하면, capture filter를 설정하여 정보를 걸러서 보도록 한다.)

    

     not host 192.168.50.25

     (위의 Wireshark 필터는 192.168.50.25와 통신하는 내용은 캡춰하지 않음)

 

 

RemoteWireshark.7z.001

RemoteWireshark.7z.002

RemoteWireshark.7z.003

 


rpcapd.gz

 


 


728x90
반응형
728x90
반응형



 wxWidgets(=wxWindows)는 크로스 플랫폼을 지원하는 오픈 소스 C++ 라이브러리이다. 라이센스는 자체 라이센스를 가지고 있으며, LGPL 을 기반으로 한다고 보면 된다. 역시 이러한 오픈 소스 계열의 가장 큰 단점은 문서 및 교육 문제인데, 아마존에 가면 몇 권의 책이 있음을 알 수 있고, 최근에는 국내에서도 개발 소개 서적이 나와서 정보를 얻기 조금 용이해졌다. 하지만 역시 많은 기능 활용을 원한다면 온라인 도움말이 가장 큰 도움을 줄 것이다.

 wxWindows는 이십년 가까운 긴 개발/테스트를 기능을 가진 매우 안정적인 라이브러리이며, 상용으로 존재하는 노키아의 Qt와 비슷한 용도로 사용한다고 보면 될 것이다. 물론 최근에는 Qt도 LGPL이 적용되도록 공개된 상태에서 IDE가 지원하는 SDK까지 무료로 제공해 주므로, wxWindows와 병용해서 사용해 보는 것도 좋을 것이다.

  wxWindows의 IDE는 다양한 형태로 존재하는데, 윈도에서 개발시에는 주로 Visual Studio가 권장된다. 물론 VS는 MS에서 천문학적인 액수를 투자하여 만드는 제품이기에 완성도가 높을 수 밖에 없고, 3rd 파티 도구도 많아서 사용하기에 가장 좋다고 볼 수 있다. (최근에는 Express 버전을 MS에서 무료 공개해 주고 있어서 이것을 사용하면 라이센스 문제도 없다.)

 또한 eclipse를 CDT와 사용하는 방안도 있다. eclipse는 일단 JVM 도구이기에 편하게 개발하려면 개발 리소스가 매우 많이 필요한 단 점도 있지만, 수많은 유용한 플러그인이 존재하는 장점이 있다.

  그리고 이 글에서 소개하는 Code::Blocks는 오픈소스 기반의 크로스 플랫폼 IDE 이다. 단순히 wxWindow뿐 아니라 종합적인 C++ 코딩 및 GUI 디버깅 환경을 제공해 주므로 유리한 점이 많다. 그리고, 리눅스/맥 등의 타 OS에서도 바로 IDE가 지원되므로 프로젝트 적용 시에 매우 편리하다. 단지, 윈도우즈에서 사용하려면 cygwin, mingw 등의 gcc 지원 환경에서 빌드를 할 수 있도록 해야 하므로, 설치 시에 불편함이 있다.
 따라서 좀더 손쉽게 Code::Blocks와 wxWindows를 설치하는 방법을 소개해 본다.

 1) Code::Blocks는 mingw를 내장한 32비트 윈도우즈용 배포본을 현재 제공하고 있다. (ver.8.02)
     codeblocks-8.02mingw-setup.exe 라는 형태로 되어 있다.
     (http://www.codeblocks.org/downloads)

 2) wxWidgets는 공식 홈페이지에서는 소스 파일로만 제공해주고, 그것을 받아서 환경별로 빌드하여
    사용하는 방법이 기본 사용 방법이다. 하지만, 우리는 그 귀찮은 과정(?)을 일소 하기 위하여
    wxPack이라는 미리 빌딩된 wxWindows를 사용하기로 한다.
    (http://wxpack.sourceforge.net/)
     Downloads에 보면 최신 버전의 wxPack이 있지만, Code::Blocks 8.02 설치시에 함께 설치되는
     MinGW의 gcc버전이 3.4.5이기에 그것에 맞는 wxPack의 다운로드하기로 한다.
     글을 읽어 보면 2008년 여름 버전부터 gcc4지원을 위하여 포팅/테스트 작업을 하였다는 것을
     알 수 있다. 그래서 2.8.7.03의 2007년 마지막 버전을 받기로 한다.
     wxPack의 버전은 빌드한 wxWidgets의 버전이기도 하다.
     (wxPack_v2.8.7.03.exe)

 3) 설치는 아무거나 순서없이 한다.
    wxPack에는 gcc빌드 버전만 설치하면 되고, Visual Studio용 빌드는 필요하면 설치하라.

 4) Code::Blocks를 실행 후, 새 프로젝트를 시작하자.

 5) 새 프로젝트 생성 위자드에서 wxWidgets 프로젝트를 선택하여 새로 만들자.

 6) 각 과정을 따라가면 아무 문제가 없다가, $(#wx) 라는 wxWidgets 경로를 찾는 부분에서
     설정이 안 될 것이다. 그때, wx의 경로로 wxPack의 wxWidgets가 설치된 경로를 잡아준다. 
    (예> C:\SourceCode\Libraries\wxWidgets2.8 )
    Code::Blocks 메뉴 Settings / Global variables 에서 확인 또는 추가하면 된다.

 7) 정상적인 인식이 되었는지는 빌드나 디버깅, 런을 통하여 wxWidgets 프로그램이 
     작동하는 것으로 확인 가능하다...
 
c.f> 다운이 잘 안되는 분을 위해 파일을 모아서 올려 본다. (7-zip 압축)

728x90
반응형
728x90
반응형

 vmware fusion 에서 윈도우를 설치시 다음과 같은 문제가 있다.
윈도우는 설치시, 사용자가 동의함을 F8 키를 눌러서 처리하게 해놓았다.
그런데 F8 키는 맥에서 화면 전환 또는 재생/정지로 사용되는 단축키이다.
이걸 해소하기 위한 방법은 여러 가지가 있으며, 아무 것이나 가능한 것을 사용하면 된다.

1) VMware Fusion (Menu Bar) > Preferences... > Enable Mac OS keyboard shortcuts 의 체크박스를 푼다.
2) USB 지원 키보드를 연결 후, 윈도우 키(윈도모양의키)와 F8 을 동시에 눌러라.
3) 설치 이미지(주로  *.iso)가 아예 F8 키 누름 부분을 건너서 설치하는 버전도 있다. 그것으로 해볼 것.
4) 미리 설치해둔  fusion 이미지 기반으로 해도 된다.

 
728x90
반응형
728x90
반응형

Google ctemplate

Google의 ctemplate은 C++ 기반의 템플릿 엔진으로, 템플릿 파일과 데이터 딕셔너리를 활용하여 동적인 텍스트 출력을 생성합니다.

이를 통해 코드와 템플릿을 분리하여 유지보수성과 재사용성을 높일 수 있습니다.

사용 방법:


  1. 템플릿 파일 작성: example.tpl과 같은 템플릿 파일에 템플릿 요소를 정의합니다. 예를 들어:

    Hello {{NAME}},
    You have just won ${{VALUE}}!
    {{#IN_CA}}Well, ${{TAXED_VALUE}}, after taxes.{{/IN_CA}}
    

    여기서 {{NAME}}, {{VALUE}}는 템플릿 요소이며, {{#IN_CA}}...{{/IN_CA}}는 조건부 섹션입니다.


  1. 딕셔너리 생성 및 값 설정: C++ 코드에서 ctemplate::TemplateDictionary를 사용하여 딕셔너리를 생성하고, 템플릿 요소에 대응하는 값을 설정합니다.

    cpp

    ctemplate::TemplateDictionary dict("example");
    dict.SetValue("NAME", "John Smith");
    int winnings = rand() % 100000;
    dict.SetIntValue("VALUE", winnings);
    dict.SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.83);
    if (1) {
        dict.ShowSection("IN_CA");
    }
    

    여기서 SetValue는 문자열 값을, SetIntValue는 정수 값을, SetFormattedValue는 포맷팅된 값을 설정합니다. ShowSection은 조건부 섹션을 표시할지 여부를 결정합니다.


  1. 템플릿과 딕셔너리 결합: ctemplate::Template 클래스를 사용하여 템플릿 파일을 로드하고, Expand 메서드를 통해 딕셔너리와 결합하여 최종 출력을 생성합니다.

    cpp

    ctemplate::Template* tpl = ctemplate::Template::GetTemplate("example.tpl", ctemplate::DO_NOT_STRIP);
    std::string output;
    tpl->Expand(&output, &dict);
    std::cout << output;
    

    이렇게 하면 템플릿 파일의 템플릿 요소들이 딕셔너리에서 설정한 값으로 치환되어 최종 결과가 출력됩니다.


결과 예시:

Hello John Smith,
You have just won $10000!
Well, $8300.00, after taxes.

이러한 방식으로 ctemplate을 활용하면 코드와 템플릿을 분리하여 유지보수성을 높이고, 다양한 출력 형식을 유연하게 생성할 수 있습니다.

728x90
반응형
728x90
반응형
IEEE 1471 은 십년정도된 아키텍쳐(software architecture)에 관한 표준안이다.


 이는 시스템과 아키텍쳐에 관한 정의부터 시작하여, 세부적인 이해관계자들과 각각의 관심, 관점들,
그리고 이들을 표현할 수 있는 타당성있는 아키텍쳐 기술 에 관하여 이야기한다.
물론 이를 통한 최종적인 모델에 대한 표현까지를 소프트웨어 아키텍쳐의 영역으로 보고 있다.
 

728x90
반응형
728x90
반응형

C++ 함수 가림 현상(name hiding)과 using 키워드 활용하기

C++에서 함수 오버로딩(function overloading) 은 동일한 함수 이름을 사용하면서도 서로 다른 매개변수 목록을 통해 다양한 기능을 구현할 수 있게 해주는 기능입니다.

그러나 상속 관계에서 파생 클래스가 기본 클래스의 함수를 재정의하거나 새로운 함수를 추가할 때, 의도치 않게 기본 클래스의 함수들이 가려질 수 있습니다.

다음 예제를 통해 이러한 상황을 살펴보겠습니다:

cpp

#include <stdio.h>

class B {
public:
    void f(int a) { puts("B::f(int)"); }
    void f(double a) { puts("B::f(double)"); }
};

class D : public B {
public:
    void f(char* a) { puts("D::f(char*)"); }
};

int main() {
    D d;
    d.f("");    // 정상 작동: D::f(char*) 호출
    d.f(1);     // 오류 발생: B::f(int) 접근 불가
    d.f(2.3);   // 오류 발생: B::f(double) 접근 불가
    return 0;
}

위 코드에서 D 클래스는 B 클래스를 상속받고 있으며, D 클래스는 char* 타입의 매개변수를 받는 f 함수를 새롭게 정의하고 있습니다.

그러나 D 클래스의 객체 d를 통해 f(1)이나 f(2.3)을 호출하려 하면 컴파일 오류가 발생합니다.

이는 D 클래스에서 f 함수를 새롭게 정의하면서 기본 클래스 B의 동일한 이름을 가진 함수들이 가려졌기 때문입니다.

이러한 문제를 해결하려면 파생 클래스에서 기본 클래스의 함수를 명시적으로 가져와야 합니다. 이를 위해 using 키워드를 활용할 수 있습니다:

cpp

class D : public B {
public:
    using B::f; // 기본 클래스의 f 함수를 가져옴
    void f(char* a) { puts("D::f(char*)"); }
};

이렇게 하면 D 클래스의 객체를 통해 B 클래스의 f(int)f(double) 함수도 호출할 수 있게 됩니다.

따라서, 상속 관계에서 함수 오버로딩을 사용할 때는 기본 클래스의 함수들이 가려지지 않도록 주의해야 하며, 필요 시 using 키워드를 활용하여 기본 클래스의 함수를 명시적으로 가져와야 합니다.

728x90
반응형

+ Recent posts