콘텐츠로 이동

TIL - 2024. 09.

이전 페이지

2024. 09. 01

2024. 09. 02

2024. 09. 03

2024. 09. 04

2024. 09. 05

2024. 09. 06

2024. 09. 07

2024. 09. 08

2024. 09. 09

C# 소수점 2자리까지만 표기

c# - Formatting a float to 2 decimal places - Stack Overflow

Standard numeric format strings - .NET | Microsoft Learn

myFloatVariable.ToString("0.00"); //2dp Number
myFloatVariable.ToString("n2"); // 2dp Number
myFloatVariable.ToString("c2"); // 2dp currency

python에서 bool값 비교

python - Boolean identity == True vs is True - Stack Overflow

>>> d = True
>>> d is True
True
>>> d = 1
>>> d is True
False
>>> d == True
True
>>> d = 2
>>> d == True
False

mysql에서 주어진 테이블을 만드는 sql문 생성하기

mysql - How to generate a create table script for an existing table in phpmyadmin? - Stack Overflow

SHOW CREATE TABLE tablename;
SHOW CREATE TABLE database.tablename;

geopandas로 shp파일 읽을때 특정 row만 읽는 방법

python - Read N number of rows from shapefile using GeoPandas - Geographic Information Systems Stack Exchange

import geopandas as gpd

# Read the first 100 rows
gdf = gpd.read_file("/path/to/my/shapefile.shp", rows=100)

# Read 5 rows from the 100000th
gdf = gpd.read_file("/path/to/my/shapefile.shp", rows=slice(100000, 100005))

pandas에서 to_sql 함수를 사용할때 chunk로 자르는 방법

mysql - Python Pandas - Using to_sql to write large data frames in chunks - Stack Overflow

0.15버전부터 chunksize라는 arg를 사용할 수 있다.

df.to_sql('table', engine, chunksize=20000)

2024. 09. 10

shapely에서 &, |, -, ^ 연산자 사용법

The Shapely User Manual — Shapely 2.0.6 documentation

  • intersection can be accessed with and, &
  • union can be accessed with or, |
  • difference can be accessed with minus, -
  • symmetric_difference can be accessed with xor, ^

2024. 09. 11

2024. 09. 12

shapely에서 linestring을 split하는 데에 실패할 경우

python - Shapely unable to split line on point due to precision issues - Stack Overflow

snap함수로 점을 선 위로 옮겨놓고 하면 잘 작동할지도.

snap(line_to_modify,closest_point,0.01)

shapely substring

The Shapely User Manual — Shapely 2.0.6 documentation

linestring의 특정 구간만 취하고 싶다면 substring 함수를 통해서 시작 거리에서 끝 거리 사이의 구간만 잘라낼 수 있다.

2024. 09. 13

shapely clip_by_rect

The Shapely User Manual — Shapely 2.0.6 documentation

빠르게 결과가 나오긴 하지만 문제가 있는 도형이 리턴될 수 있다는 이슈가 있음.

The geometry is clipped in a fast but possibly dirty way. The output is not guaranteed to be valid. No exceptions will be raised for topological errors.

bounds에서는 minx, miny, maxx, maxy라고 변수 이름을 지어놨는데 여기에서는 xmin, ymin, xmax, ymax라고 되어있어서 통일감이 없다.

2024. 09. 14

c#에서 소수 리스트 생성하기

c# - Most elegant way to generate prime numbers - Stack Overflow

답 중에 아래와 같은 코드가 있었다.

public static List<Int32> GetPrimes(Int32 limit)
{
    List<Int32> primes = new List<Int32>() { 2 };

    Range(3, limit, 2)
        .Where(n => primes
            .TakeWhile(p => p <= Math.Sqrt(n))
            .All(p => n % p != 0))
        .Do(n => primes.Add(n));

    return primes;
}

이를 응용하여 아래와 같은 코드를 짰다.

string.Join(
    ' ',
    new int[99999]
        .Select((_,i)=>++i)
        .Where(i=>
            new int[(int)Math.Sqrt(i)]
                .Select((_,j)=>j+2)
                .All(j=>i%j!=0)
            )
        .Take(n)
    );

2024. 09. 15

2024. 09. 16

2024. 09. 17

2024. 09. 18

C# fast write

글 읽기 - C# 에서 빠른 입출력 함수가 따로 있나요? (acmicpc.net)

StringBuilder를 사용하는 방법.

int n = int.Parse(Console.ReadLine().Trim());
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= n; i++) {
    sb.AppendLine(i.ToString());
}
Console.Write(sb.ToString());

C# repeat string

c# - Is there an easy way to return a string repeated X number of times? - Stack Overflow

이전에도 종종 찾아보던 글이었지만 이번에는 StringBuilder를 사용하는 방법을 참고했다. 아래가 제일 깔끔하게 정리된 코드인듯.

//Strings and chars [version 1]
string.Join("", Enumerable.Repeat("text" , 2 ));
//result: texttext

//Strings and chars [version 2]:
String.Concat(Enumerable.Repeat("text", 2));
//result: texttext

//Strings and chars [version 3]
new StringBuilder().Insert(0, "text", 2).ToString();
//result: texttext

//Chars only:
new string('5', 3);
//result: 555

C# fast read, write

15688번: 수 정렬하기 5 (acmicpc.net) 문제를 풀때 counting sort로 구현해도 시간 제한에 걸리는 것을 해결하기 위해서는 일반적인 Console.ReadLine()대신 아래의 StreamReader를 써야 한다.

StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
StringBuilder sb = new StringBuilder();

// StringBuilder는 위에 나온 방식대로 사용하면 된다.
// StreamReader, StreamWriter는 아래와 같이 사용한다.
sw.Write(sr.ReadLine());
sw.Close();
sr.Close();

2024. 09. 19

visual studio 문서 포맷팅

indentation - How do you auto format code in Visual Studio? - Stack Overflow

To format a selection: Ctrl+K, Ctrl+F

To format a document: Ctrl+K, Ctrl+D

See the pre-defined keyboard shortcuts. (These two are Edit.FormatSelection and Edit.FormatDocument.)

Edit.FormatDocument는 한국어로는 편집.문서서식이다.

visual studio 단축키 설정

Identify and customize keyboard shortcuts - Visual Studio (Windows) | Microsoft Learn

위의 Ctrl+K 후 Ctrl+D가 손에 익지 않아서 vscode에서 쓰던 단축키인 Alt+Shift+F로 변경했다.

  • 기존의 단축키를 제거
  • 편집.문서서식을 찾아서 단축키를 새로 할당

LIS

Longest Increasing Subsequence | 알고달레 (algodale.com)

LIS 매우 짧은 구현.

from bisect import bisect_left


class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        sub = []
        for num in nums:
            index = bisect_left(sub, num)
            if index == len(sub):
                sub.append(num)
            else:
                sub[index] = num
        return len(sub)

2024. 09. 20

c# Stack - TryPeek 함수

Stack<T>.TryPeek(T) Method (System.Collections.Generic) | Microsoft Learn

흥미로웠던 포인트는

  • Stack이 따로 클래스로 있었고
  • 맨 위에 있는 아이템을 확인만 해볼 수 있는 Peek이라는 함수가 있었으며,
  • 혹시 stack이 비어있을 경우 에러가 발생하는 것까지 한 번에 처리가 가능한 TryPeek이라는 함수가 있었다.

2024. 09. 21

c# Math.Sign

Math.Sign 메서드 (System) | Microsoft Learn

반환 값 의미
-1 : value 0보다 작습니다.
0 : value 0과 같습니다.
1 : value 0보다 큽니다.

2024. 09. 22

python math.comb

math — Mathematical functions — Python 3.12.6 문서

nCk 값을 얻고 싶으면 math.comb(n, k)을 사용하면 된다.

2024. 09. 23

AutoCAD C# Database의 생성자에 들어가는 인자 설명

Breaking it down - a closer look at the C# code for importing blocks - Through the Interface (typepad.com)

글 자체는 Database 객체를 생성한 다음 dwg파일을 읽어와서 블록을 읽고 블록을 복제해오는 것을 다루는데, 맨 앞 부분에 Database 객체를 초기화 하는 과정에 들어가는 인자 중 첫 번째 인자인 bool buildDefaultDrawing의 사용법에 대한 설명이 되어있다. 요약하자면, buildDefaultDrawing값을 true로 할 일은 웬만하면 없을 테니 false로 세팅하라는 것.

2024. 09. 24

vscode extension - markdownlint

markdownlint - Visual Studio Marketplace

extension 설명에 markdown rules, vscode 세팅 적용하는 법 등이 잘 설명되어 있다.

mkdocs에서 2 space indentation이 작동하지 않는 이유

markdown - Indented paragraph in bullet list not rendering correctly - Stack Overflow

mkdocs는 렌더에 Python-Markdown library를 쓰고 있기 때문에 “each subsequent paragraph in a list item must be indented by either 4 spaces or one tab” 규칙을 지켜야 한다. markdownlint에서는 기본 indentation을 2 spaces로 주고 있기 때문에 이 세팅을 변경해주어야 한다.

mkdocs에서 부등호 모양 괄호가 잘 작동하지 않는다

markdownlint를 썼더니 다음과 같은 문제를 찾아주었다.

[x<test>](./)  // MD033/no-inline-html: Inline HTML

그래서 역슬래쉬 기호를 붙여서 html 표현을 escape하려고 했는데, markdown 문법과 별개로 mkdocs는 다음과 같이 작동한다.

[x<test>](./)  // x
[x\<test>](./)  // x\
[x<test\>](./)  // x<test>
[x\<test\>](./)  // x\<test>

c#에서 배열의 이웃한 두 아이템끼리 묶어서 처리하기

.net - Pair-wise iteration in C#, or sliding window enumerator - Stack Overflow

아래의 코드를 응용하면 된다.

var result = input.Zip(input.Skip(1), (a, b) => Tuple.Create(a, b));

28115번: 등차수열의 합 (acmicpc.net) 문제를 풀때 활용했다.

2024. 09. 25

winform 그리기

c# - Drawing a polygon according to the input coordinates - Stack Overflow

winform에 도형 그리는 것에 대한 간단한 샘플.

Autodesk 제품들 파일을 온라인에서 보기

Overview | Viewer | Autodesk Platform Services

The Autodesk Platform Services Viewer SDK lets you create applications to view, share, and interact with design models on your own website from a wide variety of products. The Viewer can display files from AutoCAD, Fusion 360, Revit, and many more. This JavaScript library enables developers to create applications that combine 2D and 3D visualization with business-oriented data.

2024. 09. 26

AutoCAD C# layout 이름 리스팅

Listing the layout names - AutoCAD DevBlog (typepad.com)

LayoutManager layoutMgr객체를 사용하는 것과 db.LayoutDictionaryIdDBDictionary layoutDic를 불러와서 사용하는 것을 참고.

2024. 09. 27

AutoCAD C# layout으로 entity 복제하기

Solved: Copying Entity to Layout - Autodesk Community - AutoCAD

아래 코드 부분 참조. paperspace 찾아서 거기에 엔티티 추가하는 것.

BlockTableRecord ps = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.PaperSpace], OpenMode.ForWrite);

2024. 09. 28

AutoCAD C# transient 써서 move 커맨드와 비슷하게 예상 결과 보여주기

Using transient graphics to simulate AutoCADs MOVE command using .NET - Through the Interface (typepad.com)

나중에 읽어볼것.

2024. 09. 29

AutoCAD C# Layout 관련 함수들

Existing Layout Names and Creating and Setting a New Layout - Autodesk Community - AutoCAD

layout을 다룰때는 LayoutManager를 사용하는데, 내부적으로 트랜젝션을 만들어서 커밋하는 방식으로 작동하므로 트랜젝션으로 랩핑해줄 필요가 없다.

public static void CreateLayouts()
{
    var dwg = CadApp.DocumentManager.MdiActiveDocument;
    var ed = dwg.Editor;

    var lNames = dwg.Database.GetLayoutNames();
    var newLayoutId = CreateAndMakeLayoutCurrent(
        LayoutManager.Current, "New Layout");
}

2024. 09. 30

AutoCAD C# 이미 존재하는 layout 이름으로 layout을 새로 생성하려고 할때

실험 결과 duplicate key 에러가 나면서 생성이 되지 않는다. 즉, 기존 layout의 이름들을 불러온 다음 혹시 이름이 겹치는지 미리 체크한 뒤 생성을 시도하는 것이 좀 더 방어적인 접근 방식일 것으로 보인다. 만약 이름 뒤에 특정한 숫자를 붙여서 layout-1, layout-2, ... 같이 이름을 사용하려고 한다면, 뒤에 붙일 숫자를 문서 어딘가에 잘 저장해놓고 이를 계속 사용하는 것도 괜찮을 듯하다. 이때 xrecord를 쓰는 것도 나쁘지 않은 접근 방법.

이전 페이지