파이썬의 배열은 여러 원소를 하나의 묶음으로 관리하고 각 원소 간에는 순서(order)가 존재하여 인덱스(Index)를 통해 접근하는 리스트로 파이썬에서는 리스트(list)와 튜플(tuple)이라는 두 가지 타입이 있습니다. 통상 프로그래밍 언어에서 배열은 동일한 데이터 타입의 원소들로 구성되지만 파이썬에서는 각 원소의 데이터 타입이 동일하지 않아도 되고 심지어 다른 배열을 원소로 갖는 것도 허용됩니다. 배열간의 비교는 동일 인덱스끼리 각각 비교해 가는 방식으로 적용됩니다. ■ 리스트(list)와 튜플(tuple) 리스트(list)는 [1, 2, 3] 형태로 정의하며 각 원소를 수정할 수 있는 특성을 갖습니다. []는 빈 list를 의미합니다. >>> b = [1,"aa",3,4,5]>>> type (..
C# 프로그램을 개발하다 보면 외부 패키지를 사용하면 *.DLL 파일들이 하나둘 늘어나고 배포 과정에서 해당 DLL이 있느니, 없느니 하며 오류 원인이 되기도 한다. 그런데, 이렇게 참조하는 DLL 파일들을 프로젝트 리소스로 포함시키고 프로그램 시작 시점에서 해당 DLL들을 로딩하도록 하면 간편하게 DLL을 프로젝트에 내장시키면서 실행파일 하나만으로도 배포가 가능해진다. 일단, *.DLL 파일들을 프로젝트의 Resources 폴더에 복사한다. 솔루션 탐색기에서 Resources.resx를 더블클릭하고 편집창에서 리소스추가> 기존파일추가로 복사한 DLL 파일을 선택한다. 추가한 파일의 리소스 이름, 위의 그림에서는 INIFileParser를 기억해 둔다. DLL의 참조 속성에서 그림과 같이 "로컬 복사"를..
요즘 리눅스 개발환경으로 비주얼스튜디오 코드(VisualStudio Code, 이하 코드로 지칭)를 애용하고 있다. 여러 장점이 있지만 무엇보다 gdb와의 연계를 통한 디버깅 기능이다. 일반적으로 최적화 옵션(-O)을 빼고 디버깅 옵션(-g)을 추가하여 빌드하면 대부분 문제없이 디버깅 기능을 사용할 수 있다. 문제는 프로그램이 시스템 장치를 사용하는 경우 sudo로 실행해야 하는데 이런 경우에는 별도의 처리가 필요하다. 우선 launch.json 파일에서 위의 그림처럼 "MIMode"는 gdb로 둔 상태에서 "miDebuggerPath"에 자신의 디버거 실행 파일의 경로를 입력한다. 이 파일은 쉘 파일로 이곳에서 gdb를 실행하게 될 것이다. pkexec /usr/bin/gdb "$@"쉘 파일의 내용은 ..
리눅스 환경에서의 프로그래밍 과정에서 편리한 통합 개발 환경의 존재는 프로그래머에게 날개를 달아주는 것이다. 맥 환경의 XCode나 윈도우 환경의 비주얼스튜디오가 바로 그런 존재이다. 물론 리눅스 환경에서도 NetBeans, CodeBlocks 등을 사용할 수 있지만 비주얼스튜디오 코드의 등장은 여러모로 반갑다. 필자의 경우 C/C++ 개발 과정에서 gdb와 연동하여 디버깅하는 과정은 나름 만족스러운 수준이다. 그런데 복병이 등장했다. 프로그램이 네트워크 인터페이스나 통신 포트와 같은 시스템 자원을 직접 접근하는 경우에는 sudo 권한이 필요한데 일반적인 상황으로는 sudo 권한을 받는 과정에서 실패하여 디버깅을 할 수 없었다. 여러 가지 해결책이 있으나 시스템 보안을 유지하며 자연스럽게 이러한 필요를 ..
통상 대화창에서 [확인] 버튼을 누르면 필요한 작업을 수행하는 것이 보통이지만 텍스트 입력창에서 엔터키를 눌렀을 때 마우스 클릭 없이 바로 대화창을 종료하고 싶은 사용자가 있기 마련이다. 이러한 경우에 처리할 수 있는 방법이다. 대화창의 디자인 편집기를 열고 텍스트 박스를 선택한 다음 위의 그림과 같이 속성창에서 이벤트 아이콘을 클릭한다. 그리고, "KeyDown" 이벤트를 찾아 우측 공간에 더블클릭하여 자동으로 코드를 만들고 다음과 같이 코드를 작성하면 된다. private void intext_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { gomake_Click(this, new EventArgs()); } } 입력된 ..
QT UI 앱을 작성하다가 특정 메뉴의 서브 메뉴 일부를 라디오 버튼 동작 방식처럼 그룹 중 일부만 선택되도록 하는 필요가 생겼다. 서브 메뉴를 열면 현재 선택 상태도 보인다. 먼저 결과 화면먼저 보면 위의 그림과 같다. 개별 서브메뉴를 선택했을 때 미리 설정된 액션 슬롯도 수행하고 어떤 메뉴가 선택 상태인지도 표시된다. actZoom40 = new QAction(QIcon(), _("40%"),this); connect(actZoom40, SIGNAL(triggered()), this, SLOT(OnZoom40Menu())); actZoom70 = new QAction(QIcon(), _("70%"),this); connect(actZoom70, SIGNAL(triggered()), this, SLOT..
QT 프레임워크를 사용하는 응용 프로그램을 개발하다가 창을 나누어 나름의 역할을 수행하도록 하는 필요를 만났다. 완성된 창 나누기 그림이다. 모든 영역은 경계선에 마우스를 올려두면 사용자가 크기를 조정할 수 있다. 먼저 전체 영역을 좌우로 나누고 각 영역을 상하로 나눈다. 그리고 우측 위쪽 영역을 다시 좌우로 나눈 결과이다. 간단히 "전체 - 좌(-상, 하), 우(-상[-좌, 우], 하)"로 정리할 수 있는데 구조적인 구성임을 알 수 있다. 구조적이라는 의미는 하부 요소는 상위 요소의 자식(Child) 요소로 지정되어야 한다는 의미다. //Init splitter splitter = new QSplitter(centralWidget()); splitter->setOrientation(Qt::Horizon..
길지 않은 파이썬 코드를 읽고 이해하는 것은 파이썬에 조금만 익숙한 프로그래머라면 그리 어려운 일이 아니다. 또한, 규모가 큰 프로그램이라도 통합 개발 도구를 사용하여 호출하는 곳들을 찾고, 정의된 곳을 따라 들어가면서 코드를 조금씩 이해하는 것이 프로그램 분석의 정석 일수 있다. 그렇지만, 빠르고 효과적인 분석을 위해서는 프로그램의 실제 동작 과정을 큰 그림으로 먼저 살펴보는 것이 중요하다. 비즈트레이서(VizTracer)는 도구의 이름처럼 프로그램의 실행 과정을 추적하여 그 결과를 도표를 통해서 쉽게 확인할 수 있도록 도와준다. 비주얼스튜디오 코드 익스텐션(VizTracer VS Code)을 사용하면 코드와 연동하여 분석 결과를 유용하게 활용할 수 있다. 전체 코드는 https://github.com..
이 글은 파이썬 언어로 작성한 프로그램을 C/C++ 언어로 변환할 수 있을까? 하는 물음에서 시작되었다. 파이썬 언어의 장점도 많지만 속도가 느리고 메모리 사용량이 많다는 단점, 그리고 소스코드 배포로 인한 보안성 취약 등을 언급하는 사람들이 있다. 물론 파이썬 소스 코드를 배포하지 않고 컴파일한 파이썬 바이트코드(*.pyc)로 배포하는 방법이 있지만, 이것 또한 바이트코드 디컴파일러(예, https://github.com/rocky/python-uncompyle6/)를 사용하면 주석을 제외한 대부분의 코드를 복원할 수 있다. 파이썬 소스 코드를 보호하는 다른 방법 중의 하나는 코드를 읽기 어렵게 만드는 난독화(obfuscation)를 수행하는 것으로 도구를 사용하여 함수 이름이나 변수명을 거의 읽기 어..
파이썬 프로그래밍의 장점 중의 하나라면 다양한 라이브러리가 공개되어 있어 필요에 따라 적절하게 설치해서 손쉽게 활용할 수 있는 것이다. 그렇지만, 내가 직접 개발한 것이 아닌 블랙박스와 같은 것이므로 라이브러리에서 문제가 생기면 황당할 수밖에 없다. 필자가 경험한 사례는 다른 옵션을 사용할 때는 문제가 없던 프로그램이 gevent 라이브러리를 사용하는 웹서버를 가동하면 위의 그림처럼 CPU 사용도가 급격하게 올라가는 것이었다. 클라이언트 요청이 많아서 웹서버가 할 일이 많았다면 그럴 수도 있겠다 싶지만, 현재 상황은 아무런 요청도 없는 상태로 CPU 로드가 올라갈 이유가 없다. CPU 로드를 엄청 먹고 있는 프로세스의 PID를 메모한다. (volttron) ubuntu@ubuntu:~/volttron$ ..
모드버스(Modbus) 프로토콜은 PLC를 비롯한 다양한 장비들 간의 정보 소통을 위한 표준 통신 프로토콜로 요즘 나오는 대부분의 PLC들은 대부분 모드버스 프로토콜을 지원하고 있고 스카다나 BEMS, MES와 같은 대형 소프트웨어에서도 장비나 타 시스템과의 통신을 위해 모드버스 프로토콜을 지원하고 있다. 이렇게 모드버스 프로토콜이 표준으로 자리 잡을 수 있었던 배경에는 일치감치 상세한 프로토콜 스펙이 오픈되고 연관한 오픈소스 라이브러리가 공개되어 안정적으로 성능을 발휘한 까닭이 아닌가 싶다. 1979년 처음 프로토콜이 등장할 당시만 해도 시리얼 통신 프로토콜이었으나 지금은 TCP/IP로도 사용할 수 있다. 모드버스 프로토콜을 접하려면 우선 어떤 방식을 채용할지를 확인해야 한다. 소프트웨어 개발자의 시작..
프로그램 내에서 워드 문서(마소 오피스나 리브레 오피스로 작성)를 새롭게 생성하거나, 기존 문서를 수정하거나 아니면 특정 양식에 필요한 내용을 반영하여 새로운 문서를 만드는 등의 작업을 하는 경우가 있다. 자동차 검사소에서 고객들이 받는 검사 결과지를 예로 들 수 있다. 각종 자동차 검사를 수행하면 다양한 검사 장비와 센서에서 올라온 값들을 검사원이 양식에 일일이 입력하는 것이 아니라 작업이 끝났다는 신호와 함께 보고서 출력을 지시하면 미리 준비된 양식에 해당 값을 자동으로 입력하여 출력하고 양식은 파일로 남겨 놓는 것이다. 우리나라 국민들이 받는 건강 검사의 경우도 마찬가지이다. 사람이 직접 입력하는 신상 정보와 검사 정보를 데이터베이스에 저장해 두었다가 미리 준비한 양식에 맞게 출력하는 것이다. 본 ..
VSCode에 플러그인으로 ESP-IDF 환경도 준비했고, ESP32-S3를 장착한 보드도 확보했으니 본격적인 개발에 앞서 이제 테스트 프로그램을 작성해서 기기용 이미지로 만들어 업로드하고(Flash) 원하는 대로 기기가 동작하는지 살펴보는 일이 남았다. 2Cm도 안 되는 작은 칩에 웬만한 시스템 기능이 모두 담겨 있으니 세상 많이 바뀐 것 맞다. VSCode에서 [F1] 단축키나 보기 > 명령 팔레트 메뉴로 위와 같이 팔레트 창을 띄운 다음 esp-idf를 입력하면 연관된 다양한 명령들을 확인할 수 있다. 그중에서 "ESP-IDF: Welcome"을 선택하면 위의 그림처럼 프로젝트를 시작하거나 프로젝트를 가져오기 할 수 있다. [Show example]을 클릭하면 사용할 프레임워크를 선택하라는 화면이 ..
사물인터넷(IoT)이 삶의 곳곳으로 파고드는 시대에 살면서 개발자로 피할 수 없는 개발 환경을 만나게 되었다. 중국의 반도체 회사 에스프레시프 시스템(https://www.espressif.com/)이 만들고 있는 ESP32-S3라는 MCU를 기반으로 와이파이로 서버와 통신도 하고 블루투스로는 모바일 기기와도 통신해야 하는 시스템을 구축하게 된 것이다. 4 나노 기술로 생산한다는 ESP32-S3는 단순한 칩이 아니라 내부에 듀얼코어 CPU와 보조 프로세서, 와이파이, 블루투스 및 기타 외부 장치를 처리할 수 있는 SoC(시스템 온칩) 시스템이다. 그야말로 칩 하나로 웬만한 컴퓨터 시스템이 수행하는 역할을 해내고 있으니 IoT 기기를 제작하는 데 있어 아주 매력적인 도구로 보인다. 임베디드 시스템이므로 제..
빠르게 변화하는 세상만큼이나 개발 환경의 변화도 조금 과장해서 눈 감았다가 뜨면 새로운 도구가 생길 정도로 급격하다. 안드로이드 앱 개발의 필요성이 있어서 안드로이드 스튜디오와 ADK를 설치하고 연관된 오픈 소스 프로젝트들을 찾아보다가 언어가 C#으로 되어 있는 프로젝트를 발견했다. 알고 보니 비주얼 스튜디오에서 ".NET을 사용한 모바일 개발" 요소를 설치하면 안드로이드 앱과 iOS용 앱을 만들 수 있는 것이었다. 물론 프로그래밍 언어는 C#으로 가능하고 사용자 인터페이스의 디자인은 XAML 디자이너로 수행한다. 윈도우 시스템과 비주얼 스튜디오 자체의 업데이트를 모두 반영한 상태에서 위의 그림처럼 도구 > 도구 및 기능 가져오기 메뉴에서 ".NET을 사용한 모바일 개발" 요소를 추가로 설치하면 자마린(..
단순 텍스트 에디터로 만드는 프로그램이든 이클립스나 비주얼 스튜디오와 같은 통합 개발 환경에서 만드는 프로그램이든 해당 환경에서 실행되는 간단한 프로그램을 시작부터 끝까지 만들어 보는 것은 매우 중요하다. 그런 의미에서 안드로이드 스튜디오를 통해서 간단한 텍스트를 출력하는 앱을 만드는 과정을 따라가 볼까 한다. ■ 새 프로젝트 만들기 안드로이드 스튜디오 첫 화면에서 [New Project]를 클릭하면 템플릿 선택 화면이 나오는데 여기에 표시되는 다양한 템플릿을 통해서 빠른 개발을 진행할 수 있다. 좌측 "Phone and Tablet" 탭을 선택하고 우측에서 "Empty Compose Activity" 템플릿을 선택하고 [Next]를 클릭한다. 새로운 프로젝트의 정보를 작성하는 화면으로 앱의 이름을 적절..
안드로이드 앱 개발이 필요해서 정말 오래간만에 안드로이드 개발 환경(ADK)을 설치하게 되었다. 안드로이드 초창기에 ADK를 컴퓨터에 설치했던 기억을 떠올리면 그때만 해도 애플의 앱스토어에 밀려 과연 안드로이드가 기라도 필수 있을까? 하는 이야기를 하는 사람이 많았지만 안드로이드 운영 체제가 애플의 iOS를 넘어선 지는 이미 상당한 시간이 지났다. 그만큼 개발 환경도 발전하고 다양해져서 게임 개발 엔진에서 안드로이드용 앱을 퍼블리싱하는 것은 자연스러운 흐름이 되었다. 오늘은 2022년 시점에서 안드로이드 스튜디오를 설치하고 연관하여 SDK도 설치하는 과정을 기록으로 남길까 한다. 윈도우, 맥, 리눅스에서 모두 안드로이드 스튜디오를 사용할 수 있는데 포스팅은 윈도우 10을 기준으로 한다. https://d..
요즘은 지상파 TV에서도 범죄 심리를 다루는 프로파일링을 자주 접할 수 있어서 일반인들은 프로파일링이란 용어를 접하면 범죄 심리를 다루는 전문가를 연상하지만, 프로그래밍 영역에서도 프로파일링은 상당히 중요한 부분이다. 입력, 처리, 출력으로 이어지는 단순한 흐름의 개발로 손을 털 수 있는 프로그램이라면 프로파일링을 접할 기회는 거의 없겠지만 데이터베이스 관리 시스템이나 다양한 저작 도구와 같은 "도구"성의 덩치가 있는 프로그램들은 처리하는 데이터 용량이나 기타 환경에 따라 성능을 개선해야 하는 상황에 직면할 수밖에 없다. 성능 개선의 방법으로 설계를 바꾸는 즉, 프로그램의 구조를 대대적으로 변경하는 재구조화도 있지만, 일정한 영역이 자주 호출되거나, 특정 부분에서 시간을 오래 소모하는 경우를 찾아서 각개..
프로그램 개발을 하는 조직이 어느 정도 규모가 있고 체계적이어서 QA 조직까지 있으면 나름 프로그램 품질 관리의 수준을 높일 수 있는 기반은 갖추어진 것이라 할 수 있다. 물론 QA 조직에서 공격적이면서도 꼼꼼한 다양한 테스트 케이스 작성과 테스트 자동화를 운용하고 있을 때 이런 이야기도 가능할 것이다. 그렇다면, 이런 조직도 없고, 풍성한 테스트 케이스에 기반한 자동 테스트 시스템도 없다면 어떻게 프로그램의 품질을 놓일 수 있을까? 유닛 테스트(Unit Test)로 미처 개발자가 감안하지 못한 오류를 검출하거나 잘못된 프로그램 수정으로 인한 오류를 예방할 수도 있고 테스트 커버리지(Coverage)를 극대화한 테스트 자동화 시스템 구축도 검토해 볼만하고, 성능 프로파일링(Performance Profi..
응용 프로그램을 동작하는 시스템의 언어 설정에 따라 사용자 인터페이스의 언어가 자동으로 바뀌게 하면 그만큼 프로그램의 활용도와 유용성은 높아진다. 상당히 많은 오픈소스 프로젝트들이 이런 체계를 적용하고 있고, 국내의 많은 개발자들은 나름의 번역 실력으로 해당 프로젝트에 참여하기도 한다. 코드 커미터로 참여하면 더 좋겠지만 개인적으로 보기에는 대부분은 한국어 번역 추가에 그치고 있다. 아무튼 이러한 다국어 기반 또는 국제화(i18n)가 적용된 프로젝트들은 많은 경우 gettext를 도구로 활용한다. 통상 영어를 기본 언어로 하여 소스 코드 등에서 gettext를 사용하도록 개발한다. 개발이 어느 정도 진행되면 도구를 통해서 사전 파일인 *.po를 만들어 내고, 번역자들은 소스 코드를 손대지 않고 단순 텍스..
다양한 CPU, 다양한 운영체제의 홍수 속에서 자바와 .Net과 같은 플랫폼 독립성을 가진 체계가 점점 더 힘을 얻어가고 있는 형국이다. 운영체제나 CPU의 종류에 제한받지 않는 응용 프로그램의 개발 및 배포는 생산성뿐만 아니라 여러 가지 장점을 제공한다. 더구나 끊임없는 하드웨어 성능의 발전은 플랫폼 독립성 때문에 희생해야 하는 성능적인 단점조차도 문제가 되지 않게 해주고 있다. C언어로 작성한 프로그램을 C/C++ 컴파일러로 빌드하게 되면 윈도나 리눅스와 같은 특정 운영체제에서만 수행할 수 있는 기계어 코드가 만들어 진다. 이 기계어 코드는 특정 운영체제에서만 사용할 수 있을 뿐만 아니라 CPU의 제약도 받을 수밖에 없다. 그만큼 개발자의 입장에서는 다양한 플랫폼 환경을 감안해야만 한다. 그렇지만 자..
대부분의 일반적인 응용 프로그램에서는 사용할 가능성이 거의 없지만, 약간 도구성의 프로그램을 개발하거나 직접 _paint 메시지를 받아서 이미지나 텍스트를 드로잉 하는 프로그램의 경우에 화면 크기를 벗어나는 영역에 대한 처리를 위해서는 스트롤 바 컨트롤을 적용하는 것이 사용자 편의성을 높여 주는 방법이라 할 수 있다. 비주얼 스튜디오 도구 상자에서는 수직 방향의 컨트롤을 위한 VScrollBar와 수평 방향의 컨트롤을 위한 HScrollBar 컨트롤을 제공하고 있으므로 해당 컨트롤을 폼에 삽입하여 처리한다. 폼에 스크롤바 컨트롤을 추가한 다음에 속성 창에서 Dock를 VScrollBar는 우측(Right)으로 붙도록, HScrollBar는 아래쪽(Bottom)으로 붙도록 설정해 준다. Dock 값을 Ri..
프로그램을 개발하다 보면 압축 상태의 자료를 읽거나, 아니면 자료를 압축 상태로 저장해야 하는 경우가 있다. 장기간 보관이나, 통신량 최소화, 보안 등의 필요와 연관되는 경우가 대부분이다. 이런 경우 외부 프로그램을 통해서 압축 및 압축 해제를 수행시키고 그 결과를 사용하는 방법도 있지만 프로그램의 융통성도 떨어지고 좀 더 효율성이 높은 프로그램을 제작하기에는 무리가 있다. 이런 경우 압축 라이브러리를 사용하면 프로그램의 융통성도 높이고 다양한 아이디어를 프로그램에 적용할 수 있다. 또한 .Net 전용 라이브러리를 사용하면 별도의 C/C++ 라이브러리를 사용하지 않아도 되므로 개발 및 배포 과정이 더 간편해진다. 비주얼 스튜디오에서 NuGet 도구를 활용하여 라이브러리를 설치할 수도 있겠으나 많은 경우 ..
다중 사용자 환경이 아닌 응용 프로그램의 데이터베이스로는 SQLite 만한 것이 없다. 윈도, 리눅스, 맥과 같은 범용 운영체제뿐만 아니라 안드로이드 등 수많은 환경에서 SQL 기반으로 프로그래밍을 할 수 있기 때문이다. 파일 시스템을 사용하는 소위 삽질을 하지 않더라도 SQL을 사용해서 가독성도 높이고 생산성과 유지보수 등에 있어 수많은 장점을 가진 프로그램을 개발할 수 있다. SQLite를 사용하는 프로그램은 프로그램 배포 과정에서 문제가 발생할 수 있다. 개발 환경에서는 문제없이 잘 동작했는데 막상 실제 수행 환경으로 가면 종종 문제가 발생하는 것이다. 대부분의 문제를 살펴보면 그 원인은 라이브러리에 있는데 수행 환경의 32비트/64비트 환경과 일치하는 라이브러리가 배포되지 않았기 때문이다. 32비..
C# 프로그래밍을 하다 보면 글자색이나 배경색을 선택할 때 위의 그림처럼 사용자 지정, 웹, 시스템으로 크게 나누어 미리 정의된 색상을 선택할 수 있다. 물론 각 색상에는 영문으로 색상 이름이 부여되어 있기도 하다. 통상 색상을 선택하거나 바꾸는 작업에는 별 문제가 없다. 그런데, 사용자로 하여금 특정 요소의 색상을 바꿀 수 있도록 기능을 제공하는 경우는 이야기가 조금 달라진다. 이런 기능을 제공할 때는 색상 선택, 선택한 색상 정보 저장, 저장한 색상 정보를 컨트롤에 적용하는 단계들이 개입하는데 각 단계별로 색상 정보를 어떻게 다룰지가 전체적인 기능 구현에 영향을 미친다. 색상을 선택하는 단계는 ColorDialog 컨트롤을 가져다 사용하면 간단히 해결된다고 생각할 수 있다. 물론 대화창 인스턴스의 C..
C# 프로그래밍을 하다 보면 자주 사용하는 데이터 타입 간 변환이 있는데 이것들을 정리해 볼까 한다. ■ 바이트 배열과 문자열 간의 변환 일단은 byte[] 타입과 스트링 간의 변환이다. byte 타입은 통신 과정에서 많이 다루게 되는데 시리얼 통신이나 TCP/IP 통신 과정에서 서버와 클라이언트, 피어 간의 메시지 전달은 통상 byte [] 배열을 사용하는 내장 함수들이 많다. 대표적인 사례를 살펴보면 소켓 클래스의 메시지를 송수신하는 Send(), Receive() 함수를 들 수 있다. byte 배열은 말 그대로 8비트가 모인 1 바이트가 하나의 원소인 배열로 그 안에 포함된 내용이 영문인지, 한글인지, 문자인지 이진 값인지 상관하지 않는다. 반면에 문자열 스트링은 사람이 인식하는 텍스트를 가지고 있..
C# 닷넷 프로그램에서 시스템 시간을 변경하는 과정을 설명합니다. C# 닷넷 프로그램에서 시스템 시간을 설정하는 과정에서 꼭 유념해야 할 것들은 WIN32 API인 SetSystemTime()을 이용해서 설정하는데 그 과정에서 컴퓨터 시스템의 타임존을 반드시 감안해야 한다는 것입니다. 또한 윈도우 10등의 경우 시스템 시간을 변경하는 것이므로 프로그램을 관리자 권한으로 수행시켜야 프로그램이 실제 효력을 발휘할 수 있습니다. struct SYSTEMTIME { public ushort wYear; public ushort wMonth; public ushort wDayOfWeek; public ushort wDay; public ushort wHour; public ushort wMinute; public..
키보드가 없는 임베디드 시스템이나 터치스크린 시스템에서 키 입력을 받는 방법은 크게 두 가지가 있습니다. 하나는 윈도 시스템에 내장되어 있는 가상 키보드 어플을 동작시키는 것으로 외부 프로세스로 osk.exe를 실행시키는 방법입니다. 다음과 같은 코드로 간단하게 수행시킬 수 있습니다. Process p = new Process(); p.StartInfo.FileName = "C:\\Windows\\System32\\osk.exe"; p.StartInfo.Arguments = null; p.StartInfo.WindowStyle = ProcessWindowStyle.Normal; p.Start(); 두 번째 방법은 WinForm 내에 자체적인 가상 키보드를 내장시키는 것으로 가상 키보드를 직접 제작하는 방..
다른 프로그램을 실행시켜도 화면 한 구석에 항상 창이 보이는 응용 프로그램을 제작해야 하는 필요가 생겼습니다. 통상 트레이(Tray)등을 활용하는 경우가 많지만 임베디드 환경처럼 키보드도 없고 윈도 상태바도 숨김으로 동작한다면 이런 필요를 충족시켜주기에는 한계가 있습니다. 예를 들어 한 응용 프로그램에서 다른 프로그램을 실행시킨 다음에 ALT+TAB이나 트레이 등의 방법을 사용하지 않고 원래의 프로그램으로 돌아올 방법이 필요한 것입니다. 아니면 너무나 자주 사용하는 프로그램이기 때문에 항상 가동 중에 있다가 다른 프로그램을 사용하고 있는 중이더라도 버튼만 누르면 해당 프로그램으로 복귀하고 싶은 필요를 해결해 주고자 하는 경우입니다. 이런 경우 C# WinForm의 TopMost 속성을 사용하는 경우가 많..
■ 파이썬 모듈의 설치 파이썬 모듈을 rpm, yum, apt-get등의 리눅스 설치도구나 윈도우의 실행 프로그램으로 설치하면 현재의 시스템과 파이썬 구동 환경에 맞게 간단히 설치할 수 있지만 특정 모듈에 집중해서 배포하는 경우에는 파이썬의 Distutils에서 제공하는 표준 기능을 활용하여 어렵지 않게 설치 할 수 있습니다. 위의 그림은 파이썬에서 생성한 setuptools의 윈도우용 배포 파일을 실행 했을 때의 화면으로 현재의 파이썬 환경을 자동 인식하여 손쉽게 설치를 진행 할 수 있음을 확인할 수 있습니다. 모듈을 설치하면 위의 그림과 같이 파이썬 라이브러리 폴더 아래 site-packages에 저장됨을 확인 할 수 있습니다. 설치 작업은 모듈을 다운로드 받아서 압축 파일을 특정 폴더에 해제하는 것..