본문 바로가기

546

자연은 최고의 디자이너 바나나는 여러분의 주머니에 쏙 들어갑니다. 바나나는 고유한 위생 포장을 갖추고 있습니다. 또 바나나는 생물분해성을 지니고 있습니다. 그리고 그 색깔은 과일이 익은 시기를 나타냅니다. 이건 직관적입니다. 저는 여러분이 이렇게 먹지 않는다는 걸 알고 있습니다!" 그가 바나나를 옥수수처럼 먹는 시늉을 하면서 농담을 던졌다. "이 껍질은 알맹이를 보호합니다. 그건 위생의 기능입니다." 그는 껍질을 벗기고 한 입 베어 물었다. "칼륨이 들어 있죠! 아주 맛있죠! 쉽게 생산하죠! 바나는 세계 최대의 시장을 지니고 있습니다. 모두가 바나나를 사랑합니다! 이제 여러분이 이와 똑같은 원칙들을 사용하는 제품을 디자인할 수 있다고 상상하십시오." 삼성 라이징, 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.
forward declaration of unique_ptr<T> // A.h class A { A(); std::unique_ptr _b; } // A.cpp A::A() : _b{ std::make_unique() } {} 포인터나 참조를 헤더에 정의한 경우 전방 선언은 필수로 요구된다. 컴파일보다 링킹이 빠르기 때문이다. 허나 이것을 컴파일하면 C2027 오류를 받게 된다. 오류를 살펴보면 unique_ptr의 소멸자에서 T를 실체화하려고 시도하다가 났다는 것을 알 수 있다. 소멸자를 선언하면 오류가 나지 않는다. 이때 인라인이어서는 안된다. 그러나 왜 이럴까? 이는 사용자 정의 소멸자가 없으면 컴파일러가 암시적으로 삽입하기 때문이다. 이걸 인라인으로 처리한다. 이는 헤더에 삽입된다는 의미가 된다. 헤더에는 전방 선언 뿐이므로 해당 오류가 발생한다. 따라서 소멸자.. 2021. 1. 21.
현대조선잔혹사 이 책을 서가에서 꺼낸 건 북한에 대한 이야기로 생각해서였다. 배색도 인공기 같았다. 그런데 아니었다. 이 책은 남한 그리고 조선업 노동자에 대한 이야기였다. 그 이야기는 실로 비참하고 잔혹했다. 마치 텔레비전 광고에 나오는 월드비전 식의 이야기였다. 그런 범죄에 가까운 일이 바로 우리에게 일어나고 있었다. 놀랍게도 기자는 위장취업을 했다. 그래서 하청 노동자의 삶을 며칠이나마 직접 체험했다. 그 며칠동안 가혹한 노동의 무게를 절감하고 죽음의 위기를 느꼈다. 일년에 사망자가 백단위로 나온다. 다치는 사람은 얼마나 많을까? 부상을 당해 불구가 된 사람도 나온다. 그러나 대부분 기본적인 산업재해보험의 혜택도 받지 못한다. 그런 경우 원청에 해가 되기 때문이다. 무사고 기록이 깨짐으로써 얻게 되는 불이익을 하.. 2021. 1. 16.
브이 포 벤데타 영화를 무척이나 감명깊게 보았던 탓에 언젠가 책을 꼭 봐야지 생각했던 적이 있다. 그게 10년이 넘었다. 모두들 재택근무하는 와중에 홀로 출근하는 덕에 식사 중에 독서를 할 여유가 생겼다. 이건 내 오랜 습관이었는데 결혼하면서 없애긴 했다. 어쨌든 주로 비주얼 노블을 본다. 오늘도 점심 먹을 때 볼 책을 찾기 위해 회사 도서관을 열심히 살핀 덕에 발견했다. 이 책은 파시즘에 사로잡힌 영국의 모습을 그린다. 영국 주변은 더욱 암울하다. 핵전쟁의 영향으로 다른 나라가 존재하는지도 알 수 없다. 어찌된 영문인지 영국은 그럭저럭 돌아간다. 게다가 놀라운 대중 감시 시스템을 구축하고, 운명이란 슈퍼 컴퓨터도 가지고 있다. 집권층은 선출된 권력이 아니다. 그들은 갱으로서 내전에서 승리한 조직이다. 그럼에도 내 생각.. 2021. 1. 8.
마르지 폴란드에서 자란 어린 소녀의 이야기. 이것 말고도 한 권 더 번역 출간되었다고 한다. 프랑스에서 발간되었다는데 거기서는 인기가 꽤 있나보다. 꽤나 많이 나온 것 같다. 그런데, 일상물이라지만 참 심심하다. 어린 아이의 일기장을 발견하고 옮겨적은 듯한 느낌이다. 사회주의 체제의 폴란드가 어찌나 유년 시절의 한국과 비슷한지 이국적인 느낌조차 받기 힘들었다. 폴란드 사람은 겨울에 잉어를 먹는다... 물건을 사기 위해 줄을 서야 한다... 바나나는 정말 귀하다... 러시아제 냉장고에 감동한다... 지금이야 물자가 넘치는 시대에 살고 있지만, 나 어린 시절에는 무엇하나 소중하지 않은 것이 없었다. 신문지도 알뜰히 모아서 학교에 갖다줘야 했다. 공병은 정말 알짜였다. 몇개만 모아도 과자 하나를 사먹을 수 있었다. .. 2021. 1. 5.
당신의 개가 뭅니까? 그는 개를 쳐다보다가 약간 망설이며 노인에게 "당신의 개가 뭅니까?"라고 물었습니다. 노인은 "아닐세."라고 대답했지요. 그런데 이방인이 손을 내밀어 개를 쓰다듬자 개가 갑자기 공격해 거의 팔을 물어뜯길 뻔했습니다. 이방인은 찢어진 코트를 매만지며 노인에게 말했습니다. "노인장 말씀대로 개가 물지 않을 거라고 생각했습니다." 그러자 노인은 "그 개는 내 개가 아닐세."라고 대꾸했답니다. 버핏, 로저 로웬스타인 2021. 1. 2.
약한 연결고리 전체 실적이 좋은 사람도 그에게 술버릇이나 쉽게 생기는 돈을 좋아하는 것처럼 약점이 있다면 그것이 그를 망가뜨리는 결정적 요소가 될 수 있다. 금융시장에서는 그 '약한 연결고리'가 바로 빌린 돈이다. 버핏, 로저 로웬스타인 2021. 1. 2.
1퍼센트만 실제로 포도주 프랑스에 있는 3만 2,375평방미터 정도의 작은 포도밭에서 생산되는 포도는 아마 전세계에서 최고 품질일 겁니다. 그러나 저는 항상 포도 가치의 99퍼센트는 스토리텔링에 있고, 약 1퍼센트만 실제로 포도주로 만들어 마시는데 있다고 생각합니다." 버핏, 로저 로웬스타인 2021. 1. 2.