분류 전체보기30 상동성과 상사성 생물학에는 상동성, 상사성이란 말이 있다. 상동성이란 지금은 거리가 먼 두 종이 특정 형질을 지닌 공통조상에서 분화되기 전에 그 형질을 물려받아 이후에 발현된 신체 부위, 신체 과정을 가지고 있을 때 발생한다. (e.g. 포유류의 앞다리 뼈, 새의 날개) 상사성, 또는 상사관계란 형질은 서로 다른 두 종이 비슷한 문제에 관한 합리적 해결책으로서 각각 독립적으로 발달시킨 것을 의미한다. 그 예로, 사람의 손과 개구리의 손을 보자. 엄지 손가락과 네 개의 손가락 구성의 비슷한 손을 갖고 있는데, 사람과 개구리는 손의 형성 과정이 완전히 다르기 때문에 공통된 조상으로부터 물려받은 것이 아니라고 유추할 수 있다. 그럼에도 손의 구조가 매우 비슷해보인다. 이번에는 사람의 눈과 문어의 눈의 구조를 보자. 둘 다 렌.. 2023. 6. 10. CPU 캐시를 고려한 최적화 사례 Repeat(s string, count int) string strings.Repeat("hi", 5) --> "hihihihihi" Golang 기본 라이브러리 strings의 Repeat 메서드는 넘긴 s 문자열을 count 번 반복하고, 그 문자열을 리턴하는 메서드다. 최적화 전 기존 코드를 먼저 보자. func Repeat(s string, count int) string { if count == 0 { return "" } // Since we cannot return an error on overflow, // we should panic if the repeat will generate // an overflow. // See Issue golang.org/issue/16237 if cou.. 2023. 5. 23. [이더리움] Signature API 클라이언트 이더리움 스마트컨트랙트의 메서드 호출, 이벤트 식별은 Signature를 Keccak256 처리한 값으로 가능하다. Signature란 'transfer(address,uint256)', 'Transfer(address,uint256)'과 같은 문자열을 의미하고, Keccak256 처리를 한 뒤 메서드의 경우 8글자(4 byte), 이벤트의 경우 64글자(32 byte)를 앞에서 추출한 것을 Selector 또는 ID 라고 부른다. Keccak256('transfer(address,uint256)')[0:4] -> 0xa9059cbb Keccak256('Transfer(address,address,uint256)')[0:32] -> 0xddf252ad1be2c89b69c2b068fc378daa952ba7.. 2023. 5. 16. [이더리움 코어] event.Feed go-ethereum에는 모듈 사이에 특정 액션이 발생했을 때 이벤트를 송수신할 수 있는 Feed 모듈이 존재한다. 예를 들어 core.Blockchain 모듈에서 로그 생성, 블록 생성과 같이 체인에 관련된 이벤트나, 새로운 트랜잭션이 트랜잭션 풀에 들어오는 이벤트를 사용자에게 전달해주는 eth_newFilter, eth_newBlockFilter등의 API가 Feed를 이용한 대표적인 경우다. 생각해보면 여러 종류의 이벤트를 내보내고, 받아 처리하고 있을텐데 어떻게 Feed 모듈 하나로 이를 처리해주고 있을까? type Feed struct { once sync.Once // ensures that init only runs once sendLock chan struct{} // sendLock ha.. 2023. 5. 10. [어원] 와중과 도중 바쁘신 와중에 시간 내주셔서 감사합니다. 나는 '와중'과 '도중'이 비슷한 단어라고 생각했다. 최근에 이메일을 주고 받는데 문득 해당 문장이 올바른지 궁금증이 생겨 구글에 검색해봤다. 그런데 놀랍게도 와중과 도중은 완전히 다른 말이었다. 이에 대해 알아보자. '와중'은 소용돌이 와(渦)와 가운데 중(中)으로 이뤄진 한자어로 큰 일이 일어났을 때에 사용하는 것이 올바르다. 예를 든다면 '지진이 발생한 와중에도 나는 내 맥북을 챙겼다', '화재가 발생해 대피하던 와중에 지갑을 잃어버렸다'와 같이 아주 시끄럽거나 복잡한 일이 벌어지는 경우에 사용하는 것이 자연스럽다. 하지만 시끄럽다거나 복잡하다는 말은 주관적인 느낌이기 때문에 '와중'이란 말을 써도 잘못된 문장이라고 말하기는 애매하다. 예를 들어 가장 위에 .. 2023. 5. 3. [이더리움] chainID, networkID 짧게 읽고 싶다면: chainID: 하드포크된 네트워크로부터의 재전송 공격을 막기 위한 식별자 값이며, 서명값에 포함하여 노드가 다른 네트워크로 전송된 트랜잭션임을 인지할 수 있도록 돕는 값이다. networkID: 노드 통신 과정에서 다른 네트워크의 노드와 연결되는 것을 방지하기 위해 사용하는 유니크한 값이며 노드가 연결 직후 상태 메세지를 주고 받는 과정에서 확인하는 값이다. 이더리움 기반에서 작업을 해본 사람이라면 chainID를 본 적이 있을 것이다. 나의 경우 이더리움과 통신을 돕는 라이브러리(ethers.js)를 사용할 때, 노드 엔드포인트와 chainID를 입력해주는 부분에서 주로 봤다. 조금 더 들어가서, 엔드포인트만 알면 되지 왜 chainID란 것이 필요하지? 라는 궁금증이 생겨 찾아보.. 2023. 4. 27. 이전 1 2 3 4 5 다음