HTTP HTTP는 HTML과 같은 하이퍼미디어 컨텐츠를 전송하기 위한 어플리케이션 계층의 프로토콜이다. 웹 브라우저와 웹 서버간 통신을 위해 디자인 되었으나 다른 목적으로도 사용이 될 수 있다. HTTP는 전통적인 client-server 모델을 따른다. 즉, 클라이언트가 요청을 하기 위해 커넥션을 열고, 응답을 기다린다. HTTP는 stateless 프로토콜로서, 서버는 복수의 요청 간 데이터(state)를 따로 저장하지 않는다. 전송되는 문서는 텍스트, 레이아웃, 이미지, 비디오 등 여러 개의 하위 문서들이 모여 완전하게 구성된다. HTTP 기반 시스템의 여러 요소들 HTTP는 client-server 프로토콜이다. 즉 user-agent 혹은 이를 대신하는 프록시에 의해 요청이 전송된다. 대부분의..
JVM의 구조 먼저 자바 컴파일러부터 살펴보자 .java 형식의 자바 코드는 자바 컴파일러를 거쳐 .class 형식의 바이트 코드로 컴파일된다. 하나의 자바 프로젝트에 여러 개의 .java 파일이 있을 수 있다. 그러면 이들 모두가 하나의 .class 파일로 합쳐질까? 아니다. 각각의 .java 파일은 각각의 .class 파일로 컴파일된다. 그렇게 분할된 .class 파일들은 JVM으로 진입하게 된다. 그림에서 보이듯, JVM은 크게 ClassLoader, Runtime Data Area, Execution Engine, 3가지 서브시스템들로 구성된다. 각각이 무슨 역할을 하는지 알아보자. 1. ClassLoader Bootstrap classloader: bootstrap classpath에 존재하는 ..
Step 1: Xcode Command Line Tools를 설치한다. xcode-select --install Step 2: Brew를 설치한다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Step 3: miniforge를 설치한다. brew install miniforge Step 4: 필요한 라이브러리를 설치한다. brew install cmake libomp Step 5: 콘다 가상환경을 만들고 LightGBM, XGBoost 설치에 필요한 라이브러리를 설치한다. conda create -n boost conda activate boost conda install pyt..
Lightgbm은 leaf-wise 트리로서, 가로로 확장하며 가장 유망한 노드를 우선 탐색하는 알고리즘이다. depth-wise 알고리즘보다 빠르지만, 적절한 파라미터를 사용하지 않으면 오버피팅이 될 수 있다. Leaf wise tree의 3가지 중요한 파라미터 1. num_leaves 오버피팅을 방지하는데 중요한 파라미터이다. 즉 오버피팅되었다 싶으면 값을 줄이면 된다. 트리의 최대 깊이를 의미한다. 일반적으로 num_leaves를 2^max_depth보다 작게 설정해야한다. 같으면 depth-wise tree와 같은 수의 leaves를 가지게 하여, 오버피팅이 발생할 수 있다. 2. min_data_in_leaf 오버피팅을 방지하는데 중요한 파라미터이다. leaf가 가지고 있는 최소한의 데이터 수 ..
프로토콜 1) 정의 - 데이터를 정확히 주고 받기 위해 peer 계층 간 정의된 전송규약을 말하고, 상호운용성을 특징으로 갖고 있다. 2) 계층적 모듈 구조 - 복잡한 시스템을 기능별로 계층화, 모듈화하여 전체적인 구조를 단순하게 하고 각 계층의 모듈 변화가 다른 계층에 영향을 주지 않게 된다. 또한 상위 계층에서 필요한 기능을 하위 계층이 인터페이스화하여 제공한다. 3) 3대 요소 (1) Syntax: 전송 데이터의 포맷을 정의한다. (2) Semantic: 제어 정보를 정의한다. Ex. 오류 처리 (3) Timing: 속도, 전송 절차를 정의한다. 4) 설계 고려사항 (1) 주소 설정: 송/수신 호스트 식별자를 부여한다. (2) 오류 제어: 신호의 감쇄 혹은 왜곡은 오류를 발생시킨다. 이를 탐지하여 ..
Internet 구성 - 인터넷은 다수의 서버, 기업체의 랜, LAN 스위치 등으로 구성된 네트워크들과 ISP 등으로 구성된다. 네트워크의 종류 (1) WAN - 넓은 지역을 커버하고, Circuit 스위칭과 Packet 스위칭 방식을 함께 사용한다. 이름에서부터 알 수 있듯이, 전자는 전용 통신을 사용하는 반면 후자는 전용 통신을 사용하지 않는다. 또한 전자는 일반적으로 전화망에 사용하고 후자는 데이터 네트워크 용으로 사용한다. (2) LAN (3) PAN, BAN - 블루투스, WLAN 크기 순으로, PAN, LAN, MAN, WAN, INTERNET으로 분류되기도 한다.
지은이: 강윤신,김영환,김재석,김정엽,김택주,노승헌,박민우,배권한,이서연,이승진,이홍규,하태호 쪽수: 252 출판사: 한빛미디어 출간일: 2019-09-02 ISBN: 9791162242162 정가: 16,000원 판매가: 14,400원(알라딘) 라인의 개발자 12명이 라인 개발자가 되기까지의 이야기와 라인에서의 과정을 담은 책. 개발자 12명은 10대 창업자, 게임 마니아, 철학 전공자, 아마존 출신 개발자 오픈소스 매니저나 테크 에반젤리스트 등 다양한 배경을 가지고 있다. 또한 개발자로 성장하고자 하는 이들을 위한 팁과 공부법도 포함되어 있다. 키워드를 기준으로 재밌게 읽었던 부분을 정리해본다 잘 기록하고 잘 읽는 다는 기본을 바탕으로 Wiki 형태로 개발 문서를 작성하고 버그 추적 시스템 개발 개발..
# 컴파일러 역사적으로, 1950년대 까지는 컴퓨터 프로그램은 어셈블리어로 만들어졌다. 그러다가 1951-1952년 Grace Hopper가 UNIVAC I을 위해 A-0 시스템을 개발했다. Grace Hopper는 나중에 COBOL 디자인에 중요한 기여를 하였다. 1957년에는 John Backus가 이끄는 팀에 조직에 의해 포트란 컴파일러가 IBM에서 개발되었다. 이후 1960년대에 LISP를 위한 최초의 bootstrapping compiler가 만들어졌고, 1970년대에 이르러서는 굉장히 많은 프로그래밍 언어와 컴파일러 설계가 이루어졌다. 오늘날에는 약 수천개의 언어가 존재한다. (대부분은 거의 쓰이지 않지만..) # 기본 아키텍처 컴파일러는 프론트엔드와 백엔드로 나뉜다. 프론트엔드에는 Parsi..
환경 환경은 아래와 같습니다. OS: Kali Linux 1.1 0a 32 bit 생성하게 될 파일은 아래와 같습니다 buf.c, eggshell.c, getegg.c 스택 버퍼 오버플로우 공격 과정 아래 코드는 버퍼 오버플로우 공격에 취약한 buf.c로 버퍼는 char 64바이트, foo 함수가 매개변수로 argv[1]을 받아 bar 함수에게 넘겨주고, bar 함수 안에서 버퍼 오버플로우 공격에 취약한 strcpy 함수를 사용하여 buf 배열에 argv 값을 할당해 버퍼 오버플로우를 발생시킵니다. 명령어: gcc -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -g -o buf buf.c -fno-stack-protector 플래그로 스택..
위키피디아의 정의에 따르면 union은 각 데이터 멤버가 메모리 상에서 같은 위치에서 시작한다는 점을 제외하면 struct와 거의 동일하다. struct는 각 데이터 타입에 따라 별도의 메모리 공간에 멤버를 저장한다. 따라서 이들은 size 면에서 차이가 난다. 구체적으로 64 bit platform에서는 union의 size는 char*의 size와 같다. 또한 struct와 동일하게, 모든 멤버들은 기본적으로 public이다. union은 다양한 데이터 타입에 의해 자주 사용되는 메모리 위치에 접근을 허용할 때 주로 사용된다. 대부분의 경우 union은 struct 안에 래핑하여 사용되고, struct의 한 멤버가 union의 어떤 요소에 접근할 수 있는 지 알려주는 용도로 사용된다. 예를 들면 다음..
운영체제: 가장 쉬운 세가지 이야기 - Operating Systems: Three Easy Pieces를 바탕으로 작성하였습니다. 컨디션 변수 - 컨디션 변수는 특정 조건이 만족되기를 기다리며 대기하는 "큐"다. - 다른 쓰레드가 시스템의 상태를 변경시키고, 이에 따라 조건이 충족되면 대기 중인 쓰레드에게 signal을 발생시킨다. - 쓰레드 실행 전 특정 조건의 만족 여부를 검사하는 경우는 흔하다. 이 때 컨디션 변수를 사용할 수 있다. - 회전 대기(while과 flag로 구현)는 단순하나 낭비가 있다. 동작 *어떤 쓰레드가 먼저 실행될지는 비결정적이라는 사실을 기억한다. 1. 부모 쓰레드가 먼저 실행되는 경우 1 thr_join() 실행, done이 1이 아니면 wait() 실행, 이 때 보유 중..
운영체제: 가장 쉬운 세가지 이야기 - Operating Systems: Three Easy Pieces를 바탕으로 작성하였습니다. 락 기반의 병행 자료구조 - 락을 사용하지 않는 병행 자료구조도 존재한다! - Correctness와 Performance의 관점에서 자료구조를 평가한다. 1. 병행 카운터 - 간단한 방식으로 모니터 기법과 유사한 방식을 사용한다. 즉 호출할 때 락 할당. 리턴 시 락을 해제한다. - 매우 간단하나 성능 문제가 있다. - 즉, 확장성없이 다수의 쓰레드로 카운팅 시 성능이 낮아진다. 1.1 확장성있는 카운팅 - 근사 카운팅 방식이 흔히 사용된다. - 근사 카운팅 방식에서는 하나의 전역 카운터와 전역 락, CPU 마다 지역 카운터와 지역 카운터 락이 사용된다. 1. 각 CPU ..
운영체제: 가장 쉬운 세가지 이야기 - Operating Systems: Three Easy Pieces를 바탕으로 작성하였습니다. 락이란 무엇인가? - 락은 변수이다. - 소스코드 임계영역을 락으로 둘러 원자 단위로 실행되게 끔 한다. - lock() 함수를 통해 락 획득을 시도하고, 가용 상태가 아니라면 return하지 않고 spin하며 대기한다. - unlock() 함수를 통해 보유중인 락을 해제하고, spin하며 대기중인 쓰레드가 있다면 그 쓰레드는 락을 획득한다. - 락을 통해 운영체제의 영역인 스케쥴링 제어권을 프로그래머가 일부 이양받게 된다. Pthread 락 - POSIX 라이브러리를 통해 사용하여, 하나의 락을 사용하여 전체 쓰레드를 관리하는 coarse-grained 방식과 여러개의 쓰..
2021년 1월 15일 00시 부터 DCinside 미국주식 갤러리 글 중 언급된 총 1261개 종목의 데이터/차트 상위 30개 종목 ('GME', 3269), ('VTNR', 810), ('SAVA', 731), ('AREC', 681), ('CCIV', 553), ('CTRM', 466), ('AMC', 343), ('TYME', 317), ('UWMC', 253), ('UKOMW', 250), ('SOL', 203), ('NAKD', 199), ('CPSH', 166), ('THCB', 158), ('OCGN', 147), ('APXT', 142), ('BB', 137), ('IPOF', 131), ('GEVO', 112), ('VGAC', 107), ('AACG', 97), ('TNXP', 97)..
2021년 1월 15일 00시 부터 DCinside 미국주식 갤러리 글 중 언급된 총 1261개 종목의 데이터/차트 상위 50개 종목 ('GME', 66056), ('AMC', 12608), ('CCIV', 9602), ('CTRM', 5162), ('BB', 4490), ('ACTC', 4451), ('THCB', 3374), ('IPOE', 3034), ('SOL', 2934), ('VS', 2875), ('GEVO', 2818), ('AUPH', 2817), ('NNDM', 1842), ('ZOM', 1815), ('BNGO', 1784), ('OEG', 1448), ('NAKD', 1437), ('SENS', 1405), ('KOSS', 1404), ('VTNR', 1279), ('TRXC', 8..
2020년 3월 18일 00시 부터 DCinside 미국주식 갤러리 글 중 언급된 총 1213개 종목의 데이터/차트 상위 50개 종목 ('GME', 8615), ('CCIV', 4340), ('AMC', 1779), ('RWT', 1378), ('IPOE', 1370), ('ACTC', 1308), ('TSM', 1120), ('BB', 749), ('MFA', 676), ('CTRM', 667), ('SOL', 623), ('NGA', 540), ('THCB', 533), ('EPR', 393), ('SPRQ', 360), ('T', 353), ('AMD', 311), ('VTNR', 301), ('NNDM', 241), ('CERT', 224), ('TPGY', 207), ('HOFV', 204), ..
원서의 번역서 슈퍼 스톡스를 읽고 요약, 정리한 글입니다. 지은이: 켄 피셔(Kenneth Fisher) 원제: Super stocks(1984) 쪽수: 372 옮긴이: 이건, 김홍식 감수: 신진오 출판사: 중앙북스 출간일: 2019-09-03 ISBN: 9788927810391 정가: 21,000원 판매가: 18,900원(알라딘) 높은 수익률을 가져다주는 슈퍼 스톡은 '슈퍼 컴퍼니'의 PSR과 PRR로 찾아낸다. 켄 피셔는 슈퍼 스톡의 조건으로 다음을 제시합니다. 자체 자금 조달(자기 자본)을 통한 약 15~20%의 장기 평균성장률(물가상승률을 공제한 실질 성장률로 연복리 15%이상) 5%가 넘는 장기 평균 세후 순이익률 PSR 이익 감소 혹은 손실. 이때 이 회사에 지나친 낙관이 있었다면 주가 급락...
원서를 읽고 요약, 정리한 글입니다. 지은이: 메리 버핏(Mary Buffett), 데이비드 클라크(David Clark) 원제: The New Buffettology(2002) 쪽수: 344 옮긴이: 최준철 출판사: 이콘 출간일: 2010-09-02 정가: 16,000원 판매가: 14,400원(알라딘) “①좋은 주식을 ②적절한 가격에 사서 충분한 수익률을 올릴 때까지 보유한다.” ①좋은 주식이란 무엇일까요? 워런 버핏에 따르면 좋은 주식이란, 소비자 독점 기업의 주식입니다. 소비자 독점 기업의 특징은 아래와 같습니다. 불황일 때 소비자 독점 기업이 아닌 일반적인 기업보다 가격 인상이 훨씬 더 자유롭습니다. 소비자가 매일, 필수적으로 사용해야하는 제품을 생산합니다. 광고, 특허권, 제조법, 브랜드등으로 ..
Fromkin, V., Rodman, R., & Hyams, N. (2018). An introduction to language. Cengage Learning. 강범모(2005). 언어: 풀어쓴 언어학 개론. 한국문화사. 권재일·김현권·남승호(2015). 언어의 이해. 한국방송통신대학교출판부. 강범모(2011). 『언어: 풀어쓴 언어학 개론(3판)』. 한국문화사. (주교재) 권재일(2013). 『세계 언어의 이모저모』. 박이정. (부교재) S. Nam (2020) (Language and Human) (pdf files to be uploaded in eTL) Fromkin, Victoria, Robert Rodman, Nina Hyams. (2017-11th ed). An introduction t..
source: www.investopedia.com/articles/basics/11/3-s-simple-investing.asp 위 자료로 부터 요약 작성함. Beginner’s Guide to Asset Classes stable - volatile에 따라 나뉨. 일반적으로 알려진 각 asset class의 risk 정도에 따라 오름차순으로 적음. Cash pros: simple, understandable, safest cons: inflation Bonds debt instrument representing a loan usually by the corporate and the government the rates are determined by the Interest rates Mutual Fu..
source: www.investopedia.com/terms/f/fundamentalanalysis.asp 위 자료로부터 요약 작성함. Fundamental analysis it represents that doing the analysis with the following indicators: the stock's annual dividend payout, earnings per share, P/E ratio, and many other quantitative factors also its brand recognition. also the market as a whole can be evaluated doing Fundamental Analysis of such as S&P 500 reports Qu..
텐서플로(Tensorflow), 케라스(Keras), 파이토치(PyTorch) 등으로 랜덤 포레스트, 신경망(CNN, RNN, GAN)등의 모델을 학습시킬 때 loss 값이 nan이 되는 경우가 있다. 아래에 나와있는 방법들로 대개 해결된다. 가장 먼저 df.isnull().any()로 데이터셋에 NaN이나 inf 값이 들어있는지 확인한다. (데이터 셋이 pandas DataFrame 형태인 경우) 다른 optimizer들을 사용해본다. Ex. sgd, adam, nadam learning rate(학습률)을 낮춰본다. 특성 스케일링을 다른 방식으로 해본다. Ex. (0, 1)을 (-1, 1)로
David Foster Wallace gave a commencement speech to the graduating class at Kenyon College in 2005 and below is the transcript of it This is Water “Greetings parents and congratulations to Kenyon’s graduating class of 2005. There are these two young fish swimming along and they happen to meet an older fish swimming the other way, who nods at them and says “Morning, boys. How’s the water?” And the..
저자인 나심 탈렙은 책 으로 유명한 사람이다. 저자가 직접 서문에서 밝히듯 전반적으로 어투가 직설적이다. 노벨 경제학상 수상자인 로버트 머튼이나 마이런 숄즈 등 직접 실명을 언급하며 비판한다. 마이런 숄즈를 두고 펀드를 두 번이나 파산시키고 대학에서 리스크 관리 강의를 할 자격이 없으니 은퇴 후 집에서 스도쿠나 두고 있어야 한다고 조롱한다. 저자는 책 전반에 걸쳐 시니컬한 태도를 유지하고 월 스트리트 동료 트레이더들에 대한 비아냥과 독설까지도 서슴지 않는다. 이 책은 크게 4부로 구성된다. 1부에서는 보이는 역사, 숨은 역사, 희귀 사건(Rare events)에 대해 속성을 다룬다. 저자는 많은 사람들이 조지 소로스나 워렌 버핏같은 부자들이 전적으로 노력과 재능에 의해 성공을 이루었다고 보는 것은 착각이..
비지도 학습 현실의 대부분의 데이터들은 레이블이 없는 경우가 많다. 사실 어찌보면 당연하다. 예를 들어보자. Youtube 서비스의 추천 알고리즘을 개발한다고 하자. Youtube 서비스를 이용하는 사람들의 접속, 동영상 시청 여부, 시간등에 대한 데이터는 구하기 쉬울 것이다. 하지만 이 데이터를 가지고 어떻게 사용자를 분류해 각 사용자에 맞는 동영상을 추천할까? 동영상을 추천하는 작업은 사용자를 분류한 이후의 별개의 작업이므로 여기서는 어떻게 올바르게 사용자를 분류할 수 있을 지에 대해 생각해보자. 사용자의 Youtube 사이트, 어플 접속, 동영상 시청 여부에 대한 데이터 셋에는 각 사용자들을 어떻게 분류해야하는 지에 대한 정답이 표면적으로 나와있지 않을 것이다. 즉 지도 학습이 가능한 데이터 셋과 ..
머신러닝 파이프라인 머신러닝 수행 과정을 정형화하는 파이프라인을 구축해본다. 일반적으로 머신러닝은 대략 아래와 같은 순서로 진행한다. 더보기 1. 큰 그림 보기 2. 데이터 가져오기 3. 데이터 탐색과 시각화 4. 데이터 준비 5. 모델 선택과 훈련 6. 모델 세부튜닝 1. 큰 그림 보기 문제 정의부터 시작해야한다. 해결하려는 문제가 어떤 종류의 문제인가? 지도 학습으로 해결할 수 있는 문제인가?(데이터에 예측하려고하는 레이블, 타깃값이 있는가) 비지도 학습 혹은 강화 학습? 또한, 예를 들어 주식 가격(삼성전자의 종가라고 하자.)을 예측하고 싶다면, 내일 삼성전자의 종가가 오늘 종가에 비해 오를지 혹은 떨어질지를 예측하고 싶은가?(분류) 아니면 정확한 종가를 예측하고 싶은가?(회귀) 데이터를 실시간으로..
현실의 대부분의 데이터들은 특성을 적게는 수백 개에서 많게는 수백만 개를 가지고 있다. 특히 만약 데이터가 이미지라면 샘플 하나 당 가지고 있는 특성의 수는 이미지의 크기에 따라 기하급수적으로 늘어난다. 예를 들어 28 * 28 해상도의 저해상도 이미지만 해도 28 * 28 = 784개의 특성을 가지고 있다. 128 * 128 해상도의 이미지라면 총 16384개의 특성을 가지게 된다. 이렇게 수많은 수의 특성을 가지고 있는 데이터는 모델로 하여금 학습을 어렵게한다. 또한 샘플 하나 당 연산량이 많아 학습 속도도 느려지게 된다. 차원 축소 그렇다면 이 문제를 어떻게 해결할까? 방법은 여러가지가 존재하나 대표적으로 차원 축소() 알고리즘을 사용해 해결한다. 여기서 말하는 차원은 특성과 같다. 즉 특성의 수를..
위에서 새로운 특성을 기존의 특성을 거듭제곱해 만들었다. 왜 세제곱이나 네제곱이 아닌 거듭제곱일까? 즉 차수를 어떻게 정해야할까? 가장 간단한 방법은 반복 실험을 통해 알아보는 것이다. 즉 교차 검증을 통해 확인하면 된다. 또 다른 방법이 있다. 학습 곡선을 이용하면 된다. 학습 곡선은 train set과 valid set의 모델의 성능을 train set의 크기의 함수로 나타낸 것이다. 무슨 말인가? 그림으로 보자. 즉 점점 train set의 크기를 늘려가며(training set의 크기를 1, 2, 3, ... 점점 더 추가하면서 테스트) 모델을 훈련시키면서 동시에 valid set으로 모델의 성능을 평가하는 것이다. 코드로 구현하면 아래와 같다. 여기까지는 좋다. 하지만 이 다음에 무엇을 해야하는..
데이터가 선형이라면 선형 모델을 사용하면 된다. 하지만 만약 아래와 같이 데이터가 비선형이면 어떻게 해야 할까? 신기하게도 비선형 데이터를 학습하는데 선형 모델을 사용할 수 있다. 바로 기존의 데이터에 각 특성의 거듭제곱을 새로운 특성으로하여 추가된 데이터에 선형 모델을 훈련시키는 것이다. 이것을 다항 회귀라 한다. 특성의 거듭제곱을 구하고 이를 새로운 특성으로 하여 기존 데이터에 추가하는 것은 어려운 일이 아니다. 하지만 매번 이렇게 똑같은 작업을 반복하는 것은 지양해야한다. 따라서 우리가 직접 함수를 구현할 수도 있겠지만 다행히 사이킷런에서는 PolynomialFeature라는 메서드가 구현되어 있다. 이를 이용하여 위의 비선형 데이터에 선형 모델을 훈련시켜보자. 먼저 거듭제곱 항을 추가하고 변형된 ..