jpeg 파일을 생성하는 과정은 아래와 같다. 1992년 9월에 나온 기술이라 위의 과정은 이미 기술적으로 충분히 안정화된 상태.그런데, 이 기능 중에 거의 사용되지 않는 부분이 하나 있다. 위 그림 하단 가운데에 보이는 Arithmetic Coding(산술 부호화[코딩]). 흔히들 jpeg 압축의 마지막 단계는 허프만 코딩이라고 알고 있는데, 원론적으로는 반만 맞는 것이다.마지막 단계는 엔트로피 코딩이며, 엔트로피 코딩으로 허프만 코딩 외에 산술 코딩도 사용할 수 있다. 산술 코딩은 허프만 코딩에 비해 압축률이 높고 연산이 복잡하여 속도가 느리다. 속도보다 더 큰 문제는 이 산술 코딩이 꽤 많은 특허가 걸려있었다는 것.무려 11개의 특허가 걸려있는데다 반드시 구현해야 되는 게 아니라서 그동안 거의 구현..
걸작 코믹스 에서 배트맨과 수퍼맨이 싸운 이후, DCEU에서 한번은 나와야 할 장면이 이 둘의 싸움이었다. 그리고, 드디어 [배트맨 대 수퍼맨: 저스티스의 시작]에서 이 장면이 나왔다. 이 영화는 둘의 싸움을 준비하기 위해 모든 내용을 집중시킨다. 그리고, 큰 그림에서 그 과정은 꽤 그럴싸하다. 데이빗 고이어가 각본을 쓴 영화들이 으레 그렇듯. 또한 그 과정을 조금만 자세히 들여다보면 엉성하고 대사는 유치하다. 고이어 작품이 으레 그렇듯. 둘의 싸움과 그 뒤의 둠스데이와의 싸움을 위해 제작진이 꺼내든 카드는 아버지 트라우마다. (사실 이건 꽤 야심차게 꺼낸 카드임에도 각본의 허술함으로 잘 드러나지 않는다) 특히, 배트맨은 아예 아버지 뿐만 아니라 가족 트라우마라 불러도 좋을 상황이다. 부모가 살해당한 것..
부동소수점 계산시 곱하기가 나누기보다 빠르다는 얘기를 듣고서 실제로 어떤지 측정해봤다. 환경은 AMD A8-3870 + Windows 10 + Visual Studio 2015. 측정 내용은 간단하다. 1. x *= 2, x *= 3, x /= 2, x /= 3을 10억번씩 반복 수행한 뒤 시간을 측정 2. 같은 연산을 부동소수점 및 정수에 대하여 곱하기, 나누기 및 더하기 각각 수행 (x *= 2.0, x *= 2, x /= 0.5, x += x) 3. float, double에서 각각 수행 4. 수행시 /fp:precise(기본)과 /fp:fast를 지정 1. x *= 2 사실상 별 차이 없다. 아래 그래프를 언뜻 보면 차이가 있어보이지만, 측정 결과는 최대 0.01초밖에 차이나지 않는다. 2. x ..
새로운 이미지 포맷의 개발이 계속 시도되고 있지만, 여전히 이미지 표준은 jpeg와 png가 대세다.그런데, 손실 압축인 jpeg와 달리 png는 비손실 압축이기 때문에 파일의 크기를 줄이는 것이 쉽지 않다.(이를 해결하기 위해 손실 압축 개념을 도입한 pngquant가 있고, 굉장한 품질과 성능을 보여준다) png는 마지막 단계에서 zlib를 이용해서 압축을 하는데, 파라미터를 통해 압축의 정도을 조정할 수 있다.즉, 최대압축(9)을 지정하면 동일한 이미지를 조금 더 작은 크기에 저장할 수 있는 것이다. 그런데, zlib는 워낙에 널리 사용되는 라이브러리라 많은 변형이 있고, 이들을 통해 더 나은 결과를 얻을 수 있다.대표적인 zlib의 변형은 아래와 같다. - jtkukunas / zlib: Inte..
멀티미디어 특히 비디오 데이터를 처리하려면 굉장히 빈번하게 사용되는 함수가 바로 clamping이다.각종 변환 결과 애매하게 이 범위를 벗어나는 경우가 발생할 수 있기 때문에 모든 픽셀에 대해 이 연산을 돌려야 하기 때문이다. 1. SSE2를 사용하지 않는 경우-1 기본적으로는 아래와 같이 작성하면 된다. (1A: if #1) inline unsigned char Clamp(float f) { int n = (int)f; if (n 255) return 255; return (unsigned char)n;} 그런데, if문이 두 개 씩이나 들어있어 뭔가 보기 좋지 않다.if문 대신 삼항연산자를 둘 사용하면 아래와 같이 좀 더 간결하게 쓸 수 있다. (1B..
Visual Studio에서는 OpenMP 외에도 자동 병렬화(Auto-Parallelizer)를 지원한다. OpenMP보다는 좀 더 사용하기는 쉬운 편이고, 사용 가능 범위는 좀 더 제한적인 느낌. OpenMP는 아래와 같이 적용할 수 있고, #pragma omp parallel for for (int i = 0; i < 256; i++) { iP[i] = i; } 자동 병렬화는 아래와 같이 적용할 수 있다. #pragma loop(hint_parallel(0)) for (int i = 0; i < 256; i++) { iP[i] = i; } 즉, 사용 자체는 그리 어렵지 않다. 사용할 수 없는 조건들을 배제하는 게 좀 번잡할 뿐. 이미지 20장을 일괄적으로 리샘플링하는 코드를 통해서 둘의 성능을 비교..
토렌트와 그 이외의 인터넷 서비스를 동시에 쾌적하게 사용하는 것이 의외로 쉽지 않다. 토렌트 사용량이 늘어나면 전체적인 인터넷 대역폭에 영향을 미칠 수 밖에 없기 때문이다. 아래와 같은 과정으로 쾌적한 환경을 구축해봤다. 1. 인터넷 성능 확인 가장 우선적으로 할 일은 인터넷의 성능 자체를 확인하는 것이다. speedtest.net, myspeedtest.co.kr 등 많은 사이트에서 인터넷 속도를 확인할 수 있으며, 결과는 당연히 대동소이함. 2. 토렌트 설정 μTorrent®의 설정에서 연결과 대역폭을 조정한다. (다른 클라이언트도 대동소이함) 우선 연결 메뉴에서 아래와 같이 설정했다. 사용 포트는 한번 무작위로 지정한 뒤 변경하지 않으며, 지정한 값을 DD-WRT에 저장해야 하므로 별도로 메모해둔다..
1. 배경 ipTIME으로 대표되는 국산 유무선 공유기들은 보안성을 신뢰할 수 없다는 지적이 많았다.리눅스 및 오픈소스 기반이지만 한국식으로 라이센스 같은 거 모르겠고, 소스 비공개로 운영되는 건 덤이고. 게다가, 특히 ipTIME은 제품 자체 및 전원 어댑터의 내구성 문제가 수시로 지적되어왔다. 이번 기회에 좀 더 믿을 수 있는 녀석으로 바꿔보기로 했다. 2. 제품 선정 많이 팔리고, 성능도 만족스러우며, 가격도 합리적인 TP-LINK의 Archer C7을 선택했다.성능도 성능이지만, DD-WRT를 끼얹을 수 있다는 점이 더욱 중요했다. 3. 구동 Archer C7은 2.4GHz/5GHz 듀얼밴드를 지원하는 1Gbps 유무선 공유기이고, 2개의 USB 포트를 제공한다.이를 제대로 지원할 수 있는 충분한..
이전 글에서 계속… 13. 퇴원 원래 계획은 버스를 타고 조심스럽게 내려오는 것이었다.터미널까지는 택시를 타면 사람들과 부딪히거나 하는 문제를 최소화할 수 있을 것이고. 그런데, 근처에 사는 친구가 우리 집 근처로 출장간다며 차를 태워주기로 했다.게다가 마침 동생이 비번이라 병원에서 친구네 집까지 차를 태워줬다. 그 덕분에 안전하게 집으로 내려올 수 있었다. 이번에도 모든 행운이 집중되는 듯… 일단 퇴원 당일은 집에서 1박을 하고, 다음날 집 근처의 병원에 입원했다.무엇보다도 집은 환경 자체가 안전할 수가 없다. 게다가 집에선 병원에서 준 진통제밖에 쓸 수가 없어 갑작스러운 진통이 오면 답이 없기도 하기 때문이다… 2차 병원에서도 두통은 여전했다. 통증 자체는 다소 줄어들었지만, 잠을 잘 때는 힘들었다...
이전 글에서 계속… 12. 퇴원 준비 수술한 1월 18일이 월요일이었는데, 기대와는 달리 금요일까지 별 차도가 없었다. 게다가 수술 경과를 확인하기 위해 조영술을 다시 받았는데, 이 이후 두통이 더 심해졌다. 조영술을 실시한 의사들은 "와! 역시 오 교수님이네. 혈관 상태 봐."라며 놀라워하는 반응이었지만… 개그 한 토막: 조영술 후에 모니터의 혈관 영상을 보면서 "저게 제 머리인가요?" 하자, "그건 허벅지인데요…" lllorz 그래도 토요일 오전이 되자 통증이 살짝 완화되고, 정신을 조금씩 차리기 시작했다. 그리고! 드디어! 죽을! 한 그릇을! 다 먹을 수! 있었다! 반찬을 제대로 못 먹는 건 비슷했지만. 수술 후 닷새가 지난 이 시점에서야 사진을 찍어 수술부위를 볼 수 있었는데, 수술 부위가 꽤 컸..
1. WoW64 환경인지 확인하는 법 대략 아래와 같은 코드를 사용하면 된다.상세한 설명은 MSDN: IsWow64Process function 참고. typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process; bool isWow64() { #ifdef _WIN64 return true; #endif BOOL bIsWow64 = FALSE; //IsWow64Process()가 모든 윈도우에 구현된 건 아니기 때문에 //이런 방식을 사용해야 함 fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(TEXT("kernel..
이전 글에서 계속… 10. 집중치료실 중환자실에서의 시간은 사실상 정신을 못 차린 상태에서 지나갔고, 하루가 경과해서 집중치료실로 이동했다. 집중치료실에 오자 의료진은 빠른 회복을 위해서 가급적 조금씩이라도 걸으라는 얘기를 해줬다. 사실, 이 얘기는 수술 전에도 들은 것이었고, 한쪽 귀로 흘려들었었다. 하지만, 막상 집중치료실에 와보니 이게 얼마나 힘든 것인지를 알게 됐다. ㅠㅠ 일단, 밥은 전혀 넘어가지 않는다. 아예 입맛이 없고, 죽도 겨우 반 그릇 정도만 입에 억지로 밀어넣을 수 있었다. 진통제 덕분에 두통은 어느 정도 줄어들기는 했지만, 그래도 전체적으로 욱신거리는 건 힘들었다. 게다가, 집도의 선생님의 예언(?)대로 무통주사가 몸에 잘 맞지 않았다. 회복을 위해 억지로 조금 움직이려 걸어보니 구..
이전 글에서 이어짐… 9. 수술 이윽고 수술 당일 아침이 되었다. 수술 시간은 첫 시간인 8시부터.시간이 시간인지라 새벽 일찍 일어났다. 수술 전에 수술 부위에 매직으로 표시를 해뒀다. 여기가 바로 뚜껑이 열리는 그 곳이다… 침대에 누워서 수술실로 이동했고, 수술실에 들어가서 마취 준비하는 것까지만 기억나고 그 다음은 기억나지 않는다. 대략 아래와 같은 상황이 기억하는 마지막 장면. 좀 더 상세한 내용은 몽공장님 포스트 "전신마취 전과정에 대한 알기쉬운 설명" 참조.딱 이 포스트에 실린 대로 진행된다. 수술이 끝나면 중환자실로 직행하고, 하루 경과 후에 집중치료실로 간다. 마취는 중환자실에서 깨어나는데, 여기부터가 스펙터클 함. 목에 관을 삽입한 상태에서 마취가 깨어나고 집도의의 지시에 따라 목에 삽입한..
이전 글에서 이어짐… 8. 입원 1월 17일에 이전 포스트에 적은 것들을 가방에 바리바리 싸들고 와서 병원에 입원했다. 입원 수속엔 시간이 꽤 걸렸다. 입원 안내 비디오를 보면서 몇 가지 서류를 작성하고 제출하는데 1시간 정도 걸린 것 같았다. 다인실(5인실)이 마침 없어 2인실에 들어갔는데, 방을 같이 사용하시는 분은 이미 개두수술을 하시고 회복하고 계셨다. 입원복으로 갈아입은 뒤 즐거운 마음으로 인증샷 먼저 찍어주시고… 머리를 먼저 감으라면서 샴푸(…)를 주셨다.가만 보니 액체비누에 포비든 요오드를 섞은 것.머리를 두 번 감으라는데, 과연 뻘건 물이 흘러나오고, 머리는 뻣뻣해지는 것이 딱 그러하다… 수술 및 수술 이후에 링거를 꽂을 수 있도록 바늘도 미리 찔러뒀다.참고로, 여기 꽂는 바늘은 금속이 아..
이전 글에서 이어짐… 7. 입원 준비 수술 관련 입원은 10일 정도라고 한다.몸의 상태를 고려해서 약 수술 직후 5일 정도는 고생하고, 이후는 회복되어갈 것이라 자신하며 몇 가지를 준비했다. 수술 후엔 면도를 번잡하게 할 수는 없을 것이니 전기 면도기를 챙겼다.아무래도 얼굴에 면도 거품을 바르는 게 쉽지는 않을 것이고, 전기 면도기가 훨씬 편하겠지… 5일 정도면 무척 지루한 시간이 될 것이라 오랜만에 큐브를 하나 질렀다.그간 사용해오던 큐브보다 훨씬 더 부드럽고 폭발도 하지 않는 것으로 샀다.수술을 앞둔 나를 위한 선물. 그동안 새로운 공식을 몇 개 외우려고 생각만 했는데, 닷새 정도면 충분히 외울 시간이 될 것이라 생각했다. 밖에 나가서 머리가 추위에 노출되면 위험할 수 있으니 모자도 하나 준비했다.디..
이전 글에서 이어짐… 4. 외래진료 (1/2) 소견서를 받아들고 분당 서울대병원에서 외래진료를 예약하려고 하니 너무 오래 기다려야 된다.11월에 예약을 하는데, 오 교수님의 외래진료는 최단기간이 3월… 게다가, 개두수술 보다는 코일삽입술이 몸에 부담이 적을 것 같아 코일삽입술의 명의 권 모 교수님으로 외래진료를 예약했다.그래도 12월로 한 달은 기다려야 했지만, 넉 달보다야 낫지… 한달 뒤… 권 교수님께선 정밀검사 결과를 보자마자 쿨하게 말씀하셨다. 올해 몇 살이죠? 젊죠? 바로 머리 열자. 기대는 무너지고 멘탈이 왔다갔다하는 나에게 몇 가지를 더 설명해주셨다. 1. 코일삽입술만 10년 이상 해왔는데, 이 경우는 코일이 빠질 가능성이 높음 2. 코일이 빠지면 그 다음은 아무도 손 쓸 수 없는데, 애초에 ..
2016.1.18(월)에 뇌동맥류 수술을 받았다. 처음 검진부터 수술까지 과정들을 간략하게 정리해본다. 1. 건강검진 2015.11.3(화) 건강검진시 추가 항목으로 경동맥 CT를 촬영했다. 평소 혈압이 좀 있어 의사가 경동맥 CT를 추천했기 때문이었음. 2주 쯤 지나서 검진했던 병원에서 급한 연락을 받았다. 긴급한 상황이니 당장 병원으로 오라고… CT를 촬영한 대상은 경동맥인데, 뇌동맥과 연결되는 부위에서 동맥류로 의심되는 것이 발견되었다고 했다. 촬영 결과는(경동맥이 아니라) 살짝 흐릿하지만, 신경외과 선생님 두 분의 의견이 비슷해서 일단 수긍했다. 그런데, 설명을 들어보니 뭔가 무시무시한 것 같고, 그것도 하필 뇌동맥이라 걱정이 두 배… 촬영 결과를 CD로 받은 뒤 정밀 검사를 다른 병원에서 받기로..
아주 오랜만에 블로그 스킨의 내부를 보강했다.Syntax Highlighter와 MathQuill을 업데이트하고 이와 관련된 XRegExp와 jQuery를 최신화. 1. Syntax Highlighter 현 시점에서 Syntax Highlighter의 최신 안정화 버전은 3.0.9이다.3.0.83을 사용하고 있었는데, 이제야 최신 버전인 3.0.9로 업데이트.사실 3.0.84라고 붙여야 하는데, 원작자의 실수로 3.0.9라고 붙였다고… 여기에 추가해서 몇 가지 수정을 가미함 1. XRegExp를 2.0.0에서 3.0.0으로 업데이트 2. 사용하던 코드에 내가 손 댄 부분 중에서 어이 없는 오류가 발견되어 수정 3. Bash, JScript 브러쉬의 최신 버전 수정사항 일부 반영 4. 레지스트리 용 브러쉬..
이제 메모장2-mod도 사실상 안정화 단계에 접어든 듯 하다.최소한의 수정을 제외하면 Scintilla의 업데이트 외엔 특이한 내용이 없다.이번 업데이트 역시 Scintilla v3.6.3이 적용된 것 외엔 아무런 변화가 없음. 아래 링크에서 다운받을 수 있다.언제나 그렇듯이 한/영 x86/x64 버전이 모두 들어있다. One more thing… 한 가지가 더 있다.누군가가 메모장2에 암호화 기능을 추가하자는 건의를 하고 이 코드를 PR(Pull Request)로 올렸다. 암호화 기능이 메모장에서 얼마나 필요할지도 모르겠고, 직접 적용된 버전을 쓰면서 유용하다는 생각은 들지 않았다.그래도, 혹시나 누군가는 필요로 하지 않을까하는 생각이 들어 이전 버전인 r969에 이 기능을 적용하여 공개함. 혹시나 암..
2015년 마지막 Notepad2-mod 공개.사실 Inno Setup의 키워드 딱 하나(wizardimagealphaformat)만 추가된 것 외에는 아무런 변화가 없다. 그래도 2015년의 마지막날을 기념하여 배포. 아래 링크에서 다운받을 수 있다.언제나 그렇듯이 한/영 x86/x64 버전이 모두 들어있다. 2015년 한해 메모장2를 사랑해주셔서 고맙습니다.내년에도 많은 성원 바라고, 가끔 저~ 위의 그것도 한번씩 관심 부탁드립니다. 헤헤
12월 29일에 2015년의 마지막 가 올라왔다.올해는 장기 연재 중단 후 연재 재개 등의 크고 작은 많은 이벤트가 있었다. 관련하여 생각나는 것들을 정리해봤다. 1. 1년 만의 연재 재개 콴의 냉장고 180화는 '14.7.29에 연재됐고, 181화는 '15.7.6에 연재됐다. 특이한 점이 하나 있는데…180화 파일은 3개로 구성되어 있는데, 앞의 두 개의 날짜는 '14.8.5 마지막 하나는 '15.7.6이라는 점. 앞의 두개도 연재 후에 다시 올린 것 같고, 마지막 파일은 181화 연재 재개하면서 함께 다시 올린 듯. 2. A.E.가 챕터 뒤에만 등장하는 게 아니었음 만드라고라 편의 A.E. 중 하나는 챕터보다 먼저 연재되었다는 걸 몇 번의 정주행 끝에 발견했다. 3. 콴의 냉장고 편에 들어서 채색 미..
2015/3/15 - 가장 빠른 iDevice용 동영상 변환기 v11.4 공개 iDevice용 동영상 변환기를 11.5로 업데이트했다. ✌ 11.5는 11.4 이후 석달만의 업데이트이다. ('15.12.20 11.8a로 업데이트) 이번 업데이트에서는 전체적으로 코드를 정비하고, 몇몇 포맷의 지원을 추가했다. 변환기는 아래 링크에서 다운받을 수 있으며, 여전히 별도의 설치 프로그램따위는 없다. iTrans_20151220_11_8a_4530.rar 관심 있는 분들의 수많은 지적과 질타 부탁드립니다. 이 프로그램은 여러분 덕에 완성되어 갑니다. ▲ iTrans의 상세한 기능 및 특징 #일반 1. 대상 비디오 파일을 목록에 드롭한 뒤 변환 버튼을 클릭하면 알아서 변환함 지원 포맷:AVI, MKV, MP4(mo..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 2012/10/03 - SRT 자막 관리 도우미 SRTier 공개 SRT 자막 관리 도우미 SRTier를 1.6b로 업데이트했다. 처음 공개한 뒤 무려 3년만의 업데이트다. 최초 공개 버전에 비해서 일괄 변환 기능을 추가했고, 많은 소소한 업데이트가 적용됐다. 이 프로그램의 주요 기능은 아래와 같다. - SRT 파일 교정: SRT 파일을 읽은 뒤 오류를 수정한 뒤 다시 기록하거나 시간을 조정함 - 자막 변환: SAMI/SSA/ASS 자막을 SRT로 변환, SRT 자막을 SAMI로 변환 - 텍스트 추출: SRT 자막에서 텍스트만 추출 - 텍스트 합치기: 기존의 SRT 자막의 시간 코드에 맞춰 텍스트 파일의 내용을 합침 조금 더 상세히 보면 기능들은 ..
린이가 쓰던 PC는 언제부터 썼는지 기억이 잘 나지 않는 오래된 녀석이었다.종종 부속을 교체해왔기 때문에 이력관리 같은 건 안 됐고… 여튼 이 PC는 몇 달 전부터 헤롱헤롱하다가 애매하게 복구되는 것을 반복해왔었다.그러다 드디어 엊그제 운명을 달리했다. 메인보드/CPU를 교체하는 리뉴얼을 잠시 고민했지만, 여러 이유로 케이스를 포함한 본체 전체를 보내기로 결정했다. 케이스는 이렇게 생긴 녀석이다.예전엔 내가 직접 쓰던 케이스. 뚜껑을 열자 보이는 알맹이.기념품으로 남기기 위해 CPU와 메모리는 분리했다. 이제 DDR3를 지나 DDR4의 시대가 시작됐는데, 이 PC에서 사용하던 메모리는 DDR2.그래도 무려 4GB의 충분한 용량을 자랑하던 PC였다. CPU는 나름 유명했던 AMD Athlon X2 7750..
지인이 교통사고를 당해 부상을 입었는데, 하필 거기…그 친구와 얘기하다 점점 얘기가 개드립으로 빠져 아예 블로그에 하나 정리하기로 결정했음… 본드는 무방비로 벌거벗져진 죄수에 불과했다. 앉는 자리를 잘라냈기에 본드의 엉덩이와 하체는 바닥으로 쏠렸다.르쉬프가 고개를 끄덕이자 호리호리한 남자는 조용히 방을 나가 문을 닫았다.골루아즈 담배 한 갑과 라이터가 테이블 위에 놓여있었다. 르쉬프는 담뱃불을 붙이고 유리잔에 담긴 커피를 한 모금 마셨다. 그러고 나서 지팡이처럼 생긴 카펫 먼지떨이를 집어 손잡이를 무릎 위에 편안하게 내려놓아 납작한 끝부분이 본드가 앉은 의자 바로 아래에 놓이게 했다. 그는 본드의 눈을 거의 애무하듯이 조심스럽게 들여다보았다. 잠시 후 갑자기 그의 손목이 무릎 위로 튀어 올랐다.결과는 놀..
스포일러 주의! 스포일러가 포함된 포스팅입니다! [스펙터]의 엔딩에서 본드는 굳이 블로펠드를 죽이지 않고, 매들린과 함께 떠난다.그냥 가면 뭔가 부족하다는 듯 애스턴 마틴 DB5까지 가지고 간다. 이 장면을 보고 뜬금 없는 엔딩이란 해석도 있고, 크레이그의 본드는 끝났다는 해석도 하는 것 같다. 하지만, 그런 해석은 단언코 얘기하는데 틀린 해석이다. 시간을 46년 전으로 돌려보자.[여왕폐하의 007]을 촬영하면서 감독이었던 피터 헌트는 조지 래젠비에게 한 가지를 제안한다.결혼식까지만 영화에 포함시키고, 미시즈 본드의 피살 씬부터는 차기작 오프닝에 집어넣는 복수극으로 기획하자는 것. 하지만, 조지 래젠비는 더 이상의 본드 영화를 찍을 생각이 없다는 뜻을 명확히 하고, 이에 피살 씬이 엔딩에 포함됐다.죽음의..