C#/Common

C#/Common

C# - MiniExcel 라이브러리 사용법 (Query, Save)

1. Introduction MiniExcel은 OOM을 피하기 위해 만들어진 .NET 라이브러리이다. Github의 Readme를 보면, 아래와 같이 라이브러리 특징에 대해 소개하고 있다.Features Low memory consumption, avoid OOM (out of memory) and full GC Support operation of each row of data real-time Support LINQ deferred execution, it can do low-consumption, fast paging and other complex queries Lightweight, without Microsoft Office installed, no COM+, DLL size is less ..

C#/Common

C# - Notion API - Create, Retrieve, Update, Archive page (Database)

1. Introduction Notion은 페이지, 데이터베이스 등에 대해 REST API를 지원한다. API 접근을 하려면 Database 및 API 키가 필요하다. 키를 얻는 방법에 대해서는 Build your first integration을 참조한다. Notion의 API Reference는 NOTION API - Introduction을 참조한다. 여기서는 database에 대한 page 작업을 다룬다. Create a page Retrieve a page Update page properties Archive a page 2. Database to perform Page query 방법에 앞서, 테스트를 수행할 DB의 형태는 아래와 같다. DB 작업 수행 간 JSON 형식의 Page objec..

C#/Common

C# - Notion API - Query, Filter database

1. Introduction Notion은 페이지, 데이터베이스 등에 대해 REST API를 지원한다. API 접근을 하려면 Database 및 API 키가 필요하다. 키를 얻는 방법에 대해서는 Build your first integration을 참조한다. Notion의 API Reference는 NOTION API - Introduction을 참조한다. 여기서는 다음 항목을 다룬다. Query a database Paginated query Filter database entries 2. Database to perform DB 조회 및 필터 방법에 앞서, 테스트를 수행할 DB의 형태는 아래와 같다. 선택으로 명명되어 있는 select 항목의 옵션은 아래와 같다. DB 작업 수행 간 JSON 형식의 ..

C#/Common

C# - Notion API - Retrieve, Update database

1. Introduction Notion은 페이지, 데이터베이스 등에 대해 REST API를 지원한다. API 접근을 하려면 Database 및 API 키가 필요하다. 키를 얻는 방법에 대해서는 Build your first integration을 참조한다. Notion의 API Reference는 NOTION API - Introduction을 참조한다. 여기서는 다음 항목을 다룬다. Retrieve a database Update a database 2. Database to perform 조회 및 업데이트 방법에 앞서, 테스트를 수행할 DB의 형태는 아래와 같다. 선택으로 명명되어 있는 select 항목의 옵션은 아래와 같다. DB 작업 수행 간 JSON 형식의 Database object를 HTT..

C#/Common

C# - TIBCO Rendezvous - Sender

Introduction TIBCO Rendezvous는 TIBCO社의 메시징 미들웨어이다. 유료 소프트웨어로, 구매하지 않고는 사용할 수 없다. 여러 프로그래밍 언어를 지원하여 다양한 구성으로 통신이 가능하다. 사용하면서 느낀 가장 큰 특징은 아래와 같다. 네트워크 정보를 알 필요 없이 Subject를 Listener에 등록하여 원하는 메시지를 받을 수 있다. => 네트워크 시스템 구성 요소의 추가, 제거가 자유롭다 생산자 측에서 메시지에 새로운 필드를 추가하더라도, 각 Listener들은 통신을 수정할 필요가 없다. => 하나의 구성 요소에서 디테일을 분리하여 운용할 수 있다. 아래는 Sender 통신 예제이다. Example using TIBCO.Rendezvous; namespace TIBRVSen..

C#/Common

C# - TIBCO Rendezvous - Listener

Introduction TIBCO Rendezvous는 TIBCO社의 메시징 미들웨어이다. 유료 소프트웨어로, 구매하지 않고는 사용할 수 없다. 여러 프로그래밍 언어를 지원하여 다양한 구성으로 통신이 가능하다. 사용하면서 느낀 가장 큰 특징은 아래와 같다. 네트워크 정보를 알 필요 없이 Subject를 Listener에 등록하여 원하는 메시지를 받을 수 있다. => 네트워크 시스템 구성 요소의 추가, 제거가 자유롭다 생산자 측에서 메시지에 새로운 필드를 추가하더라도, 각 Listener들은 통신을 수정할 필요가 없다. => 하나의 구성 요소에서 디테일을 분리하여 운용할 수 있다. 아래는 Listener 통신 예제이다. Example using TIBCO.Rendezvous; namespace TIBRVL..

C#/Common

C# - Data structure alignment (Memory layout)

Introduction 구조체 또는 클래스는 필드, 메서드 등을 캡슐화하는 데 사용한다. 선언된 멤버의 수에 따라 크기가 달라지게 되는데, 그 크기는 sizeof, Marshal.SizeOf로 구할 수 있다. 구조체 또는 클래스는 정의한 크기보다 크거나 필드의 위치가 바뀌는 일이 발생하는데, 이를 해결하기 위해 어느 정도 메모리 레이아웃 규칙에 대해 알 필요가 있다. 기본 레이아웃 다음 구조체의 크기는 C#의 형식 기본 크기에 따라 3byte가 되어야 한다. public struct Test { public byte A; // 1 byte public short B; // 2 byte } 하지만 실제로 크기를 조사해보면, 4byte가 나오게 된다. unsafe static void Main(string[..

C#/Common

C# - Numerical integration - Simpson 3/8 Rule

Introduction 적분이란 정의된 함수의 그래프와 그 구간으로 둘러싸인 도형의 넓이를 구하는 것이다 수치 적분이란 연속된 데이터 포인트를 적당한 하나의 함수function를 포함한 급수합으로 근사하여 적분하는 것을 말한다. 앞선 글과는 달리, 연속된 데이터 (X1, X2, X3...), (Y1, Y2, Y3...)를 곡선 함수로 근사하고 적분하는 것을 Simpson rule이라고 한다. 1/3 rule은 이차함수로 근사한다. 3/8 rule은 삼차함수로 근사한다. 아래 코드는 3/8 rule에 대한 코드이다. Code using Peponi.Math.Extensions; namespace Peponi.Math.Integration; public static class Simpson3over8 { /..

C#/Common

C# - Create Shortcut

Introduction 아래는 코드를 이용해 바로가기를 생성하는 방법이다. COM 라이브러리 중 Windows Script Host Object Model을 추가한 후, IWshRuntimeLibrary를 using 선언하여 사용한다. Code using System; using System.IO; using System.Windows.Forms; using IWshRuntimeLibrary; namespace CreateShortcut { public static class Shortcut { private static string AppStartMenuPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), "..

C#/Common

C# - INotifyPropertyChanged interface

1. Introduction INotifyPropertyChanged 인터페이스는 클라이언트에 속성 값이 변경됨을 알리는데 사용한다. 이벤트로 구현되어 있으며, 인터페이스 구현 또는 프로퍼티 변경 이벤트를 넣어 UI에 반영한다. (아래 예제는 프로퍼티 변경 이벤트를 예시로 한다.) 구현이 쉽고 간결하다. 수동으로 멤버를 바인딩 하는 경우에 비해 제작 편의성 및 재사용성이 대폭 향상된다. 기본적으로 양방향 바인딩이 된다. (이게 가장 큰 장점인 것 같다) 프로퍼티 값 수정 시 UI에 자동 반영이 된다. UI 값 수정 시 프로퍼티에 맞는 값이라면 자동 반영이 되며 잘못된 값 입력하는 경우 자동으로 원래 값으로 돌아간다. 만능은 아니기 때문에 경우에 따라 여전히 수동으로 바인딩 하는 경우가 필요할 수 있다. ..

C#/Common

C# - 온도 단위 변환

Introduction SW에서 물리량을 계산할 때 온도 단위 변환이 필요한 경우 사용하면 유용하다. C# - 압력 단위 변환과 함께 한 클래스에 묶어 사용 가능하다. 압력 변환과는 달리, 온도 변환은 개별 method로 정리하였다. Code using System; namespace UnitConversion { public static class UnitConversion { public enum TemperatureUnit { Kelvin, Celsius, Fahrenheit, } public static T TemperatureConversion(T value, TemperatureUnit previous, TemperatureUnit change) { switch (previous) { case..

C#/Common

C# - 압력 단위 변환

Introduction SW에서 물리량을 계산할 때 압력 단위 변환이 필요한 경우 사용하면 유용하다. 현재 예시에는 파스칼, 토르, 프사이 간 압력 변환만 가능하다. 다른 단위가 필요한 경우 추가할 필요가 있다. Code using System; namespace UnitConversion { public static class UnitConversion { public enum PressureUnit { Pa, Torr, Psi, } public static T PressureConversion(T before, PressureUnit previous, PressureUnit change) { double multiplier = 0; switch (previous) { case PressureUnit...

Peponi_
'C#/Common' 카테고리의 글 목록