2009년 완공 예정인 광화문의 복원 완공 조감도이다. 답도가 예전처럼 길고 웅장 했으면 하는 아쉼이 많이 남는다. 정면 궁성도 어느정도 복원을 들어가고 부속 건물들도 함께 복원을 할예정하지만 또 아쉬움이 남는건 동십자각과 궁성 연결은 힘들듯 싶다치욕의 시간을 함께 했던 광화문의 진정한 원래 모습을 찾기를 기원한다. 광화문의 옛모습
API보다 유연한 무엇을 찾아 나서다 API를 기획하거나 제작 하다보면 엔드포인트에서 유연하게 작동할 수 있는 무엇(?)을 원하게 된다. 그러다보면 API에서 필드의 스콥을 정하는 필드를 만드는 악수를 두는 상황이 벌어질 수도 있다 중급이상 개발자야 알고있거나 찾아놨거나 만들었겠지만 뭐 여튼 이래저래 찾다보면 GraphQL을 만나게 된다. GraphQL GraphQL은 애플리케이션 프로그래밍 인터페이스(API)를 위한 쿼리 언어이자 서버측 런타임으로 클라이언트에게 요청한 만큼의 데이터를 제공하는 데 우선 순위를 부여한다 바로 이점 에서 장점이 생기는데 이부분으로 인해 차후 네트워크 대역폭을 절약시키는 데 도움을 주기도 한다. 파이썬 (#python) 최근들어서 #머신러닝 이나 #AI 관련 프로젝트에 대한 이야기만 나오면 나오는 언어가 바로 파이썬이다. GraphQL공식 사이트 가보면 알겠지만 프로젝트의 큰 부분을 차지하는게 JS 지만 관리 하는 입장이라면 아무래도 통합적으로 관리하기를 원할 수 있다보니 API 도 파이썬으로 개발 운영 해보는걸로 택했다. FastAPI + GraphQL (#strawberry) + SQLmodel 파이썬에 대해서 알아가는 중이기도 하지만 조금만 찾아보면 API만든다고 하면 많은 메뉴얼이 뜨고 있는 FastAPI(이름부터 마음에 듬) 를 택했다. 문제는 GraphQL 작성을 위한 프레임워크 인데 가장 많이 쓰이고 있는게 Graphene (star 7.7k) 이다. 코드를 보니 크게 어려운건 없지만 2위의 #strawberry 가 유독 끌렸다. 깃헙에서 스타갯수도 3.2k 로 한참 밀리는 느낌이지만 릴리즈 수가 압도적이었다. (어떤면에서 불안할 수 있다고 할 수 있겠지만 크게 Deprecated 되는 것이 없었다) ORM은 직관적이라고 판단한 SQLmodel을 활용하기로 했다. 패키지 관리 패키지 관리툴은 poetry를 사용 했다. [tool.poetry.dependencies] python = "^...
지금 현재 작업 중인 경복궁 안내맵 북궐도 2.0 이다. 다들 많이 어이 없어 하던 바로 그물건인데 조만간에 완성이 되면 에디터스 블로그와 에디터스에 뿌릴 예정이다. 자세한 기능은 반년이나 되야 할듯 싶다 아직도 기획에서 많이 미비함을 느끼고 있으며 추가 사항도 요구 사항도 점점 늘고 있다. 많은 사람들의 관심(?)을 받았었는데 사실 대학2학년때에 과 후배들과 함께 했다가 여럿 울렸다.. 그때에는 부속들을 가지고 일러스트로 하나하나 블록처럼해서 만들어 올렸는데.. 어느새 패스가 8만개가 넘어가면서 사양이 적은 컴터에서는 열리디도 않는 신기를 발휘하는 물건이 되었다 완성은 했지만 방향을 잃어 버리고 기간이 많이 지나 팀 전체의 점수가 많이 깍아 먹었던 아픔이 있다. 현재 많은 문헌들을 참고로 해서 동궐도와 함께 많은 자료를 체계적으로 정리하면 서비스로 오픈 하고 싶은 작은 소망을 가지고 있다.
개요 해외 주식을 하다보면 네이버 증권의 시가총액 목록 처럼 목록화 하는 페이지를 보고 싶어하는 분들이 많지만 미국 주식이 그렇게 호락호락 하지않음을 잘 알것이다. 돌고돌다 보면 finviz.com(이하 핀비즈)의 Screener(이하 스크리너) 페이지를 통해서 목록화를 시도 하는게 가장 깔끔하다. pandas 모듈을 활용하는 Python 패키지 pyfinviz 를 소개 해본다. from pyfinviz.screener import Screener # 매개변수 없음(기본 스크리너 테이블) screener = Screener() # with params (Analyst가 강력 매수 추천하는 "STOCKS ONLY"의 처음 3페이지) options = [Screener.IndustryOption.STOCKS_ONLY_EX_FUNDS, Screener.AnalystRecomOption.STRONG_BUY_1] screener = Screener(filter_options=options, view_option=Screener.ViewOption.VALUATION, pages=[x for x in range(1, 4)]) # available variables: print(screener.main_url) # 스크랩 URL print(screener.soups) # beautiful soup 페이지 단위 오브젝트 {1: soup, 2: soup, ...} print(screener.data_frames[0]['Ticker']) # 페이지 단위 pd.DataFrame 오브젝트 테이블 정보 {1: table_df, 2, table_df, ...} 크게 레인지를 주면 뻗어 버릴 가능성이 농후하니 머리를 많이 써야 한다 한다. ㅎㅎ
댓글
댓글 쓰기