2013년 7월 17일 수요일

(직장) Contract(계약)에서 Permanent로의 전환

지금 일하고 있는 회사는 contract으로 일하고 있다. 처음 계약할 당시 1년 컨트랙으로 계약을 했는데, 호주는 IT의 경우, (다른 분야도 그런거 같은데.. -,-) 컨트랙 잡이 무척 많다. 3개월, 6개월, 1년 등등.

지내보니, 사람을 하나 채용하면 들어가는 돈이 하도 많아 그런가. 회사 HR(인사)에 사람 하나 더 쓰겟다고 설득하기가 쉽지는 않은 모양이다. 그래서 새로운 프로젝이 생기면, 그거에 맞는 사람을 프로젝 진행하는 동안 쓰겠다고 해서 사람을 뽑는 구조인거 같다. (아닐수도 있고.. 그냥 내생각)

이제 10월이 되면 나도 여기서 일한지 만 2년이 된다. 그니까 지난 10월에 한번 계약을 갱신한것이다. 프로젝이 마무리 안되서 일년 더 연장하였다. 그러면서 매니저는, 그냥 계속 눌러앉히고 싶다는 말을 했으나, 그럴만한 여건이 안되는 듯 싶었따.

그러나 올 초에 2월인가? 프랑스 출신의 여자 엔지니어가 갑자기 그만두게 되었다. 매니저가 장기간 출장을 간 사이, 자주 회사를 쉬더니, 그사이 다른 곳을 알아보았나부다.
여기 일이 너무 잡스러운게 많다면서, (하지만 이말도 이렇게 상스럽게 안하고, 영어로 하니 고급스럽게..) 엔지니어로서 일을 배우는 곳으로 가겠다는것이 퇴사 사유.

사실 이때, 매니저의 행동이 참으로 인상적이었는데, 매니저가 공석인 사이에 우리는 이미 그분이 퇴사한다는 사실을 알았고, 매니저는 오랜 출장에서 돌아오더니, 우리가 동요할 것이 걱정되었는지 우리를 한명 한명 일대일로 앉혀놓고 그애의 퇴사 사유를 설명해주고 우리의 근황을 물었다. 직원 한명한명을 배려한달까? 사실 뭔일이 일어나는지 궁금한데 수근수근 댈수도 없고, 그런 상황에 정확한 현황을 모두에게 전달하는 친절함이 인상적이었다.  

그리고 farewell party까지 치러주고, 꽃도 전달하고, 굉장히 부드럽게 마무리하는 모습.  

그러면서, 첨에는 그애를 대신할 (replacement) 엔지니어를 (메케닉) 뽑지 않고, 전자쪽 엔지니어를 뽑겠다고 하더니... 결국에는 지금까지뽑지 않고 있다. 왜냐면, 매니저는 그애의 일을 죄다 쪼개서 분석해보더니, 나를 비롯한 주의의 동료들에게 잘게 잘게 나누어 주었다. 물론 본인도 많은 부분을 감당하였고..  그랬더니 별로 큰 공백은 느끼지를 못했다. (나만 그런가?_

그러더니, 얼마전부터는, 나를 잔류시키기로 한거다. 나를 퍼머넌트로 전환하고, 새로운 사람을 뽑지 않는다는 것이다. 얼마전, 시티에 있는 헤드사무실에 가서 CEO랑 얘기했다고..

아마 HR에서 프로세스를 진행할 것이라고 했다. 마지막으로 나의 의향을 물었따.  나야 당근 OK. 

Contract과 permanent의 차이를 아직은 잘 모르겠다. 회사내에는 하도 다양한 부류의 고용인이 있어서, 별로 차이도 안난다. 우리 사무실만 해도, 나처럼 샐러리를 받는 사람도 있고, 시간당으로 돈을 받으시는 분도 있고. 월-금까지 풀타임 일하는 사람도 있고, 월-목까지 일하는 사람도 있고.

향후 프로세스를 물으니, 아마 직급을 결정하게 될 것이라 한다. 그리고 연봉계약도 함께.
여지껏 별로 내 회사거니 생각이 들지 않았는데, 음.. 이제 정말 내 회사가 되는 것인가?

2013년 7월 8일 월요일

EMC test - FCC, CE and A-tick certification.

현재 개발중인 장비(wireless device)를 필드 테스트 하려면 EMC test를 받아 인증을 득해야 한다고 한다. 우리 회사 주요 시장은 유럽과 북미,남미 인데, 우선 그래서 FCC, CE(유럽), A-tick(호주) 인증을 받기 위한 테스트를 받았다.

이런 것은 나도 처음 진행해 보는지라, 처음에는 뭘 해야 하는지 잘 모르겠었으나,
매니저가 우선은 인증테스트를 진행하고 인증을 부여하는 자격을 갖춘 업체를 물색해서 회의를 잡아주었다. 그 회의를 한것이 작년 10월.

드디어 지난주에 테스트를 실시했고, 아직도 물론 safety 테스트를 하고 있는 중으로 알고 있다.
돈이 무척 많이 들고, 중요성이 큰 작업인지라, 조심스럽게 한 단계 한단계 확인하며 진행했다. 그래서 그런가 시간이 무척 많이 걸렸다.

우리가 컨택한 업체는 EMC technologies다. http://www.emctech.com.au/
지난 10월에 회의를 하고, 테스트 룸도 쭈욱 둘러보았고,
지난주 테스트를 잡기 전까지는 전화와 이메일로 연락을 하여 진행헀다.
실제 테스트가 시작된 7월 1일에는 내가 직접 방문하여 시료를 전달하고 작동법 등 설명했다.

이 업체는 멜번 툴라마린 공항 근처에 있다. 집에서 40km 이상 떨어진 곳이라 한시간 정도 운전하여 방문하였다.

처음 회의를 같이 하고, 진행을 계속 도와주신 분이 Chris Zombolas 이고, 마지막에 테스트 관련하여 좀더 기술적인 부분을 도와주신 분은 Les Dickenson이다.  두분다 나이가 많이 드셨는데, 특히 Chris라는 분은 정말 오래 일을 하셔서 그런가(찾아보니 1992년부터 거기 계셨고, 그 이전에도 다른 곳에서 일하셨고) 뭐 물어보면 바로 척 답이 나온다.

그 기관이 도와주는 부분은, 우리 디바이스가 필요로 하는 테스트 항목과 요구되는 directives를 파악해준다는 것이다.  물론 우리 디바이스에 대해 가장 잘 아는 것은 우리이기 때문에 충분히 설명할 필요가 있다. 그리고 그사람들이 파악한것을 바탕으로, 하나하나 필요한 테스트 항목을 식별한다.   항목하나하나가 다 돈이기 때문에 정확한 식별이 중요하다.

테스트에 필요한 플랜을 작성하여, 그쪽과 몇번 주고 받으면서 완성도를 높인다.
이 작업도 중요한데, 여기에는 우리 디바이스에 대한 description, 우리 회사 주소, 디바이스 세부 사양이 포함되어 있어, 이것이 나중에 certification 문서에 들어가는 항목이 된다.
의외로 오타도 간혹 나와 있어, 매니저와 함께 꼼꼼이 검토하였다.

그러는 가운데 테스트 시료를 준비한다. auxiliary device가 필요하여 함께 준비하였다. 물론 커넥션 케이블도 준비해야 한다. (길이 등도 확인 철저히 할 필요가 있음)

테스트 날짜를 organize하고 테스트를 실시한다.
아직 테스트 결과를 written document로 받은 것이 아니라, 여전히 진행중이긴하나,
EMC technologies는 필요한 support를 충분히 잘 해준다고 판단된다.

다만, safety test는 시드니 랩에서 진행한다고 하여 시료를 하나 더 준비하였는데, 시드니 랩이 멜번과 소통이 잘 되는 것 같지 않다는 생각이 들었다. 멜번 사무실에서 safety test관련하여 준비사항을 미리 알려주지 않아, 시드니쪽에서 다시 요구하는 일이 일어났다.  하지만 시드니 쪽의 safety test manager또한 서포트가 훌륭했다.

일이 마무리되면 다시 한번 포스팅하기로 하고..

2013년 6월 2일 일요일

Working with Flash Memory

플레시 메모리를 가지고 개발하기에 관해, Programming Embedded Systems in C and C++ 라는 책에 나온 부분을 소개하고자 한다.  

지금 내가 개발중인 디바이스는, 그 용도가 우리 회사에서 주로 양산, 공급하고 있는 데이터 로거에서 모아 놓은 데이터를 무선으로 collecting하기 위한 디바이스다.  무선 기능을 위해서는 GPRS module을 쓰고 있는데, 비용이 저렴해서다.  GPRS 망이 결국에는 몇년뒤에 사라지겠지만,  비용면에서 가장 싸기 때문에 아직도 쓰이고 있고 제품도 나오고 있다.

타겟 디바이스의 먼저번 버전에서 데이터를 쌓아두는 내부 메모리로 EEPROM을 썼었는데, 새로운 버전에서는 이것보다 가격이 싸고 데이터 사이즈가 큰 Flash Memory 로 교체하였다. 

flash memory가 싸고 사이즈가 커서 좋은 면은 있겠으나, 접근하여 쓰고 읽고 하다보니 EEPROM보다 뭐 이리 복잡하고 귀찮은지..

다른 것때문에 이 책의 일부분을 뒤지다가 flash memory에 대해, 장단점언급한걸보고, 마자 마자를 연발하다가 여기에 함 정리해 두려한다.

-------------------------------------------
From the programmer's viewpoint, Flash is arguably the most complicated memory device
ever invented. 
프로그래머의 관점에서 보면, 플래시는 지금까지 발명된 메모리 디바이스 중 단연 복잡하다고 말할 수 있다. (물론 논란의 여지는 있겠으나)

The hardware interface has improved somewhat since the original devices were
introduced in 1988, but there is still a long way to go. Reading from Flash memory is fast and
easy, as it should be. 
하드웨어 인터페이스는 처음 이것이 개발된 1988년 이후, 다소 개선되었지만서도,
그러나 여전히 갈길이 멀다. 플레시 메모리에서 읽기작업은 빠르고 쉽다. 

In fact, reading data from a Flash is not all that different from reading
from any other memory device.
사실, 플레시에서 데이터를 읽는 것은 여느 다른 메모리 디바이스에서 데이터를 읽는 것과
전혀 다를 바 없다. 또한 그래야 하고.

The processor simply provides the address, and the memory device returns the data stored at that location. 
프로세서는 단순히 주소(위치)를 알려주고, 메모리 디바이스는 해당 위치에 저장된 데이터를 되돌려준다.

Most Flash devices enter this type of "read" mode automatically whenever the system is reset; no special initialization sequence is required to enable reading.
대부분의 플레시 디바이스는 시스템이 리셋될때면 언제나 자동적으로 이런 형태의 "읽기" 모드로 진입한다.  읽기 작업을 활성화하는 특별한 초기화 과정이 필요하지 않다. 

Writing data to a Flash is much harder. Three factors make writes difficult. 
플레시에 쓰기 작업은 이보다 훨씬 어렵다.  어렵게하는 요인은 세가지다.

First, each memory location must be erased before it can be rewritten. If the old data is not erased, the
result of the write operation will be some logical combination of the old and new values, and
the stored value will usually be something other than what you intended.
첫번째로, 각 메모리 위치에 뭔가를 쓰려면 그전에 반드시 그 위치에 있던 데이터가 먼저 삭제되야 한다.  만일 쓰기전 먼저 삭제를 하지 않는다면, 쓰기 연산은, (해당위치에 쓰여있던) 기존 데이터와 (쓰려고 하는)새로운 데이터의 어떤 논리적 조합으로 수행되기 때문에 저장된 값은 대개 우리가 의도했던 것과는 다른 값으로 저장될 것이다.

The second thing that makes writes to a Flash difficult is that only one sector, or block, of the
device can be erased at a time; it is impossible to erase a single byte. The size of an individual
sector varies by device, but it is usually on the order of several thousand bytes. For example,
the Flash device on the Arcom board-an AMD 29F010-has eight sectors, each containing 16
kilobytes.
플래시 메모리에 쓰기 작업이 어려운 두번째 이유는, 오직 하나의 섹터, 또는 블럭 단위로 삭제가 되기 때문이다.  한 바이트는 삭제가 안된다는 얘기다.  각 섹터의 크기는 디바이스 마다 다른데, 보통 몇 천 바이트이다. 예를 들어, Arcom 보드에 AMD 29F010의 플레시 디바이스는 8개의 섹터로 되어 있고, 각 섹터는 16 킬로바이트로 구성되어 있다.

Finally, the process of erasing the old data and writing the new varies from one manufacturer
to another and is usually rather complicated. These device programming interfaces are so
awkward that it is usually best to add a layer of software to make the Flash memory easier to
use. If implemented, this hardware-specific layer of software is usually called the Flash
driver.
마지막으로,  예전 데이터를 삭제하고 새 데이터를 쓰는 과정은 제조사 마다 다르나, 대개의 경우 꽤나 복잡하다. 이러한 디바이스 프로그래밍 인터페이스는 아주 어색하여(awkward - 자연스럽지 않다는 의미) 플래시 메모리를 쉽게 쓸 수 있도록 도와주는 소프트웨어 계층을 하나 끼워넣는것이 최선이다.  만일 구현된다면, 이런 하드웨어에 따라 다른 계층을 대개 플래시 드라이버(flash driver)라고 부른다. 

2013년 5월 28일 화요일

Serialize Setup Program from P&E

금번에 개발 중인 GPRS 디바이스의 FCC and CE 인증을 준비중이다.
이제 테스트 플랜을 다 만들어 기관에 의뢰하여 검증하였고, 어제 Purchase order를 place하였다. 우리가 이용하는 인증대행기관은 EMC Technologies 라는 기관으로 여기서 조금 떨어진, 그래도 빅토리아 주에 위치하는 기관이다. (한번 방문한적이 있다)

아직, 그쪽에서 스케줄 오거나이징 한것은 아직 결과를 받아보지 못했으나,
준비하는 중, serial number assignment 관련하여, 매니저가 선임 엔니지어와 함께 논의하여 결론지으라 지시했다.

선임 엔지니어는 뭔가를 들여다보고 있더니, P&E에서 구입한 Cyclone Pro의 User Manual을 건네준다. 그안에 보니, 12장에  Automatic Serial Number Mechanism이란게 있다.

이 회사에서 산 Cyclone Pro를 이용해서, 우리 회사에서 제조하는 콘트롤러에 이미지 파일을 다운로딩하고 있는데, 그러니까 주로 SAP Stand-alone Programming 용도로 쓰고 있었다.

이 장비에 그런데, 시리얼 번호 부여 기능이 있다고 한다. 사용자가 원하는 위치와, 시리얼 번호의 규칙을 정한 다음에, 파일을 생성한 후, 이걸 기반으로해서, 사용자가 원하는 위치의 온보드 플래시 메모리에 시리얼번호를 넣어주는 것이다. 그리고서 파일이 갱신되어 시리얼번호가 하나 증가된다.

시리얼 번호 부여는, 이번에만 필요한게 아니라, 실제로 제조하여 판매할때 더욱 필요한 것이라, 그걸 감안하여 이런걸 쓰자고 이걸 나에게 보여주는 것이다.

매뉴얼을 받아다 보니, 꽤 쓸만했다. 프로그램을 뒤져서 찾아 해보니 프로그램은 쪼금 어설프긴 해도, 사용도 쉽고..


프로그램은 실행시 모양이 요렇게 생겼다.
규칙을 정하는 부분과, Starting address를 설정하는 부분으로 구성되 있다.
Starting address 부분은, MCU의 데이터쉿에 나오는 플래시 메모리 구성을 참고하여 설정했다.

이걸 저장하면 *.ser이란 파일이 생성된다.
그다음, 파일 이미지를 쓰는 프로그래밍 소프트웨어를 실행한다. (물론 싸이클론 프로를 타겟 디바이스와 연결 후)

P&E 프로그램 깐 거 중에서 인터렉티브 프로그램 중, 해당되는 MCU 타입에 따라 맞는 프로그램을 실행한다.  

(오늘은 여기까지..)  퇴근 시간이다. 

QT에서 MySQL 쓸 수 있게 설정.

Qt에는 기본적으로 MySQL을 쓸수 있게 되어있지 않다. Qt 책에 보면, 라이선스 제약 때문이라고 그러던데, Qt의 오픈소스 에디션에 모든 드라이버가 제공되지 않음.

각설하고, MySQL을 쓸수 있게 하려면 "뭔가"를 해줘야 하는데,,
회사에서 금번에 컴퓨터를 바꾸면서, 새로 그 작업을 다시 해줘야 했다.
기억이 안나서, 다시 그작업을 하려니 또 시간이 걸린다.

이번에는 과정을 좀 자세히 정리해야 할 것 같다.

(1) 먼저 Qt에는 소스파일 패키지가 설치되어 있어야 함.
      -> 확인방법 : 소스가 설치된 위치로 이동:
      -> 나의 경우는  C:\Qt\4.8.4\src\plugins\sqldrivers\mysql
             이 안에, mysql.pro와 main.cpp가 들어 있었다.

(2) MySQL을 깔아야 함. (이건 C:\MySQL에 설치하였음)
       ->  mysql-connector-c-6.0.2-win32.msi를 깔았음.

(3) mysql 소스가 설치된 위치로 이동 ==> (1)번의 위치로 이동

(4) Modify the file mysql.pro



    (수정할 포인트)  INCLUDEPATH와 LIBS 부분을 추가.


(5) qmake mysql.pro와 make를 실행

(6) 그러면, 네 개의 파일이 생겨남.  
      -> libqsqlmysql4.a / libqsqlmysqld4.a / qsqlmysql4.dll / qsqlmysqld4.dll
      -> 이 파일들이 C:\Qt\4.8.4\plugins\sqldrivers   에 저장됨.

(7) 그리고서 DOS prompt에서 다음을 실행하여 libmysql.dll 을 생성하여야 함
      -> go to C:\MySQL\lib\opt에서
      -> reimp -d libmysql.lib      (reimp.exe는 인터넷에서 다운로드함)
      -> dlltool -k -d libmysql.def -l libmysql.a

(8) 이렇게 생성된 libmysql.dll을 C:\Qt\4.8.4\bin 에 넣어야 함.
     (물론, C:\Qt\4.8.4\bin은 PATH에 잡혀있어야 함)


<마지막으로 주의사항>
프로젝트 파일인 .pro에 QT+=sql을 삽입한 후 실행해야 함.
=> QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");


다음의 글은 참고.




 

2013년 5월 23일 목요일

RealTerm 사용기 - 하이퍼터미널 대체

이번주에는 회사에서 노트북(여기서는 랩탑이라 부르는)을 지급했다.
현재는 데스크탑을 쓰고 있었는데, 리스 만료기간이 되어, 그에 맞추어
데스크탑을 다 회수하고, 랩탑으로 교체하기로 했다고 한다.

새 기계를 받으면 언제나 좋지만, 더러운 책상도 한번 정리하고,
자료도 한번 싹 정리하고..
그렇지만 개발 툴 등을 정리하는것이 성가시다.

그저께인 수요일날 지급이 되고, IT 가이가 친히 MS 관련 소프트웨어는
백업을 받아주었으나, 나머지는 각자 알아서 하란다.
개발하는 사람이 거의 없어서리,,, 우리를 배려 전혀 안한다.. -_-

가장 골치 아플것으로 예상했던, CodeWarrior 툴은, 의외로 쉽게 rehost했다
라이센스를 사고서, 여기 홈페이지가서, 이 툴을 쓸 PC의 유니크한 아이디
나같은 경우 ethernet address를 집어넣고서 license를 generate한 후 이걸 피씨에 특정
위치에 두고 썼었다.

rehost는 이번 경우처럼 PC를 replacement할 때, 라이센스를 기존 기기에서 다른 기기로
옮기는 과정을 말한다. Freescale에 가니, HOW to rehost 라는 친절한 동영상이 있어서리
이걸보고 그대로 따라했다. 쉽게 되었다.
여기까지가 수요일에 한 일이고.
어제는 우리 아이들 학교에 안가는 날이라 (curriculum day - 이런날이 꼭 하루씩있다.
선생님은 나오는데 아이들은 안가는 날. Pupil free day라고도 한다)

연가내고, 집에서 애들 뒤치닥거리하고,
오늘 나와서 이 귀찮은 일들을 또 시작했다.

웬만큼, 정리하고서, 실제 개발환경에 문제가 없는지, 테스트 하다보니,
새로운 랩탑에는 Hyperterminal이 없다.  윈도우즈 7에 이거 없다는 얘기를 옆에 동료가
예전에 한게 생각났다. . 어 정말 없다.. 그분께 여쭤보니, 음.. 그거 없어서 자기는 집에서
realTerm을 쓴단다.  이거가 더 좋다고 free 니까 다운받아 쓰라고 알려준다.

고맙게도.. 받아서 해보니.  인스톨은 쉬우나, 실행시 에러가 나면서 안된다.

==>Error Messsag를 받았다.  Error accessing the OLE registry.
==> 내용인 즉, OLE registry에 접근하지 못한다.. 라는 내용.

해결방법은...  realTerm이 깔린 자리로 가서(나같은 경우, C:\program file\BEL\ 인가?)
거기에서 realTerm.exe의 property를 연후, 권한을 바꾸어주면된다.

"Run this program as an administrator"

그렇게 바꾸고 나면 실행이 되는데, 첨에는 뭘 어케 셋팅하는지 헷갈리나.
자세히 살펴보면, 하이퍼터미널에서 셋했던 것 보드레잇 같은거 설정하는 탭을
발견할 수 있다.

이젠 잘 돌아간다~

2013년 3월 25일 월요일

써커스 구경하기. (Stardust circus)

조금만 더 버티면 이스터 휴가다. 4일 연휴.. 후후.  각설하고,

지난주 토욜에는 약간 남쪽으로 내려간 곳에서 (어딘지 나도 잘 모르겠다)
써커스를 한다고, 그걸 보러갔다.

약간은 허허 벌판 같은 곳에, 아주 커다란 천막을 쳐놓고,  토욜에는 두번 써커스를 한다고해서 오후 2시껄 보러갔다.

표를 끊기 위해 한시간 일찍 도착.  그런데 사람들이 거의 없다. 차가 우리거 말고 하나 더있다. 음.. 이거 봐도 괜찮은 건지. 걱정스럽다.  어떤 아줌마를 만났는데, 이 써커스 어떠냐고 물어보니, 여기는 동물도 많이 나오고 괜찮다고 그런다.  다른 써커스에 비해 괜찮다고.

표를 끊고서, 점심을 먹기 위해 바로 근처에 위치한 맥도널드로 갔다.
웬걸.. 서커스 보러온 사람들이 다 여기서 점심먹나부다. 무쟈게 사람이 많다.

우리도 햄버거 먹고서, 10분전쯤 다시 천막으로 갔더니 거짓말처럼 차들이 꽉들어찼다.

서커스는 두시간 가량 진행되었는데, 중간에 쉬는시간도 있고.  사실 생각했던거보다 내용이 알찼다. 동물도, 맨처음에 나온 사자.. 두마리의 사자가 너무나 커서, 압도 당했다.  사자 쑈부터 해서, 말 열마리 나와서 쑈하고, 원숭이, 개, 염소, 등등. 참 종류도 가지가지였다.  동물원에서 보다 더 많은 동물을 보는 듯...  그리고 작은 사자 (cub)도 있었고..
쉬는 시간에는 horse riding 타임이 있어서 아이들한테 조그만 말도 태워줄수 있었다.
동물 말고도, 서커스에 늘 등장하는, 그네 타기.. (예쁜 백인들이 그네를 잘도 탄다..ㅎㅎ) 아크로벳. 등등.  특히 애들이 완전 매료되었다.

시간이 되면 함 구경해볼만하다. 
http://www.stardustcircus.com.au


2013년 1월 28일 월요일

QT - qDebug() 사용하기.

Qt 스터디를 어느정도 했다고 치고, 요즘 하고 있는 것은 windows에서 만든 TCP 기반 server 프로그램을 Qt로 바꾸고 있다.

다중의 client가 이 서버를 향해 데이터를 전송하기 위해, 연결 요청을 하고, 데이터를 전송하면 이 서버는 연결 요청을 받아 연결을 설정하고 데이터를 받아 파일에 저장한다.

처음에 Tcp 연결에 관해 Qt를 공부해보고 예제 프로그램을 살펴보니 (C++ GUI Programming with Qt 4, second edition 참조) Windows API를 가지고 event 기반으로 프로그래밍 하는 것 보다 오히려 쉬워 보였다. 

프로그램 하는 과정에서, 매우 찾기 어려운 에러를 찾아야 하는 경우가 생겼는데, 이때 디버깅 툴이 있는지 뒤져보게 되었다.  뭐 복잡한 디버깅 툴보다, 쓰기 편한 qDebug()라는 것이 있었다.

우리가 프로그램하면서 의심스러운 부분에 printf()를 끼워넣어, 메시지를 출력해보는 방식처럼 메시지를 뿌려주게 도와주는 방법이다.

(1) # include 삽입하기. :


(2) qDebug() << "error message.... ";   // 이런식으로.. 또는 qDebug("error");
(3) project file에 한줄 추가하기 :  CONFIG += console

마지막 세번째 줄은, 메시지를 출력할 디바이스를 콘솔로 정하는 설정이다.  저것을 못찾아서, 아무리 qDebug()를 삽입해도 메시지가 출력되지 않았다.  qDebug() 에다 넣어줄 데이터는 QString 포맷이다.

잔디 3주차

 잔디 심기. 3주차에 접어들었음. 사진. 아래가 1일차 사진. 다음이 3주차.