BLOG main image
분류 전체보기 (63)
(17)
성윤이 (0)
(5)
일상 (10)
낙관주의 (3)
삽질 (9)
웹사업개발팀 (5)
14661 Visitors up to today!
Today 28 hit, Yesterday 19 hit
daisy rss
tistory 티스토리 가입하기!
'2008/06'에 해당되는 글 6건
2008/06/26 09:59
[]
아래와 같은 정기 작업을 위해서 crontab을 이용했다.

* DB와 미디어서버의 상태를 싱크해주기
* 쌓인 이미지 파일 삭제하기

/etc/crontab 을 편집하고 crond를 재시작 했으나 변경내용이 적용되지 않는다.
crontab -e 해서 편집하니 적용된다. tmp/crontab.XXX??? 이렇게 저장된 파일이 편집된다.
재부팅을 해야 /etc/crontab 파일이 적용되는건가?

* * * * * root run-parts /etc/cron.minutely
라고 했더니 실행이 안된다.
구글링하다가 발견한 어떤 예제대로
* * * * * su - root run-parts /etc/cron.minutely
이렇게 했더니 잘 된다.
원래 기본으로 되어있던게 위의 방식인데 원래 안되는걸 저렇게 해놓지는 않았을텐데 왜 안될까?
아무튼 이제 된다.

그리고,
crontab 문제인지, 내가 작성한 스크립트 문제인지 확인을 못해서 좀 해멨는데
/var/log/cron 파일을 살펴보면 crontab에서 실행한 목록을 알수 있다.
이게 커져있다면,
tail -n 20 /var/log/cron 하면 최근로그만 볼 수 있다.
cat /var/log/cron | grep 찾고싶은문자열
하면 내가 확인하고 싶은 커멘드에 대한 실행부분만 찾아 볼 수도 있다.

모든 일이 알고나면 단순한데
일단은 까다롭다...
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://10year.tistory.com/trackback/126
Name
Password
Homepage
Secret
2008/06/18 15:26
Flash Ocx (Shockwave Flash Object)에서 노출한 함수를 addcallback으로 노출시키려고 하면 자바스크립트 오류가 난다. IE에서만.
이름이 겹쳐서 그렇겠다 싶다.

나를 삽질하게 만든 메소드 이름은 'play', 'stop' - - ;

삽질하다 알게된 재미있는 것들.

ExternalInterface.addCallback 하면 아래와 같은 함수가 실행되어 지정한 함수가 셋팅된다.

function __flash__addCallback(instance, name) {
  instance[name] = function () {
    return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
  }
}

CallFunction 은 Flash Ocx의 함수인데, 아마 '<invoke ...> ... </invoke>' 형태의 문자열을 파싱해서 플래시 전역함수를 호출해주는 역할이 아닐가 싶다.
그렇다면 addCallback이 해주는 일은,
1. addCallback으로 전달된 함수를 flash app의 전역함수로 선언해주고...
2. 위의 스크립트를 동적으로 생성, 실행시켜서 Flash Ocx 인스턴스의 함수 속성을 생성시켜준다.

그렇다면, Flash안의 전역함수는 Flash안에서 별도의 코딩이 없이도, CallFunction 함수를 이용해서 스크립트에서 호출할수 있지 않을까?
테스트 해보고 싶지만... 일단 요기까지.
-> 참지 못하고 테스트 해보니 그냥 전역함수는 아닌것 같다. - - ;
-> 검색을 해보니 이런 자료도 있네... 정말 일단 요기까지. - - ; http://flexdocs.kr/docs/flex2/docs/00001971.html

재미로 일하는게 아니니깐두루.... - - a


- 참고
addCallback이 실행될때 Flash ocx가 동적으로 생성하는 스크립트.
위의 스크립트가 제대로 실행되려면 아래 코드가 있어야 한다.

function __flash__arrayToXML(obj) {
    var s = "<array>";
    for (var i=0; i<obj.length; i++) {
        s += "<property id=\"" + i + "\">" + __flash__toXML(obj[i]) + "</property>";
    }
    return s+"</array>";
}
function __flash__argumentsToXML(obj,index) {
    var s = "<arguments>";
    for (var i=index; i<obj.length; i++) {
        s += __flash__toXML(obj[i]);
    }
    return s+"</arguments>";
}
function __flash__objectToXML(obj) {
    var s = "<object>";
    for (var prop in obj) {
        s += "<property id=\"" + prop + "\">" + __flash__toXML(obj[prop]) + "</property>";
    }
    return s+"</object>";
}
function __flash__escapeXML(s) {
    return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
}
function __flash__toXML(value) {
   var type = typeof(value);
    if (type == "string") {
        return "<string>" + __flash__escapeXML(value) + "</string>";
    } else if (type == "undefined") {
        return "<undefined/>";
    } else if (type == "number") {
        return "<number>" + value + "</number>";
    } else if (value == null) {
        return "<null/>";
    } else if (type == "boolean") {
        return value ? "<true/>" : "<false/>";
    } else if (value instanceof Date) {
        return "<date>" + value.getTime() + "</date>";
   } else if (value instanceof Array) {
       return __flash__arrayToXML(value);
   } else if (type == "object") {
       return __flash__objectToXML(value);
   } else {
        return "<null/>"; //???
    }
}
function __flash__addCallback(instance, name) {
  instance[name] = function () {
    return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
  }
}
function __flash__removeCallback(instance, name) {
  instance[name] = null;
}

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://10year.tistory.com/trackback/125
Name
Password
Homepage
Secret
2008/06/17 19:24
Flash 오브젝트가 포함된 div의 visibility style 속성을
Flash 오브젝트내부의 ExternalInterface.call()에 의해 호출된 자바스크립트 함수에서
hidden으로 셋팅하면 그 이후로는 ExternalInterface.addCallback으로 노출한 Flash 프로그램의 함수가 호출되지 않는다.
정의되지 않은 함수라고 나오면서. - - a

buttonclick같은 DOM의 user event에 의해서 호출된 자바스크립트 함수에서 똑같은 동작을 했을때는 문제가 없다. - - ;;;

visibility 스타일 대신에 zIndex를 이용해서 동일한 기능을 구현했더니 문제가 없다.

얼마전에는 FF-Flash 버그가 속을 썩이더니... 오늘은 IE-Flash네... 쩝.
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://10year.tistory.com/trackback/124
Name
Password
Homepage
Secret
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라인쯤

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;
  };
}

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://10year.tistory.com/trackback/122
Name
Password
Homepage
Secret
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에서 디코딩해서 저장할수도 있긴하겠네...
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://10year.tistory.com/trackback/120
Name
Password
Homepage
Secret
2008/06/10 10:55
[]
플래시에서 제공하는 설정창을 이용한다.
Security.showSettings(SecurityPanel.CAMERA);

카메라가 변경된 이벤트를 받는 방법을 알수가 없다.
타이머 돌렸다.
그리고 디바이스설정창을 띄운 MovieClip의 MouseOver 이벤트에서 타이머를 껏다.
뭔가 깔끔한 방법이 있을듯한데... 익숙한 잔머리로 해결. - - ;

video.attachCamera()를 어떻게 예쁘게 할까 고민하다가
무심코 실행시켜보니 자동으로 video에 attach된 카메라가 바뀌어 있다.

그런데 오디오는 설정창에서 변경했는데
Microphone.getMicrophone() 해봐도 변경이 안되어있다.
어렵다. - -

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://10year.tistory.com/trackback/119
Name
Password
Homepage
Secret
prev"" #1 next