본문 바로가기
자기 인생은 자기가 책임지는 거예요 웩! 또 노숙자야... 역겨워... 쳐다보지 말자... 예의 없는 짓이니까... 하지만 무슨 짓을 할지 모르니 눈을 떼면 안 돼... 그런데 가슴의 이 낯선 감각은 뭐지?? 심장발작인가?? 아아악- 그보다 더 심한... 심한... 동정심이잖아... @#*$?? 내가 왜 이런 기분을 느껴야 하지? 제기랄! 내가 뭘 할 수 있을까?... 그래, 난 알아... 그녀에게 말을 걸어야겠어... 아줌마! 자기 인생은 자기가 책임지는 거예요! 2021. 5. 19.
210519 영어 공부를 할 예정. 회화 수업이 있는 날은 능히 이게 맞을 듯. 어제는 또다른 퇴사자와 만났다. 나는 여기서 뭘 하고 있는 것일까. 나도 포기하지 말고 꾸준히 시도해봐야겠다. 2021. 5. 19.
GPUView를 위한 log.cmd가 실행되지 않을 때 일단 관리자 모드로 콘솔을 실행시킨다. 그리고 log.cmd를 실행시키면 이런 오류가 생길 수 있다. C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\gpuview>log.cmd 4000은(는) 예상되지 않았습니다 배치 스크립트 내부를 보면 오류 원인은 다음에 있다. findstr /sipn /C:"Total Physical Memory" me.txt > me2.txt 더 보면 systeminfo.exe를 실행시켜 메모리 정보를 얻는데 로케일이 한국으로 되어 있을 경우 해당 문자열이 없다. 따라서 오류가 발생한다. 따라서 코드 페이지를 바꿔주고 log.cmd를 실행하면 해결이 된다. chcp 437 2021. 5. 13.
삼성 라이징 한 거대 기업이 빛을 한국에 드리운다. 세계에서 거대 다국적 기업과 견줄 수 있는 몇 안되는 기업이기에 국민들의 사랑은 대단하다. 한편 업적 만큼 과오도 있다. 나는 실패를 더 중요하게 생각한다. 인생이 어찌 도착지에만 뜻이 있겠는가. 그것은 내게 가르침이 되고 작은 이정표가 되어준다. 기업의 실패 또한 내게 중요한데 그건 실패가 기업의 장래에 어떠한 영향을 미칠지 생각해볼 수도 있기 때문이다. 그것은 결국 주가에 영향을 미치고 반등 혹은 하락을 결정한다. 유감스럽게도 언론을 통해서는 삼성을 두둔하는 기사만 보일 뿐이다. 최근에는 상속세 문제가 이슈가 되어서 그런지 그들이 얼마나 국익에 이바지하고, 그러므로 쓸데없는 상속세가 그들에게 피해를 입힌다고 강변하는 기사도 쉽게 볼 수 있다. 그러나 어떻게 상속.. 2021. 4. 29.
티스토리의 문제점 사이버펑크 2077 게시물이 관리자 삭제가 되었다. 조회수 0인데 신고에 의해 삭제되었다고 한다. 어떤 사유로 삭제되었는지 문의하는 메일을 보냈지만 판박이 같은 자동 응답이 왔다. 찾아보니 다른 이들도 알 수 없는 혹은 모호한 이유로 삭제되고 오히려 블로그 폐쇄를 경고하는 답을 받았다고 한다. 나 또한 마찬가지였다. 내 추측에 삭제 이유는 이렇다. 사이버펑크를 하면서 인상적인 스크린샷을 올렸는데, 그 중 하나는 투명 의상이었다. 아마 그것이 이미지 감지 로직에 걸린 것으로 추측된다. 삭제 이유가 그렇다면 이해할 수도 있다. 그러나 왜 지웠는지는 알려줘야하지 않는가? 길게 쓴 글이 아까워 다시 올렸고, 기껏 모은 스크린샷도 그래서 함께 다시 올렸지만 재검열의 두려움으로 주저하는 나를 보게 되었다. 결국 알.. 2021. 4. 24.
사이버펑크 2077 뜻한 바가 있어 한동안 게임을 하지 않겠다고 다짐했었다. 허나 영어 인터뷰에서 보였던 내 미숙함에 대한 충격으로 인해 도피처가 필요했다. 그래서 산 지 몇 달된 게임을 마침내 설치했다. 게임을 하기 위해 몇 주간 새벽에 일어나야 했다. 아이들과 있을 때는 게임을 하지 않는 것이 내 규칙이기에 그 시간 외에는 없었다. 주인공은 길거리 용병이다. 그의 출신을 고를 수 있지만 크게 중요한 것 같지는 않다. 재키라는 사람에게 받은 의뢰가 계기가 되어 그와 용병 활동을 하게 된다. 그러다 거대기업의 후계자가 가진 물건을 훔치라는 의뢰를 받는다. 그 물건은 바이오칩으로 특별한 용기에 보관되거나 사람의 슬롯에 꽂아야 한다. 이 시대는 인체 개조에 대한 거부감이 전혀 없어 팔목에 연결선이 있고 머리 부근에 메모리를 넣.. 2021. 4. 20.
Game Server Performance on Tom Clancy's The Division 2 https://www.youtube.com/watch?v=bcXxyKqgV0c 주제: 서버에서 대규모 사용자 유지하기 코드 아키텍처 퍼포먼스 문제 디버깅, 모니터링위한 툴 프로세스 케이스 스터디 소개 3차원 클라이언트, 서버, 권한 서버 1000명 이상 수용, 20000 NPC 20fps이며, PVP만 30fps로 처리 플레이어가 존에 도달할 때만 로딩 처리 다크존: 플레이어가 집결할 것으로 예상되는 지점 서버 역할 월드 업데이트: AI, 플레이어, 미션, 스킬 싱글 스레드 천개 이상의 월드가 존재 병렬화 작업 짧은 작업: 높은 순위, 월드 업데이트 긴 작업: 저장, 백그라운드 데이터 업데이트 월드는 플레이어가 있을 때만 존재 최대한 병렬화 처리 40 코어 36: 짧은 작업 위해 할당 2: 긴 작업 위해.. 2021. 4. 20.
자연은 최고의 디자이너 바나나는 여러분의 주머니에 쏙 들어갑니다. 바나나는 고유한 위생 포장을 갖추고 있습니다. 또 바나나는 생물분해성을 지니고 있습니다. 그리고 그 색깔은 과일이 익은 시기를 나타냅니다. 이건 직관적입니다. 저는 여러분이 이렇게 먹지 않는다는 걸 알고 있습니다!" 그가 바나나를 옥수수처럼 먹는 시늉을 하면서 농담을 던졌다. "이 껍질은 알맹이를 보호합니다. 그건 위생의 기능입니다." 그는 껍질을 벗기고 한 입 베어 물었다. "칼륨이 들어 있죠! 아주 맛있죠! 쉽게 생산하죠! 바나는 세계 최대의 시장을 지니고 있습니다. 모두가 바나나를 사랑합니다! 이제 여러분이 이와 똑같은 원칙들을 사용하는 제품을 디자인할 수 있다고 상상하십시오." 삼성 라이징, 11장 디자인 탐구, 166쪽 2021. 4. 19.
인구가 줄어들면 경제가 망할까 답은 아니다. 그걸 증명하기 위해 저자는 많은 사실을 언급한다. 요약하자면 국가 경제는 인구 성장으로 뒷받침되지 않았다는 점이다. 그걸로 설명하기에 현대 경제는 과거에 비해 너무나 거대하다는 사실을 밝힌다. 그렇다면 어떻게 가능했을까? 바로 기술로 인한 생산성 향상과 새로운 소비처 창출로 가능했다. 전자는 자동화, 소형화, 모듈화, 신소재 등으로 실현했고 후자는 아이폰, 전기차, 패스트패션 등 신제품으로 가능했다. 아이를 낳아 성장하려 했다면 맬서스의 저주가 실현되었을 것이다. 한편 저자는 새로운 화두도 던진다. 경제 성장의 의미에 대해 던지는 질문은 사뭇 의미심장하다. 끝없이 성장하고 끝없이 재화를 추구하는 삶은 어떤 의미를 가지고 있을까. 물질주의의 끝은 허무주의와 맞닿아 있다. 어쩐지 책의 주제와 .. 2021. 4. 19.
소울 내 마음은 계산을 잘 할 줄 모른다. 나는 의견을 세련된 표현으로 하지 못한다. 그것은 직설적인 표현이 입에서 바로 나간다는 걸 의미하고 어떤 이들과 충돌한다는 의미가 된다. 많은 사람들과 충돌했는데, 팀장도 있고 사장도 있고 동료도 있었다. 20대 후반에 나비야라고 이제는 없어진 회사에 다닌 적이 있었다. 그곳에서 나는 신작 게임의 기획을 맡아 꽤 의욕적으로 일했다. 나는 게임의 모든 부분을 맡았다. 그리고 일종의 배수진을 치고 있었다. 여기서 할 때까지 최선을 다해보고 안되면 프로그래머가 되기 위한 공부를 하기로 말이다. 이것은 아트에서 기획으로 전직한 것보다 더 난폭한 시도였다. 당시 나는 할 수 있겠지 생각만 할 뿐 어떻게 시작해야할지도 모르는 상태였다. 나는 게임이 여성향인 만큼 기획 만큼은 여.. 2021. 4. 17.
버핏 워렌 버핏의 일대기를 그린 책. 스노볼이 버핏의 적극적인 협조 하에 쓰인 자서전이라면 이쪽은 순수하게 작가의 취재로만 완성되었다. 버핏은 도와주지도 않고 방해하지도 않겠다는 말을 작가에게 했다고 한다. 주인공이 같아서 그런지 두 책에서 묘사하는 삶의 궤적은 대충 비슷하다. 기가 질리게 만드는 책 두께도 그러하다. 이 책의 미덕은 그의 삶을 비판적으로도 조명하고 있는 점이다. 스노볼과는 다르게 그의 우상화된 모습을 벗기려는 시도가 보인다. 정확한 숫자를 말하며 비상한 기억력이 있어 보이는 매체에서의 모습과 달리 자신에게 유리하게 기억하고 다른 이의 공적을 가로챈다. 막대한 기부로 빚어진 박애주의자와 같은 모습과 달리 노동자의 기여를 절대 인정하지 않는다. 오직 경영자 만이 그의 총애를 받는다. 낡은 버크셔.. 2021. 4. 12.
오늘의 실수: std::string std::vector values; auto t0 = values.emplace_back( "I would love to do but I have no money. Would you get something to drink?" ).c_str(); auto t1 = values.emplace_back( "A" ).c_str(); // 아래가 실행되면 t1의 포인터가 깨진다 auto t2 = values.emplace_back( "B" ).c_str(); C17부터 method chaining 기법이 도입되어 좀더 편리한 코딩이 가능해졌다. emplace_back()에 삽입하고 즉시 사용할 수 있게 되어 타이핑을 줄일 수 있다. 어쨌거나 values에 std::string 인스턴스를 담고 그것의 문자열 포인.. 2021. 3. 31.
오늘의 실수: auto 데이터 리로드 때 메모리 누수가 있었다. 한참을 찾았음에도 원인을 발견하지 못했다. 그러다가 shared_ptr이 해제되지 않음을 찾았다. 그것의 참조 카운트를 조회해가며 찾다가 마침내 원인을 찾을 수 있었다. 너무나 간단한 문제였는데 그냥 new로 할당된 메모리를 해제하지 않았기 때문이었다. 라이브러리를 통한 할당을 스마트하게 관리하고 싶다. 어쨌든 이걸 찾지 못한 이유는 코드 읽기 만을 했기 때문이었다. auto로 받다 보니 그것의 타입을 놓쳐 버렸다. 주의 주의... 생각해서 코딩을 하자. 그리고 너무 편하면 생각을 안하게 한다... 그렇다고 복잡성이 증가하는 요즈음 구식 방식으로만 개발할 수도 없지만 어쨌든 이런 함정도 주의해야 한다. 2021. 3. 30.
std::tuple<Ts...> ➔ std::tuple<U<Ts>...> 최근의 즐거움은 템플릿 프로그래밍이다. 템플릿 프로그래밍은 지적 호기심을 자극시키는 것이 있다. 어떤 문제에 대한 결정적이고 순수한 해결 방법을 찾아야한다. 변수를 조작하거나 동적 분기를 허락하지 않는다. 오로지 컴파일 타임에 해결해야한다. 어떤 로직을 템플릿 프로그래밍으로 해결했을 때의 즐거움은 이루 말할 수 없다. C++을 그저 객체지향언어로 사용한다면 C#이 더 좋은 선택이라고 생각한다. C++은 템플릿 프로그래밍을 통해 무한의 개념에 접근한다. 당신은 로직을 추상화시켜야 한다. 도구가 그것을 강제한다. 컴파일 시간이 길어지고 쓸데없이 템플릿 처리가 많아져 메모리를 많이 차지하는 부작용도 있다. 허나 동적 분기의 제거로 인한 최적화 가능성 무엇보다 지적 즐거움 때문에 포기할 수 없다. 최근에 맞닥뜨.. 2021. 3. 25.
로켓 컴퍼니 주식에 대해 이야기하다가 부인에게 자신이 투자하고 싶은 회사에 대해 들었다. 그녀는 놀랍게도 진취적이었다. 우주 여행을 사업으로 하는 회사에 투자하고 싶다고 했다. 나는 그쪽 분야에 전혀 관심이 없었기 때문에 종목에 대해서도 몰랐다. 어쨌든 버진 갤럭틱이란 종목을 알게 되었고 투자를 했다. 그리고 그 사업이 어떻게 돌아가는지 알고 싶었다. 검색에 따르면 비행기에 재돌입 가능한 발사체를 쏘아 성층권 너머를 보여주는 것으로 보였다. 좀더 밀도있는 정보를 원했고 이 책을 알게 되었다. 이 책은 언급한 회사의 사업과는 완전히 다른 분야를 다룬다. 스페이스X가 더 걸맞을 것이다. 재사용 가능한 발사체를 만들고 저렴한 가격에 우주 공간에 화물을 나를 수 있게 한다. 그들은 초월적인 기술을 쓰지 않는다. 검증된 상용.. 2021. 3. 11.
포레스트 검프 영화를 보는 일은 종종 남의 인생을 훔쳐보는 것처럼 느껴진다. 평소 나는 좀 친하다 싶으면 꼬치꼬치 질문을 하는 편이다. 이것이 사람들을 불편하게 하므로 정말 친하지 않으면 꺼려지는 일이다. 중년이 접어들면서 교우 관계가 좁아지며 이런 일은 잦아지고 있다. 때문에 영화를 보는 일은 내게 대리 만족을 준다. 포레스트 검프는 바보 이야기라기 보다 우직한 남자에 대한 내용이다. 그는 아름드리 떡갈나무 같다. 그는 쉬운 길을 가지 않는다는 점에서 존경할만한 인격을 갖고 있다. 무언가 얻기 위해 그는 잔머리를 굴리지 않는다. 어쩌면 많은 생각이 불필요하다는 점을 일깨워주는 것 같다. 오로지 행동. 행동이 중요하다. 그는 생각하기에 앞서 행동한다. 제니를 구하는데 주저하지 않고, 어떤 기회가 오면 따지지 않는다. .. 2021. 3. 9.
혁신의 정의 혁신이란 말의 정의 자체가 혁신으로 인정받기 전날까지 '미친 아이디어'로 여겨지는 무언가를 의미한다. 미친 생각으로 보이지 않는다면, 그것은 진정한 혁신이 아니고 점증적인 개선에 불과하다. 진 크랜즈가 남긴 불멸의 명언을 기억해 보자. '실패라는 놈은 피하기로 선택할 수 있는 대상이 아니다.' 여러분이 실패가 용인되지 않는 환경에서 살며 일하고 있다면 혁신을 이뤄 낼 수 없다. 로켓 컴퍼니, 추천의 글 중. 피터 디아만디스. 엑스프라이즈 설립자 2021. 2. 21.
페르세폴리스 책을 읽은 건 꽤 오래전 일이다. 영화가 나온 걸 안 것도 꽤 예전 일이다. 그럼에도 불구하고 이제야 보게 되었다. 책을 무척 재밌게 읽었음에도 말이다. 영화는 마르잔 사트라피의 자서전 같은 내용이다. 그리 긴 기간은 아니다. 그녀의 20대 초반까지의 삶을 그렸다. 그럼에도 무척 길게 느껴지는데 그것은 그녀의 삶에 극적인 일이 많기 때문이다. 친척이 사형당하거나, 할아버지가 왕족이었다거나, 친구 집이 미사일로 부숴진다거나 하는 일을 당한 사람이 얼마나 있을까? 게다가 그녀 자신도 반항적인 인물로 사회에 나름 도전하며 살았던 인물이었다. 영화 전반부는 유년기의 그녀가 주변에서 생기는 일들을 그리고 있다. 여기서 이란 사회의 시대적 사건들을 화자 입장에서 잘 그리고 있다. 나머지는 그녀 자신에게 집중해서 반.. 2021. 2. 21.
위치 지정 new 이 방법은 이렇다. 힙에서 할당하는 대신 인자로 건네진 포인터를 기점으로 할당하고 생성자를 호출한다. 영어로는 placement new라고 불린다. #include #include struct Test { int v0{}; Test() { std::cout 2021. 2. 17.
메모리 컴퓨터에서 메모리는 CPU에게 있어 책상과 같은 역할이다. 우리가 공부를 할 때 책상에 필요한 것을 늘어놓는 것처럼 CPU도 그러하다. 우리가 손에 닿는 거리 만큼이 주소 공간이 된다. 팔이 길면 길수록 멀리 떨어질 건 잡을 수 있는 것처럼 더 많은 정보에 접근할 수 있다. CPU는 메모리와 데이터를 주고 받을 때 버스라는 시스템을 이용한다. 이것은 도로와 같은 개념이다. 도로가 넓을 수록 교통량을 많이 수용할 수 있는 것처럼 버스의 대역폭이 클 수록 더 많은 데이터를 한꺼번에 읽을 수 있다. alignas에서 본 것처럼 정렬된 데이터는 - 즉 버스에 폭맞춤되면 전송 속도는 더 빨라진다. 추가의 패딩 바이트가 필요없기 때문이다. 운영체제는 어플리케이션를 실행할 때 로더를 이용해서 파일시스템에 있는 데이터.. 2021. 2. 15.
데이어스 엑스: 맨카인드 디바이디드 전작을 워낙 재미있게 했기 때문에 후속편도 꼭 해보고 싶었다. 거진 6개월 만에 시도한 것 같다. 좋은 평가보다 아닌 것이 더 눈에 많이 보였다. 그러나 이 세계관에 푹 빠지고 게임 시스템 또한 대만족이었던 관계로 일단 즐겨봤다. 이번 역시 대만족이었다. 전작보다 뛰어난 그래픽은 세계에 더욱 몰입하게 했다. 연출 또한 너무나 뛰어나서 문자 그대로 나를 흥분하게 했다. 차별받는 강화 인간들. 게토에 몰아 넣고 온갖 학대와 차별을 저지르는 일반인들. 그럴만한 사정이 있기에 그들을 분리해야하는 현실. 그로 빚어지는 문제들과 그를 둘러싼 인간 군상들을 현실감있게 그려냈다. 주인공은 태스크포스 29라는 대테러를 목적으로 하는 인터폴 산하의 조직에 속해있다. 그러면서 저거넛이라는 해커 조직과 함께 일루미나티의 비밀.. 2021. 2. 8.
210205 오랜 사회 생활을 하면서 존경하는 사람이 있다. 그는 굉장한 천재이다. 못 해결하는 문제를 보지 못했다. 그러면서도 대단히 친절하다. 누군가 도움을 청하면 기꺼이 도와준다. 그리고 아무리 질문을 던져도 모두 답해준다. 사실에 기반한 핵심적이고 명료한 답변. 그의 지성은 반짝이며 매력적이다. 내가 이전 회사에서 다닌 8년이 허송이라도 그런 천재를 만나고 그 광채를 곁에서 누렸으니 충분한 보상이라고 생각한다. 그런 그를 지난 달에 봤다. 병으로 인해 그는 좋아하는 기호를 대부분 끊은 상태였다. 그래도 그는 빛났고 영원해보였다. 그러나 최근에 본 그는 달랐다. 몸은 더 말랐고 기운도 없어 보였다. 그대로인 것 눈빛 그리고 미소였다. 그의 매력 중의 하나이다. 그의 잔잔한 미소는 어딘가 낯이 있다. 부처에서 보.. 2021. 2. 5.
alignas 컴퓨터는 버스라는 전송 장치가 있다. 이는 물리 메모리에서 다른 장치(CPU, 다른 메모리 등)로 데이터를 전송하는데 쓰이는 선로이다. 도로와 비견되며 버스의 대역폭-한꺼번에 전송 가능한 크기-이 클수록 정보를 더 빠르게 전달할 수 있다. 그렇다면 대역폭보다 전송할 데이터의 크기가 작다면 어떻게 될까? 유감스럽게도 그렇더라도 그대로 전송한다. 이렇게 대역폭에서 쓰지 않는 만큼을 패딩이라고 한다. 대역폭과 자료형을 맞추면 추가적인 처리가 필요없어 더 빠르게 전송할 수 있다. C11부터 포함된 alignas는 구조체가 효율적인 크기를 갖도록 컴파일러 차원에서 강제해준다. // C11 struct alignas(16) float4 { float r; float g; float b; float a; }; // .. 2021. 2. 3.
make_index_sequence 구현 tuple 출력에 이어 또 다시 과제를 풀어보았다. 이번에는 std::make_index_sequence를 구현해보는 것이었다. 이걸 처음 썼을 때는 왜 std::make_index_sequence로 만든 인스턴스를 넘겨줘야 하는지 이해하지 못했다. 왜냐하면 템플릿 인자로도 충분하다고 생각했기 때문이다. 그러나 구현해보니 이해가 되었다. 템플릿 함수의 템플릿 인자여도 가능할 것이다. 템플릿 인자로 넘겨줄 경우 안에 들어있는 파라미터 팩을 꺼내려면 조금 까다로운 코딩이 필요할 것이다. 즉 make_index_sequence의 로직이 반복될 것이다. 별도로 분리한 결과 [0 ... n] 인자를 넘기는 방식에 대해 더 간단하고 쉬운 해결책을 표준은 제시했다. 이제 다시 강의를 들어야겠다. template st.. 2021. 1. 27.
tuple 출력 #include #include template std::ostream& print_tuple_element( std::ostream& os, TUPLE& t, char const* sep ) { if constexpr (INDEX > 1) { print_tuple_element( os, t, sep ); } if constexpr (INDEX == 1) { sep = ""; } return os 2021. 1. 22.
std::remove_if 조건에 일치하는 반복자를 일치하는 않은 반복자 위치에 덮어씀. 따라서 조건을 만족한 컬렉션을 확인하면 중복된 데이터가 존재함 template ForwardIt remove_if(ForwardIt first, ForwardIt last, UnaryPredicate p) { first = std::find_if(first, last, p); if (first != last) for(ForwardIt i = first; ++i != last; ) if (!p(*i)) // first 위치에 부합되지 않는 정보가 덮어씌워짐 *first++ = std::move(*i); return first; } 결과 값으로 검사를 끝낸 마지막 반복자가 나옴 따라서 반드시 정리가 필요 auto iter = std::remove.. 2021. 1. 21.
instance in underlying array class copy_unable { public: copy_unable() {} copy_unable(copy_unable&) = delete; }; int main() { copy_unable c, d; // C2280: 'copy_unable::copy_unable(copy_unable &)': 삭제된 함수를 참조하려고 합니다. // std::initialize_list auto cc = { c, d }; return 0; } c++에서 여러 인스턴스들에게 반복된 로직을 실행시키기 위해 for 문을 사용할 수 있다. 이 때 반복시키기 위해 initialize_list나 array 등 기본 배열에 담는 경우에 복사가 생긴다. 이는 분명한 오버헤드이므로 회피해야 한다. 다만 언급한 사례처럼 불가피하게 중.. 2021. 1. 21.