'삽질'에 해당되는 글 9건
2008/06/12 00:21
[삽질]
Flash object가 포함된 html element에 scriptaculous를 써서 Drag&Drop를 넣었는데
처음 드래그드롭에서 flash object가 reload되는 문제가 발생...
scriptaculous drap drop 코드 탐색 ->
scriptaculous effect 코드 탐색 ->
prototype setOpacity 탐색 한 결과
FireFox에서 element.style.opacity 를 셋팅하면 flash object가 reload 된다는 사실 발견. - - ;
일단 prototype의 코드를 수정해서 해결했다.
prototype은 건드리지 않고 깔끔하게 내 코드에서 해결해야 하겠지만,
오늘은 너무 덥고 잠도 와서 여기까지만. - -
원본 : prototype.js의 1756라인쯤
수정본
처음 드래그드롭에서 flash object가 reload되는 문제가 발생...
scriptaculous drap drop 코드 탐색 ->
scriptaculous effect 코드 탐색 ->
prototype setOpacity 탐색 한 결과
FireFox에서 element.style.opacity 를 셋팅하면 flash object가 reload 된다는 사실 발견. - - ;
일단 prototype의 코드를 수정해서 해결했다.
prototype은 건드리지 않고 깔끔하게 내 코드에서 해결해야 하겠지만,
오늘은 너무 덥고 잠도 와서 여기까지만. - -
원본 : prototype.js의 1756라인쯤
else if (Prototype.Browser.Gecko) {
Element.Methods.setOpacity = function(element, value) {
element = $(element);
element.style.opacity = (value == 1) ? 0.999999 :
(value === '') ? '' : (value < 0.00001) ? 0 : value;
return element;
};
}
수정본
else if (Prototype.Browser.Gecko) {
Element.Methods.setOpacity = function(element, value) {
element = $(element);
//element.style.opacity = (value == 1) ? 0.999999 :
// (value === '') ? '' : (value < 0.00001) ? 0 : value;
//
return element;
};
}
Trackback Address :: http://10year.tistory.com/trackback/122
2008/06/11 14:55
[삽질]
http://www.adobe.com/kr/devnet/flashplayer/articles/fplayer9_security_print.html
소켓을 이용해서 http multipart upload를 구현하던중
로컬테스트에서는 업로드가 잘 되는데, 서버에 올려서 업로드가 안되는 문제가 생겨서 좀 헤맷다.
에러의 종류는 SecurityError.
당연히 보안정책을 잘 살펴서 미리미리 숙지하고 구현을 하는게 정석이겠지만,
워낙 일관성이 없고 뒤죽박죽이라는 이유로 (남들이 그러길래 - - ;)
문제 생기면 보지 했는데
역시 문제가 생겼고... 괜한 시간을 낭비했다.
정리하자면,
Socket을 이용한 통신을 할려면,
사용하는 동일한 포트에서 <policy-file-request>라는 요청에 대해서 xml로 된 정책내용을 보내줘야 한다.
주의점은 <policy-file-request>이라는 요청이 http도 뭐도 아닌 날 요청이란점.
그냥 소켓열고 무작정 <policy-file-request> 요 스트링이 날라온다. - -
동일한 포트에서 해당 응답이 어려울 경우 843 포트로 응답을 해도 된다.
843포트는 unix의 관례로 보면 root권한이 있을 경우에만 listen할 수 있으므로
나름 보안상 의미있는 구조라고 문서에 나와있다.
암튼 그렇다.
- 의문점.
+ 날 Socket을 안쓰고, XMLSocket등 다른 객체를 가지고 Flash App에서 직접 만든 바이너리를 업로드할 방법은 없을까?
+ 업로드할 바이너리를 Base64인코딩해서 XMLSocket에서 Post하고 PHP에서 디코딩해서 저장할수도 있긴하겠네...
소켓을 이용해서 http multipart upload를 구현하던중
로컬테스트에서는 업로드가 잘 되는데, 서버에 올려서 업로드가 안되는 문제가 생겨서 좀 헤맷다.
에러의 종류는 SecurityError.
당연히 보안정책을 잘 살펴서 미리미리 숙지하고 구현을 하는게 정석이겠지만,
워낙 일관성이 없고 뒤죽박죽이라는 이유로 (남들이 그러길래 - - ;)
문제 생기면 보지 했는데
역시 문제가 생겼고... 괜한 시간을 낭비했다.
정리하자면,
Socket을 이용한 통신을 할려면,
사용하는 동일한 포트에서 <policy-file-request>라는 요청에 대해서 xml로 된 정책내용을 보내줘야 한다.
주의점은 <policy-file-request>이라는 요청이 http도 뭐도 아닌 날 요청이란점.
그냥 소켓열고 무작정 <policy-file-request> 요 스트링이 날라온다. - -
동일한 포트에서 해당 응답이 어려울 경우 843 포트로 응답을 해도 된다.
843포트는 unix의 관례로 보면 root권한이 있을 경우에만 listen할 수 있으므로
나름 보안상 의미있는 구조라고 문서에 나와있다.
암튼 그렇다.
- 의문점.
+ 날 Socket을 안쓰고, XMLSocket등 다른 객체를 가지고 Flash App에서 직접 만든 바이너리를 업로드할 방법은 없을까?
+ 업로드할 바이너리를 Base64인코딩해서 XMLSocket에서 Post하고 PHP에서 디코딩해서 저장할수도 있긴하겠네...
Trackback Address :: http://10year.tistory.com/trackback/120
2008/03/11 13:43
[삽질]
Connection: Keep-Alive 라고 명시된 연결에서
서버가 연결을 끊었다. (shutdown/close)
Flash NetStream.play()가 호출됨에 따라 FF에서 http request를 보낸다.
그런데, 이미 끊어진(서버에서 끊어버린) 소켓에다가 request data를 뿌린후
브라우저가 죽어버린다.
IE는 동일한 서버에서 동일한 동작을 할때 연결이 끊어진걸 잘 감지하고,
새로운 연결에다가 데이터를 정상적으로 잘 보낸다.
무슨 문제일까? - -
서버가 연결을 끊었다. (shutdown/close)
Flash NetStream.play()가 호출됨에 따라 FF에서 http request를 보낸다.
그런데, 이미 끊어진(서버에서 끊어버린) 소켓에다가 request data를 뿌린후
브라우저가 죽어버린다.
IE는 동일한 서버에서 동일한 동작을 할때 연결이 끊어진걸 잘 감지하고,
새로운 연결에다가 데이터를 정상적으로 잘 보낸다.
무슨 문제일까? - -
Trackback Address :: http://10year.tistory.com/trackback/104
2008/02/28 23:24
[삽질]
플래시플레이어의 NetStream과 Video오브젝트를 이용해서 재생되는 동영상을
bitmap으로 추출하여(Bitmap, BitmapData이용), map 형식으로 작은 영역에 뿌려주는걸 구현중이다.
큰 영상을 원본사이즈로 보여줄때 재생영역에 영상의 일부만 보이기 때문에
전체 영상의 맵을 보여주고, 영역을 드래그해서 재생영역에 보여질 부분을 선택할 수 있게 하기 위해서.
그런데 bitmap.draw(video); 를 통해서 뿌려진 동영상의 크기, 가로세로비가 엉망이다.
크기를 맞추려고 아래와 같이 하였다.
1. BitmapData의 크기를 소스영상의 크기와 일치시킨다.
2. BitmapData를 디스플레이할 영역인 Bitmap의 크기를 보여주려는 크기로 만든다.
이때, BitmapData와 Bitmap의 가로세로비는 똑같다.
그런데 Bitmap영역에 보여지는 동영상이 찌그러져 보인다.
희안하게 찌그러진 결과 영상의 가로세로비가 항상 동일하다.
크기가 다른 동영상을 넣어도 항상 같은 가로세로비로 보여진다.
저녘내내 헤매다 해결책을 찾았다.
Video 오브젝트를 만들때, 영상의 사이즈와 같은 크기로 만들면 Bitmap영역에 의도한대로 뿌려진다.
원인은 Video 오브젝트의 생성당시 크기가 지정이 되는데,
영상을 재생할때 영상의 크기에 맞게 Video오브젝트를 조절하더라도
Video 오브젝트 크기값자체가 변하는게 아니고, scale을 변경시켜서 보여준다는거다.
해서 Video를 이용해서 Bitmap을 Draw하면 항상 Video의 초기크기를 기준으로 비트맵사이즈가 나온다.
그래서 동영상의 실제크기와 상관없이 동일한 가로세로비로 그려지는거다.
프로그래스바 구현할때 클릭위치를 구할때 비슷한 문제로 한참을 고생했는데,
백터기반의 툴이라 그렇게 구현되어있어야 하는지 모르겠지만 정말 헷갈린다.
크기를 바꾸면, width, height 는 바뀐값으로 반환하면서
click position을 참조하면 원래 크기 기준으로 반환을 한다. - -
음. 원인은 찾았는데...
소스를 고치려니 손댈데가 너무 많다.
오늘은 이정도로 정리하고 내일 해야겠다.
....
아래와 같이 Video의 초기 크기와 BitmapData의 초기 크기를 일치시키면 간단히 해결이 된다.
var bitmap = new BitmapData(video.width/video.scaleX, video.height/video.scaleY);
bitmap으로 추출하여(Bitmap, BitmapData이용), map 형식으로 작은 영역에 뿌려주는걸 구현중이다.
큰 영상을 원본사이즈로 보여줄때 재생영역에 영상의 일부만 보이기 때문에
전체 영상의 맵을 보여주고, 영역을 드래그해서 재생영역에 보여질 부분을 선택할 수 있게 하기 위해서.
그런데 bitmap.draw(video); 를 통해서 뿌려진 동영상의 크기, 가로세로비가 엉망이다.
크기를 맞추려고 아래와 같이 하였다.
1. BitmapData의 크기를 소스영상의 크기와 일치시킨다.
2. BitmapData를 디스플레이할 영역인 Bitmap의 크기를 보여주려는 크기로 만든다.
이때, BitmapData와 Bitmap의 가로세로비는 똑같다.
그런데 Bitmap영역에 보여지는 동영상이 찌그러져 보인다.
희안하게 찌그러진 결과 영상의 가로세로비가 항상 동일하다.
크기가 다른 동영상을 넣어도 항상 같은 가로세로비로 보여진다.
저녘내내 헤매다 해결책을 찾았다.
Video 오브젝트를 만들때, 영상의 사이즈와 같은 크기로 만들면 Bitmap영역에 의도한대로 뿌려진다.
원인은 Video 오브젝트의 생성당시 크기가 지정이 되는데,
영상을 재생할때 영상의 크기에 맞게 Video오브젝트를 조절하더라도
Video 오브젝트 크기값자체가 변하는게 아니고, scale을 변경시켜서 보여준다는거다.
해서 Video를 이용해서 Bitmap을 Draw하면 항상 Video의 초기크기를 기준으로 비트맵사이즈가 나온다.
그래서 동영상의 실제크기와 상관없이 동일한 가로세로비로 그려지는거다.
프로그래스바 구현할때 클릭위치를 구할때 비슷한 문제로 한참을 고생했는데,
백터기반의 툴이라 그렇게 구현되어있어야 하는지 모르겠지만 정말 헷갈린다.
크기를 바꾸면, width, height 는 바뀐값으로 반환하면서
click position을 참조하면 원래 크기 기준으로 반환을 한다. - -
음. 원인은 찾았는데...
소스를 고치려니 손댈데가 너무 많다.
오늘은 이정도로 정리하고 내일 해야겠다.
....
아래와 같이 Video의 초기 크기와 BitmapData의 초기 크기를 일치시키면 간단히 해결이 된다.
var bitmap = new BitmapData(video.width/video.scaleX, video.height/video.scaleY);
Trackback Address :: http://10year.tistory.com/trackback/102
2008/02/04 20:05
[삽질]
php-pgsql (rpm)을 깔아야 한다.
이걸 깔면 /etc/php.d/ 에 pgsql.ini 이 생기고, 여기서 pgsql.so를 로드한다.
내게 아직(어쩌면 영원히) 리눅스 서버는 미로다. - -
이걸 깔면 /etc/php.d/ 에 pgsql.ini 이 생기고, 여기서 pgsql.so를 로드한다.
내게 아직(어쩌면 영원히) 리눅스 서버는 미로다. - -
Trackback Address :: http://10year.tistory.com/trackback/98
2008/02/01 19:14
[삽질]
AS2와 AS3은 껍데기는 비슷하지만,
그 기반구조는 완전 다른 종족인듯하다.
괴롭다. - -
[ActionScript2 코드]
stage.createEmptyMovieClip("mc_sound", stage.getNextHighestDepth());
mc_sound = stage.mc_sound;
mc_sound.attachAudio(ns);
sound = new Sound(mc_sound);
sound.setVolume(vol);
[ActionScript3 코드]
ns.soundTransform.volume = vol;
Trackback Address :: http://10year.tistory.com/trackback/97
2008/01/24 12:57
[삽질]
어쩔수 없이 서버를 옮기다보니 php버전이 올라가버렸다.
옮겨간 서버가 이미 php5로 웹서비스중인 서버인 관계로.
옮겨놓고 대충(- - )테스트를 했더니 잘 돌아가서 그런줄 알았더니...
결국 숨어있던 문제가 터진다.
간단하고, 기초적인 문제.
옮겨간 서버가 이미 php5로 웹서비스중인 서버인 관계로.
옮겨놓고 대충(- - )테스트를 했더니 잘 돌아가서 그런줄 알았더니...
결국 숨어있던 문제가 터진다.
간단하고, 기초적인 문제.
$HTTP_GET_VARS &= $_GET;
$HTTP_POST_VARS &= $_POST;
Trackback Address :: http://10year.tistory.com/trackback/95
2007/12/12 19:23
[삽질]
간단 삽질 기록
1. php에서 mail()함수로 메일을 보낼때 MAIL FROM: 인자를 apache@localhost.localdomain 이 안되게 하는 방법.-> php.ini 를 아래와 같이 수정.
sendmail_path = "/usr/sbin/sendmail -t -i -fpostmaster@domain.com"
2. 일부의 메일서버로만 발송되지 않을때
+ telnet으로 직접 SMTP 커멘드 쳐가면서 테스트 할것, sendmail로그에 나오지 않는 많은 정보가 나옴.
다음과 엠팔이 내뱉은 아래와 같은 정보가 sendmail에서는 service unablable 이라고 단순히 처리됨. - -
나의 경우 관리하는 서버의 IP가 '아주 오래전'에(한메일 담당자의 표현) 스팸으로 등록되어 있었다고함.
전화번호가 잘 공개되지 않지만, 구글링하다보면 재수좋게 전화번호 건질수 있음.
없을 경우 사이트에 공개된 이메일또는 고객센터를 이용해야 하지만, 언제 처리될지 기약이 없어 마이 답답함.
3. sendmail 설정은 너무 어려움. - - +
m4 sendmail.mc > sendmail.cf 실행시 include 파일이 없다고 오류를 뱉으면
yum install sendmail-cf 해줘서 sendmail-cf를 다시 깔아주면 된다.
1. php에서 mail()함수로 메일을 보낼때 MAIL FROM: 인자를 apache@localhost.localdomain 이 안되게 하는 방법.-> php.ini 를 아래와 같이 수정.
sendmail_path = "/usr/sbin/sendmail -t -i -fpostmaster@domain.com"
2. 일부의 메일서버로만 발송되지 않을때
+ telnet으로 직접 SMTP 커멘드 쳐가면서 테스트 할것, sendmail로그에 나오지 않는 많은 정보가 나옴.
다음과 엠팔이 내뱉은 아래와 같은 정보가 sendmail에서는 service unablable 이라고 단순히 처리됨. - -
521 5.7.1 xprx4.empal.com not accept your message (Your IP address 211.49.98.20has been registered in SPAM Black IP List. If you are not a SPAMMER, please contact empasregisterip@skcomms.co.kr with this return message. This session will be closed)+ 괜히 나로부터 원인을 찾지 말고, 포탈 담당자에게 최대한 빨리 연락해볼것.
554 5.7.1 DCXR 211.49.98.20: Your IP address is blocked by anti-spam system.
나의 경우 관리하는 서버의 IP가 '아주 오래전'에(한메일 담당자의 표현) 스팸으로 등록되어 있었다고함.
전화번호가 잘 공개되지 않지만, 구글링하다보면 재수좋게 전화번호 건질수 있음.
없을 경우 사이트에 공개된 이메일또는 고객센터를 이용해야 하지만, 언제 처리될지 기약이 없어 마이 답답함.
3. sendmail 설정은 너무 어려움. - - +
m4 sendmail.mc > sendmail.cf 실행시 include 파일이 없다고 오류를 뱉으면
yum install sendmail-cf 해줘서 sendmail-cf를 다시 깔아주면 된다.
Trackback Address :: http://10year.tistory.com/trackback/82
2007/11/23 17:05
[삽질]
set_error_handler 함수를 이용해서 사용자정의 오류처리함수를 셋팅할 수 있다.
하지만, set_error_handler 함수를 이용해서 사용자정의 오류처리함수를 셋팅하더라도 처리할 수 있는 오류는 제한적이다. (이 제약사항이 문서화가 언제되었는지 모르겠지만, 2006년 9월에 릴리즈된 한글 메뉴얼에는 누락되어 있다. 그래서 한참 헤맸다. - - )
위에 명시된 타입의 오류는 복구될수 없는(unrecoverable) 오류 즉, 이미 php 애플리케이션을 불안정한(unstable) 상태로 만들어 버린 오류이기 때문에 프로그래머가 작성한 php 애플리케이션을 즉시 멈춰버린다는 것이다.
그런데 문제는 실제 코딩상의 실수로 발생될 수 있는 많은 오류가 이 복구될수 없는 오류에 속한다는 것이다. 내가 자주 내는 오류중의 하나인 'call undefined function', 'Call to a member function ???() on a non-object ' 등이 대표적인 예이다.
왜 이런 오류가 복구될수 없는 건지 궁금하기도 하고 답답하기도 하지만 - 내가 모르는 고수들의 세계가 있겠지하고 생각하면 마음이 좀 편해진다. ;;; - 어쩔 수 없이 이런 경우에는 php의 기본 오류처리를 이용해야 한다. php 셋팅중 error_prepend_string, error_append_string 항목을 아래와 같이 이용하고, error.php페이지에서 적절히 오류를 처리하면 된다. 물론 페이지가 바뀌어 버려 오류로그 등에 한계가 있긴하지만, 아쉬운데로 쓸만하다.
[사족]
별로 복잡할 내용은 없는데, 최신버전이 아닌 메뉴얼을 믿고 잘못된 전제에서 출발하다보니 좀 헤맸다. 한글로 된 메뉴얼은 파라미터 확인에만 사용하고, 함수 사용법이 제대로 궁금할땐 꼭 공식사이트 메뉴얼을 참조하는게 좋겠다. 괜히 네이버검색에서 헤매는 것보다 온라인 메뉴얼 밑에 달린 코멘트를 참조하는게 오히려 많은 아이디어와 깔끔한 예제코드를 얻을수 있다.
[참조URL]
http://www.php.net/manual/kr/function.set-error-handler.php
http://marc.info/?l=php-internals&m=97673386418430&w=2
http://72.14.235.104/search?q=cache:hHqCODHfDjoJ:marc.info/%3Fl%3Dphp-dev%26m%3D97673386418430%26w%3D2+call+to+undefined+function+set_error_handler&hl=ko&ct=clnk&cd=5&gl=kr
하지만, set_error_handler 함수를 이용해서 사용자정의 오류처리함수를 셋팅하더라도 처리할 수 있는 오류는 제한적이다. (이 제약사항이 문서화가 언제되었는지 모르겠지만, 2006년 9월에 릴리즈된 한글 메뉴얼에는 누락되어 있다. 그래서 한참 헤맸다. - - )
참고: The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and E_STRICT.
위에 명시된 타입의 오류는 복구될수 없는(unrecoverable) 오류 즉, 이미 php 애플리케이션을 불안정한(unstable) 상태로 만들어 버린 오류이기 때문에 프로그래머가 작성한 php 애플리케이션을 즉시 멈춰버린다는 것이다.
그런데 문제는 실제 코딩상의 실수로 발생될 수 있는 많은 오류가 이 복구될수 없는 오류에 속한다는 것이다. 내가 자주 내는 오류중의 하나인 'call undefined function', 'Call to a member function ???() on a non-object ' 등이 대표적인 예이다.
왜 이런 오류가 복구될수 없는 건지 궁금하기도 하고 답답하기도 하지만 - 내가 모르는 고수들의 세계가 있겠지하고 생각하면 마음이 좀 편해진다. ;;; - 어쩔 수 없이 이런 경우에는 php의 기본 오류처리를 이용해야 한다. php 셋팅중 error_prepend_string, error_append_string 항목을 아래와 같이 이용하고, error.php페이지에서 적절히 오류를 처리하면 된다. 물론 페이지가 바뀌어 버려 오류로그 등에 한계가 있긴하지만, 아쉬운데로 쓸만하다.
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
ini_set('error_prepend_string','<html><head><META http-equiv="refresh" content="0;URL=/error.php?url='.$url.'&msg=');
ini_set('error_append_string','"></head></html>');
[사족]
별로 복잡할 내용은 없는데, 최신버전이 아닌 메뉴얼을 믿고 잘못된 전제에서 출발하다보니 좀 헤맸다. 한글로 된 메뉴얼은 파라미터 확인에만 사용하고, 함수 사용법이 제대로 궁금할땐 꼭 공식사이트 메뉴얼을 참조하는게 좋겠다. 괜히 네이버검색에서 헤매는 것보다 온라인 메뉴얼 밑에 달린 코멘트를 참조하는게 오히려 많은 아이디어와 깔끔한 예제코드를 얻을수 있다.
[참조URL]
http://www.php.net/manual/kr/function.set-error-handler.php
http://marc.info/?l=php-internals&m=97673386418430&w=2
http://72.14.235.104/search?q=cache:hHqCODHfDjoJ:marc.info/%3Fl%3Dphp-dev%26m%3D97673386418430%26w%3D2+call+to+undefined+function+set_error_handler&hl=ko&ct=clnk&cd=5&gl=kr
Trackback Address :: http://10year.tistory.com/trackback/77




이올린에 북마크하기
이올린에 추천하기