분류 전체보기 258

23.06.30 회고

왜 원점에 돌아온 것 같은 기분일까 1. 이 티스토리를 과연 기술 블로그라 할 수 있는가 -> 지금까지 작성한 글의 상태 확인 -> 어떤 부분을 개선해야 할지 리스트업 -> 계속 운영하는 것이 맞을지 결정 2. 앞으로 어떤 커리어를 이어갈 것인가 -> 지금까지 진행한 업무 포지션의 비중에 대한 분석 필요 (투자 시간, 실력 도달 범위) -> 어떤 포지션에 진지하고 꾸준한 관심이 생기는지 -> 해당 포지션의 KPI 분석, 목표 설정 머리가 참 아프다이

회고 및 기타 2023.06.30

23.06.12 Breadth First Search

Breadth First Search (BFS) 넓이 우선 탐색 그래프 또는 트리 데이터 구조를 순회하거나 검색하는 알고리즘 BFS 의 단계 1. initialization 2. 첫번째 노드를 방문하고 해당 노드의 인접 노드 모두 탐색 3. 모든 노드를 방문할 때까지 해당 작업 반복 BFS 를 구현하기 위해서는 큐 자료 구조를 이용할 수 있다. BFS vs DFS 왜 BFS 를 구현할 때는 스택을 사용하지 않고 큐를 사용할까? 해당 노드에 대한 인접 노드 정보를 저장할 때 push 하는데 자료 구조의 특성 상, 스택은 가장 마지막에 넣은 노드를 꺼내게 되고 큐는 가장 처음에 넣은 노드를 꺼내게 된다. 이때, 넓이 우선 탐색을 하려면 같은 레벨의 노드를 우선적으로 탐색해야 하므로 다음 레벨의 인접 노드보다..

알고리즘 공부 2023.06.12

23.06.12 Depth First Search

Depth First Search (DFS) 깊이 우선 탐색 그래프 또는 트리 데이터 구조를 순회하거나 검색하는 알고리즘 그래프에서의 DFS vs 트리에서의 DFS 그래프에서는 노드를 두번 처리해버릴 수 있으므로 방문 여부를 boolean 타입으로 저장하는 배열을 사용하면 좋다! DFS vs BFS BFS 와 비교했을 때 DFS 가 어떻게 깊이 우선이 될 수 있는지 생각해보면 (너무 당연하긴 하지만 짚어보자면) DFS 는 첫번째 노드에서 다음 노드를 탐색하는 기준이 인접 노드를 탐색 후 다음 인접 노드를 탐색하고 BFS 는 인접 노드를 모두 탐색하고 다음 노드로 넘어가기 때문에 DFS 는 깊이 우선, BFS 는 넓이 우선이다. DFS 의 단계 1. initialization 2. 첫번째 노드를 방문하고 ..

알고리즘 공부 2023.06.12

23.05.31 회고

연말, 월말이라는 것에 딱히 특별함을 못 느끼는 사람이었지만 이상하게 5월 마지막 날을 지나는 이 순간에 갑자기 스쳐가는 생각이 많아졌다. 뭐 원래도 고민이나 잡생각은 많았지만 저녁 기차를 타고 창밖을 보다 보니 파노라마처럼 오늘, 이번 주, 이번 달, 상반기의 기억들이 지나갔다. 벌써 5월이 끝났다. 5월에 블로그 글 하나는 쓰고 싶었는데 남아있는 임시저장에 끄적거린 글들을 완성시키고 싶은 마음은 아직 안 생기기도 하고 최근에 적은 일기도 짧고 중구난방으로 적어버린 낙서 수준이어서 그냥 떠오르는 생각들을 모아 오랜만에 한 호흡의 유의미한 글로 적어놓고 싶었다. - 우리는 기대하는 수준까지 올라가는 게 아니라, 훈련한 수준까지 떨어진다 어느 주말 해커톤을 나가게 되었다. 시작 당일에 환경 세팅부터 빌드한..

회고 및 기타 2023.05.31

23.04.28 [ZK] R1CS

zkSNARK 에 사용되는 R1CS 에 대해 이해한대로 정리해보았다. - what is zk-SNARK? zkSNARK 는 영지식증명 중에서도 비대화형으로 zcash 프로토콜에서 알고리즘으로 개발되어 사용되고 있다. zk 가 나오게 된 배경, optimistic-rollup vs zk-rollup, zkVM vs zkEVM, zk-SNARK vs zk-STARK 등의 개념은 따로 정리해야겠다. - what is R1CS? 영지식증명에서는 증명에 사용되는 복잡한 computational statements 를 산술 회로로 모델링하여 계산하는 과정이 필요하다. 따라서, 연산 과정을 최대한 단순화하여 모델링하기에 용이한 시스템으로 이해했다. 뒤에서 설명할 예시는 간단하지만 복잡한 시스템을 R1CS 로 모델링하..

암호학 2023.04.30

23.03.12 EIP-1559 가스비 메커니즘

트랜잭션 날릴 때, 제일 머리가 아픈게 fee 이다. 이더리움의 경우, 단순히 gasPrice * gasLimit 계산해서 넣어주는 것으로 생각하고 있었는데 런던 하드포크 12,965,000 블록부터 EIP-1559 가 반영되었다... 그걸 이제야 공부하다니 반성해야겠다. EIP-1559 는 왜 도입되었는가? 1. 가스비 변동에 대한 불확실성 감소 estimate 를 통해 평균 가스비를 알 수는 있었지만 시장 원리에 의해 마이너는 더 큰 금액의 가스비를 지불하는 트랜잭션을 우선적으로 블록에 포함시킨다. 이때문에 트랜잭션의 블록 포함 여부는 불확실성이 컸는데 이 문제를 해결하기 위해 기본 fee 개념인 baseFee 를 포함하였다. 2. 블록 사이즈 (단위 블록에 포함되는 가스 수량) 를 통한 트랜잭션 수..

이더리움 2023.03.13

23.03.12 SSZ Simple Serialize

SSZ 란? SSZ 는 비콘 체인에서 사용하는 직렬화 방법으로 Merklization 을 하기 위한 데이터 정렬 작업이다. 실행 레이어에서 RLP 직렬화 작업이 이루어졌다면, 합의 레이어에서는 SSZ 로 직렬화 작업이 이루어진다. 그러면 직렬화란 무엇인가? 데이터 구조를 저장 또는 다른 노드와 데이터 통신할 경우, 파싱할 수 있는 형태로 만들기 위해서 변환하는 작업을 말한다. 예를 들어 참조형 데이터를 통신하는 경우, 메모리 주소에 있는 값을 참조하게 되는데 이때, 데이터를 받은 노드의 메모리 주소에는 다른 값이 존재할 수 있기 때문에 참조형 데이터의 주소값에 대한 데이터를 값 타입 데이터로 변환하는 작업을 거쳐야 한다. 이더리움에서의 직렬화는 unsigned int 와 boolean 의 기본 타입 변수..

이더리움 2023.03.12

23.03.09 [ResourceNotFound]not found nft

caver 로 NFT 컨트랙트 주소를 통해 데이터를 받아오는 중에 다음과 같은 에러 메세지가 나왔다. {"_code": 1040400, "_message": "[ResourceNotFound]not found nft", "_requestId": "8f011c9a-f0de-936d-9206-db855f38aa22"} 원인은 크게 세가지로 보고 1. 클레이튼 메인넷 호출 여부 (chainId) 2. contract address 3. EOA address 인자값을 체크했는데 다 이상없었다. 그리고 이상한 것은 같은 클레이튼 네트워크의 다른 컨트랙트 NFT 는 다 잘 나오는데 얘만 안나온다했더니 해당 컨트랙트의 Account Key 값이 AccountKeyFail 상태였다. 키값의 상태는 총 5개로 1. Ac..

블록체인 2023.03.09

23.02.16 치즈 만들기

1. 기본 사각형에서 edit mode 로 간다. 2. 점 두개 shift 선택하고 우클릭 ⇒ Vertex Context Menu ⇒ Merge Vertices ⇒ At Center 삼각형 치즈를 만들기 위해서는 아랫면의 점들도 해준다. 여기까지는 괜찮은데 그 뒤에 softly 하게 만드는게…쵸큼 빡세다. 일단 ctrl + B 로 면을 잘게 갈아준다. 처음에 딱 한번만 누르면 한번만 간 효과가 나오는데 여기서 마우스 없이 wheel 돌린 효과 내는 법을 내기 위해서 shift 하고 위로 슥슥 밀어준다. Object Mode 간 다음에 Add Modifier ⇒ Subdivision Surface Object ⇒ Shade Smooth shift + A ⇒ 객체 생성 (UV Spear) Edit Mode ..

Graphic/Blender 2023.02.16

23.02.05 왜 super call?

Constructors for derived classes must contain a super call super() 을 호출하지 않으면 위와 같은 타입스크립트 에러로 this 로 서브 클래스에 접근할 수 없다. (타스만의 에러는 아님.) 해주면 그럼 뭐 에러는 해결인데 왜 해줘야 하는지 좀 의문.. 서브 클래스에서 constructor 가 실행될 때, 생성자 함수에서는 슈퍼클래스에 빈 객체를 만들고 this 로 객체 할당해주라고 기다리고 있다. 그러니 서브 클래스 입장에서는 그냥 못 만들고 super() 을 호출해서 슈퍼 클래스의 constructor 를 실행해야 하는 것이다. 그러면 비로소 this 객체가 만들어지고 this. 를 사용할 수 있다~!~!

typescript 2023.02.05