반응형

Programming 37

Check Expert + VBA로 종목별 Intra 데이터 누적쌓기

정말 오랜만에 쓰는 글은 나의 생존 신고 겸, 아이패드를 갖기 위한 몸부림이다. 코스콤의 Check Expert+ 단말기와 엑셀 프리미엄이 데이터는 엄청나게 많다. 종목의 실시간 데이터부터 과거 일별 데이터, 거기에 Intra 데이터까지. Intra 데이터는 쉽게 말해 과거의 기간 데이터이다. Intra 10분 데이터면 10분 간격으로 원하는 데이터 항목의 통계치 (시/고/저/종가, 체결량, 거래대금 등)를 쭉 볼 수 있는 것이다. 이 Intra 데이터가 개인적인 생각으로는 엑셀 프리미엄이 주는 가치 중 가장 큰 비중을 차지하고 있지 않을까 생각해본다. 기본 정보나 실시간 시세와 같은 것들은 굳이 엑셀 프리미엄을 사지 않더라도 DDE나 RTD를 통해서 어느 정도 커버가 되니깐. 무튼 오늘은 엑셀 프리미엄..

Programming 2020.12.17

Beej's Guide to Network Programming 요약, Part 2. Slightly Advanced Techniques

마지막 한 섹션이지만, 그 내용도 어려워지고 번역하기도 어려워져서 Part 2로 따로 쓰게 되었다. 역시나 미사여구는 쳐 내고 핵심 내용 중심으로 옮겼으니, 원문도 꼭 읽어보시기 바란다. 7. Slightly Advanced Tenchniques 7.1. Blocking "Block"은 "sleep"을 기술적으로 멋지게 하는 말이다. listener를 실행할 때 보면 알 수도 있을텐데, recvfrom()을 실행했을 때 들어오는 데이터가 없다면 recvfrom()은 거기서 데이터가 올 때 까지 "block"하고 있다 (잠깐 자고 있다)는 것이다. 많은 함수들이 block 한다. accept()이나 모든 recv() 함수들이 그렇다. Block이 가능한 이유는? 그렇게 할 수 있도록 kernel의 허락을 ..

Programming 2019.09.14

Beej's Guide to Network Programming 요약, Part 1

최근에 (1년 전에?) 제일 정리하고 싶었던 글인데, 실제로 network programming이 절실할 때가 와서야 하게 되었다 (흑흑). 원문은 Network programming에 대해 모르는 개발자에게 딱 좋은 튜토리얼이라고 생각한다. 여러 미사여구와 필자의 썰은 가지쳐내고 핵심적인 내용만 정리해본다 (Part 2 대기 중). 2. What is a Socket? Socket은 standard Unix file descriptor를 통해서 다른 프로그램과 소통하는 통로이다. 이 file descriptor는 socket() system routine을 호출해서 얻는다. 그리고 send()와 recv() socket call을 이용해 통신할 수 있다. 다른 file descriptor처럼 read(..

Programming 2019.07.28

쪼잔한 Rust 9. 오류 다루기

Chapter 9. 오류 다루기 Rust가 안전한 언어가 되기 위한 노력은 오류 다루는 데까지 닿아있다. 오류도 소프트웨어의 일부라고 할 수 있는 만큼, Rust는 뭔가 잘못된 상황을 다루는 많은 기능을 탑재하고 있다. 많은 경우에 Rust는 오류가 날 수 있는 가능성을 사용자가 알고 있기를 요구하고, 오류 상황에서의 대처법이 마련되어있어야 컴파일이 가능하다. 이러한 깐깐함은 당신의 코드가 프로덕션에 배포된 후에 오류가 발생하는 것을 보기 전에 오류들을 발견하고 처리하도록 강제하기 때문에 당신의 프로그램을 더욱 강건하게 해주는 것이다! Rust는 오류를 크게 두 가지로 분류하는데, 회복 가능한(recoverable) 오류와 회복 불가능한(unrecoverable) 오류가 그 두 가지이다. 파일을 못 찾는..

Programming/Rust 2018.11.17

쪼잔한 Rust 16. 두렵지 않은 Concurrency

Chapter 16. 두렵지 않은 Concurrency Concurrent 프로그래밍을 안전하고 효율적으로 다루는 것이 Rust가 삼는 주된 목표 중 하나이다. 프로그램의 여러 부분을 독립적으로 실행시키는 concurrent 프로그래밍과 동시에 실행시키는 parallel 프로그래밍은 많은 컴퓨터들이 여러 프로세서를 이용함에 따라 더욱이 중요하게 여겨지고 있다. 역사적으로 볼 때, 이러한 영역의 프로그래밍은 어렵고 오류가 나기 쉬운 것으로 생각되어왔다. Rust는 이러한 인식을 바꾸고 싶다. Rust 팀은 애초에 메모리의 안전을 보장하는 것과 concurrency 문제를 예방하는 것은 완전히 별개의 문제라고 생각했었다. 시간이 지나면서, Rust 팀은 소유권과 타입 시스템이 이 두 가지 문제를 해결하는데 ..

Programming/Rust 2018.09.11

쪼잔한 Rust 6. Enum과 패턴 맞추기

Chapter 6. Enum과 패턴 맞추기 이번 챕터에서는 enumeration, 또는 enum이라고 부르는 것에 대해 알아보고자 한다. Enum은 가능한 경우의 값들을 헤아려서(enumerate) 그 종류를 정의할 수 있게 해준다. 우선, enum을 정의하고 사용해 봄으로써 enum이 어떻게 데이터와 연계되는 의미들을 코드에 새기는지 볼 것이다. 그 다음에는, 그 중에서도 특별히 유용한 enum인 Option을 알아볼 것인데, Option은 그 값이 무언가 있거나 없거나 할 수 있는 표현을 가능하게 한다. 그러고 나서는 match expression을 통한 pattern matching이 enum의 여러 값들을 다루기 위한 다른 종류의 코드를 얼마나 쉽게 다루는지 보게 될 것이다. 마지막으로, if l..

Programming/Rust 2018.09.03

GNU/Linux 사용자를 위한 Tistory CLI 프로그램

Tistory CLI 최근에 직접 만든 Tistory CLI 프로그램을 소개하고자 한다. GNU/Linux 사용자를 위한 이 프로그램은 내가 Tistory 웹에디터를 쓰기 싫어서 시작하게 된 프로젝트이다. 개발 관련 글을 쓰다보면 코드 뭉치를 써야 할 경우가 많이 있는데, 그 경우에 웹에디터의 WYSIWYG (What You See Is What You Get) 모드와 HTML 모드를 넘나들면서 문서 작업을 하는 것이 나에겐 고단한 일이다. 또한 웹에디터에서 제공하는 대부분의 기능을 사용하지 않을 뿐 더러, 사용하더라도 꽤나 지저분한 HTML 코드가 생성되는 것을 봤기에 더욱 꺼려지게 되었다. 이는 내가 설정한 CSS를 웹에디터가 알 길이 없으니 어쩔 수 없는 것이긴 하다만, 그렇다고 하더라도 친절한 내..

Programming 2018.08.29

쪼잔한 Rust 4.3. Slice 타입

Chapter 4.3. Slice 타입 Ownership을 가지지 않는 또 다른 데이터 타입으로 _slice_가 있다. Slice는 데이터 모음의 전체가 아닌 일정 부분만을 가리키는 reference이다.여기 작은 프로그래밍 문제가 주어졌다고 해보자. String 하나를 받아서 그 첫 번째 단어를 반환하는 함수를 만들어보자. 만약 함수가 string의 공백 문자를 찾지 못한다면, string 전체가 한 단어일테니까 전체 string을 반환해주면 된다.이 함수의 signature부터 생각해보자: fn first_word(s: &String) -> ? 이 함수 first_word는 &String을 parameter로 받는다. 우리는 ownership을 원치 않으므로 괜찮은 일이다. 하지만 무엇을 반환해줘야 ..

Programming/Rust 2018.08.19

쪼잔한 Rust 4.2. 참조와 대여

Chapter 4.2. 참조와 대여 이전 글에서 tuple을 사용했던 예제 4-5는 이런 문제가 있었다: String의 ownership이 calculate_length 함수 안으로 이동했기 때문에, 함수 호출이 끝난 후에 그 String을 다시 사용하기 위해서 ownership을 다시 내보내야 했던 것이다.아래는 함수가 parameter로서 그 값의 ownership을 가져가는 대신, 참조값(reference)만 가져가는 방법을 보여준다. // Filename: src/main.rs fn main() { let s1 = String::from("hello"); let len = calculate_length(&s1); println!("The length of '{}' is {}.", s1, len);..

Programming/Rust 2018.08.14

쪼잔한 Rust 4.1. 소유권이 무엇이냐

Chapter 4. 소유권 이해하기 소유권(ownership)은 Rust의 특유한 개념으로, garbage collector 없이도 메모리를 안전하게 사용할 수 있도록 보장해준다. 따라서 Rust에서 소유권이 어떻게 작동하는 지 아는 것은 중요한 일이다. 이번 챕터에서 소유권과 관련된 borrowing, slice 등의 여러 가지 개념과 Rust가 어떻게 데이터를 메모리에 관리하는 지에 대해 얘기해보겠다. Chapter 4.1. 소유권이란? 모든 프로그램은 실행하는 동안 컴퓨터의 메모리를 관리해야 한다. 어떤 언어는 실행하는 동안 사용하지 않는 메모리를 계속 추적해서 관리하는 garbage collection을 사용하기도 하고, 어떤 언어는 직접 메모리를 할당하고 풀어줘야 한다. Rust는 또 다른 방식..

Programming/Rust 2018.08.09