응용 프로그램을 개발하다 보면 직렬 포트(Serial Port)를 사용하는 경우 다양한 어려움을 겪게 되는 경우가 많다. 장애도 많고, 테스트하기도 쉽지 않다. 스펙에 맞게 작성해 놓았더라도 상대편 장비에서 약속한 대로 반응하지 않으면, 양쪽에서 서로의 잘못이라고 문제를 떠넘기기가 쉽다. 이러한 경우를 대비해서 내가 보내는 전문은 스펙대로 작성하고 있는지 확인하고 상대편의 다양한 전문에 대한 대응은 적절한지를 확인할 필요가 있다. 그런데 상대 장비에 대한 접근이나 테스트가 어려운 경우는 가상 포트를 통해서 상대 장비를 에뮬레이트 하는 방법을 통해서 테스트를 진행할 수 있다. 오픈소스 프로젝트인 "Null-modem emulator"를 사용하고 싶었지만 윈도우 10에서는 한계가 있었다. 시간도 없는 관계로..
QT 응용 프로그램을 우분투 리눅스에서 개발하다가 중간중간에 이상한 경고 메시지를 만나게 되었다. "Gtk-Message: 14:16:49.392: GtkDialog mapped without a transient parent. This is discouraged." 메시지 내용을 보면 내가 프로그램을 작성을 하면서 뭔가를 잘못한 것 같은데....... 하는 추측을 하게 한다. 문제를 해결하려면 일단 현상을 재현하는 것이 중요하므로 언제 이 경고 메시지가 나오는지 여러 번 테스트를 진행했다. 드디어 현상이 재현 되었는데, 알고 보니 위의 그림과 같은 색상 선택창을 띄울 때마다 발생하고 있었다. 폰트 선택이나 색상 선택처럼 QT 대화창을 통해서 값을 선택받고자 하는 경우에 이런 현상이 발생하는데, QCol..
응용 프로그램을 동작하는 시스템의 언어 설정에 따라 사용자 인터페이스의 언어가 자동으로 바뀌게 하면 그만큼 프로그램의 활용도와 유용성은 높아진다. 상당히 많은 오픈소스 프로젝트들이 이런 체계를 적용하고 있고, 국내의 많은 개발자들은 나름의 번역 실력으로 해당 프로젝트에 참여하기도 한다. 코드 커미터로 참여하면 더 좋겠지만 개인적으로 보기에는 대부분은 한국어 번역 추가에 그치고 있다. 아무튼 이러한 다국어 기반 또는 국제화(i18n)가 적용된 프로젝트들은 많은 경우 gettext를 도구로 활용한다. 통상 영어를 기본 언어로 하여 소스 코드 등에서 gettext를 사용하도록 개발한다. 개발이 어느 정도 진행되면 도구를 통해서 사전 파일인 *.po를 만들어 내고, 번역자들은 소스 코드를 손대지 않고 단순 텍스..
스쿱을 접하기 시작한 사용자라면("스쿱으로 크로스 플랫폼 도구들을 간단하게 설치하기" 참조) 조금 복잡한 테스트나 서버 환경이 필요한 경우에 "이번에도 스쿱을 한번 활용해 볼까?" 하는 호기심을 가지게 될 것이다. 필자의 경우도 웹서버가 필요한 상황이 생겼는데 서버를 구동 시키거나 패키지를 복잡하게 설치하기는 귀찮고 간편한 방법을 생각해 보다가 시도한 방법이다. 위의 그림처럼 일단 파워쉘을 구동시킨다. 위의 그림처럼 "scoop install apache"라고 입력하면 아파치 웹서버를 간편하게 설치할 수 있다. 이 상태에서 바로 웹서버를 가동해 볼 수도 있겠지만 웹문서들을 어디에 복사할지는 알아야 하므로 웹문서 폴더와 웹서버 환경 파일의 폴더 위치는 확인해 두고 진행한다. 웹서버는 스쿱 설치 폴더 아래 ..
농사일의 끝을 잊을 정도로 일이 몰린다는 망종과 감자와 마늘을 캐는 하지도 지난 2020년 6월 말은 따가운 뙤약볕이 내리쬐면서 혹독한 여름 더위를 예고하고 있다. 최악의 여름 더위가 될 것이라는 예고들이 조금씩 현실화하는 것 같아서 더위 걱정이 스멀스멀 올라온다. 에어컨 없는 농가 주택에서의 10년 세월은 그동안 잘 넘겨 왔는데 과연 올해는 어떻게 될는지...... 한낮의 땡볕은 따갑지만, 이른 아침과 저녁으로는 짧지만, 텃밭일을 하기에 무리가 없는 시원한 기온이다. 작년 겨울 서울 처갓집에 갔을 때, 장모님께서 엄중하게 부여한 임무가 하나 있었다. 신문지에 싸인 자색 당근을 내오시더니 씨앗을 받아 오라는 명령이었다. 밭을 떠난 지 오래인 자색 당근을 겨울을 나고, 봄을 지나 꽃을 피워 씨앗까지 받아야..
코로나 19 때문에 계절의 여왕 5월이 어떻게 지나갔는지 모르게 어느새 6월을 바라보고 있다. 예산과 당진, 아산, 서산에 걸쳐 있는 이곳 예당평야는 모내기도 막바지에 이르러, 너른 논에는 물이 차고 드문드문 노구를 끌고 뜬모 작업을 하는 어르신이 푸른 모 속에 잠겨 있는 듯하다. 뜬모는 이앙기가 모를 심었지만 모가 땅속에 잘 박히지 않고 물에 뜬 모를 다시 심거나 이앙기가 심기 어려운 장소를 손으로 모내기하는 것이다. 사실 드넓은 논에 모가 몇 개 심기지 않았다고 굳이 힘들게 뜬모를 하실까? 하는 생각도 들지만 저분들에게는 저렇게 한 바퀴 돌아야 일을 끝낸 마음을 들것이다. 아무튼 주변의 논들은 이제 모내기가 끝나서 뿌리를 잡고 있지만, 한 마지기 우리 논은 위의 그림처럼 보리와 밀이 이제 영글고 있다..
아파치 웹서버나 PHP, 7-Zip과 같은 대표적인 크로스 플랫폼 도구들은 많은 경우 리눅스/유닉스 시스템에서 개발이 시작되어 이후 윈도우나 맥 OS 등으로 확산되는 경우가 많다. 통상 포팅이라는 과정을 거쳐서 윈도우 운영체제에서도 수행할 수 있게 되지만 각 프로그램마다 별도로 배포하는 패키지들은 라이브러리 중복의 문제, 설치/제거 과정의 복잡함 등의 문제를 여전히 가지고 있다. 윈도우에서 리눅스/유닉스의 응용 프로그램을 사용하려는 시도는 Cygwin과 MSYS로 거슬러 올라가는데 스쿱(Scoop)도 그 연장선에 있다고 하겠다. 파이썬의 경우 파이썬으로 만들어진 패키지들은 나름의 리포지토리에서 편리하게 설치할 수 있고, 우분투와 레드헷 계열의 리눅스에서는 apt-get이나 yum 도구로 필요한 도구를 간..
닷넷(.NET) 프레임워크가 윈도우즈를 넘어서 리눅스 진영까지 영향력을 확대하는 상황임에도 불구하고 어떤 닷넷 프로그램들은 내 컴퓨터에서 실행할 수 없는 상황이 발생하고는 합니다. 바로 닷넷 프레임워크의 버전 때문입니다. 닷넷 응용 프로그램의 개발 시점에서도 어떤 닷넷 프레임워크의 버전을 기준으로 할지를 지정하기 때문에 당연히 닷넷의 버전은 매우 중요한 요소입니다. 그래서 요즘에는 프로그램을 설치하기 전에 "시스템 요구 사항"에 있는 닷넷 프레임워크의 버전을 반드시 확인해야만 합니다. 현재 내 시스템에 설치된 닷넷 프레임워크를 확인하는 방법으로 닷넷 디텍터(.NET Detector)를 실행시키는 방법, 레지스트리를 확인하는 방법, 프로그램 추가/삭제에서 설치된 목록을 확인하는 방법, 닷넷 디렉토리의 목록..
전화, 문자, 일정 관리, 인터넷 검색, 동영상 감상, 게임까지 스마트폰은 이미 우리의 삶 깊숙이 들어와 우리의 삶을 지배하고 있는지도 모르겠다. 이런 상황에서 갑자기 터치가 되지 않으면 정말 난감한 상황이 벌어진다. 상당히 많은 정보가 스마트폰에 있는데 액정 수리까지 소요되는 시간과 비용을 생각하면, 스마트폰의 그 어떤 정보도 활용할 수 없으니 정말 난감해 할 수밖에 없다. 이런 경우 좋은 해결책이 바로 OTG(On The Go)케이블과 마우스이다. OTG 케이블은 시중에서 2천 원도 되지 않는 저렴한 도구로 USB 메모리나 키보드, 마우스를 스마트폰에 연결하여 사용할 수 있게 해 준다. 위의 그림처럼 한쪽은 마이크로 5핀으로 스마트폰에 연결하고 다른 한쪽은 USB를 꽂을 수 있도록 되어 있어서 USB..
C언어를 배우고 실무에 적용하던 무렵 대기업 전자 회사에서 운영체제를 담당하는 한 개발자를 만난 적 있었다. 기반 기술이 있고 경험도 많다고 자신 만만해하던 때였다. 어깨너머로 그의 작업 광경을 구경하는데 내 눈앞에 신기한 모습이 펼쳐졌다. 어찌 보면 가장 원시적이라 할 수 있는 vi 에디터로 프로그램에서 발생한 문제를 찾아 가는데, 이리저리 코드의 호출 그래프를 따라 움직이는 것이 환상적이었다. 뭔가 단축키를 누르는 것 같은데 그 원리는 도통 알 수 없었다. 그 사람을 붙들고 물어보니 CTags란 도구를 활용해서 프로그램을 분석하여 태그 정보를 만들어 놓으면 vi(엄밀히 말하면 vim) 에디터에서 해당 정보를 기반으로 함수나 변수가 정의된 곳으로 이동시켜주는 원리였다. 물론 비주얼 스튜디오나 이클립스를..
다양한 CPU, 다양한 운영체제의 홍수 속에서 자바와 .Net과 같은 플랫폼 독립성을 가진 체계가 점점 더 힘을 얻어가고 있는 형국이다. 운영체제나 CPU의 종류에 제한받지 않는 응용 프로그램의 개발 및 배포는 생산성뿐만 아니라 여러 가지 장점을 제공한다. 더구나 끊임없는 하드웨어 성능의 발전은 플랫폼 독립성 때문에 희생해야 하는 성능적인 단점조차도 문제가 되지 않게 해주고 있다. C언어로 작성한 프로그램을 C/C++ 컴파일러로 빌드하게 되면 윈도나 리눅스와 같은 특정 운영체제에서만 수행할 수 있는 기계어 코드가 만들어 진다. 이 기계어 코드는 특정 운영체제에서만 사용할 수 있을 뿐만 아니라 CPU의 제약도 받을 수밖에 없다. 그만큼 개발자의 입장에서는 다양한 플랫폼 환경을 감안해야만 한다. 그렇지만 자..
특정 폴더나 해당 폴더를 포함한 하위 폴더 전체를 검색해서 특정 문자열을 가진 파일과 그 위치를 찾아내는 것은 개발자뿐만 아니라 일반 사용자들에게 종종 발생하는 필요이다. 예를 들어 인기 있는 APM(Apache, PHP, MySQL) 패키지인 XAMPP에서 특정한 값을 조회하거나 설정하는 모든 파일을 찾고 싶은 경우이다. 소스 코드가 될 수도 있고 설정 파일일 수도 있지만 전체 파일을 뒤져서 해당 값을 가지고 있는 파일을 모두 찾고 각 파일 내 라인 위치를 알려준다면 너무도 작업이 쉬워질 것이다. 물론 검색 결과를 선택하면 바로 해당 파일을 조회나 편집할 수 있으면 금상첨화일 것이다. 바로 이런 기능을 수행할 수 있는 것이 노트패드++의 "파일에서 찾기" 기능이다. 물론 이런 기능을 전문적으로 수행하는..
대부분의 일반적인 응용 프로그램에서는 사용할 가능성이 거의 없지만, 약간 도구성의 프로그램을 개발하거나 직접 _paint 메시지를 받아서 이미지나 텍스트를 드로잉 하는 프로그램의 경우에 화면 크기를 벗어나는 영역에 대한 처리를 위해서는 스트롤 바 컨트롤을 적용하는 것이 사용자 편의성을 높여 주는 방법이라 할 수 있다. 비주얼 스튜디오 도구 상자에서는 수직 방향의 컨트롤을 위한 VScrollBar와 수평 방향의 컨트롤을 위한 HScrollBar 컨트롤을 제공하고 있으므로 해당 컨트롤을 폼에 삽입하여 처리한다. 폼에 스크롤바 컨트롤을 추가한 다음에 속성 창에서 Dock를 VScrollBar는 우측(Right)으로 붙도록, HScrollBar는 아래쪽(Bottom)으로 붙도록 설정해 준다. Dock 값을 Ri..
프로그램을 개발하다 보면 압축 상태의 자료를 읽거나, 아니면 자료를 압축 상태로 저장해야 하는 경우가 있다. 장기간 보관이나, 통신량 최소화, 보안 등의 필요와 연관되는 경우가 대부분이다. 이런 경우 외부 프로그램을 통해서 압축 및 압축 해제를 수행시키고 그 결과를 사용하는 방법도 있지만 프로그램의 융통성도 떨어지고 좀 더 효율성이 높은 프로그램을 제작하기에는 무리가 있다. 이런 경우 압축 라이브러리를 사용하면 프로그램의 융통성도 높이고 다양한 아이디어를 프로그램에 적용할 수 있다. 또한 .Net 전용 라이브러리를 사용하면 별도의 C/C++ 라이브러리를 사용하지 않아도 되므로 개발 및 배포 과정이 더 간편해진다. 비주얼 스튜디오에서 NuGet 도구를 활용하여 라이브러리를 설치할 수도 있겠으나 많은 경우 ..
다중 사용자 환경이 아닌 응용 프로그램의 데이터베이스로는 SQLite 만한 것이 없다. 윈도, 리눅스, 맥과 같은 범용 운영체제뿐만 아니라 안드로이드 등 수많은 환경에서 SQL 기반으로 프로그래밍을 할 수 있기 때문이다. 파일 시스템을 사용하는 소위 삽질을 하지 않더라도 SQL을 사용해서 가독성도 높이고 생산성과 유지보수 등에 있어 수많은 장점을 가진 프로그램을 개발할 수 있다. SQLite를 사용하는 프로그램은 프로그램 배포 과정에서 문제가 발생할 수 있다. 개발 환경에서는 문제없이 잘 동작했는데 막상 실제 수행 환경으로 가면 종종 문제가 발생하는 것이다. 대부분의 문제를 살펴보면 그 원인은 라이브러리에 있는데 수행 환경의 32비트/64비트 환경과 일치하는 라이브러리가 배포되지 않았기 때문이다. 32비..