Adobe MAX 2006 Korea Conference를 다녀와서...

Miscellaneous/Story 2007. 2. 21. 10:57
Adobe MAX 2006 Korea가 지난 11월 14~15일 양일간 삼성동 그랜드 인터콘티넨탈호텔 그랜드볼룸에서 개최됐다. Adobe사에서 Macromedia를 인수하기 전에 국내에서 처음 열린 MAX 2005 Korea에서는 트랙을 Design, Development, Mobile&Device로 구성하였다. 이번 MAX 2006 Korea에서는 Creative World, Application World, Mobile World로 트랙 명칭이 바뀌었지만 그 내용과 구성은 작년과 비슷하게 진행되었다.

 국내 웹에이전시에서 플래시를 가장 많이 사용하고 있는 것을 반영하듯이 이번 컨퍼런스에서도 Creative World 트랙을 참석하는 사람들이 가장 많았다. 나는 일을 떠나서 플래시가 사용되고 있는 모든 분야에 관심이 두고 있었지만 3개의 트랙이 같은 시간대에 진행되었기 때문에 작년과 같이 이번에도 Creative World 트랙을 참석했다.

 작년에 인기가 많았던 강사진들과 새롭게 한국을 찾은 강사까지 그들이 준비한 섹션 내용은 나의 열정과 내 놀이(플래시)에 대한 자부심을 느끼기에 충분했다. 자신의 작업 스타일과 관심분야는 달랐지만 그들이 이야기 하는 것에는 하나같이 공통점이 있었다.

첫째로 조슈아 데이비스(Joshua Davis)가 이야기 했던(Watch for patterns) 말처럼 그들은 하나같이 주어진 아이디어 속에서 패턴을 찾는 것에 열정을 가지고 있었다. 그런 과정 속에서 만들어진 결과물은 보이지 않는 또 다른 영감으로 다시 태어났고 그것은 자신에게 주어진 문제를 해결하는데 큰 도움을 주고 있었다.

사용자 삽입 이미지

둘째로 일을 미치도록 사랑하라(Work like hell), 크레그 스완(Craig Swann)이 이야기했던 Work less play more와도 같은 이야기라 생각된다. 조슈아 데이비스가 이야기 했던 일(work)이란 것은 크레그 스완이 이야기 했던 놀이(play)와 같다. 우리가 일이라 생각하는 것은 짜여진 일정에 쫓기다 보면 창의적인 결과물을 만들어 내기가 쉽지가 않다. 하지만 자신이 즐기는 놀이 속에서는 보다 창의적인 사고로 문제에 접근할 수 있을 것이다.

MAX 컨퍼런스를 작년에 이어 2차례 참석하면서 생각한 것은 컨퍼런스라는 것은 눈에 보이는 지식을 습득하는 곳이 아니라 눈에 보이지 않는 느낌을 찾는 시간이라 생각된다. 그 느낌을 어떻게 자신의 것으로 만들고 승화시킬 수 있는지는 오로지 자신의 몫이 아닌가 생각된다.
 
이번 Adobe MAX 2006 Korea에서 보고 느낀 것은 아래 링크로 첨부하였다. 각 섹션별로 스피커들의 작품들을 볼 수 있는 사이트도 함께 기재해 놓았으니 방문해 보길 바란다.






invalid-file

프리젠테이션 자료


    

설정

트랙백

댓글

프레임 모션에 easing 적용하기

Programming/ActionScript 2.0 2007. 2. 21. 10:56
보통 프레임간 이동할 시에는 사용할 클래스를 따로 제작을 하여 사용을 합니다. 저도 GotoPlay.as dynamic class를 만들어서 필요할때마다 사용을 하곤 합니다. 오늘 Tween 클래스를 가지고 놀다가 Tween클래스를 사용하여 프레임 모션에 에싱을 줄수 없을까 생각해 봤습니다. _currentframe 속성의 경우는 read-only 속성이기 때문에 값을 넣을 수가 없어서 Tween 클래스에서 무비클립의 속성으로 사용하여 에싱을 줄 수는 없습니다. 그래서 무비클립에 하나의 변수를 만들어 그것을 통해서 제어를 하도록 해봤습니다.








[Flash] http://jasu.tistory.com/attachment/cfile22.uf@232CFD385880209E219C15.swf


import mx.transitions.Tween;
import mx.transitions.easing.*;

mc._frame = mc._currentframe;
var myTween:Tween = new Tween(mc, "_frame", Strong.easeOut, mc._currentframe, 235, 1, true);
myTween.onMotionChanged = function() {
        mc.gotoAndStop(Math.round(mc._frame));
};
myTween.onMotionFinished = function() {
        this.yoyo();
};

mc라는 무비클립이 있고 그 안에 무비클립을 235 프레임까지 모션을 적용합니다. 엑션을 통한 모션처럼 자연스러운 모션을 적용하기 위해서는 프레임을 많이 필요로 합니다.(프레임간 이동 간격을 통해 esaing이 적용되기 때문)

프레임에 png 동영상 컷들을 넣고 스크롤바를 통해서 원하는 지점으로 이동할 때 프레임에 easing을 넣으면 괜찮을 것 같네요...^^

    

설정

트랙백

댓글

승려의 섬에는 과연 무슨일이 일어났는가?

Programming/Algorithms 2007. 2. 21. 10:56

마이크로 소프트사는 기발한 면접 문제로 유명하다.  아래는 마이크로소프트사에서 면접을볼때 질문했던 문제중에 하나입니다. 여러분도 한번 생각해 보세요


if((생각한 시간 > 2분) || (문제의 답을 이미 알고 있는가?)){
    웃고 넘어감;
}else{
    앞으로 돌아가서 최소한 2분 동안 답을 생각해 볼것;
}
 
"옛날에 어느 나라에  승려들만 모여 사는 섬이 있다. 그들 중에서 어느 사람은 눈이 빨갛고 어느 사람은 눈이 갈색이다. 눈이 빨간 사람은 마법에 걸려 있기 때문에 스스로 눈이 빨갛다는 사실을 깨닫게 되면 그날 밤 12시에 스스로 목숨을 끊어야만 한다(그것은 마법이었기 때문에 눈이 빨갛다는 사실을 깨달은 사람은 예외 없이 목숨을 끊어야 한다). 승려들은 서로의 눈 색깔에 대해 전혀 언급하지 않는다는 불문율이 있었기에 상대방의 눈 색깔을 알려줄 수도 없었다. 그 섬에는 거울도 없고 거울 비슷한 물건도 없었기 때문에 자신의 눈이 무슨 색인지 아는 사람은 아무도 없었다. 그래서 그들은 자신의 눈 색깔을 알 길이 없었기에 행복하게 살아갈 수 있었으며, 자살 따위를 하는 사람은 아무도 없었다.
 그러던 어느 날 그 섬에 관광객이 찾아왔다. 그는 승려들 사이에 존재하는 규칙을 알지 못했기 때문에 절대로 하지 말아야할 말을 내뱉고 말았다.
 "당신들 중에서 적어도 한 명은 눈이 빨간색이로군요."
무심한 관광객은 그 날로 되돌아갔지만, 남아있는 승려들은 생전 처음으로 눈 색깔에 대한 말이 나왔기 때문에 크게 동요하지 않을 수 없었다. 그리고 그날 밤부터 그 섬에는 무서운 일이 일어나기 시작했다. 빨간 눈을 가진 사람은 모두 3명이 있었다. 과연 어떤 일이 일어났겠는가?

임백준저 - 누워서 읽는 알고리즘 중에서 발췌


http://www.sellsbrothers.com/fun/msiview/default.aspx?content=question.htm


위 주소는 마이크로소프트사의 면접 문제를 모아놓은 곳입니다.
 
 
---------------------------
 
var dayCount = 0;
whatHappened = function (redEye:Number):Number { dayCount++; if (redEye == 1) {
                trace(dayCount+"");
        } else {
                trace(whatHappened(redEye-1)+"번 승려 죽음");
        }
        return redEye;
};
trace(whatHappened(3)+"번 승려 죽음");

----------------------------
 
flash에서는 메모리상의 스택 Depth가 255를 넘어가게 되면 오버플로우(overflow)가 발생한다. 다시 말해서 위 redeye 승려가 255명을 초과하게 되면 플래시는 힘들다고 계산 안한다.  그런데 구현이 맞는지 모르겠습니다.;;

    

설정

트랙백

댓글

오버라이딩 인스턴스 메소드의 멤버 접근

Programming/ActionScript 2.0 2007. 2. 21. 10:55
[오버라이딩 인스턴스 메소드의 멤버 접근]
====================
멤버 접근:
서브클래스의 인스턴스 메소드

예제 :
class A{
        public function over():Void{
        }
}

class B extends A{
        public function methOfB():Void{
        }
        public function over():Void{
                methOfB(); //B.methOfB()를 실행한다.
        }
}

설명 :
서브클래스에 정의된 메소드는 어느 하나가 오버라이딩 메소드라도 서로 접근할 수 있다. 따라서 오버라이딩 메소드

B.over()는 B.methOfB()를 정상적으로 실행한다. [표]상속받은 메소드에서 서브클래스의 인스턴스 메소드를 실행할

때 오류가 발생한 것과 비교해본다.
====================
멤버 접근:
상속받은 인스턴스 메소드(슈퍼클래스에 정의됨)

예제 :
class A{
        public function over():Void{
        }
        public function otherMethOfA():Void{
        }
}

class B extends A{
        public function over():Void{
                //otherMethOfA()를 실행함
                otherMethOfA();
        }
}

설명 :
[표]에서, 서브클래스(B)의 모든 메소드는, 심지어 오버라이딩 메소드라 하더라도, 슈퍼클래스(A)의 메소드에 접근할

수 있다.
====================
멤버 접근:
오버라이드된 인스턴스 메소드(슈퍼클래스와 서브클래스에 모두 정의됨)

예제 :
class A{
        public function over():Void{
        }
        public function over2():Void{
        }
}

class B extends A{
        public function over():Void{
                //B.over()를 실행. A.over2()가 아니다.
                over2();
        }
        public function over2():Void{
        }
}

설명 :
모든 상황에 있어서, 컴파일러는 불분명한 참조에 대해, 슈퍼클래스를 찾지 않고 서브클래스 안에서 참조를 모두 결

정한다. 예제에서 오버라이딩한 over() 메소드는 over2()를 실행하는데, 이 메소드가 서브클래스에 동일하게 존재하

기 때문에 B.over2()를 실행한다.
====================
멤버 접근:
서브클래스의 인스턴스 속성

예제 :
class A{
        public function over():Void{
        }

        class B extends A{
                public var propOfB:Number = 1;
                public function over():Void{
                        trace(propOfB); // 출력 : 1
                }
        }

        설명 :
        서브클래스에 정의된 메소드는 동일한 서브클래스의 속성에 접근 할 수 있다. 따라서 오버라이딩 메소드 B.over()는

        propOfB에 접근하는 것이 가능하다. [표]과 비교해 보면 상속받은 메소드에서 서브클래스의 인스턴스 속성에 접근하

        는 것은 오류가 발생한다.
        ====================
        멤버 접근:
        상속받은 인스턴스 속성(슈퍼클래스에 정의됨)

        예제 :
        class A{
                public var propOfA:Number = 2;
                public function over():Void{
                }
        }

        class B extends A{
                public function over():Void{
                        trace(propOfA); // 출력 : 2
                }
        }

        설명 :
        서브클래스에 정의된 메소드는, 오버라이딩한 메소드라 하더라도 슈퍼클래스의 속성에 접근할 수 있다. 따라서 오버

        라이딩 메소드 B.over()는 propOfA에 접근하는 것이 가능하다.
        ====================
        멤버 접근:
        오버라이딩된 인스턴스 속성(슈퍼클래스와 서브클래스 모두 정의됨)

        예제 :
        class A{
                public var overriddenProp:Number = 3;
                public function over():Void{
                }
        }

        class B extends A{
                public var overriddenProp:Number = 4;
                public function over():Void{
                        trace(overriddenProp); // 출력 : 4
                }
        }

        설명 :
        서브클래스의 메소드는 서브클래스의 오버라이드된 속성의 값을 출력한다(3이 아닌 4). 왜냐하면 bInstance는

        overriddenProp에 단 하나의 값만을 저장하며, 오버라이딩 메소드는 슈퍼클래스의 오버라이드된 값을 참조하지 않는

        다.
        ====================
        멤버 접근:
        서브클래스의 클래스 메소드 불분명한 참조

        예제 :
        class A{
                public function over():Void{
                }
        }

        class B extends A{
                public static function classMethOfB():Void{
                }
                ublic function over():Void{
                        classMethOfB(); // B.classMethOfB()를 실행함
                }
        }

        설명 :
        컴파일 과정에서 클래스 케소드에 대한 불분명한 참조는 현재 클래스에 따라 결정된다(classMethOfB()는 해당 메소드

        가 존재하는 곳이 B이므로, B.classMethOfB()로 결정된다) [표]과 비교하면 상속받은 메소드(슈퍼클래스에 정의된)에

        서 static메소드에 대한 불분명한 참조는 오류가 발생했다.
        ====================
        멤버 접근:
        서브클래스의 클래스 메소드 불분명한 참조

        예제 :
        class A{
                public function over():Void{
                }
        }

        class B extends A{
                public static function classMethOfB():Void{
                }
                public function over():Void{
                        B.classMethOfB(); /// 정상적으로 실행됨.
                }
        }

        설명 :
        B.classMethOfB()는 분명한 참조이므로, 컴파일러는 클래스 B에서 해당 클래스 메소드를 찾게 된다.(이것은 오버라이

        딩 메소드라 하더라도 모든 상황에서 통용되는 사실이다.)
        ====================
        멤버 접근:
        상속받은 클래스 메소드(슈퍼클래스에 정의됨)

        예제 :
        class A{
                public static function classMethOfA():Void{
                }
                public function over():Void{
                }
        }

        class B extends A{
                public function over():Void{
                        classMethOfA(); // A.classMethOfA()를 실행함
                }
        }

        설명 :
        컴파일 과정에서 클래스 메소드에 대한 불분명한 참조는 현재 클래스에 따라 결정된다. 따라서 classMethOfA()는

        B.classMethOfA()로 결정된다. 비록 서브클래스 B에 classMethOfA()를 정의하지 않았지만 서브클래스에서 상속받은

        클래스 메소드를 사용할 수 있기 때문에 참조하는 것이 가능하다. 따라서 이 예에서는 B.classMethOfA()와

        A.classMethOfA()가 동일한 작업을 수행한다.
        ====================
        멤버 접근:
        오버라이드된 클래스 메소드(슈퍼클래스와 서브클래스에 모두 정의됨)

        예제 :
        class A{
                public static function overriddenClassMeth():Void{
                }
                public function over():Void{
                        //A.overriddenClassMeth()를 실행함
                        overriddenClassMeth();
                }
        }

        class B extends A{
                public static function overriddenClassMeth():Void{
                }
                public function over():Void{
                        //B.overriddenClassMeth()를 실행함
                        overriddenClassMeth();
                }
        }

        // 사용법
        var aInstance:A = new A();
        var bInstance:B = new B();
        // A의 overriddenClassMeth()를 실행함
        aInstance.over();
        // B의 overriddenClassMeth()를 실행함
        bInstance.over();

        설명 :
        컴파일 과정에서 클래스 메소드에 대한 불분명한 참조는 현재 클래스에 따라 결정된다. 따라서 B의 over()에서

        overriddenClassMeth()는 B.overriddenClassMeth()로 결정된다. A의 메소드를 실행하려면 명확히

        A.overriddenClassMeth()를 사용하면 된다. 불분명한 참조를 사용하면, 메소드를 호출하고 있는 클래스에 존재하는

        것을 사용한다고 생각하면 된다.
        ====================
        A 클래스 메소드와 마찬가지로 클래스 속성에 대해서도 동일한 접근 규칙을 사용한다.



        출처 : 콜린 무크의 Flash ActionScript 2.0에서 발췌

    

설정

트랙백

댓글

상속받은 인스턴스 메소드에서 멤버의 접근

Programming/ActionScript 2.0 2007. 2. 21. 10:55

[상속받은 인스턴스 메소드에서 멤버의 접근]
====================
멤버 접근:
서브클래스의 인스턴스 메소드

예제 :
class A{
        public function methOfA():Void{
                methOfB(); //Error!
        }
}

class B extends A{
        public function methOfB():Void{
        }
}

설명 :
컴파일타임 오류 발생. 슈퍼클래스의 메소드는 서브클래스에 정의된 메소드를 참조할 수 없다. 그리고 클래스 A는 methOfB()를 정의하지 않았기 때문에 참조하지 못한다.
====================
멤버 접근 :
상속받은 인스턴스 메소드(슈퍼클래스에 정의됨)

예제 :
class A{
        public function methOfA():Void{
                //Executes otherMethOfA()
                otherMethOfA();
        }
        public function otherMethOfA():Void{
        }
}

class B extends A{
}

// 사용법
var bInstance:B = new B();
bInstance.methOfA();
//정상적으로 실행된다.

설명 :
어떤 클래스의 메소드가 동일한 클래스의 다른 메소드를 호출하는 것은 가능하다. 서브클래스의 인스턴스를 통해 사용하더라도 호출할 수 있다.

====================
멤버 접근 :
오버라이드된 인스턴스 메소드(슈퍼클래스와 서브클래스에 모두 정의됨)

예제 :
class A{
        public function methOfA():Void{
                // 클래스 B의 인스턴스에서 실행하면 B의 overriddenMeth()가 호출된다. 클래스 A의 인스턴스에서 실행하면 A의 overriddenMeth()가 호출된다.
                overriddenMeth();
        }
        public function overriddenMeth():Void{
        }
}

class B extends A{
        public function overriddenMeth():Void{
        }
}
//사용법
var aInstance:A = new A();
var bInstance:B = new B();
// A의 overriddenMeth()가 싱행된다.
aInstance.methOfA();
// B의 overriddenMeth()가 실행된다.
bInstance.methOfA();

설명 :
오버라이드된 메소드는 클래스의 인스턴스에 따라서 사용하는 대상이 달라진다.

====================
멤버 접근 :
서브클래스의 인스턴스 속성

예제 :
class A{
        public function methOfA():Void{
                trace(propOfB); // 오류발생!
        }
}

class B extends A{
        public var propOfB:Number = 1;
}

설명 :
컴파일타임 에러 발생. 슈퍼클래스의 메소드는 서브클래스에 정의된 속성을 참조할 수 없다. 클래스 A에는 propOfB가 없으므로 사용할 수 없다.
====================
멤버 접근 :
상속받은 인스턴스 속성(슈퍼클래스에 정의됨)

예제 :
class A{
        public var propOfA:Number = 2;
        public function methOfA():Void{
                trace(propOfA); //출력: 2
        }
}

class B extends A{
}

설명 :
methOfA()와 같은 슈퍼클래스의 메소드는 슈퍼클래스의 속성(propOfA와 같은)에 접근할 수 있다.
====================
멤버 접근 :
오버라이드된 인스턴스 속성(슈퍼클래스와 서브클래스에 모두 정의됨)

예제 :
class A{
        public var overriddenProp:Number = 3;
        public function methOfA():Void{
                trace(overriddenProp);
        }
}

class B extends A{
        public var overriddenProp:Number = 4;
}

// 사용법
var aInstance:A = new A();
var bInstance:B = new B();
aInstance.methOfA(); // 출력 : 3
bInstance.methOfA(); // 출력 : 4

설명 :
비록 클래스 A에서 속성을 접근하지만 B인스턴스에서 methOfA()를 실행하면, 서브클래스에서 오버라이드된 속성의 값(3이 아닌 4)을 사용한다. 왜냐하면 bInstance는 overriddenProp에 단 한 개의 값만을 저장할 수 있기 때문이다.(자바에서는 methOfA()를 실행하면 항상 3을 출력한다.)

====================
멤버 접근 :
서브클래스의 클래스메소드, 불분명한 참조

예제 :
class A{
        public function methOfA():Void{
                classMethOfB(); // 오류발생!
        }
}

class B extends A{
        public static function classMethOfB():Void{
        }
}

설명 :
컴파일타임 에러 발생. classMethOfB()는 클래스 A에 정의하지 않았고, 슈퍼클래스는 불분명한 참조를 통해 서브클래스에 존재하는 클래스 메소드를 참조할 수 없다
====================
멤버 접근 :
서브클래스의 클래스메소드 분명한 참조

예제 :
class A{
        public function methOfA():Void{
                B.classMethOfB(); // 정상적으로 실행된다.
        }
}

class B extends A{
        public static function classMethOfB():Void{
        }
}

설명 :
B.classMethOfB()는 분명한 참조로서, 컴파일러는 클래스 B에 해당 클래스 메소드가 존재하는 것을 파악할 수 있다(A의 서브클래스 B가 아니라 할지라도, 모든 클래스에서 이와 같이 사용할 수 있다).

====================
멤버 접근 :
상속받은 클래스 메소드(슈퍼클래스에 정의됨)

예제 :
class A{
        public static function classMethOfA():Void{
        }
        public function methOfA():Void{
                //A.classMethOfA()를 실행
                classMethOfA();
        }
}

class B extends A{
}

// 사용법
var bInstance:B = new B();
bInstance.methOfA();
//A.classMethOfA()를 실행

설명 :
컴파일 과정에서 클래스 메소드의 불분명한 참조는 현재 클래스가 어떤 것인가에 따라 결정된다. 따라서 classMethOfA()는 A.classMethOfA()를 참조한다. 서브클래스 B의 인스턴스에서 A.classMethOfA()를 실행하면 정상적으로 동작한다.
====================
멤버 접근 :
오버라이드된 클래스 메소드(슈퍼클래스와 서브클래스에서 모두 정의됨)

예제 :
class A{
        public static function overriddenClassMeth():Void{
        }
        public function methOfA():Void{
                //A.overriddenClassMeth()를 실행
                overriddenClassMeth();
        }
}

class B extends A{
}

//사용법
var bInstance:B = new B();
//A.overriddenClassMeth()를 실행
bInstaince.methOfA();

설명 :
컴파일 과정에서 클래스 메소드의 불분명한 참조는 현재 클래스가 어떤 것인가에 따라 결정된다. 클래스 A에서 overriddenClassMeth()는 A.overriddenClassMeth()로 변경된다. 클래스 A는클래스 B에 존재하는 B.overriddenClassMeth()를 실행할 수 있다.
====================
* 클래스 메소드와 마찬가지로 클래스 속성에 대해서도 동일한 접근 규칙을 사용함.


출처 : 콜린무크의 Flash ActionScript 2.0에서 발췌

    

설정

트랙백

댓글