물리2008. 6. 9. 13:38
힘(Force)의 정의
물체에 작용하여 물체의 운동 상태나 모양을 변화시키는 원인이다.
가령 굴러가는 공을 굴러가는 방향을 차면 가속도가 증가하여 더 빨리 굴러갈 것이고 반대방향을 차면 운동방향이 바뀌게 된다. 또는 고무공을 주먹으로 힘것 쥐면 모양이 변하는 것 역시 힘을 받아서 생기는 것이다.

1) 힘의 3요소 : 힘의크기 , 방향 , 작용점
2) 힘의 표시 : 그림과 같이 화살표를 사용한다.
사용자 삽입 이미지
3 힘의 단위 : 질량 1kg인 추의 무게(중력)를 힘의 단위로 사용한다.
1kgf = 9.8N

힘의 합성
한개의 물체에 여러 힘이 작용할 때 이 여러 힘을 하나의 힘으로 구하는 과정을 힘의 합성이라고 한다.
합성된 힘을 합력이라고 한다.
1) 방향이 같은 두 힘의 합성 : 두 힘의 크기를 더하여 합력을 구한다. 방향은 합력의 방향과 같다.
2) 방향이 반대인 두 힘의 합성 : 큰힘에서 작은힘을 빼서 합력을 구한다. 방향은 큰힘의 방향과 같다.
3) 나란하지 않은 힘의 합성
사용자 삽입 이미지
- 평행사변형법 : 대각선 방향이 합력 , 대각선 길이가 합력의 크기
- 삼각형 법 : 한 힘의 머리에 나머지 힘의 작용점을 일치 시킨다.


힘의 평형
물체에 여러힘이 작용하여 힘들의 합이 0이 되어 물체가 정지하거나, 운동 상태에 변화가 없을 때 힘들은 서로 평형을 이룬다.
사용자 삽입 이미지






Posted by 버터백통

앞에서 크로스 스크립팅에 대한 보안에 대하여 간략히 짚어 보았는데 속성과 메서드 정도만 다시 정리하여보자.
보안 이슈가 발생하는 상황은 그림과 같이 서로 다른 도메인에서 서로간 통신시 발생한다.

사용자 삽입 이미지

그림 처럼 다른 도메인의 무비가 한 무비를 불러들여 자신에게 포함한다. 포함한 무비 main.swf가 content.swf의 메서드나 속성을 제어하려고 하면 포함당한 무비입장에서는 '과연 자신의 정보를 보여주어야 하느냐?'에 대한 이슈가 발생한다. 만약 달라는대로 다 준다면...보안에 헛점이 많은 프로그램이였을 것이다. 어찌되었건 불려진 무비입장에서는 개발 당시 특정 도메인에 관해서는 자신의 정보를 주어도 좋다는 허락하에 속성이나 메서드등을 제공하게 된다.
개발시 content.swf에 Security.allowDomain("aaa.com");와 같이 aaa.com에 대하여 보안을 허용한다.

[ 속성 ]
exactSettings : Boolean

[static]
카메라 및 마이크 권한, 저장소 할당량 및 영구 공유 객체 저장에 대한 설정을 비롯한 특정 Flash Player 설정에 사용할 도메인을 선택하는 방법을 결정합니다.

sandboxType : String
[static] [read-only]
호출하는 SWF 파일이 작동 중인 보안 샌드박스의 유형을 나타냅니다.


[ 메서드 ]
allowDomain(... domains):void
[static]
지정된 도메인의 SWF 파일과 HTML 파일이 allowDomain() 호출을 포함하는 SWF 파일의 객체 및 변수에 액세스할 수 있도록 합니다. 단 도메인이 IP와 매핑되더라도 IP주소를 넣었을 때 허용되지 않는 경우가 있다. (여러개의 서버를 사용하여 한개의 도메인을 관리할 경우...등) 그때는 아래의 allowInsecureDomain를 사용한다. 가만히 보면 배열이 파라미터의 값이므로 여러개의 사이트를 등록할 수 있다.

allowInsecureDomain(... domains):void
[static]
지정된 도메인의 SWF 파일과 HTML 파일이, 호출하는 SWF 파일(HTTPS 프로토콜을 통해 호스팅되는)의 객체 및 변수에 액세스할 수 있도록 합니다. 이 보안 모드는 보안단계가 조금 취약할 수 있다.

loadPolicyFile(URL:String):void
[static]
 url 매개 변수에 지정된 위치에서 크로스 도메인 정책 파일을 로드합니다. XML파일명은 crossdomain.xml로 만들어 줍니다. 과거에는 사이트 루트 폴더에 같이있어야 했지만 지금은 경로를 통해 xml 파일을 읽어 올 수 있다.
Security.loadPolicyFile("http://www.example.com/sub/dir/crossdomain.xml");

* crossdomain 정책
<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*" to-ports="507" />
    <allow-access-from domain="*.foo.com" to-ports="507,516" />
    <allow-access-from domain="*.bar.com" to-ports="516-523" />
    <allow-access-from domain="www.foo.com" to-ports="507,516-523" />
    <allow-access-from domain="www.bar.com" to-ports="*" />
</cross-domain-policy>



showSettings(panel:String = "default"):void
[static]
Flash Player에서 [보안 설정] 다이얼로그 패널을 열어준다.
첫번째 파라미터의 값은 SecurityPanel의 static속성으로 정의 되어있다.
가령 사용자가 로컬에 저장되는 정보를 설정하려 할 때 아래와 같이 코딩한고
Security.showSettings(SecurityPanel.LOCAL_STORAGE);

사용자 삽입 이미지
마이크의 음량을 조절하고 싶을 때는 아래와 같이 코딩한다.
Security.showSettings(SecurityPanel.MICROPHONE);
사용자 삽입 이미지

[ SecurityPanel의 상수 ]
CAMERA : String = "camera"
[static]
Security.showSettings()에 전달하면 Flash Player 설정에 [카메라] 패널이 표시됩니다.

DEFAULT : String = "default"
[static]
Security.showSettings()에 전달하면 사용자가 Flash Player 설정을 마지막으로 닫을 때 열려 있던 패널이 표시됩니다.

LOCAL_STORAGE : String = "localStorage"
[static]
Security.showSettings()에 전달하면 Flash Player 설정에 [로컬 저장 설정] 패널이 표시됩니다.

MICROPHONE : String = "microphone"
[static]
Security.showSettings()에 전달하면 Flash Player 설정에 [마이크] 패널이 표시됩니다.

PRIVACY : String = "privacy"
[static] Security.showSettings()에 전달하면 Flash Player 설정에 [개인 정보 설정] 패널이 표시됩니다.

SETTINGS_MANAGER : String = "settingsManager"
[static] Security.showSettings()에 전달하면 [설정 관리자]가 별도의 브라우저 윈도우에 표시됩니다.





Posted by 버터백통

플래시에는 Stage라고 하는 플레이어 가장 바깥에 감쌓여 있는 계층이 있다.
바로 이곳이 마우스 커서와 제일 먼저 닿는 부분이기도 하고 플레이어의 view패널 영역 전부를 차지하고 있는 유일무이한 영역이자 객체입니다.

그리고 SWF당 한개의 Stage가 주어지고 이를 통하여 작업한 객체를 addChild하거나 속성 등을 제어할 수 있습니다. (아래의 스테이지 보안 참고)

[ 속성 : 도움말 참조 ]
align : String

Flash Player 또는 브라우저에서 스테이지 정렬을 지정하는 StageAlign 클래스 값입니다.

세로 정렬 가로 쓰기
       StageAlign.TOP    위쪽    중앙
       StageAlign.BOTTOM    아래쪽    중앙
       StageAlign.LEFT    중앙    왼쪽
       StageAlign.RIGHT    중앙    오른쪽
       StageAlign.TOP_LEFT    위쪽    왼쪽
       StageAlign.TOP_RIGHT    위쪽    오른쪽
       StageAlign.BOTTOM_LEFT    아래쪽    왼쪽
       StageAlign.BOTTOM_RIGHT    아래쪽    오른쪽



 displayState : String
사용할 표시 상태를 지정하는 StageDisplayState 클래스의 값입니다.
StageDisplayState.FULL_SCREEN : 플레이어 전체 화면에 걸쳐 Stage를 확장하도록 설정
StageDisplayState.NORMAL  : 플레이어를 표준 Stage 표시 모드로 되돌리도록 설정

focus : InteractiveObject
키보드 포커스가 있는 대화형 객체입니다. 포커스가 설정되어 있지 않거나 포커스 객체가 호출하는 객체에서 액세스할 수 없는 보안 샌드박스에 속한 경우에는 null입니다.
 stage.focus = 대상입력텍스트필드

frameRate : Number
스테이지의 프레임 속도를 확인하고 설정합니다.
stage.frameRate = 60

height : Number
표시 객체의 높이를 픽셀 단위로 나타냅니다.
단 값의 입력은 불가능 하고 값의 참조만 가능하다.

width : Number
표시 객체의 폭을 픽셀 단위로 나타냅니다.
* 위의 크기에 관련된 값은 무비의 크기가 아닌 무비에서 객체들이 있을 때 그 객체들의 폭의 합과 높이의 합이 반환된다. 가령 폭 500인 무비에 아무 객체도 없다면 stage.width는 0을 반환하고 폭이 100인 객체가 화면에 한개 있다면 stage.width는 100을 반환한다.


mouseChildren : Boolean
해당 객체의 자식에서 마우스 기능을 사용할 수 있는지 여부를 결정합니다.
복잡한 구조안에서 버튼이 중복되거나 마우스 사용 중지하고자 할 때 유용하다.
객체.mouseChildren = false 하면 해당 객체에 포함된 모든 계층의 마우스가 비활성화된다.
 
numChildren : int
[read-only]
해당 객체에 addChild()/addChildAt()등으로 붙어있는 자식 수를 반환합니다.
   
quality : String
Flash Player에서 사용할 렌더링 품질을 지정하는 StageQuality 클래스 값입니다.

StageQuality.LOW : 낮은 렌더링 품질입니다.
그래픽이 앤티앨리어싱되지 않고 비트맵이 다듬어지지 않습니다.

StageQuality.MEDIUM : 중간 렌더링 품질입니다.
2 x 2 픽셀 격자를 사용하여 그래픽이 앤티앨리어싱되고 비트맵이 매끄럽게 다듬어지지 않습니다.
이 설정은 텍스트가 포함되지 않은 무비에 적합합니다.

StageQuality.HIGH : 높은 렌더링 품질입니다.
4 x 4 픽셀 격자를 사용하여 그래픽이 앤티앨리어싱되고 무비가 정적일 때 비트맵이 매끄럽게 다듬어집니다. Flash Player에서 사용하는 기본 렌더링 품질 설정입니다.

StageQuality.BEST : 가장 높은 렌더링 품질입니다.
4 x 4픽셀 격자를 사용하여 그래픽이 앤티앨리어싱되고 비트맵은 항상 매끄럽게 처리됩니다.

scaleMode : String
사용할 크기 조절 모드를 지정하는 StageScaleMode 클래스 값입니다.

Stage
ScaleMode
.EXACT_FIT
 : 응용 프로그램의 원래 종횡비를 유지하면서 왜곡 없이 전체 Flash 응용 프로그램을 지정된 영역에 표시합니다. 응용 프로그램의 두 면에 테두리가 표시될 수 있습니다.

StageScaleMode.SHOW_ALL : 원래 종횡비를 유지하지 않고 전체 Flash 응용 프로그램을 지정된 영역에 표시합니다. 내용이 찌그러질 수 있습니다.

StageScaleMode.NO_BORDER : 응용 프로그램의 원래 종횡비를 유지하면서 왜곡 없이(일부는 잘릴 수 있음) 전체 Flash 응용 프로그램이 지정된 영역을 채웁니다.

StageScaleMode.NO_SCALE : 플레이어 창의 크기가 변경되는 경우에도 전체 Flash 응용 프로그램이 변경되지 않고 유지되도록 고정합니다. 플레이어 윈도우가 내용보다 작으면 내용이 잘릴 수 있습니다.



showDefaultContextMenu : Boolean
Flash Player 컨텍스트 메뉴에서 기본 항목의 표시 또는 숨김을 지정합니다.

stageFocusRect : Boolean
포커스를 받은 객체의 경계선을 광선으로 표시할지 여부를 지정합니다.

stageHeight : int
Stage의 현재 높이를 픽셀 단위로 지정합니다.

stageWidth : int
Stage의 현재 폭을 픽셀 단위로 지정합니다.

tabChildren : Boolean
객체의 자식에서 탭 기능을 사용할 수 있는지 여부를 결정합니다.

textSnapshot : TextSnapshot
[read-only] 이 DisplayObjectContainer 인스턴스에 대한 TextSnapshot 객체를 반환합니다.

[ 스테이지 이벤트 테스트 ]
function run() {
 stage.scaleMode = StageScaleMode.NO_SCALE;
 stage.align = StageAlign.BOTTOM_RIGHT;
 stage.frameRate = 60
 stage.addEventListener(Event.ACTIVATE, activateHandler);
 stage.addEventListener(Event.RESIZE, resizeHandler);
 stage.addEventListener(MouseEvent.CLICK, clickHandler);
 stage.addEventListener(Event.ENTER_FRAME, mouseChk)
}

function activateHandler(event:Event):void {
 trace("활성화된 이벤트: " + event.type);
}

function resizeHandler(event:Event):void {
 trace("크기 재설정 이벤트: " + event.type);
 sizeinfo.text = "무비폭: " + stage.stageWidth + " 무비높이: " + stage.stageHeight;
}
function clickHandler(event:MouseEvent):void {
 selectInfo.text = event.target + "를 클릭하였다";
}
function mouseChk(event:Event):void {
 xinfo.text = String( stage.mouseX )
 yinfo.text = String( stage.mouseY )
}
run();

이 코드는 stage객체에 이벤트를 걸어서 스테이지 활성화 될때나 크기가 변화할 때
resize이벤트등 stage에 관한 테스트입니다.




위의 파일은 다운받아  플래시 플레이어에서 크기를 줄이거나 늘려 보세요~





[ 참고 : 크로스 스크립팅에 대한 스테이지 보안 ]
경우에 따라서 이 Stage에 접근하려는 불려들여진 다른 SWF또는 불러온 SWF에서 불러들인 SWF의 메서드를 호출(크로스 스크립팅)하려면 Security.allowDomain()에서 보안샌드박스를 맞추어 주어야 한다.
가령 이미 Stage에 불려진 A.swf에서 B.swf를 불러들여 B의 run()이라는 메서드를 호출할 때 B.swf에는 A에 관하여 Security.allowDomain(A.swf가 있는 도메인) 허용해야 합니다.


스테이지 보안 항목은 아래와 같다.

                       속성                                   

              메서드            

align

         showDefaultContextMenu

       addChild()

displayState

     stageFocusRect

       addChildAt()

frameRate

     stageHeight

       addEventListener()

height

     stageWidth

       dispatchEvent()

mouseChildren

         tabChildren

       hasEventListener()

numChildren

         textSnapshot

       setChildIndex()

quality

         width

       willTrigger()

scaleMode





Posted by 버터백통