목록Dev (34)
에르노트
파인스크립트(Pine Script)는 트레이딩뷰(TradingView)에서 제공하는 차트 전용 스크립트 언어다. 트레이딩뷰라는 강력한 플랫폼 위에서 구동되기 때문에, 파이썬 등 다른 언어로 퀀트 전략을 설계하고 테스트하는 것보다 백만 배 더 쉽고 간편하다. 덕분에 파인스크립트를 쓰면 자잘한 구현 이슈를 최소화하고 매매 로직에 더 집중할 수 있다. 언어 구조는 자바스크립트 + 파이썬이기 때문에, 대중적인 현대 프로그래밍 언어를 한가지 이상 써봤다면 쉽게 적응할 수 있다. 현재 글 작성 시점 기준 최신 버전은 v6이고 공식 문서도 잘 갖춰져있다. Pine 스크립트 언어 레퍼런스 매뉴얼 kr.tradingview.com 코딩은 그냥 트레이딩뷰에서 Pine 에디터를 열어서 하면 된다. VS Code 기반이라 ..
minikube docs에서 친절하게 운영체제와 아키텍쳐에 맞는 설치 커맨드를 안내하고 있다. 본인의 컴퓨터 버전에 맞게 curl 또는 brew install 을 이용해서 minikube을 설치하여 실행하면 된다. minikube start minikube is local Kubernetes minikube.sigs.k8s.io 파드(Pod) 파드는 쿠버네티스에서 최소의 컴퓨팅 리소스 단위이다. 컨테이너 오케스트레이션의 장점을 살리기 위해서, 파드를 소중하게 생각해서는 안 된다고 한다. 다시 말해, 애플리케이션의 자가 복구가 원활하기 위해서, 사용자는 파드를 언제든 버릴 수 있는 일회용품으로 생각해야 한다. 파드 간 통신을 위해서 자체 IP 주소가 주어진다. 각 파드에는 IP 주소와 포트가 할당되고, 하..
이전에 Hardhat을 이용하여 스마트 컨트랙트를 배포하는 과정을 작성했었다. 2023.04.08 - [Dev/Blockchain] - Sepolia 테스트넷에 스마컨트랙트 배포하기 Sepolia 테스트넷에 스마컨트랙트 배포하기 이더리움 스마트 컨트랙트를 작성하고 로컬 네트워크(Ganache)에서 기본적인 검증을 마쳤다면 다음은 메인넷으로 가기 전에 테스트 네트워크에 배포할 차례다. 글을 쓰는 시점에서 정상적으로 동 makasti.tistory.com 이번에는 Foundry라는 프레임워크를 이용하여 스마트 컨트랙트를 테스트넷에 배포하는 과정을 다뤄볼 것이다. 먼저 Foundry는 Rust 언어로 작성되어서 JS 기반의 Truffle이나 Hardhat보다 훨씬 더 빠르다. 그리고 테스팅 코드를 작성할 때 ..
위와 같이 스마트 컨트랙트 실행에 실패했을 경우, 가스비 부족 문제일 가능성이 높다. 그럴 때는 아래와 같이 가스비 한도를 풀어주면 된다. 이때 최대 기본 요금이 필요 이상으로 높다는 경고가 나오게 되는데, 무시하고 진행해야 한다. 말그대로 '최대' 요금이기 때문에 최악의 경우에 부과되는 요금이어서 실제로 명시한만큼의 금액을 감당하는 경우는 거의 없다. 물론 언제든 바가지를 쓰게 될 리스크가 생기기 때문에, 항상 예상 가스비가 얼마로 책정되었는지 확인하는 습관을 들여야한다!
이더리움 스마트 컨트랙트를 작성하고 로컬 네트워크(Ganache)에서 기본적인 검증을 마쳤다면 다음은 메인넷으로 가기 전에 테스트 네트워크에 배포할 차례다. 글을 쓰는 시점에서 정상적으로 동작하는 테스트넷은 Goeril와 Sepolia 두 가지가 있다. 그 중에서도 Sepolia는 아직까지 이용자가 비교적 적어서 테스트용 이더리움 확보가 더 쉽다는 장점이 있다. 앱 등록 및 키 발급 먼저 Alchemy 대시보드에 접속한다. 로그인 후 Create App 버튼을 눌러서 배포할 디앱의 정보를 작성해준다. 앱이 생성되었으면 다음으로 VIEW KEY 버튼을 눌러서 https 버전의 api key를 확인하고, 복사해둔다. Hardhat 설치 및 프로젝트 설정 블록체인 개발 프레임워크인 Harhat을 설치해준다. ..
좌표를 계산해야 할 때 (1,1)이라고 주어지면 깔끔하다. 그냥 그대로 사용하면 된다. x축으로 한칸 이동했을 때 (2,1)이다. 하지만 (A,1)이라고 주어질 수도 있다. 그러면 x축으로 한칸 이동했을 때 (B,1)로 옮겨주어야 한다. [A,B,C...] 형태로 좌표 배열을 만들어두고 인덱스를 옮겨다닐 수도 있겠지만 비효율적이고 또 불편하다. 그래서 (A, 1)이라고 입력이 들어오더라도 (1,1)로 변환할 수 있다면 문제가 좀 더 쉬워진다. 다행히 파이썬에서는 내장 함수 ord()를 이용하여 간단하게 문자를 유니코드 정수로 변환할 수 있다. ord('A') == 65 ord('B') == 66 ord('C') == 67 반대로 내장 함수 chr()를 이용하여 유니코드 정수를 받아서 문자를 반환할 수도 ..
알면 알수록, 그리고 쓰면 쓸수록 파이썬은 참 잘 만들어진 언어라는 생각이 든다. 코틀린이나 모던 자바스크립트 같은 최신 언어들도 다뤄봤지만 역시 파이썬이 가장 직관적이고 편한 것 같다. 아무튼 파이썬에는 다소 독특한 리스트 초기화 방법이 있다. 바로 리스트 컴프리헨션(List Comprehension)이다. 파이썬에서는 대괄호([]) 안에 조건문과 반복문을 사용해서 표현된 식으로 리스트를 초기화 할 수 있고, 이를 리스트 컴프리헨션이라 한다. 그럼 왜 이걸 리스트 컴프리헨션이라고 부를까? 영단어 'Comprehension'에는 '이해, 포용, 포괄'이라는 뜻이 있다. 즉, 대괄호 안에 어떤 수식을 적더라도 리스트로 감싸안아 준다는 뜻으로 이해하면 편하다. 따라서 리스트 컴프리헨션의 결과(반환값은)는 항..
개인적으로 그닥 좋아하지는 않지만, 재귀함수는 코딩을 하다보면 언젠가는 사용해야 할 필수불가결한 로직 형태의 하나이다. 그런데 간결함을 추구하는 파이썬의 철학 때문인지 기본으로 설정된 재귀 깊이(1000)가 너무 얕다. 그래서 코딩테스트 등에서 재귀 함수 관련된 문제를 풀 때는 로직을 제대로 설계했어도 테스트케이스를 통과하지 못할 수도 있다. 그럴 때는 간단히 setrecursionlimit() 함수를 이용하여 문제를 해결할 수 있다. setrecursionlimit()은 표준모듈 sys에 들어있으므로 미리 import해서 사용한다. import sys sys.setrecursionlimit(10**6) 이러면 백만 번까지 재귀를 돌릴 수 있게 된다. 컴퓨터 성능이 따라주는 선에서 얼마든지 Recursi..
c++ 또는 자바에 'this'라는 키워드가 있다면 파이썬에는 'self'라는 키워드가 있다. 그 뜻은 쉽게 유추가능한대로 '클래스의 인스턴스 자기 자신'이라는 뜻이다. 양쪽 다 실전에서 상당히 빈번하게 사용되는 키워드임은 분명하다. 그런데 c++이나 자바에서는 적어도 this 키워드의 사용을 강제하지는 않는다. 하지만 재밌게도 파이썬에서는 메소드를 정의할 때 self의 사용을 강제하는 것처럼 보인다. class A: def say_a(): print('a') a = A() a.say_a() 위의 코드는 다음과 같은 에러 메세지를 남긴다. TypeError: say_a() takes 0 positional arguments but 1 was given 위 에러 문구는 파이썬에서 클래스를 다루다보면 굉장히..
파이썬 논리 연산자를 사용해보면 파이썬의 철학을 느낄 수 있다. 난해한 것보단느 복잡한 것이, 복잡한 것보다는 단순한 것이 더 낫다. 그리고 사소한 부분일지라도 가독성은 정말로 중요하다. 그런 취지에서인지 파이썬은 &&, ||, ! 등의 기호를 완전히 배제하고 영단어 그대로를 연산자로 사용하고 있다. AND 연산자 print(True and True) #True print(True and False) #Fasle print(False and False) #Fasle and 연산자는 피연산자 모두가 True 일때만 True를 반환한다. 다시 말해 피연산자 하나라도 False이면 False를 반환한다. OR 연산자 print(True or True) #True print(True or False) #True..