C++ 상속, 다이아몬드 문제란? 그리고 피하는 방법 위 그림은 C++ 상속, 다이아몬드 문제를 이해하는 데 도움이 됩니다. 클래스 A에서 파생되는 클래스 B와 C가 있다고 가정합니다. 그리고 C++ 상속(다이아몬드를 유발하는 다중 상속)으로 클래스 B와 C의 파생 클래스 D도 생성합니다. (상상만으로도 한숨 나오는 C++ 상속 구조입니다) 여기서 C++ 상속, 다이아몬드 문제의 발생 이유가 나타납니다. 위 그림을 토대로 구체적인 코드를 작성해 보겠습니다. 123456789101112131415--Animal 클래스는 윗 그림의 클래스 D와 같습니다.-- class Animal { -- ... -- }; // base class{ int weight; public: int getWeight() { ret..
Jetson TK1, FTDI USB Serial 컨버터 디바이스 드라이버 모듈 설치 엔비디아의 Jetson TK1용 커널에는 FTDI USB to Serial의 Device Driver가 포함되어 있지 않습니다. 이를 해결 하기 위해선 Jetson TK1 Kernel 소스에서 FTDI USB Serial Converter의 모듈을 추출하고 부팅시 해당 모듈을 로드하여 사용토록 설정해야 합니다. 다운로드 : ftdi_sio.zip lsusb명령으로 시리얼 컨버터를 인식하는지를 먼저 확인합니다. 123$ lsusbBus 002 Device 003: ID 0403:6001 Future Technology Devices Internalional, LTd FT232 USB-Serial (UART) ICColor..
QtCreator 단축키, 주로 사용하는 것 제가 유용하게 사용하던 QtCreator 단축키 소개합니다. 모든 단축키를 항상 외우진 못해 적어놨던 것인데, 이 글을 보고 도움되는 분들이 많았으면 좋겠네요. QtCreator 단축키는 Tools > Options > Environment > Keyboard에서 확인할 수 있으며, 이 메뉴에서 단축키 변경할 수 있습니다. 아래는 제가 모은 QtCreator 주요 단축키입니다. 확인해 보세요. General Keyboard Shortcuts창 닫기 : Ctrl+W모든 창 닫기 : Ctrl+Shift+W 뒤로 이동 : Alt+Left앞으로 이동 : Alt+Right 라인으로 바로 이동 : Ctrl+L 초기화면(Welcome 모드) : Ctrl+1코드 편집 모드 ..
[R프로그래밍 기초 강좌] MySQL 연동하기, RMYSQL R프로그램과 MySQL 연동 순서 1. 컴퓨터에 RMySQL 패키지를 설치.2. dbConnect 함수를 사용해 데이터베이스 연결.3. dbGetQuer로 SELECT를 시작하고 결과 세트 반환.4. dbDisconnect를 사용해 데이터베이스 연결 종료. 여기서 소개하는 R프로그래밍 기초 강좌 레시피는 RMySQL 패키지가 컴퓨터에 설치되어 있어야 한다. 그리고 그 패키지는 다시 MySQL 클라이언트 소프트웨어가 있어야 한다. MySQL 클라이언트 소프트웨어가 아직 설치 및 환경 설정되어 있지 않다면 MySQL 문서를 읽거나 시스템 관리자에게 물어보자. dbConnect 함수는 MySQL 데이터베이스로의 연결을 만든다. 그리고 이후에 쓰이는 ..
Inline함수 문제, C++ 인라인이 실패하면? Inline함수가 인라인화될 수 없을 때 무슨 일이 발생하는가? 이론적으로, 컴파일러가 함수를 Inline함수를 거부할 때 그 함수는 보통의 함수처럼 다루어진다. 컴파일러는 그것을 위한 객체 코드를 생성하며 함수의 invocations는 그것의 메모리 주소로의 점프로 변환된다. 불행하게도 함수를 outline 화하는 것의 결과들은 그것보다 더 복잡해진다. 클래스 선언에서 Inline함수를 정의하는 것은 흔한 일이다. 예를 들면, 123456789101112// filename Time.h#include#include using namespace std; class Time{public: inline void Show() { for (int i = 0; i
라우팅테이블 - ICMP 끊김과 목적지 설정 No route to Destination앞의 예는 모두 라우팅테이블에서 해당하는 것을 찾은 경우이다. 최종적으로는 default route가 선택되기도 하였다. 그렇다면 default route가 없다면 어떻게 될까? 그리고 주어진 목적지에 해당하는 것이 없는 경우에는 어떻게 될까? 해답은 route 될 IP datagram이 호스트에서 생성되었는가 아니면 forward 되어된 것인가에 달렸다. 만일 datagram이 host에서 생성되었다면 datagram을 보낸 application으로 "host unreachable" 또는 "network unreachable"이라는 에러가 리턴된다. 만일 datagram이 forward 된 것이라면, ICMP host..
라우팅테이블, IP라우팅 초기화 및 설정 Initializing a Routing Table 라우팅테이블 entry가 어떻게 생성되는지는 아직 언급하지 않았다. interface가 초기화될 때마다(일반적으로 interface의 어드레스는 ifconfig 커맨드에 의해 세트 된다) direct route는 그 인터페이스에 대해 자동으로 생성된다. PPP link와 루프백 인터페이스에 대해서, route는 host(H flag가 세트 되어 있는)가 될 것이다. 이더넷과 같은 브로드캐스트 인터페이스에 대해서, route는 네트워크가 될 것이다. 직접 연결되지 않은 호스트나 네트워크에 대한 route는 어떤 형태로든 라우팅 테이블에 들어가야 한다. 일반적인 방법으로는 bootstrap time에 초기화 파일로부..
[Qt GUI 프로그래밍] 트리뷰 사용 예제, QTreeView와 QFile 응용 Qt QTreeView와 QFile을 함께 사용한 GUI 프로그래밍 예제입니다. 우선 결과 화면부터 보여드릴게요. 제가 소개하는 소스는 특정 폴더의 ini 파일만 읽어 ini 내용을 트리뷰로 표현하는 것입니다. GUI 프로그래밍에서 자주 사용하는 것 중 하나인 트리뷰(QTreeView)는 부모와 자식 노드로 구성되는데요. ini 파일 이름은 부모 노드, ini 파일 내용은 자식 노드로 구성되어 있습니다. .ini 부모 노드(파일 이름) 아래에 자식 노드(ini 파일 내용)가 보이시죠? 아래 소개하는 소스는 위 Qt GUI 프로그래밍 트리뷰 소스입니다. 1234567891011121314151617181920212223242..
인라인함수로 프로그램 코드 최적화 (C++ inline함수) C++ 코드 최적화를 할 때 프로그램 코드엔 인라인함수가 있어야 합니다. C++ 객체지향 프로그래밍에 인라인함수가 갖는 장점을 적극적으로 활용하기 위함이죠. 이 포스트에선 함수 호출할 때 발생하는 오버헤드를 해결하는 인라인함수를 설명합니다. 프로그램 코드 최적화로 실행 속도를 개선하려면 반드시 인라인함수 사용이 필요합니다. 10.4 인라인함수들(Inline Functions) 인라인함수들은 함수 호출 때문에 초래되는 오버헤드를 제거할 수 있으며 여전히 보통의 함수들의 장점들을 제공한다. 그러나, 인라인화 하는 것은 만병통치약이 아니다. 어떤 상황들에서, 그것은 프로그램의 성능을 저하할 수도 있다. 이러한 특징을 현명하게 사용하는 것이 중요하다...
[IP 라우팅] 라우팅 테이블, ICMP Redirect에 대해서 More Details아래 그림은 ICMP redirect message의 형식을 보여주고 있다. 네 가지의 서로 다른 redirect message가 있다. 그것들은 다음 그림에서와같이 code로 구별된다. ICMP redirect가 보아야 하는 세 개의 IP 주소가 있다. (1) redirect를 유발한 IP 주소(그것은 ICMP redirect의 데이터 부분에 있는 IP 헤더에 있다.)(2) redirect를 보내는 라우터의 IP 주소(그것은 redirect를 포함하고 있는 IP datagram의 source IP address이다.)(3) 사용될 라우터의 IP 주소(그것은 ICMP message의 4-7바이트에 있다.) ICMP r..
[ICMP redirect] IP 라우팅 : FOWARD, REDIRECT 예제 To Forward or Not to Forward호스트들은 특별히 라우터로 구성되지 않는 한, IP datagram을 forward하지 않는다. 그렇다면 이러한 구성은 어떻게 이루어지는 것인가? 대부분은 ipforwarding이라는 커널 변수를 갖는다. 어떤 시스템은 이 변수가 zero가 아닐때만 forward를 한다. SunOS 4.1.x는 세가지 값을 가질 수 있다. -1은 forward하지 않고 이후 변수의 값을 바꿀 수 없음을 의미하고, 0은 기본적으로 forward하지 않으나 두 개 이상의 interface가 설정되면 1로 세트하고, 값이 1이면 항상 forward함을 의미한다. Solaris 2.x는 세 개의 값..
PLC 이더넷 통신 - 커넥션 (미쓰비시 PLC MELSEC) 커넥션(Connection)PLC 이더넷 모듈로 실질적인 통신을 하기 위해서는 커넥션이라는 것이 있어야 합니다. Q시리즈에서는 최대 16개까지의 커넥션을 만들 수 있습니다. 이 커넥션이라는 것은 TCP/IP를 실질적으로 다루기 위해서 PLC 이더넷 모듈이 제공하는 것입니다. PC에서 소켓 이라고 표현되는 것과 거의 같은 것입니다. 하나의 커넥션은 PLC 통신을 할 두 대상 사이를 이어주는 말 그대로 하나의 연결입니다. 물리적으로 두 대상을 연결하는 것은 통신선이겠지만, 프로그램을 하는 입장에서 두 대상을 연결하는 것은 커넥션입니다. 커넥션은 논리적으로 두 대상을 연결하는 그 무엇입니다. 그렇기 때문에 PLC 이더넷 모듈을 사용해서 PLC 통신..