컴퓨터로 작업하면서 즐겨 듣는 음악이 있는지 물어온다면 저의 경우에는 인터넷 라디오 방송을 듣는다고 대답할 것입니다. 제가 듣는 방송은 CBS의 음악 FM으로 프로그램을 실행시키면 아래와 같은 화면을 통해서 방송 듣기를 할 수 있습니다. 일반적인 윈도우 폼과 같은 제목도 없고 컨트롤 박스도 없는 화면입니다. 안테나 그림 뒤로는 투명한 배경도 사용하고 있고요. 이와 같이 전형적인 창 모양이 아닌 자유로운 형태의 윈도우 폼 응용 만들기를 해볼까 합니다. CBS의 레인보우 프로그램을 본따서 만들어 보겠습니다.첫번째로 해야될 작업은 배경으로 사용할 이미지를 준비합니다. 필자의 경우에는 위에서 언급한 것처럼 CBS 레인보우 프로그램을 실행시킨 상태에서 [Alt+Print Screen]으로 화면을 캡쳐해서 편집했습..
대학로 둘러보기 여행에서 만난 알라딘 중고책 서점, 한쪽에서는 책을 사느라 바쁘고 또다른 한쪽에서는 책을 파느라 바쁘고 예전에는 보지 못하던 생경스런 풍경이니 만큼 우리 가족의 책 충동 구매를 부추기기에 충분한 환경이었습니다. 그 충동 구매의 목록에 있었던 책 "44세의 필독서". 책 제목만으로는 마케팅의 냄새가 풀풀 풍기기는 했으나 과감히 지를수도 있는 나이가 중년아닌가! 목차와 서두를 읽어보니 한번 읽어볼만 했습니다. 쭉 읽어낸 느낌은 동네 형에게 인생 경험의 한 설을 듣는 것과 같았습니다. 한가지 미리 머리에 두실 점은 저자가 "팡저우"로 중국인이라는 점입니다. 1인 자녀 배경이라던가 예화로 드는 스토리의 많은 부분이 중국을 배경으로 하고 있음을 감안하셔야 합니다. 그럼에도 불구하고 어떻게 이렇게 ..
윈도우 폼(Forms) 응용 프로그램에서 개별 폼에 포함되어 있는 컨트롤은 비주얼스튜디오 디자이너 화면에서 도구 박스에서 끌어다놓기 방식으로 추가 및 설정하는 것이 일반적인 방법이지만 프로그램 실행 과정에서 특정 조건이나 옵션에 따라서 컨트롤을 추가하거나 삭제할 수 있습니다. 실행중 컨트롤 추가 및 삭제는 "폼이름.Designer.vb"의 형태로 저장하는 디자이너 코드 파일의 흐름을 따라하기 하면 됩니다. Partial Class Form1 Inherits System.Windows.Forms.Form Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then..
프로그래밍 과정에서 배열만큼 많이 활용되고 편리한 데이터 구조체는 없을 것입니다. 배열은 모든 원소의 데이터 타입이 동일한 데이터 집합으로 정의할 수 있으며 인덱스에 의해서 각 원소를 접근할 수 있습니다. PHP에서는 좀더 유연한 형태의 배열을 다룰 수 있으며 스트링과 같은 기본 타입 뿐만아니라 복잡한 클래스 오브젝트도 배열의 원소로 사용할 수 있습니다.그런데, 배열을 사용하다보면 편리하기는 하지만 배열은 PHP 환경 파일에서 설정한 메모리 허용 용량 내에서만 사용할 수 있기 때문에 파일 용량이 크거나 배열 크기가 커지는 경우에는 프로그램이 메모리 한계에 부딛혀 비정상 종료되는 상황이 벌어질 수 있습니다. 그래서 대용량 배열을 메모리에 저장하지 않고 디스크에 저장해서 용량의 크기에 관계없이 정상적인 프로..
윈도우 폼 응용의 특징중의 하나는 사용자와의 대화를 다양한 창을 통해서 수행한다는 점일 것입니다. 이러한 창은 개발자가 다양한 기능 제공을 위해서 제작한 것도 있지만 자주 사용하는 창은 시스템에서 기본적으로 제공하기도 합니다. 좌측의 그림은 비주얼스튜디오의 도구 박스에서 제공하는 다양한 컨트롤로 노란색의 박스로 표시한 시스템 창을 확인할 수 있습니다. 이외에도 색상 선택을 위한 ColorDialog도 제공하고 있습니다. 도구 박스에서 제공하는 시스템 창들은 도구박스에서 디자이너 작업 공간으로 끌어다놓기(Drag & Drop)로 컨트롤을 추가하고 각 창별로 필요한 옵션을 설정하는 방법으로 간편하게 사용할 수 있습니다.도구박스에서 제공하는 시스템 창들은 특정 기능에 특화되어 있다면 단순하게 오류 메시지나 결..
윈도우에서 깃(git) 설치하기을 통해서 윈도우에서도 깃(Git)을 사용할 준비를 했다면 우선 오픈 소스 프로젝트를 체크 아웃 받는 작업을 통해서 깃의 동작을 맛볼 필요가 있습니다. 많은 오픈 소스 프로젝트에 대해서 Git 호스팅 서비스를 제공하는 GitHub(github.com)에서 C# 기반의 실시간 게임 엔진으로 인기 있는 OpenRA를 체크아웃 받아 보겠습니다. 프로젝트의 일원이 아니더라도 소스 코드를 내려 받을 수 있도록 하고 있는데 위의 그림의 우측에서 보듯이 깃으로 접근하기 위한 주소를 제공하므로 아이콘을 클릭하여 깃 접속을 위한 주소를 복사합니다. 윈도우 탐색기에서 원격 프로젝트를 복제할 위치로 이동하여 마우스 우측 마우스로 팝업메뉴를 띄우고 "Git Gui"로 GUI 화면을 아래와 같이 ..
얼마전부터 요리사 두명, 두명의 음악가, 두명의 개그맨이 모여 "도시 농부"를 주제로한 인간의 조건이란 예능 프로그램이 방영되고 있습니다. 그 프로그램에는 일명 "허세 셰프"라는 분도 등장하는데 독특한 개성에 프로그램을 맛깔나게 하는 캐릭터입니다. 그런데 그분이 극구 옥상 텃밭에 논을 만들자고 해서 시작한 벼 농사, 얼마전에는 피 뽑기 소동도 나오면서 피와 벼를 구분하는 방법이 지상파를 타기도 했습니다. 매일 주식으로 먹는 쌀의 재배 과정을 많은 도시민들이 만날 수 있는 것만으로도 "호사"가 아닌가 싶기도 하지만 이 프로그램에서 벼꽃도 보여 줄 수 있다면 얼마나 좋을까 하는 생각을 해보았습니다. 꽃이 피는지도 지는지도 모르게 살짝 보였다 사라지는 화려하지 않은 벼꽃이지만 인류이래로 수천년 종족을 보존하기..
말복을 보내면서 만나는 반가운 얼굴 콩꽃입니다. 품종마다 꽃의 색깔도 조금씩 다르고 꽃의 개수도 다르지만 이 앙증맞은 꽃에서 콩 꼬투리가 나오는 것만은 분명합니다. 이 꽃을 많이 피우려고 순지르기하는 집들도 꽤 있습니다. 위의 그림 처럼 가지와 가지 사이에 꽃을 피우고 꼬투리를 맺기 때문에 순지르기로 키를 키우기 보다 가지에 힘을 쏟으라는 농부의 의지인 것입니다. 위의 그림들에 있는 하얀 꽃은 쥐눈이 돌콩의 꽃입니다. 보라색 꽃은 메주콩(백태)의 꽃입니다. 백태의 경우에도 가지와 가지 사이에 꽃을 피우는 것을 확인할 수 있습니다. 가지의 솜털이 인상적입니다. 꽃을 더 많이 피우기 위한 순지르기를 하고 싶다면 이렇게 꽃을 피우기 훨씬 이전에 작업해야 합니다. 시기와 성장 과정을 면밀히 살펴보아서 줄기가 너..
해바라기를 대량으로 키우시는 분들은 대부분의 해바라기가 익어갈 무렵 기계로 한번에 수확하시겠지만 필자와 같이 소량으로 키우면서 해바라기 후작으로 콩이라도 심어서 이모작을 하고 싶은 이들은 빨리 익지 않는 해바라기에 조바심이 나서 뙤악볕에 이리보고 저리보고 몸이 안달이 날 지경입니다. 이른 봄 해바라기를 한번에 모종하고 심었어도 수확 시점은 제각각입니다. 위의 그림은 올해 처음 수확했던 해바라기를 채반에 건조하고 있는 모습이고 아래의 그림은 그 이후에 시간차를 두고 수확한 것을 매달아서 건조하고 있는 모습입니다. 수확 시점은 해바라기 열매 뒷편이 노랗게 변하고 앞 쪽 열매 앞에 붙은 꽃들이 저절로 떨어지기 시작할 무렵이 적기 인듯 싶습니다. 목을 댕강 댕강 잘라놓은 것이 이상 야릇한 모습이지만 해바라기를 ..
깃(Git)은 Mercurial과 함께 분산 버전 관리 시스템(DVCS, Distributed Version Control System)의 대표 주자입니다. 최근에는 깃허브(githum.com)의 활성화와 함께 깃의 인기는 지속적으로 상승하고 있고 이로써 전통적인 버전 관리 시스템인 서브버전(Subversion)의 자리도 하나 둘씩 깃(Git)으로 대치되고 있는 상황으로 보입니다. 물론 개발에 직접 참여하지 않고 소스 코드를 주기적으로 업데이트 받고 싶다면 이전에 사용하던 서브버전을 그대로 사용할 수도 있습니다. 깃허브와 같은 서비스 시스템에서 통상 깃 리포지토리 호스팅 뿐만아니라 서브버전 인터페이스도 제공하기 때문입니다. 그렇지만 개발 조직에서 도구를 깃으로 통일하고 기존에 버전 관리하던 내용도 깃으로..
PM, PMO, 스프트웨어 공학(SE), 형상 관리, 버전관리, 테스트 케이스 작성과 테스트, 정적 코드 검사, Unit test...... 개발자들이 그리 탐탁치 않게 여기는 것들이 아닌가 싶습니다. 필요한 기능을 빨리 개발해 내면 되지 실질적으로는 별로 도움이 되지 않는것 같은 복잡한 절차를 왜 자꾸 만들지? 하는 의문이기도 합니다. 이러한 의문이 어떤 경우에는 설득력이 있는 경우도 있습니다. 절차라는 것이 진짜 형식일 뿐인 경우도 있으니 까요. 그런나 1인 개발 체제를 넘어서서 여러 사람이 함께하는 협업 개발 환경으로 전환되거나, 소프트웨어의 생존 기간이 길어지고 업데이트와 업그레이드 과정이 반복되다 보면, 위에서 그리 탐탁치 않게 여기던 것들이 "아, 이래서 필요한 것이었구나!"하는 공감을 하게 ..
프로그래밍 언어를 사용하면서 변수, 키워드(예약어), 연산자등의 다양한 문법 구조가 있지만 중요한 역할을 하는 요소는 바로 리터럴입니다. 리터럴(literal)은 단어적 의미인 "문자 그대로의" 의미 처럼 숫자, 문자등의 값 그대로를 의미하는 문법 요소입니다. 변하지 않는 값이므로 상수(Constant)값이라 지칭하기도 합니다.그런데 동일한 숫자 값일지라도 서로 다르게 취급될 수 있습니다. 예를 들어 10과 10UL은 같은 값이지만 10은 int타입이고 10UL은 unsigned long 타입으로 표현 범위가 완전히 다릅니다. 이처럼 C#의 다양한 데이터형에 따라 리터럴 표현 방법도 다양합니다. ■ 정수형 리터럴C/C++과는 달리 2진수 및 8진수 표현은 존재하지 않습니다. 0x를 앞에 붙이면 16진수로..
윈도우 폼으로 화면 기반의 프로그램을 작성하면 System.Windows.Forms 클래스를 상속받아 클래스를 작성하게 됩니다. Forms 클래스의 연관 속성과 메서드, 이벤트는 MSDN 페이지에서 자세하게 확인할 수 있습니다. 페이지의 링크는 https://msdn.microsoft.com/ko-kr/library/system.windows.forms.form(v=vs.100).aspx입니다. 아래의 그림은 Forms 클래스의 속성과 메서드, 이벤트를 마인드맵으로 나타낸 것입니다. 속성을 적절하게 설정하여 제목, 창의 위치나 크기등을 조정하고 메서드 호출을 통해서 원하는 동작을 지시할 수 있으며 다양한 이벤트에 대응하는 적절한 이벤트 처리 루틴을 기술할 수 있습니다. 닷넷 환경에서 VB 또는 C#으로 ..
페인트닷넷에서 제공하는 기본 기능으로 왠만한 이미지 편집과 조정이 가능하지만, 사용자들의 다양한 필요를 적용한 플러그인들은 페인트닷넷이 오픈소스 무료 프로그램으로 질이 낮다는 편견을 불식시키는데 적지 않은 역할을 합니다. 특히 이미지 조정 및 효과와 관련한 플러그인은 상용 프로그램에서 수행하는 왠만한 기능들을 사용할 수 있도록 해줍니다. C# 언어를 구사할 수 있다면 나름의 효과 플러그인 개발을 시작할 수도 있습니다.본 포스팅에서는 http://forums.getpaint.net/index.php?/topic/20421-glass-text-with-filling/에서 다루고 있는 유리 효과를 내는 텍스트 만들기 튜토리얼을 따라하면서 다양한 효과 플러그인을 사용하기를 안내하고자 합니다. 본격적인 작업 이전..
페인트 닷넷의 다양한 효과 적용은 아래의 그림과 같이 7개의 내장 효과 기능과 사용자가 추가한 플러그인을 통해서 수행할 수 있습니다. 맨상단의 "반복" 메뉴는 직전 특정 효과를 적용한 경우에만 나타나는 메뉴로 직전에 수행했던 효과를 다시 적용하고 싶을 때 사용합니다. ■ 노이즈(Noise)이미지에서 노이즈를 추가하거나 제거할 때 사용합니다. 원본 노이즈 제거 노이즈 추가 중간(값이 작으면 노이즈 제거, 크면 흐림 효과) ■ 렌더링(Render)렌더링은 미리 준비된 이미지를 설정에 따라 현재 작업 레이어에 그리는 것으로 기존에 준비했던 이미지와 겹치지 용도 등으로 활용할 수 있습니다. 원본 만델브로트 프랙탈 줄리아 프랙탈 클라우드(구름) 효과 ■ 미술효과(Artistic)잉크 펜, 연필, 유화와 같이 전통..