기본 콘텐츠로 건너뛰기

2014의 게시물 표시

XE v1.7에서 음성 파일 재생 불가 문제 해결법.

   XE 1.7을 사용하고 있는 사이트에서 문제가 발생했습니다.   게시판에서 음성 파일을 첨부한 후, 게시물에 삽입하면, 다른 웹 브라우저에서는 음성 파일이 잘 재생되나, IE8(혹은 그 이하)에서는 음성 파일이 재생되지 않는 문제였습니다.   아마도 XE가 업데이트되면서 음성 파일 처리에 HTML5 태그인 audio 태그를 쓰도록 수정된 것 같습니다. 하지만, 다행히도 audio 태그를 플래시 플레이어로 변환시켜 주는 애드온이 있었습니다. 그 애드온의 이름은 "HTML5 AUDIO to FLASH"입니다.[1] 이 애드온 덕분에 문제를 잘 해결할 수 있었습니다. ... 이걸로 끝이면 좋았겠지만, 적용해놓고 보니, 정작 중요한 IE8에서는 플레이어가 나타나지 않는 것이었습니다. (산 넘어 산...)   이상한 것은 해당 애드온의 바탕이된 자바스크립트를 개발한 사이트[2]에 가서 데모를 구동해봤는데, IE8에서 플레이어도 잘 보이고, 재생도 잘 되었습니다. 그래서 저는 애드온을 의심하고,코드를 낱낱이 살펴보았습니다. 하지만 특별한 문제점은 없었습니다.. 다음으로는 jQuery나, html5.js와의 충돌을 의심했으나, 모두 아니었습니다.   그러다가 놀라운 글을 발견했습니다.[3] 결론부터 말씀드리자면, p 태그 안에 audio 태그가 있으면, 그런 오류가 발생한다는 것입니다. 그리고 실제로, 게시물에서 p태그를 제거하자 음성 파일이 잘 재생되었습니다.   몇 가지 연구 끝에 IE8[4]에서는 node.outerHTML, innerHTML 함수가 태그에 따라서 안먹히는 경우가 있기 때문에, 이런 문제가 발생했다는 것을 알게 되었습니다. 그렇다면 게시글에서 p 태그만 지우면 되는데, 중요한 문제는 게시판의 WYSIWYG 편집기가 자동으로 p 태그를 입력해버린다는 것이었습니다. 그래서 audio.js (애드온이 사용하는 라이브러리)에서 outerHTML, innerHTML을 사용하지 않고 우회하는 방안을 열심히 찾아보았는데,

c000021a unknown hard error 조치법

  윈도 XP 부팅 중 XP 로고 화면이 표시된 이후에 시스템이 재부팅되는 문제가 발생했습니다. 블루스크린이 표시되지 않았기에 F8을 열심히 눌러서 "시스템 오류 시 자동으로 다시 시작 안함"을 선택해서 부팅해보니, 블루스크린이 나타나고, "c000021a unknown hard error"라는 에러 메시지가 표시되었습니다.   찾아보니, 주된 원인은 윈도 파일 중 ws2help.dll가 바이러스에 걸려서 발생한다고 합니다.[1]그래서 하드디스크를 다른 PC에 연결한 후,동일한 버전의 XP (home/pro, sp1/sp2/sp3)의 ws2help.dll을 복사해 덮어 씌웠지만 증상이 해결되지 않았습니다.   고민하던 차에 [2]의 글을 발견하였고, 다음과 같이 하여 문제를 해결했습니다. 문제가 발생한 컴퓨터의 하드디스크를 다른 컴퓨터에 연결한다. 연결된 하드디스크에서 system32 폴더를 통째로 백업한다. (system32 폴더를 통째로 압축하는 것이 편함) 가상 머신이나 여분의 컴퓨터에 동일한 버전의 XP를 임시로 설치한다. 위 "3"의 컴퓨터에서 system32 폴더 안의 파일/폴더를 모두 복사하여 위 "1"의 하드디스크에 덮어씌운다. 단, config라는 폴더는 복사하지 않는다. 위 "1"의 하드디스크를 다시 원래의 컴퓨터에 연결한 뒤 정상적으로 부팅되는지 확인한다. 안되면 포기하고 윈도를 재설치하거나 "2"에서 백업한 파일들을 이용해 이전 상태로 되돌리고 다른 방법을 찾아본다. 참고   [1] "c000021a Unknown Hard Error 해결", http://foreal.tistory.com/68, 2014-11-18 확인   [2] "STOP : c000021a Unknown Hard Error 해결방법", http://intumyself.tistory.com/137,

c++ 변환생성자

c++ 코딩하다가 매우 당혹스러운 일을 겪었습니다. 함수 파라미터에 특정 객체가 들어가야 하는데, 그만 실수로 문자열을 넣었습니다. 보통은 컴파일 에러가 발생했겠지만, 이번에는 그렇지 않았습니다. 심지어 정상동작했습니다. 혹시나 해서 이름이 같은 다른 함수가 있는지 확인해보았지만 아니었습니다. 너무 이상해서 디버깅을 해보니, 파라미터로 문자열을 넘기는 순간, 그 문자열을 가지고 해당 객체를 생성하는 것이 아니겠어요?   네, 변환생성자 때문에 발생한 소동이었습니다. 사실 해당 객체의 클래스에는 문자열을 파라미터로 받는 생성자가 있었고, 이에 컴파일러가 알아서 객체를 생성한 것이었습니다. 생성자 선언에 explicit 키워드를 추가하면 이와 같은 문제를 예방할 수 있습니다. (예: explicit MyClass(CString csText);) 참고 변환시리즈 정리(변환생성자, 변환함수) MSDN - explicit (C++)

XE 용량 초과로 문제 발생 시 조치법.

XE를 사용 중인 웹사이트에서 용량이 꽉 차버려 사이트가 제대로 동작하지 않는 문제가 발생했습니다. 특히 첨부파일 삭제 기능도 동작하지 않고, 관리자 페이지에 접근하려고 해도 다음의 에러 메시지가 나타나면서 접근이 불가능했습니다. Fatal error: Call to a member function getAction() on a non-object in ...(중략)... DB.class.php ... (생략) 용량 문제는 첨부 파일의 경로를 찾아, 직접 지워서 해결 했는데, 저 오류는 사용 가능 용량이 생겼다고 해서 해결되지 않았습니다. 저는 다음의 방법으로 문제를 해결했습니다. XE 루트/files/cache 폴더의 이름을 변경합니다. (예: cache_bak) XE 관리자 페이지로 접근합니다. (http://웹사이트 주소/xe/?module=admin   또는 http://웹사이트 주소/xe/?module=admin&act=dispAdminConfig) 관리자 페이지에서 캐쉬 재생성 작업을 진행합니다. (※ 관리자 페이지가 제대로 나타나지 않는다면 다른 문제이므로 cache 폴더를 복원하고 다른 방법을 찾아봅니다.) 참고: http://www.xpressengine.com/qna/20701795 - 문제 해결 힌트를 얻은 곳. http://www.xeschool.com/xe/step1_52 - 캐쉬파일 재생성 방법 참고. http://www.xpressengine.com/qna/19689609 - 첨부파일을 직접 삭제할 때 참고.

Visual Studio 2010 pdb 파일을 이용해서 디버깅 하는 방법

Visual Studio 2010에서 빌드하면서 exe 파일과 함께 pdb 파일이 생겼습니다. 디버그에 사용된다는 것 외에는 잘 모르고 있었는데, 현재 실행 중인 프로그램을 디버그 할 일이 생겨서 사용법을 찾아보았습니다. 복잡한 내용은 잘 모르겠지만, 다음과 같은 방법으로 디버깅을 시작할 수 있었습니다. 빌드하면서 생성된 exe 파일과 pdb 파일을 잘 보관합니다. (두 파일은 짝을 이룹니다.) 디버그할 exe 파일을 실행합니다. exe 파일과 같은 위치에 "1."의 pdb 파일을 복사해둡니다. Visual Studio 2010을 실행하고, 해당 프로그램의 솔루션을 엽니다. "Windows 작업 관리자"를 실행합니다. 현재 실행 중인 exe 파일의 프로세스를 찾습니다. 찾았으면, 우클릭해서 "디버그"를 선택합니다. 디버거를 연결하겠냐는 확인 창에서 "디버거 연결"을 선택합니다. 그러면 연결할 디버거를 선택하는 화면이 나타나는데, "4."에서 솔루션을 열어둔 인스턴스(Visual Studio 2010 프로그램)를 선택합니다.  ※ 만약 exe 파일과 pdb 파일이 서로 다른 빌드 때 생성된 것이라면 디버깅할 수 없습니다. 참고 Visual Studio 로 디버깅하는 방법 Debugging With Minidump

Cent OS에서 Oracle DB 12c 설치 프로그램 실행시 PRVF-0002 에러가 발생하는 문제.

본 글은 이곳 의 내용을 거의 번역한 수준입니다. Cent OS 6.5에 Oracle DB 12c를 설치하려고 오라클 사이트에서 설치 프로그램을 받아 압축을 풀고 runInstaller를 실행했습니다. 그런데... PRVF-0002 에러 메시지("로컬 노드 이름을 검색할 수 없습니다.")가 나타나더라고요... 찾아보니 다음과 같은 방법으로 간단히 해결할 수 있었습니다. 우선 호스트명을 확인해야 합니다. (터미널에서 다음 명령어를 실행합니다.) cat /etc/sysconfig/network | grep HOSTNAME (결과 예시: HOSTNAME=centosserver.dbtest) 현재 호스트 설정을 확인합니다. cat /etc/hosts (결과 예시: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ※ "1."에서 확인했던 호스트 명이 빠져 있는지 확인합니다.)   호스트 파일에 "1."에서 확인한 호스트 명을 넣어줍니다. sudo vi /etc/hosts (혹은 sudo gedit vi /etc/hosts) (예시: 127.0.0.1 centosserver centosserver.agenttest localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 centosserver centosserver.agenttest localhost localhost.localdomain localhost6 localhost6.localdomain6 ※ "1."에서 확인한 호스트 명과, 호스트 명의 앞부분(아마도 컴퓨터이름)을 넣어줍니다.) 저장하고 닫은

VBoxManage로 VirtualBox의 하드디스크(vdi) 용량 증설했는데도 반영이 안되었을 때.

VirtualBox의 가상머신을 사용하던 중 가상 머신 하드디스크의 용량증설이 필요하게 되었습니다. 검색을 통해서 VirtualBox의 VBoxManage.exe를 이용해 용량을 늘리는 방법을 알아내었습니다. 그런데 용량 증설이 분명 성공했음에도 불구하고, 시스템에 반영이 안되더군요... (gparted에서 증가된 용량을 인식하지 못했습니다.) 한참 해매다가  "가상 미디어 관리자"창을 열어서 확인해보니, "스냅샷"이 원인이었음을 알 수 있었습니다. 그러니까, 저는 스냅샷의 원본의 용량을 증설한 것이고, 스냅샷 이후의 가상하드디스크(vdi파일)는 용량증설을 하지 않은 것이죠... 원본 vdi 파일이 있는 곳에 보면 "Snapshots"라는 폴더가 있고, 그 안에 스냅샷과 관련된 vdi 파일들이 있습니다. 여기서 최신의 vdi의 용량을 증설해주면 제대로 반영됩니다. 그런데.. lvm파티션(레드헷, Cent OS 등)을 사용하는 경우에는 또 다른 난관에 봉착하게 됩니다. gparted로 파티션의 용량을 조절해놓고 부팅을 했는데, 변경 사항이 반영되지 않았습니다. lvm 파티션의 경우 추가적인 조취가 필요했습니다. (다음의 명령들은 모두 관리자 권한으로 실행합니다.) 터미널에서 vgdisplay 명령을 실행합니다. 용량을 증설해야할 volume의 LV Path 항목을 찾습니다. (없는 경우에는 "df -h" 명령을 실행해서 나온 결과에 /dev/mapper/로 시작하는 항목 중 용량을 기준으로 대상을 찾습니다.) (* 제 경우에는 /dev/vg_centosserver/lv_root 였습니다.) "lvextend <LV Path 경로> -l +<용량>"을 실행합니다. (예: "lvextend /dev/vg_centosserver/lv_root -l +100%FREE" 이 명령을 실행하면 남아있는 공간만큼