본문 바로가기

반응형

진리는어디에

(291)
삼각함수 필자는 수학을 못한다. 학생 시절 시험을 치면 다른 과목에서는 하나, 많이 틀리면 두개 정도 틀렸지만 수학만큼은 하나 아니면 두개 정도 맞을 정도로 수학에 대해서는 잼병이다. 본 포스트는 수학을 못하는 필자가 어떻게 삼각함수를 이해하게 되는지에 대한 과정을 그리고 있다. 정의 삼각함수의 정의로 서론을 시작하고 싶었지만, 머릿글에 언급 했듯이 필자는 수학 잼병이라 위키에 소개된 삼각함수의 정의를 봐도 무슨 말인지 이해를 못했다 : https://ko.wikipedia.org/wiki/%EC%82%BC%EA%B0%81%ED%95%A8%EC%88%98 라디안 나에게는 항상 낮설고 불편하지만, 삼각함수에서 꼭 빠지지 않고 나오는 '라디안'. 우리가 일반적으로 사용하는 60분법을 사용하면 익숙하고 편할 것 같은데..
[C++20] 신규 기능 정리 새로운 문법 지원 콘셉(Concept) - 타입 오버라이딩을 넘어선 타입 속성에 따른 강력한 오버라이드 [C++20] 콘셉(Concept) 코루틴(Coroutine) [C++20] 코루틴(Coroutine) [C++20] 코루틴(Coroutine) - co_await [C++20] 코루틴(Coroutine) - co_yield [C++20] 코루틴(Coroutine) - co_return [C++20] 코루틴(Coroutine) - done() 모듈(Module) [C++20] 당신이 C++20에서 모듈을 써야만 하는 이유(#include와 모듈의 비교) [C++20] 모듈(module) 예제 상수성 지원 : constinit, consteval UTF-8 문자열 지원 : char8_t 신규 std 라이..
[MySQL] InnoDB 엔진에서 쿼리별 잡히는 lock 쿼리별 잡히는 lock에 대해 알아 보기전에 InnoDB의 lock에 대해 먼저 알아 보는 시간을 가져 보려 했지만 워낙 잘 정리가 된 블로그가 있어서 공유한다. 아래의 내용들을 보기 전에 링크 되어 있는 블로그의 글을 먼저 읽어 본다면 많은 도움이 되리라 생각한다. MySQL InnoDB lock & deadlock 이해하기 - www.letmecompile.com/mysql-innodb-lock-deadlock/ SELECT … FROM consistent read 의 경우 transaction isolation level이 SERIALIZABLE이 아니면 lock을 잡지 않는다. LOCKING READ(SELECT … FOR UPDATE, SELECT … LOCK IN SHARE MODE), UPD..
[Unity] Texture2D를 Sprite로 변경 스프라이트 객체를 AssetBundle로 만들고 난뒤 AssetBundle을 통해 스프라이트 객체로 로드를 했는데 로드를 하지 못하고 null을 리턴하는 현상이 발생했습니다. Unity 4.3 버젼에서는 스프라이트는 어셋번들로 빌드하게 되면 텍스쳐로 로드해서 스프라이트로 변환 해야 한다고하는 군요. 그래서 텍스쳐를 스프라이트로 변경하는 방법에 대해서 살짝 짚고 넘어가보도록 하겠습니다. Rect rect = new Rect(0, 0, texture.width, texture.height); sprite.GetComponent().sprite = Sprite.Create(texture, rect, new Vector2(0.5f, 0.5f)); 참 쉽죠?ㅋ 추가 : Sprite Packer를 이용해 패킹한 s..
[C++/C#] CSV 파일 읽기 요즘 집에서 혼자 게임을 만들어 보려고 이것 저것 만지작 거리는 중이다. 게임의 메타데이터(아이템 정보, 몬스터 스탯, 퀘스트 같은 것)들을 엑셀로 관리하고 결과물을 csv 파일로 저장해서 사용할 예정이었다. 하지만... 언제나 그랬듯이 잘 되지 않는다. 요약 거두 절미하고 요약 부터 간다. 인터넷에서 검색 되는 대부분의 CSV 파일 읽기 프로그래밍 예제들은 콤마 대한 이스케이프 처리를 누락하고 있어 CSV 본문에 콤마를 사용 할 수가 없거나, 사용한다면 컬럼 개수가 늘어나 버리는 오류가 있다.이번 포스트에서는 엑셀에서 작성한 UTF8 인코딩 된 csv파일을 읽는 프로그램을 만들 때 흔히 놓치기 쉬운 부분을 살펴 보도록 한다. 엑셀에서 UTF8 csv 파일을 저장하면 UTF8-BOM(파일 앞에 3바이트가..
왜 내 TCP는 믿을 수 없을까? TCP는 정말 신뢰성을 보장해주는 프로토콜일까? 정말 책에 쓰인대로 내가 보낸 모든 데이터들은 상대방에게 신뢰성 있게 잘 도착할까? 라는 궁금증을 가지고 인터넷을 검색하던 중 우연히 "bert hubert finally blogs" 의 "The ultimate SO_LINGER page, or: why is my tcp not reliable"라는 흥미로운 글을 발견하여 짧은 영어 실력으로나마 번역을 시도해 보았다. 번역 중간중간 새로 알게 된 지식이나 보충 설명은 주석으로 추가하였으니 읽으면서 참고 부탁드린다. 원문이 궁금하신 분은 다음 링크를 따라가면 영문 버전을 볼 수 있다. https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger..
TIME_WAIT vs CLOSE_WAIT TCP 소켓에는 총 11가지의 상태가 있고(netstat를 이용해 소켓의 상태를 보면 CLOSED, LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, CLOSE_WAIT, LAST_ACK, FIN_WAIT1, FIN_WAIT2, CLOSING, TIME_WAIT..중에 하나가 나온다) 그 중 사람들이 자주 헷갈리는 것이 TIME_WAIT와 CLOSE_WAIT는 요 두가지 상태이다. 오늘은 이 TIME_WAIT와 CLOSE_WAIT, 요 두 상태에 대해 말해 보도록 하겠다. 들어가기에 앞서, 용어 정리를 먼저 하도록 하자. Active Open : connect()를 호출 하는 쪽. 즉, SYN 세그먼트를 전송한 쪽. 종종 클라이언트가 된다. 하지만 100% 클라이언트라고 할 수는 ..
[C++11] 주요 변경/추가 사항 람다 표현식(Lambda Expressions) 람다 표현식은 함수를 선언한 곳에서 바로 호출 할 수 있도록 한다. 람다 표현식은 아래와 같은 형태를 가진다. [capture] (parameters) -> return-type { body } for_each() 알고리즘을 사용하여 문자열을 순회하며 대문자의 개수를 센다고 가정하자. 대문자인지 판단하기 위한 함수 객체를 넘겨 주는 대신 람다 표현식을 사용하면 보다 편리하게 코드 작성이 가능하다. int main() { char s[]="Hello World!"; int Uppercase = 0; //modified by the lambda for_each(s, s+sizeof(s), [&Uppercase] (char c) { if (isupper(c)) ..
boost::asio::spawn이 하는 일은 뭔가요? spawn의 전체적인 과정이 머리속에서 안그려짐. 1. spawn(io_service, my_coroutine)을 호출 했을 때, my_coroutine을 감싸고 있는 새로운 핸들러가 io_service 큐에 추가 되는건가? -> spawn이 호출 될 때, Boost.Asio는 몇몇 셋팅 작업을 거친 후 사용자가 제공한 엔트리 포인트로써의 함수를 사용하는 코루틴을 생성하는 내부 핸들러를 dispatch() 하기 위해 strand를 사용하게 된다. 이런 조건에서, 내부 핸들러는 spawn 내에서 호출 가능하다. 그리고 다른 때는 지연된 호출을 위해 io_service에 post 된다. 2. 코루틴 안에서 인자로 넘어온 yield_context를 호출 했을 때, async operation이 완료 될때 까지..
소켓 프로그래밍 - '네트워크에 중복된 이름이 있기 때문에 연결되지 않았습니다' 윈도우 소켓 프로그래밍을 할때 특히 대량 접속 프로그램을 만들때 저 에러가 뜬다면 프로세스에서 생성 할수 있는 소켓이 한계에 도달했다는 의미다. 프로그램이 active close를 하고 있는지 확인하고, 만일 active close를 하고 있다면 linger option을 꺼줘야 한다. 여기서 active close라는 것은 상대방이 close를 하는 것이아니라 프로그램 자신이 close를 호출하는 것을 의미한다. close를 호출하는 쪽은 TIME_WAIT 상태에 빠지게 되어 일정 시간동안 소켓 리소스를 해제하지 않고 유지하게 된다. 예를 들어 서버라면 수많은 클라이언트들이 접속을 할텐데 그 연결들에 대해 서버가 close를 호출하게 되면 TIME_WAIT에 빠진 소켓들을 다른 클라이언트로 부터의 연결..

반응형