Visual Studio 2015 Update 3 RC가 공개되었다.언제나 그렇듯이 많은 오류들이 수정되었다고 한다. 그런데, 막상 설치한 뒤 컴파일을 해보니 제대로 컴파일되지 않았다.Known Issues를 확인해보니 아래와 같은 내용이 눈에 띄었다. 본 블로그에서 배포하는 프로그램들은 Windows XP에서도 실행이 가능하도록 v140_xp PlatformToolset을 사용하고 있다.그런데, Update 3 RC에선 이걸 사용하려면 Include, Library 폴더에 위와 같은 내용을 추가해야 된다. 어차피 MS의 공식 지원도 종료된 Windows XP인지라 사실 그것보단 귀차니즘으로 v140 PlatformToolset을 쓰기로 했다.따라서, 향후 배포되는 어떤 프로그램도 Windows XP를 ..
Notepad2-mod는 지금도 기능이 조금씩 보강되기는 하지만, 근본적으로는 완성된 프로젝트다.그런데, x64 버전은 여전히 애매한 두 개의 버그가 있다. 1. 드래그앤드롭 오류 예전에 한번 포스팅한 적이 있는데 32비트 어플에서 64비트 Notepad2-mod로 드래그앤드롭을 하면 오류가 발생한다.이 오류는 32비트 Notepad2-mod에서는 전혀 발생하지 않는다. 2. Alt+선택시 오류 발생 가끔씩 Alt+선택하면 작동이 중단되는 경우가 발생한다.이 역시 32비트 Notepad2-mod에서는 발생하지 않는다. 직접 경험해보고 싶으면 아래 파일을 읽어서 32행의 IsMember에서 Alt+선택을 해보면 종종 경험할 수 있다. 아무래도 아직은 32비트 Notepad2-mod가 최선인 것 같다…
2011/11/08 - 간단히 만들어본 모든 미디어 → mp3로 변환 툴 v1.4 업데이트 3년쯤 전에 모든 미디어를 mp3/m4a로 변환하는 프로그램을 간단히 만들었었다.물론 iTrans와 유사하게 ffmpeg 등의 프론트엔드. 당시엔 단순히 오디오로 변환하는 것만 집중해서 간단히 만들었었는데, 그간 iTrans에 적용했던 기술들을 좀 추가하기로 했다.임시파일 생성을 최소화하고 태그 정보를 복제하는 등의 업데이트를 적용했다. 이 프로그램에서 지원하는 미디어 파일의 종류는 다음과 같다. - 비디오: avi, mkv, flv, ogm, mp4(m4a, m4r), mov, swf, wmv, asf, mpeg(mpg, dat, vob, m2ts, ts, ps), webm, rm(rmvb) - 오디오: mp2,..
2015/12/20 - 가장 빠른 iDevice용 동영상 변환기 v11.8a 공개 iDevice용 동영상 변환기를 12.0으로 업데이트했다. ✌12.0은 11.8a 이후 두달만의 업데이트이다. 이번 업데이트에서는 전체적으로 코드를 정비하고, 미디어 관련 프로그램들을 전반적으로 업데이트하여 안정성을 보강했다.또한, 대상 장비를 아이폰 4s(및 구형 아이패드) 이상과 5s(및 아이패드 에어 이상)으로 구분하였다. 변환기는 아래 링크에서 다운받을 수 있으며, 여전히 별도의 설치 프로그램따위는 없다. iTrans_20151220_11_8a_4530.rar 관심 있는 분들의 수많은 지적과 질타 부탁드립니다. 이 프로그램은 여러분 덕에 완성되어 갑니다. ▲ iTrans의 상세한 기능 및 특징 #일반 1. 대상 비디..
지난 포스트에서 언급한 내용 및 johnsonj님께서 작업중인 내용(신틸라를 활용하지 못하는…, Fix Mark occurences…)을 반영한 내용을 공개.이 버전은 이전 버전에 비해 아래와 같은 내용들이 반영되어있다. - 아파치(Apache) 예약어 추가 (r980) - 선택어 강조에서 보이는 영역만 강조 옵션 추가 (대용량 파일에서 속도 향상) - 보이는 영역만 강조하지 않을 때는 선택어와 일치하는 개수 상태표시줄에 전시- 다중입력/IME인라인 기능 추가 및 자동완성 기능 보강 (지난 포스트 참조)- 항상 위, 투명 모드 툴바 아이콘 개선 (언제나 그렇듯이 C6248님의 작품임) 아래 링크에서 다운받을 수 있다. 언제나 그렇듯이 한/영 x86/x64 버전이 모두 들어있다.
Notepad2-mod의 공식 배포 버전은 변경된 것이 없지만, 그동안 여러가지 손 댄 것을 반영한 버전을 공개함.지난 배포본에 추가된 관리자 권한으로 자동으로 재실행에 추가하여 아래와 같은 기능이 추가되었다. - Scintilla 3.6.6 적용 - (지난 버전의 항상 위에 덧붙여) 투명 모드도 툴바 아이콘 적용 - IME 인라인 (가상 공백) - 다중 선택시 다중 입력 지원- 자동완성 기능 보강 추가된 대부분의 기능은 johnsonj 님께서 구글 그룹스에 공개한 내용을 기반으로 하고 있다. 아래 링크에서 다운받을 수 있다.언제나 그렇듯이 한/영 x86/x64 버전이 모두 들어있다. 덧1. 자동완성 기능은 사소한 오류가 남아있고, 계속 오류를 찾아 수정하는 중임. 오류 제보 부탁드립니다. 덧2. 마이너..
이번 버전에서는 Scintilla v3.6.5 (HG 84a9583)를 적용했다.이에 덧붙여 Rust 언어를 추가했고, 항상 위(Always On Top)를 별도의 툴바 아이콘으로 추가시켰다. 그리고, 특별한 기능이 하나 추가되었다.관리자 권한이 있어야 저장할 수 있는 파일을 편집 후 저장하려면 아래와 같은 질문을 한 뒤 관리자 권한으로 재실행해준다.물론, 관리자 권한으로 실행시 그 때까지 수정된 내용이 모두 저장되어 있다. 아래 링크에서 다운받을 수 있다. 언제나 그렇듯이 한/영 x86/x64 버전이 모두 들어있다.
jpeg 파일을 생성하는 과정은 아래와 같다. 1992년 9월에 나온 기술이라 위의 과정은 이미 기술적으로 충분히 안정화된 상태.그런데, 이 기능 중에 거의 사용되지 않는 부분이 하나 있다. 위 그림 하단 가운데에 보이는 Arithmetic Coding(산술 부호화[코딩]). 흔히들 jpeg 압축의 마지막 단계는 허프만 코딩이라고 알고 있는데, 원론적으로는 반만 맞는 것이다.마지막 단계는 엔트로피 코딩이며, 엔트로피 코딩으로 허프만 코딩 외에 산술 코딩도 사용할 수 있다. 산술 코딩은 허프만 코딩에 비해 압축률이 높고 연산이 복잡하여 속도가 느리다. 속도보다 더 큰 문제는 이 산술 코딩이 꽤 많은 특허가 걸려있었다는 것.무려 11개의 특허가 걸려있는데다 반드시 구현해야 되는 게 아니라서 그동안 거의 구현..
부동소수점 계산시 곱하기가 나누기보다 빠르다는 얘기를 듣고서 실제로 어떤지 측정해봤다. 환경은 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 포트를 제공한다.이를 제대로 지원할 수 있는 충분한..
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..
아주 오랜만에 블로그 스킨의 내부를 보강했다.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를 사랑해주셔서 고맙습니다.내년에도 많은 성원 바라고, 가끔 저~ 위의 그것도 한번씩 관심 부탁드립니다. 헤헤
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 자막의 시간 코드에 맞춰 텍스트 파일의 내용을 합침 조금 더 상세히 보면 기능들은 ..
윈도우 10에 포함된 MS Edge는 IE에 비해 많은 향상이 있는 브라우저다.속도나 웹표준 준수 등 여러모로 발전된 게 사실이다. 그런데, 여기저기에서 실전 적용이 어렵다는 판단을 하게 되는 점들이 발견된다.이번에 크게 눈에 띈 점 하나는 깃허브에 공개된 내용을 사용하기 너무 어렵다는 점. 파이어폭스나 크롬 등의 브라우저로 깃허브를 띄운 뒤 소스를 선택하면 아래와 같이 선택된다. 그런데, Edge로 선택하면 아래와 같이 선택된다. 물론, 소스를 직접 다운받고 활용하는 방법이 있기는 하지만, 굉장히 불편한 게 사실이다.MS Edge… 아직 갈 길이 멀다…
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 2015/05/04 - 한/글(HwpML) 파일 압축기(HIS) 2.8 업데이트 근 반년만의 업데이트.BMP 파일에 대한 처리를 보강했고, GIF 파일도 지원하도록 수정한 버전을 공개한다. 이번 버전에서 수정된 내용은 아래와 같다. 1. 아이콘을 살짝 변경 2. 컴파일 환경을 Visual Studio 2015로 변경 3. mozjpeg을 3.1로 업데이트 4. pngquant를 2.5.2로 업데이트 5. 버그 수정: Grayscale Jpeg를 제대로 처리하도록 수정 6. 버그 수정: 가끔씩 변환 도중 프로그램이 멈추던 문제 수정 7. 16bpp 이하의 BMP 파일도 변환하도록 수정 (특히 8bpp 이하는 무조건 pngquant로 변환) 8. 단일..
GIF 포맷은 예전에 비해 사용량이 줄었지만, 여전히 많이 사용되는 포맷이다. 비록 단일 프레임 이미지는 JPEG/PNG에 밀리긴 했지만, 여러 프레임으로 구성된 GIF는 짤방이란 별명으로 널리 사용되고 있다. GIF 포맷의 기본적 특징이자 단점은 256색의 팔레트를 사용한다는 점이다.이로 인한 화질의 저하는 어쩔 수 없는 약점인데, GIF의 특성들을 묘하게 조합해서 트루컬러를 구현하는 방법이 있다. 아래처럼 여러장의 프레임으로 구성하여, 각 프레임에 충분한 투명영역을 지정해서 겹치면 트루컬러 GIF를 얻을 수 있다. 이 이미지의 각 프레임을 추출하면 아래와 같다.무려 29개의 프레임으로 구성된 이미지인 것이다. 모든 프레임을 한 장에 합친 결과는 아래와 같다.
요즘 컴퓨터에서 관리되는 시간은 굉장히 정확하다. 메인보드에는 RTC 칩이 있어 전원을 꺼도 시간은 확인되고, 시간 정보는 수시로 타임 서버와 동기화한다. 코인 배터리로 RTC가 동작되기 때문에 배터리 누액으로 인해 메인보드가 망가질 일도 거의 없다. OS에서는 타임 서버/RTC의 시간을 시간대와 함께 계산해서 관리해준다. 그런데, 처음부터 시간이 이렇게 정확하게 관리됐던 게 아니다. 오히려, 정확하기는 커녕 시간 자체가 제대로 관리되지 않았다. 내가 처음으로 접했던, MSX와 연계된 RTC의 기억들은 아래와 같다. 1. MSX 내가 처음 가져본 컴퓨터는 금성전자에서 판매한 FC-30이었는데, 이건 시간 개념이 없던 제품이라 패스. 제대로 시간 개념이 있는 컴퓨터를 처음 가져본 것이 대우전자에서 판매한 ..
다양한 이미지 처리 프로그램들이 있다.그 중에도 명령행 계열의 지존은 물론 ImageMagick. ImageMagick은 다양한 이미지 포맷에 대하여 다양한 필터 기능을 적용할 수 있다.다양한 필터 중에서도 가장 널리 쓰이는 중요한 필터는 물론 리샘플링. IM에서는 어떤 리샘플링 필터를 기본으로 할 것인가를 충실히 분석했다.물론, 선택은 사용자의 몫이라는 점을 대전제를 하고. 이 분석의 결론은 대략 아래와 같다. 1. 확대 다양한 필터를을 비교한 결과 기본으로 선택된 것은 Mitchell-Netravali 필터.이 필터는 B, C의 값을 일정 범위 내에서 가변적으로 지정할 수 있는데, 특히 원래 논문의 기본값인 ⅓, ⅓을 선택했다. 선정의 이유는 다른 필터들에 비해 확대 시에 아티팩트가 가장 적고, 가장..
libjpeg에서 이미지를 읽어들이는 부분의 코드(example.c)는 아래와 같다. /* Here we use the library's state variable cinfo.output_scanline as the * loop counter, so that we don't have to keep track ourselves. */ while (cinfo.output_scanline < cinfo.output_height) { /* jpeg_read_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could ask for * more than one scanline a..
이미지에 그라데이션을 넣을 때 선형으로 처리하면 왠지 부자연스러워 보인다. 경계선 주변의 흰 색이 왠지 튀어보이는데, 사실 색은 아무런 문제가 없다. 그냥 인간 인지력의 한계… 이런 현상은 저런 단색 뿐만 아니라 두 이미지를 섞을(?) 때에도 비슷하게 나타난다. 왠지 부자연스러워보인다[…] 이 경계선을 부드럽게 하는 방법을 알아보니 가장 손쉬운(?) 방법은 로지스틱 함수. \(f(x) = \frac{L}{1+e^{-k(x-x_0)}}\) 대략 이렇게 생긴 분인데, 결과를 그래프로 나타내면 아래와 같이 나온다. 이 식을 조금만 변형해서 그라데이션에 적용하면 아래와 같이 자연스러운 결과를 볼 수 있다.