2010년 10월 22일 금요일

[flex] 메뉴 간격 줄이기

http://blog.flexexamples.com/2010/02/19/setting-a-variable-row-height-on-an-mx-menubar-control-in-flex/comment-page-1/#comment-8471

 

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2010/02/19/setting-a-variable-row-height-on-an-mx-menubar-control-in-flex/ -->
<mx:Application name="MenuBar_menuShow_menu_variableRowHeight_test"
        xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        backgroundColor="white">
 
    <mx:Script>
        <![CDATA[
            import mx.events.MenuEvent;
 
            protected function mBar_menuShowHandler(evt:MenuEvent):void {
                evt.menu.variableRowHeight = ch.selected;
                evt.menu.invalidateSize();
            }
        ]]>
    </mx:Script>
 
    <mx:ApplicationControlBar dock="true">
        <mx:CheckBox id="ch" label="variableRowHeight" />
    </mx:ApplicationControlBar>
 
    <mx:MenuBar id="mBar"
            labelField="@label"
            menuShow="mBar_menuShowHandler(event);">
        <mx:dataProvider>
            <mx:XMLListCollection>
                <mx:XMLList xmlns="">
                    <menu label="File...">
                        <item label="New" />
                        <item label="Open" />
                        <item label="Save" />
                        <item label="Save As" />
                        <fake type="separator" />
                        <item label="Exit" />
                    </menu>
                    <menu label="Edit...">
                        <item label="Cut" />
                        <item label="Copy" />
                        <item label="Paste" />
                        <fake type="separator" />
                        <item label="Undo" />
                        <item label="Redo" />
                        <fake type="separator" />
                        <item label="radio button" type="radio" toggled="true" />
                        <item label="check box" type="check" toggled="true" />
                    </menu>
                </mx:XMLList>
            </mx:XMLListCollection>
        </mx:dataProvider>
    </mx:MenuBar>
 
</mx:Application>

2010년 10월 1일 금요일

[ActionScript] addEventListener시 파라미터 추가

현재 상황

  • 화면상에 여러개의 버튼과 textfield를 추가
  • script로 for문을 돌려서 실행하였고 그걸 다시 line 별로 같은 line의 textfield값의 받아서 처리 해야함
  • script에서 new로 button을 생성하다보니.. addEventListener 처리를 하다보니 받을 수 있는 값은 event 밖에 없음

처리 방법

  • button 상속후 버튼에 사용할 propeties 정의 setter/getter 추가
  • script에서 for문 이용해서 button 생성시 id값 넘겨줌
  • event 처리부에서 event.currentTarget.새로정의한properties 값 받아서 처리

[code]package custom
{
 import mx.controls.Button;  public class ExtendButton extends Button
 {
 
  private var _currentId:String;  public function ExtendButton()
  {
   super();
  }
 
  public function get currentId():String {
   return _currentId;
  }
  public function set currentId(currentId:String):void {
   _currentId = currentId;
  }
 
 
 }
}[/code]

 

위 처러 만든 후에

[code]var button:ExtendButton = new ExtendButton();
 for(var i:int=1;i<10;i++) {
  button.currentId = "a"+i;
 }
 
 button.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void{
  trace(event.currentTarget.currentId)
 });[/code]

 

이렇게 만들었음

 

------------------------------------------------------------------------------

여기서 부터는 질문

 http://blog.flashplatform.kr/tag/keep-generated-actionscript

 

위의 링크방식대로 한다고 하면

 

generated라고 옵션은 줘서 as 스크립트를 전부 만들어서 거기에서 추가적으로

 

처리를 해야지 처리가 가능한거지?? ㅡㅡ;;

 

아니면 안되는건지 알고 싶습니다.

 

 

2010년 9월 30일 목요일

[sicp] 1.13

Exercise 1.13.  Prove that Fib(n) is the closest integer to n/5, where = (1 + 5)/2. Hint: Let = (1 - 5)/2. Use induction and the definition of the Fibonacci numbers (see section 1.2.2) to prove that Fib(n) = (n - n)/5.
0 1 1 2 3 5 8
fin n = 1  ((1+ 5)/2 - (1-5)/2 )/5 => 5/5 => 1
fin n = 2  (((1+ 5)/2)^2 - ((1-5)/2 )^2)/5
=> ( (1+ 5)/2 - (1-5)/2 )( (1+ 5)/2 + (1-5)/2 ) ) /5
=> 5/5 => 1

#lang scheme
(define (fib n)
  (fib-iter 1 0 n))

(define (fib-iter a b count)
  (if (= count 0)
      b
      (fib-iter (+ a b) a (- count 1))))

(define A
 (/   (+ 1 (expt 5 0.5))
     2))

(define B
 (/   (- 1 (expt 5 0.5))
     2))

(define (fib2 n)
 (/ (- (expt A n)
    (expt B n))
   (expt 5 0.5)))

(fib2 1) = 1.0
(fib 1) = 1
(fib2 2) = 1.0
(fib 2) = 1
(fib2 3) = 2.0
(fib 3) = 2
...
(fib2 40) = 102334155.00000013
(fib 40) = 102334155
(fib2 50) = 12586269025.00002
(fib 50) = 12586269025
...
(fib2 60) = 1548008755920.003
(fib 60) =1548008755920
(fib2 70) = 190392490709135.44
(fib 70) = 190392490709135

(fib2 80) = 23416728348467744.0
(fib 80) = 23416728348467685

70까지는 거의 근접하고 1~ 3까지는 확실히 똑같다. 3 이후부터는 소수점이 많이 늘어난다.

2010년 9월 29일 수요일

[sicp] 1.12

Exercise 1.12.  The following pattern of numbers is called Pascal's triangle.

The numbers at the edge of the triangle are all 1, and each number inside the triangle is the sum of the two numbers above it.35 Write a procedure that computes elements of Pascal's triangle by means of a recursive process.


#lang scheme
(define (pascal_triangle a b )
  (cond
       ((= a b) 1)
        ((= a 2) 1)
         ((= b 1) 1)
       (else (+ (pascal_triangle (- a 1) (- b 2))
               (pascal_triangle (- a 1) (- b 1))))))


--------------------------------------------------------------------------------

;;; sicp 1.12
#lang scheme
(define (pascal_triangle a b )
  (cond
       ((< a b) '틀렸음)
       ((= a b) 1)
         ((= b 1) 1)
       (else (+ (pascal_triangle (- a 1) (- b 1))
               (pascal_triangle (- a 1) b)))))

 

수정함


[sicp] 1.11

Exercise 1.11.  A function f is defined by the rule that f(n) = n if n<3 and f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3) if n> 3. Write a procedure that computes f by means of a recursive process. Write a procedure that computes f by means of an iterative process.

- recursive process
#lang scheme

(define (f n)
  (cond ((= n 0) 0)
       ((= n 1) 1)
       ((= n 2) 2)
       (else (+ (f (- n 1))
               (* 2 (f (- n 2)))
               (* 3 (f (- n 3)))) ) ) )

- iterative process
#lang scheme

(define (f-iter a b c count)
   (if (= count 0)
     c
        (f-iter (+ a (* 2 b) (* 3 c) )
               a   b  (- count 1) ) ) )
    
(define (f n )
(f-iter 2 1 0 n) )



2010년 9월 26일 일요일

1.10

Exercise 1.10.  The following procedure computes a mathematical function called Ackermann's function.

(define (A x y)
  (cond ((= y 0) 0)
        ((= x 0) (* 2 y))
        ((= y 1) 2)
        (else (A (- x 1)
                 (A x (- y 1))))))

What are the values of the following expressions?

(A 1 10)

(A 2 4)

(A 3 3)


Consider the following procedures, where A is the procedure defined above:

(define (f n) (A 0 n))

(define (g n) (A 1 n))

(define (h n) (A 2 n))

(define (k n) (* 5 n n))

Give concise mathematical definitions for the functions computed by the procedures f, g, and h for positive integer values of n. For example, (k n) computes 5n2.


(A 1 10 ) 풀이

( A 1 10 )  = > 1024

( A 1 ( A 1 9) )  = 512

( A 1 ( A 1 (A 1 8 ) )  = 256

( A  1 ( A 1 ( A 1 (A 1 7 ) ) ) = 128

( A  1 ( A  1 ( A 1 ( A 1 (A 1 6 ) ) ) ) )

....

( A 1 .... ( * 2 1 ) )


(A 2 4 ) 풀이


( A 2 1 )  = > 1

( A 2 2 ) = >  4 -> 2^2

( A 2 3 ) = >  16 -> 2^(2^2)

( A 2 4 ) = >  65536 -> (2^(2^(2^2)))


1. f => 2n

(define (f n) (A 0 n)) 일때 A 함수를 따르면

x = 0 이므로 ( * 2 y )  이다.

답은 f(n) = 2n

2. g => 2^n


3. h => if n = 0 :  f(x) = 0

            if n = 1 :  f(x) = 2^1

            if n >= 2 : f(x) = 2^f(x-1)


 나오는 순서도는 생략 ㅡㅡ 너무 쓰기 힘듬 ...

2010년 9월 14일 화요일

eclispse monkey

[code javascript] /* * Menu: Actionscript > Convention Generator * Key: M3+1 * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript * Author: Yi Tan * MoreInfo: http://code.google.com/p/yis-eclipse-monkey-scripts-for-flash-builder/ */ /** * [What's this] * This script automatically converts input to class properties. * * For example: * * Your enter: * -propertyName:n= * * It will be converted to: * private var propertyName:Number= 0; * * * [Shortcut Key] * * Alt + 1 * * [How to use] * * Pleae check the how to slides * * http://www.slideshare.net/halfmile/convention-generator-yis-eclipse-monkey-scripts-for-flash-builder * * [Change log] * * 2009/11/11 Fix bug: fail to parse property name when there is input for the data type * 2009/11/6 Add condition checking for nil selection * 2009/10/31 First version * */ var ACCESS_TYPE_PUBLIC = "+"; var ACCESS_TYPE_PRIVATE = "-"; var ACCESS_TYPE_PROTECTED = "*"; var ALL_ACCESS_TYPES = "+-*"; var ACCESS_TYPES = {"+":"public", "-":"private", "*":"protected"}; var MEMBER_TYPE_METHOD = "method"; var MEMBER_TYPE_PROPERTY = "property"; var DATA_TYPE_DEFAULT_VALUES = { "Object":"{}", "String":'""', "Boolean":"false", "Array":"[]", "Number":"0", "int":"0", "uint":"0", "Vector":"new Vector.<>()", "XML":'""' }; var DATA_TYPE_ABBRES = { "o":"Object", "s":"String", "b":"Boolean", "a":"Array", "n":"Number", "i":"int", "u":"uint", "v":"Vector", "x":"XML" } function main() { var editor = editors.activeEditor var source = editor.source if (!editor.selectionRange) return; var range = editor.selectionRange; var offset = range.startingOffset; var text = (offset == range.endingOffset)? editor.source.split(editor.lineDelimiter)[editor.getLineAtOffset(editor.currentOffset)].replace(/^\s+|\s+$/g, ''): source.substring (offset, range.endingOffset); if (range.startingOffset == range.endingOffset) // when there is no selection offset -= text.length; if (text.length < 1) { alert("Please select your input."); return; } // auto TODO if (text == "td") { editor.applyEdit(offset, range.endingOffset - offset, "// TODO: Need Implementation "); return; } // detect property type var memberType = (text.search(/\(\)/) != -1) ? MEMBER_TYPE_METHOD : MEMBER_TYPE_PROPERTY; // add default access type if (ALL_ACCESS_TYPES.indexOf(text[0]) == -1) text = "+"+text; switch(memberType){ case MEMBER_TYPE_METHOD: // result = generateMethod(text); text = text.replace(text[0], ACCESS_TYPES[text[0]] + " function "); var dataType = text.match(/\:\w+/) if(! dataType) { text += ":void"; } else { dataType = dataType[0].replace(":",""); // parse data type abbrevations if (dataType.length == 1) { var fullDataType = DATA_TYPE_ABBRES[dataType.toLowerCase()] || dataType; // alert("fullDataType :"+fullDataType ); text = text.replace(":"+dataType, ":"+fullDataType); } } text += "\n{\n\n}" ; break; case MEMBER_TYPE_PROPERTY: // get propertyName and data type if(text.indexOf(":") != -1) { var propertyName = text.match(/\w+\:/)[0].replace(/\:/,""); var dataType = text.match(/\:\w+/)[0].replace(":",""); } else { // no input for data type var propertyName = text.match(/\w+/)[0]; var dataType = "* "; } // append declaration var declaration = " var "; if (text.indexOf("$$") != -1) // $$ -> static const { declaration = " static const "; text = text.replace(propertyName, propertyName.toUpperCase()); text = text.replace("$$", ""); } else if(text.indexOf("$") != -1) // $ -> static { declaration = " static var "; text = text.replace("$", ""); } text = text.replace(text[0], ACCESS_TYPES[text[0]] + declaration); // parse data type abbrevations if (dataType.length == 1) { var fullDataType = DATA_TYPE_ABBRES[dataType.toLowerCase()] || dataType; // alert("fullDataType :"+fullDataType ); text = text.replace(":"+dataType, ":"+fullDataType); dataType = fullDataType; } // append default value if required if (text.lastIndexOf("=") == text.length -1 ) { var defaultValue = DATA_TYPE_DEFAULT_VALUES[dataType] || "null" ; text += " "+defaultValue; } if (text.lastIndexOf("n") == text.length -1 ) { var defaultValue = DATA_TYPE_DEFAULT_VALUES[dataType] || " new "+dataType+"()" ; text = text.substr(0,text.lastIndexOf("n"))+defaultValue; } text += ";"; // auto getter and setter if(propertyName[0] == "_") { // alert("// auto getter and setter"); var accessorName = propertyName.substr(1); text += "\n\t\tpublic function get " + accessorName + "():" + dataType + " {"; text += "\n\t\t\treturn " + propertyName + ";"; text += "\n\t\t}\n\n"; text += "\t\tpublic function set " + accessorName + "("+accessorName+":" + dataType + "):void {"; text += "\n\t\t\t" + propertyName + " = "+accessorName+";"; text += "\n\t\t}\n"; } break; } // var result = "public static const " + text + ":String = '" + text.toLowerCase() + "';"; editor.applyEdit(offset, range.endingOffset - offset, text); } [/code] 원래 출처: http://code.google.com/p/yis-eclipse-monkey-scripts-for-flash-builder/
원본 저자: Yi Tan (yi2004@gmail.com)

eclipse monkey

몇가지 불편한거 추가..

setter/getter 이상한거 수정
property:Type= n -> 실행시
property:Type= new Type(); 으로 변환 되는 기능 추가