프로젝트 25

[C++] 69. 최종 실습 – 요구 분석 및 정의

[C++] 최종 실습 – 요구 분석 및 정의 요구 분석 및 정의 단계에서는 이해관계자를 파악하고 이해관계자 별로 프로젝트에 요구하는 사항을 조사하는 것에서 출발합니다. 이번 실습에서의 이해관계자는 프로그램 사용자와 프로그램 개발자 정도로 생각할 수 있습니다. 시나리오를 제외한 특별한 요구 사항은 없으니 시나리오를 바탕으로 유즈케이스 다이어그램을 작성하는 것부터 시작합시다. 유즈케이스 다이어그램을 작성할 때는 액터를 조사하고 액터 별로 유즈케이스를 정의한 후에 관계를 정의합니다. 액터는 개발하는 시스템 주변의 모든 것을 말합니다. 시스템을 사용하는 사용자 뿐만 아니라 시스템을 사용하는 프로그램이나 시스템이 사용하는 외부 시스템도 액터입니다. 이 에이치 프로그램은 최종 사용자 외에 다른 액터가 존재하지 않습..

[C++] 68. 최종 실습 – 개발 공정 및 시나리오

[C++] 최종 실습 – 개발 공정 및 시나리오 전산 기술은 하루가 다르게 발전하고 새로운 기술이 나오고 있습니다. 그리고 프로젝트의 규모가 점점 늘어나고 있으며 다른 산업 분야와 접목하는 형태로 발전하고 있습니다. 프로그램의 규모가 커지고 많은 인력이 필요한 형태로 변하면서 효과적인 개발 공정과 많은 이해 관계자에게 프로그램의 구조를 설명하고 개발자 사이에 의사 소통할 수 있는 방법들이 생기고 있습니다. 여기에서는 여러 가지 개발 방법론 중에 많은 이들이 사용하는 CBD 개발 방법론을 적용해서 마지막 실습을 진행할게요. 일반적인 CBD 개발 방법론에서는 요구 분석 및 정의 단계, 아키텍쳐 단계, 설계 단계, 구현 단계, 배포 단계로 나누고 있습니다. 이 중에 아키텍쳐 단계는 프로그램을 컴포넌트 형태로 ..

[C#] 미디 분석 프로그램 만들기 – 4. 트랙 청크 분석(MTrk) 4.2 Meta Event

1. 유튜브 동영상 강의 미디분석 프로그램 만들기 - 트랙 청크 분석, 미디이벤트 2. Meta Event 이전 강의에서 미디 파일에서 Track 청크의 기본 구조와 delta time을 구하는 것에 관하여 다루었어요. 이번에는 Track 청크의 Meta 이벤트에 관하여 알아보고 분석하는 소스 코드를 소개할게요. Track 청크의 이벤트는 delta time과 이벤트 정보로 이루어져 있다는 것을 이전 게시글에서 얘기했어요. 또한 이벤트 정보는 Meta 이벤트, System 이벤트, Midi 이벤트 중에 하나라는 것도 소개했었죠. 이벤트 정보가 Meta 이벤트, System 이벤트, Midi 이벤트 중에 어떤 것인지를 확인하려면 delta time 뒤에 오는 첫 번째 바이트 정보의 값을 확인하여야 합니다...

[C#] 미디 분석 프로그램 만들기– 4. 트랙 청크 분석(MTrk) 4.1 delta time 구하기

1. 유튜브 동영상 강의 미디 분석 프로그램 만들기 - 트랙 청크, deltatime 2. 트랙 청크의 구조와 delta time 앞에서 미디 파일은 청크의 집합이라는 것과 청크에는 헤더 청크와 트랙 청크가 있다는 것을 확인하였습니다. 또한 헤더 청크의 내용을 분석하는 것까지 살펴보았습니다. 이번에는 트랙 청크를 분석하는 것을 할 거예요. 그리고 제일 먼저 delta time을 구하는 코드를 구현해 볼 거예요. 트랙 청크는 청크 데이터 부분에 트랙 이벤트 정보들로 구성합니다. 트랙 이벤트 정보는 해당 이벤트가 미디가 시작하여 어느 시점에 발생할 이벤트인지를 결정하는 delta time 부분이 먼저 오며 이후에 이벤트 정보가 옵니다. 이벤트 정보는 메타 이벤트, 시스템 이벤트, 미디 이벤트로 구분할 수 있..

[C#] 미디 분석 프로그램 만들기– 3. Head 청크, MThd

1. 유튜브 동영상 강의 미디 분석 프로그램 만들기 - 헤더 청크 분석 2. 해야 할 일과 이론 이전 글에서 미디 파일은 청크들의 집합이라는 얘기와 함께 이를 확인하는 C# 소스 코드를 소개하였습니다. 이번에는 미디 파일의 청크 중에 Head 청크의 구조를 알아보고 이를 분석하는 C# 소스 코드를 소개할게요. 미디 파일의 head 청크는 14 바이트로 구성합니다. 청크 타입부분의 값은 ASCII 코드에서 Mthd에 해당하는 값(16진수로 4D 54 68 64)이 옵니다. 헤드 청크의 길이는 6바이트입니다. Head 청크의 데이터는 포멧, 트랙 개수, division으로 구성합니다. 포멧은 2바이트 차지하며 0,1,2 중에 하나입니다. 0: 단일 트랙, 1: 다중 트랙(여러 악기를 표현하기 쉬움), 2: ..

[C#] 미디 분석 프로그램 만들기– 2. 청크 목록 분석

1. 유튜브 동영상 강의 미디분석 프로 그램 만들기 - 청크 목록 분석 2. 해야 할 일 이번에는 미디 파일 구조를 간단히 알아보고 이를 분석하는 간단한 응용 프로그램을 작성해 보기로 할게요. 먼저 미디(Midi)는 Musical Instrument Digital interface로 전자악기의 디지털 데이터를 주고 받기 위한 표준 규격입니다. 여기에서는 미디 파일 구조를 점진적으로 분석하고 이를 이용하는 프로그램을 단계적으로 작성해 나가기로 할게요. 미디 파일은 덩어리(청크, Chunk)들의 집합입니다. 미디 파일은 여러 개의 청크들로 구성하고 있다는 거예요. 그리고 청크는 청크 유형(4바이트), 청크 길이(4바이트), 청크 데이터(청크 길이)의 조합이예요. 3. StaticFuns 정적 클래스 정의 S..

4. WaferLine 예광탄 – 4.2 WaferLine 클래스 정의 [Wafer 코팅 시뮬레이션]

1. 유튜브 동영상 강의 Wafer 코팅 시뮬레이션 - WaferLine 예광탄 WaferLine 소스 코드 using System; using System.Collections; using System.Collections.Generic; using WaferLineLib; namespace WaferLineLib { public class WaferLine : IEnumerable { public int No { get; } public int Spin { get; set; } public int Drop { get; set; } public WaferLine(int no) { No = no; Spin = 1000; Drop = 20; } List bwafers = new List(); List aw..

4. WaferLine 예광탄 – 4.1 시연 및 Layout [Wafer 코팅 시뮬레이션]

1. 유튜브 동영상 강의 WAFER 코팅 시뮬레이션 예광탄 2. WaferLine 예광탄 시연 WaferLine은 Wafer 추가, 코팅액 추가, 회전 속도 설정, 낙하 속도 설정, 코팅 시작 및 코팅한 Wafer를 확인하는 기능을 제공합니다. 여기에서는 WaferLine에 코팅해야 할 Wafer는 최대 200개를 보관할 수 있게 하드코딩할게요. 코팅액은 최대 20병을 보관할 수 있게 하드코딩합니다. 코팅액 1 병은 1000개의 쉘을 코팅할 수 있습니다. 코팅 완료한 Wafer는 보관에 제한이 없습니다. 3. WaferLine 예광탄 Layout WaferLine 예광탄의 자식 컨트롤을 배치합시다. Wafer(tbar_wafer)와 코팅액(tbar_pr), 회전속도(tbar_spin) 및 낙하속도(tba..

[C#] 미디 분석 프로그램 만들기 – 1. 프로젝트 소개

1. 유튜브 동영상 강의 미디 분석 프로그램 유튜브 동영상 강의 2. 프로그램 소개 미디 파일은 여러 개의 청크들로 구성합니다. 청크는 청크 타입과 청크 길이와 데이타로 구성하고 있는데 헤더 청크와 트랙 청크가 있어요. 이 외에 자세한 사항은 프로젝트를 진행하면서 하나 하나 설명하기로 할게요. 프로젝트 제작 순서는 다음과 같습니다. 청크 분석 헤더 청크 분석 트랙 청크 분석 메타 이벤트 분석 미디 이벤트 분석 시스템 이벤트 분석 미디 분석 프로그램 미디 분석 프로그램은 C# 언어와 Windows Forms 기술을 사용하여 구현합니다. 프로젝트를 진행하면서 미디 파일의 구조와 의미를 설명하기로 할게요. 그럼 다음 강의에서 만나요.

1. 프로젝트 소개 [Wafer 코팅 시뮬레이션]

유튜브 동영상 강의 Wafer 코팅 시뮬레이션 - 반도체 장비 제어 시스템 1. 개요 Wafer 코팅 시뮬레이션은 Wafer 코팅 설비 추가, 코팅 등의 작업을 시뮬레이션하는 솔루션입니다. 솔루션을 구성하는 컴포넌트는 두 개의 Windows 응용 프로그램과 세 개의 라이브러리로 구성합니다. 두 개의 Windows 응용 프로그램은 “WaferLine 공장 시뮬레이션”과 “중앙관제”입니다. 두 응용 모두 Windows Forms 앱(.NET Framework)입니다. WaferLine 공장 시뮬레이션에서는 Wafer 코팅 라인을 추가, 라인에 Wafer 추가, 코팅액 추가, Spin 속도 조절, 코팅액 낙하 속도 조절, 라인 가동, 라인 멈춤 등을 할 수 있습니다. 중앙관제에서는 공장과 소켓으로 연결하여 공..

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 1. 소개[언제나 WPF]

유튜브 동영상 강의 번역 나래이터 만들기 프로젝트 소개 00;00 인사 00:26 개발할 번역 나래이터 프로그램 시연 02:38 정의해야 할 형식들 소개 03:00 제작할 WrapkakoLib 라이브러리 소개 04:15 제작할 WrapSpeechLib 라이브러리 소개 안녕하세요. 언제나 휴일에 언휴예요. 이번에는 Kakao 번역 API와 .NET 음성 Speech 기술을 Mash up해 볼게요. 두 개의 기술 모두 사용하는 것은 크게 어렵지 않습니다. 그리고 최근에 응용이나 앱, 웹에서는 이러한 것을 지원하려고 노력하는 것 같네요. 실제 해당 기술을 사용해 본 적이 있다면 프로그램 제작에 걸리는 시간은 1시간~2시간 정도입니다. 여기에서는 이러한 기술을 경험해 보려는 이들을 위해 기술별로 제작해 나갈게요..

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 2. 번역 라이브러리 만들기[C#]

유튜브 동영상 강의 [WPF] 번역 나래이터 - 번역 라이브러리 만들기 KakaoTransApi 소스 코드 using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Web.Script.Serialization; namespace WrapKakaoLib { /// /// 언어 정보 열거형 /// public enum LanguageInfo { kr, en, jp, cn, vi, id, ar, bn, de, es, fr, hi, it, ms, nl, pt, ru, th, tr, MAX_LI } /// /// 카카오 음성 API - 정적 클래스 /// public..

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 3. WrapSpeechLib 만들기[C#]

유튜브 동영상 강의 [WPF] 번역 나래이터 - WrapSpeechLib 만들기 Narrator 소스 코드 using System.Collections.Generic; using System.Globalization; using System.Speech.Synthesis; using WrapKakaoLib; namespace WrapSpeechLib { /// /// 번역 나래이터 클래스 /// public class Narrator { static SpeechSynthesizer speecher = new SpeechSynthesizer(); static Dictionary voice_dics = new Dictionary(); static Narrator() { foreach (InstalledVoi..

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 4. 최종 번역 나래이터 구현[ WPF]

유튜브 동영상 강의 번역 나래이터 구현 화면 배치 MainWindow.xaml.cs 소스 코드 using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using WrapKakaoLib; using WrapSpeechLib; namespace 번역_나래이터_v0._1 { /// /// MainWindow.xaml에 대한 상호 작용 논리 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btn_speek_Click(object sender, RoutedEventArgs ..

4. 경로 탐색 [경로찾기 프로젝트 – C#, 카카오 지도 API, SK TMAP API 활용 ]

안녕하세요. 언제나휴일입니다. 1. 유튜브 동영상 강의 [C#] 경로 탐색 - 카카오 지역 API + SK TMAP API 앞에서 지역 검색 예광탄에서는 카카오 개발자 센터 로컬 API를 사용했습니다. 지역 검색 및 위치 확인에서는 카카오 개발자 센터 로컬 API와 지도 API를 사용했습니다. 이번에는 경로 탐색 프로그램을 제작할 것입니다. 경로 탐색 프로그램은 카카오 개발자 센터 로컬 API와 SK TMap API를 사용합니다. 동영상 강의는 언제나 휴일 유튜브에 업로드하였습니다. 2. 제작할 프로그램 소개 경로 탐색은 C#, 콘솔 (.NET Framework) 프로젝트입니다. 프로그램을 시작하면서 출발지를 입력합니다. 카카오 개발자 센터 로컬 REST API를 이용하여 검색한 내용을 출력하면 사용자가..

OpenAPI/C# OpenAPI 2024.01.09

5. Final 경로 찾기 Windows Forms 앱[경로찾기 프로젝트 – C#, 카카오 로컬, 지도 API, SK TMAP API 활용 ]

안녕하세요. 언제나휴일입니다. 1. 유튜브 동영상 강의 마지막 프로젝트로 경로 찾기 Windows Forms 앱입니다. 2. 프로그램 소개 이번에 만들 프로젝트는 C#, Windows Forms(.NET Framework) 으로 만들 것입니다. 어떠한 프로그램을 만들 것인지 동작 화면을 보기로 할게요. 출발지와 목적지를 입력하면 검색 결과를 리스트 박스에 보여줍니다. 출발지와 목적지를 리스트 박스에서 선택한 후 경로 찾기 버튼을 누르면 지도에 경로를 선으로 표시합니다. 그리고 리스트 박스에 경로를 요소로 보여줍니다. 시뮬레이션 버튼을 클릭하면 출발지에서 목적지까지 이동하는 모습을 볼수 있습니다. 3. 지도 HTML 코드 편집 앞에서 작성했던 KakaoMap.html 코드를 추가 편집하기로 할게요. 먼저 ..

OpenAPI/C# OpenAPI 2024.01.09

[C#] 원격 제어 프로그램 1. 개요

1. 유튜브 동영상 강의 2. 소개 이 책에서는 C# 언어로 Windows Forms 응용 프로그램 형태로 원격 제어 프로그램을 만드는 전체 과정을 다루고 있습니다. 여기에서 만드는 원격 제어 프로그램은 P2P 방식으로 제어하는 부분과 제어 당하는 부분을 포함하는 프로그램입니다. 프로그램을 시작하면 [그림 1]처럼 원격 제어기 창이 뜨고 제어를 원하는 상대 IP 주소를 입력하여 설정하기 버튼을 클릭합니다. 원격 호스트에서는 [그림 2]처럼 원격 제어 요청을 한 컨트롤러의 주소가 보이면서 원격 제어 허용 버튼의 상태를 활성화합니다. 원격 제어 허용 버튼을 누르면 원격 컨트롤러에서 원격 제어를 시작할 수 있습니다. 이 프로그램을 만드는 과정에서 여러분께서는 Windows Forms 응용 프로그램을 만드는 방..

[C#] 원격 제어 프로그램 2. 원격 제어에서 작성할 형식 소개

1. 유튜브 동영상 강의 2. 작성할 형식 소개 원격 제어 프로그램을 만들기 전에 앞으로 작성할 형식들을 간략하게 소개할게요. MainForm은 프로그램이 시작하면서 뜨는 폼으로 원격 제어를 요청하거나 허용하는 역할을 담당합니다. RemoteClientForm은 원격 제어할 수 있게 원격 컨트롤러에게 원격 호스트의 화면을 보여주기 위한 폼입니다. VirtualCursorForm은 원격 제어 호스트에 프로그램 방식의 인공 커서를 띄워 원격 컨트롤러가 마우스를 사용하여 제어하기 쉽게 시각화하는 폼입니다. Controller는 원격 제어하는 곳에서 이미지 서버를 가동하고 이벤트 전송 클라이언트를 생성하는 역할을 담당합니다. 원격 제어 컨트롤러를 대표하는 클래스로 볼 수 있습니다. Remote는 원격 제어 컨트..

[C#] 원격 제어 프로그램 3. 프로젝트 생성 및 MainForm 자식 컨트롤 배치

1. 유튜브 동영상 강의 2. 프로젝트 생성 및 MainForm 자식 컨트롤 배치 먼저 윈도우즈 Forms 응용 프로젝트 템플릿을 선택하여 프로젝트를 생성하세요. 프로젝트 이름은 원격 제어기로 할게요. 기본으로 제공하는 Form1.cs의 이름을 솔루션 창에서 이름 바꾸기를 하여 MainForm.cs로 변경하세요. 솔루션 창에서 폼의 이름을 바꾸면 마법사에 의해 소스 코드의 클래스 이름도 자동으로 변환해 줍니다. 그리고 MainForm에 자식 컨트롤을 배치하세요. 먼저 MainForm의 캡션을 표시하기 위해 Text 속성을 원격 제어기로 설정하세요. [그림 6]에 표시한 것처럼 다른 컨트롤의 Name 속성과 Text 속성을 설정하세요. 원격 제어 요청한 호스트의 IP 주소를 표시할 텍스트 상자인 tbox_..

[C#] 원격 제어 프로그램 4. 원격 제어 요청 클라이언트

1. 유튜브 동영상 강의 *동영상 강의에서는 Connect 부분을 비동기로 처리하는 BeginConnect를 호출합니다. 그리고 연결 요청 성공과 실패를 처리할 수 있게 이벤트를 추가 정의하였습니다. * 2. 원격 제어 요청 클라이언트 원격 제어를 요청하는 SetupClient 클래스를 구현합시다. SetupClient는 단순히 상대에게 누가 요청하는지 알려주는 역할만 수행할 거예요. 값을 유지할 필요도 없고 개체를 만들 필요도 없는 클래스이므로 정적 클래스로 정의하세요. public static class SetupClient { Setup 클라이언트에서는 원격 제어하고자 하는 상대 IP와 포트 정보를 입력 인자로 받습니다. public static void Setup(string ip, int por..

[C#] 원격 제어 프로그램 5. 원격 제어 요청 수신 이벤트

1. 유튜브 동영상 강의 *동영상 강의에서는 라이브러리로 제작합니다.* 2. 원격 제어 요청 수신 이벤트 원격 제어 요청을 수신하여 수락 혹은 거절하는 SetupServer에서는 상대측에서 원격 제어 요청이 온 시점을 알아야 합니다. 이를 위해 이벤트 처리를 할 수 있게 대리자와 이벤트 인자 형식을 정의합시다. 이벤트 처리에 사용할 인자는 EventArgs 클래스를 기반으로 파생 클래스로 정의하는 것을 권해요. public class RecvRCInfoEventArgs : EventArgs { 누가 요청했는지 접근할 수 있게 IPEndPoint 속성을 제공합시다. public IPEndPoint IPEndPoint { get; 설정자는 내부에서만 접근할 수 있게 private으로 접근 지정하세요. pri..

[C#] 테트리스 만들기 – Part 4(Final). 꽉 찬 줄 지우기, Ending

프로젝트 다운로드 프로젝트 다운로드 -벽돌 모양에 따라 색상 변경 기능 추가 1. 유튜브 동영상 강의 안녕하세요. 언제나 휴일에 언휴예요. 이번 강의는 테트리스 프로젝트의 마지막 부분입니다. 이번 강의에서는 꽉 찬 라인을 지우는 기능과 종료 조건을 체크하는 부분을 구현합니다. 2. Board 형식 수정 Store 메서드에 라인이 꽉 찼는지 확인하는 메서드를 호출합니다. 이 때 주의할 점은 라인 체크는 아래부터 한다는 것입니다. 벽돌이 4X4공간에 배치하므로 벽돌이 있는 좌표에서 3칸 더 있다는 것을 고려하세요. internal void Store(int bn, int turn, int x, int y) { for (int xx = 0; xx < 4; xx++) { for(int yy = 0; yy=0)&..

[C#] 테트리스 만들기 – Part 3. 벽돌 쌓기

프로젝트 다운로드 1. 유튜브 동영상 강의 안녕하세요. 언휴예요. 이번 강의는 “테트리스 프로젝트 Part 3. 벽돌 쌓기” 입니다. 2. Board 형식 정의 벽돌을 쌓기 위해서는 Board의 상태를 기억할 형식이 필요합니다. 하나의 개체만 필요해서 단일체로 표현할게요. class Board { internal static Board GameBoard { get; private set; } static Board() { GameBoard = new Board(); } Board() { } } 벽돌을 쌓기 위한 배열 멤버 필드를 선언하고 배열 개체를 생성하세요. int[,] board = new int[GameRule.BX, GameRule.BY]; 보드의 특정 영역이 어떤 값인지 확인할 수 있게 속성을..

[C#] 테트리스 만들기 – Part 2. 테트리스 도형 정의하기, 도형 회전하기

프로젝트 다운로드 1. 유튜브 동영상 강의 안녕하세요. 언휴예요. 이번 강의는 “[언제나 프로젝트] 테트리스 Part2″입니다. 현재 작업한 내용은 다음과 같습니다. 게임 공간 정의 키보드로 도형 이동(좌, 우, 아래) 타이머로 도형 내리기 이번 강의에서 다룰 내용은 다음과 같습니다. 테트리스 도형 모양 정의 회전 2. 테트리스 도형 모양 정의 테트리스 벽돌은 모두 7가지 입니다. 테트리스 벽돌은 90도로 회전하여 4가지 형태로 모양이 변할 수 있습니다. 테트리스 벽돌은 4X4 공간에 총 4개의 돌이 공간을 차지합니다. 테트리스 벽돌 모양은 모두 7가지 종류로 변하는 값이 아닙니다. 이를 읽기 전용으로 정의할 거예요. 그리고 벽돌 모양 정의는 별도의 형식에서 정의할게요. 이는 개체를 만들기 위함이 아니라..

[C#] 테트리스 만들기 – Part 1. 키보드로 도형 제어하기, 타이머로 도형 아래로 이동

프로젝트 파일 다운로드받기 1. 유튜브 동영상 강의 안녕하세요. 언휴예요. 이번 강의는 미니 프로젝트 “테트리스” 만들기 중에 첫 번째 파트입니다. 테트리스는 총 4개의 파트로 나누어져 있으며 동영상 강의 기준으로 80여분 요구합니다. 이번 강의에서는 사각형 하나를 키보드로 이동시키고 타이머로 내리기입니다. 2.GameRule 만들기 먼저 게임의 보드 공간의 폭과 너비, 게임 좌표, 시작 좌표를 정의할게요. namespace 테트리스_만들기 { static class GameRule//동강에서는 static 클래스가 아닌 것으로 표현했었요. { internal const int B_WIDTH = 30;//게임 X좌표 1의 Pixel수 internal const int B_HEIGHT = 30;//게임 Y..