Posts Tagged ‘ 버그

IE6 + XHR + gzip + “no-cache” 버그

XE 개발 도중 발견한 IE6의 버그입니다.

모든 IE6에서 발생하는 것은 아니지만, 일부에서는 분명 발생하고 있습니다. 관련한 버그 리포팅을 받고, 테스트용으로 똑같은 IETester를 WindowsXP SP3와 Windows7에 각각 설치했었는데, XP에서는 발생하지 않았고 Windows7에서는 발생했습니다. 해외에서도 비슷한 사례가 보고된 바 있습니다. 단, 해외와는 달리 frame을 포함하지 않아도 발생한다는 것이 저희가 발견한 사례입니다.

버그 발생 조건은 이렇습니다.

  1. IE6 사용
  2. XHR로 컨텐트 요청
  3. 서버에서 gzip 압축으로 컨텐트를 전송하며, Cache-Control 헤더에 no-cache, no-restore 등의 값을 설정했을 때

혹시나 싶어 gzip 압축 전송 옵션을 사용하지 않았더니 아무런 문제없이 정상동작하는 것을 확인했습니다.

해결책을 여러 가지 방법으로 찾아보았으나 결국 ‘IE6의 버그’라는 말만 있을 뿐 마땅한 대안은 없는 듯 합니다. 안 그래도 느린 IE6인데, 성능을 높이기 위한 gzip 전송마저 못하게 한다면 더 느려질 수 밖에 없습니다.

IE6를 업그레이드 해야할 이유가 하나 더 늘었습니다.

타임캡슐 버그 – 파일 삭제, 이동, 숨겨짐

타임캡슐

이것때문에 한참을 고생했는데, 오늘에서야 해결책을 알게 되어 공유합니다.

저희집에서는 타임캡슐을 윈도우 머신 2대와 함께 공유 하드처럼 사용하고 있습니다. 맥북도 있지만, 가끔 열어보는 정도라서 맥으로 사용하는 정도는 미미하죠.

최근에 구입한 MP3들을 바로 이 타임캡슐에 보관하고 있는데, 어느날 부턴가 갑자기 파일이 안보이기 시작하더군요. 이 상태가 되면, 폴더 삭제가 안되는 것은 물론 이름을 바꾸거나 이동시키는 것도 불가능합니다. 어쩔 수 없이 새 폴더를 만들어서 다시 MP3 파일들을 넣어두었는데 문제가 재발하더군요.

검색 결과 문제는 이름이 긴 파일 때문이었습니다.

윈도우에서 허용하는 파일 이름의 길이보다 타임캡슐에서 허용하는 파일 이름 길이가 더 짧습니다. 아마도 사용하는 문자셋이 달라서 그러리라 짐작합니다(윈도우에서는 한글 1자에 2byte, 맥은 3byte).

해결책은 간단합니다.

문제가 됐던 이름이 긴 파일을 찾아서 그 폴더로 다시 복사해줍니다. 그러면 같은 이름의 파일이 있다며 덮어씌우겠냐고 나타나는데, 당연히 덮어씌웁니다. 이제 이 폴더에는 방금 복사한 파일이 나타날 것입니다. 바로 그 때, 나타난 파일을 지우면~ 문제가 깨끗이 해결됩니다.

이 방법에서 가장 어려운 부분은 “문제가 됐던 이름이 긴 파일을 찾는” 것입니다. 제 경우에는 맥북이 있어서 맥으로 접속했더니 파일이 보였고(이름이 잘리긴 했지만), MP3를 구입한 내역이 남아있어서 원래 이름을 어렵지 않게 찾을 수 있었습니다. 맥이 없을 때는 어떻게 해결해야할지 모르겠습니다. -_-;;

참고로, 맥에서였다면 파일 이름이 너무 길다며 아예 복사가 안된다고 합니다. 예방이 되는거죠. 윈도우에서 사용할 때만 발생하는 문제인 듯 합니다.

Scintilla 1.77 한국어 IME 패치

Scintilla 1.77 버전이 나왔는데, 아직 패치를 실행하신 분은 없는 듯 해서 직접 패치 후 컴파일 했습니다. 패치 방법은 codewiz님, BlUE’nLIVE님이 작성하신 방법도 있는데, 너무 수정할 게 많아서 sixmen님께 힌트를 얻어 제 나름대로 수정했습니다. 덕분에 토요일 오후가 사라졌네요. ;;

다루어야 하는 파일은 ScintillaWin.cxx 파일 하나뿐입니다. 패치방법을 기억하기 쉽도록 아래에 적어둡니다. 그냥 바이너리 파일만 필요하신 분은 바로 아래에 있는 링크에서 받으시면 됩니다. 하지만, 현재 이 DLL에는 버그가 있습니다. 사용상에 중대한 영향을 끼치는 것은 아니라고 생각하지만, 경우에 따라서는 중요해질 수도 있습니다. 꼭 이 글 제일 아래에 있는 버그를 확인 후 사용하세요. 저한테는 중요한 버그가 아니라 일단 그냥 쓰기로 했습니다. -_-;;

zip Scintilla 한국어패치 다운로드

패치 과정

아래의 모든 과정은 ScintillaWin.cxx 파일에서 이루어집니다.

1. case WM_IME_STARTCOMPOSITION: 를 찾습니다.
아래의 소스를 다음과 같이 수정합니다. 한글 키보드일 때만 작동하도록 되어있으며 이 부분은 sixmen님 소스를 그대로 사용했습니다.

case WM_IME_STARTCOMPOSITION:// dbcs
	ImeStartComposition();
	// 여기부터
	if (LOWORD(GetKeyboardLayout(0))==MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN)) {
		// if the current IME is the Korean IME, do not show the default IME window
		return 0;
	}
	// 여기까지가 추가된 부분입니다.

Read more

Page 1 of 212