April Breeze is blowing...

1 2 
RoundCube WebMail 사용하다가 찾은 버그 및 문제점과 해결 방법입니다.
Tracker에도 Ticket 등록했고 링크도 같이 올립니다.

...추후 계속 추가 예정


1. 네이버 메일에서 발송한 메일의 보내는 사람, 받는 사람 항목에 이름과 이메일이 두 번 나옴

    - Header의 From과 To 부분의 이름과 이메일 주소 사이에 공백이 없고 이름이 인코딩 돼있어서 RoundCube 에서 제대로 파싱을 못함.

program/include/rcube_imap.php
3818번째 줄
$val = preg_replace("/([\"\w])</", "$1 <", $val);
->
$val = preg_replace("/([\"\w=])</", "$1 <", $val);

http://trac.roundcube.net/ticket/1487068 -> 0.5-beta 에 반영 (이름과 이메일 파싱하는 부분 코드가 완전히 바뀜)


2. X-Windows-949 인코딩을 지원하지 않음
    - X-Windows-949, CP949, UHC는 같은 인코딩 방식이고, M$에서 EUC-KR을 이용해 자기들 멋대로 확장한 방식임.
      http://www.i18nl10n.com/korean/cp949l.html
      http://en.wikipedia.org/wiki/Windows-949

program/include/main.inc
368번째 줄에 아래 추가 (367번째 줄에 , 도 추가해야함.)
'WINDOWS949'    => 'UHC'

http://trac.roundcube.net/ticket/1487072 -> 0.5-beta 에 반영


3. euc_kr을 인식하지 못함
    - euc-kr 이 맞으며 euc_kr 로 잘못 써놓은 경우에만 해당함. (대소문자 상관없음)

program/include/main.inc
369번째 줄에 아래 추가 (368번째 줄에 , 도 추가해야함.)
'EUCKR'         => 'EUC-KR'


4. 메일 원본 HTML의 <meta> 태그 위쪽에 한글이 나올 경우 본문의 한글이 깨짐
    - <html> 태그 앞에 한글로 주석을 써놓는 등의 경우에 발생
    - http://php.net/manual/en/domdocument.loadhtml.php 여기 Note 에 나온 방식으로 해결
    - DOMDocument::loadHTML 관련 버그 (http://bugs.php.net/bug.php?id=32547 참고)
    - <title> 태그에도 한글이 있지만 program/steps/mail/func.inc의 rcmail_wash_html()에서 없애버리므로 상관없음.
       => source의 주석에 위의 버그 언급돼있음 (http://trac.roundcube.net/ticket/1485178)

program/steps/mail/func.inc
686번째 줄에 아래 추가
if (extension_loaded('mbstring')) {
  $html = mb_convert_encoding($html, 'HTML-ENTITIES', RCMAIL_CHARSET);
}

http://trac.roundcube.net/ticket/1487079

2010/10/22 09:39 2010/10/22 09:39
2010/10/22 09:39
Category dev.

ajaxian.com - WTFJS, firejune.com - WTFJS(젠장할 자바스크립트), ajaxian.kr - WTFJS: “string” instanceof String 에 언급된
WTFJS(왓 더 삐-_- JS)의 아래 예문을 보고 이것저것 테스트를 해보니 또 재미있는게 있어서 대충 정리를 해봤습니다.

"string" instanceof String; // false.

이걸 좀 바꿔보면 아래처럼도 쓸 수 있습니다.

String('string') instanceof String // false
typeof String('string') // string
-> new를 안붙였기 때문에 역시나 false가 나옴. 일반적인 함수 실행하고 string을 리턴받는 형식으로 보임.

그런데,
Object('string') instanceof String // true
이렇게 new를 안붙이고 Object()를 쓸때는 또 true 가 나옵니다-_- new를 붙여도 마찬가지로 true.

new String('string') instanceof String // true
typeof new String('string') // object
-> 요게 당연히? 맞는 케이스이고, String은 Object에서 파생된 클래스라서 typeof에 object가 나오는 것까지는 좋은데,

var a = new Object('blah')
a instanceof String // true
-> 이렇게 거꾸로 됐음에도 true가 나옵니다. 클래스 상속 개념과는 전혀 안맞음-_-

String뿐만 아니라 Number, Boolean, Array, Function, RegExp 등의 'Global Objects'의 'Basic Data Type' 에도 동일하게 적용이 돼서
인자의 타입과 맞는 object가 생성이 돼버립니다. (단, Date는 제외)

참고 : Javascript Instanceof, Standard global objects (By type)




하여간, 자바스크립트라는 놈은 뭔가 독특해서 더 재미있는듯...ㅋ...

2010/02/16 05:15 2010/02/16 05:15
2010/02/16 05:15
Category dev.
Tag
Javascript 에서는
var a = { x: 1, y: 2 } 라고 정의하면
a.x 또는 a['x'] 둘 다 사용가능하지만, PHP 에서는 당연히 안된다.

PHP 에서 배열로 정의하고 객체처럼 쓰고 싶을때는
Standard PHP Library (SPL)ArrayObject 를 사용하면 가능하다.
(PHP 5 이상에서 지원함)

$arr = array('a' => 1, 'b' => 2);
$arrObj = new ArrayObject($arr);
$arrObj->setFlags(ArrayObject::ARRAY_AS_PROPS);
echo $arrObj->a; // 1
위에서 세번째줄이 배열의 key를 객체의 property로 사용가능하게 해주는 역할을 한다.

...제목에는 '객체처럼 쓰기'라고 했지만, '객체로 변환해서 쓰기'가 맞긴하다.


2010/02/12 03:52 2010/02/12 03:52
2010/02/12 03:52
Category dev.
CSS3의 border-radius 속성은 코너를 둥글게 해주는 아주 유용한 속성이지만
아직 정식(?)으로 지원하는 브라우저는 없는 것 같고, (있나...-_-)
FF는 -moz-border-radius
Chrome과 Safari는 -webkit-border-radius 라는 속성으로 지원을 하고 있습니다.
역시나... IE는 지원을 안하구요-_-

그런데,
IE에서 이것을 가능하게 해주는 스크립트가 있어서 테스트를 해봤는데 IE6,7,8에서 비교적 잘 작동하네요.
(아래 테스트 페이지의 Quarter Circle은 제대로 안되는것 같음..)

DD_roundies 라는 라이브러리이고,
IE의 VML을 이용해 border-radius 를 구현하게 돼있습니다.
(제작자는 DD_belatedPNG 를 만든 사람이기도 하구요.)



** 테스트 페이지는 아래 링크를 참고했음


ps.
테스트 페이지 제일 아래 Tooltip 에 백그라운드 컬러를 줬더니 IE8 에서는 여백이 생겨버리네요.
DD_roundies 홈페이지에는 IE8은 무지하게 느리다고도 나와있고...


2010/02/09 12:09 2010/02/09 12:09
2010/02/09 12:09
Category dev.

PHP Framework인 CodeIgniterProfiler는 디버깅에 유용한 아래의 정보를 제공해줍니다

  • URI STRING
  • CLASS/METHOD
  • MEMORY USAGE
  • BENCHMARKS
  • GET DATA
  • POST DATA
  • DATABASE QUERY
단, HTML 페이지의 하단에 표시되는 방식이라서 페이지가 깨질 수 있고,
AJAX 요청인 경우 응답 처리를 정상적으로 하지 못할 수가 있습니다.

그래서 디버깅용으로 많이 사용하는 FirePHP에 출력하도록 Profiler를 수정해봤습니다.


[ 첨부 파일 ]

다운로드

FirePHP.php
http://www.firephp.org/DownloadRelease/FirePHPLibrary-FirePHPCore-0.3.1에서 받을 수 있는
FirePHP.class.php와 동일하며 파일명만 바꿨습니다.

Profiler_for_FirePHP.php
CI의 기본 라이브러리인 Profiler를 FirePHP에 맞게 수정한 파일입니다.


[ 설치 방법 ]

(FirePHP 설치방법은 많이 알려져있는 내용이므로 생략합니다.)

1. 첨부한 두개의 파일을 /application/libraries에 복사합니다.
2. CI 기본 라이브러리인 Output.php_display() 메소드 일부분을 아래와 같이 수정합니다.
  • 256~269번째 줄 주석처리 : if ($this->enable_profiler == TRUE) 블럭 내부
  • 주석처리한 곳에 아래 코드 추가

$CI->load->library('Profiler_for_FirePHP', '', 'profiler');
$CI->profiler->run();

※ CI 기본 라이브러리를 수정하지 않을려면 Hook을 이용해서 _display()를 override하는 방법도 있습니다.
아래 링크의 display_override 를 참고하시기 바랍니다.
http://codeigniter.com/user_guide/general/hooks.html


[ Screenshot ]

각 항목마다 테이블로 구성했으며, 항목명을 클릭하면 내용이 나옵니다.






※ PHP4 에서는 Profiler_for_FirePHP.php 의 14번째줄을 아래와 같이 수정해야합니다.

function Profiler_for_FirePHP()

2010/01/13 19:21 2010/01/13 19:21
2010/01/13 19:21
Category dev.
1 2 
전체 (117)
calm (50)
passion (3)
Bicycle (31)
dev. (12)
Mac (3)
music (7)
misc. (11)
Today 38 / Yesterday 35
Total 68785
Support Wikipedia