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만 읽는 방법¶
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의 생성자에 들어가는 인자 설명¶
글 자체는 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.LayoutDictionaryId
로 DBDictionary 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 커맨드와 비슷하게 예상 결과 보여주기¶
나중에 읽어볼것.
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를 쓰는 것도 나쁘지 않은 접근 방법.