Laying a Foundation
좋은 그래픽 디자인은 색,질감,형태를 잘 이용하므로서 페이지에서 나올것 같은 이미지를 만든다.이와같이 좋은 추상화,잘만들어진 오브젝트,전체적으로 잘된 구조는 좋은 오브젝트 디자인을 만드는데 요구된다.


(1)A Process for Finding Objects

1.초보자의 오브젝트를 찾기 위한 초기전략
  1)시스탬을 위한 요구사항들을 글로 써라
    -underline 명사는 object
    -underline 동사는 method
  2)This strategy is inadequate because finding good objects involves
    finding abstractions that are going to be useful for your application.
    (해석이 잘안됨..ㅡ,.ㅡ;)
    -몇몇의 추상화되 개념은 실제세계를 반영하지 않을수 있다.
    -비록 우리가 domain concepts에 포함했더라도 어떻게 전체적으로
      어플리케이션에 적절히 사용할수 있는지 결정해야한다.
2.하지만 체계적으로 할수 없는것을 의미하는것은 아니다.
  1)우리는 아래를 통해 오브젝트를 찾을수 있다.
     -우리의 어플리케이션 도매인의 지식
     -우리의 어플리케이션 동작에 대한 지식
     -패턴과 같은 다른 디자이너로부터 학습된 내용
     -우리의 지난 디자인 경험

(2)The process

   1.간단히 디자인 이야기를 적어라
     :어플리케이션의 대해 중요한것들을 기술해라
   2.몇몇의 주요핵심을 적은 이글을 이용하여 어플리케이션을 위한 주요쟁점을
     기술해라
   3.각주제를 구성하고 있는 후보오브젝트를 찾는다.
   4.각 후보 오브젝트들이 주요domain concept을 나타내는지 확인하다.
   5.주요domain concept과 연관되어 에플리케이션에 돕고있는 후보자를 찾는다.
   6.각 후보 오브젝트의 이름을 짓고,묘사하며,특징을 짓는다
   7.후보오브젝트를 조직화해라
     :같이 문제를 해결할수 있는 오브젝트 클러스터를 찾아라
   8.각각의 오브젝트들이 적절한지를 다시 체크해라
   9.각각의 오브젝트를 결정하기 위한 이유를 정해라
   10.찾는것이 느리다면,책임과 협력을 찾는것으로 움직여라.

(3)Discussion

   1.다시 말하지만 이것은 순서적으로 진행되지 않는다.
     너는 한번에 몇단계를 넘을수 있고,몇몇의 오브젝트를 버릴수 있고
     다시 시작하는등 순서적으로 진행되지 않는다.
   2.Wirfs-Brock and McKean는 design story부터 하라고 권한다.
   3.그리나 여기의 목표는 너의 시스탬을 기반으로 기초적인 추상화개념이 나타내어
     초기 오브젝트를 구성하는것이다.

(4)Find Object First

1.너의 첫번째 후보 오브젝트는 중심 오브젝트이거나 역활을 가져야한다.
     1)후보 오브젝트는 smart해야한다.
       -그들은 시스탬에 어떤일을 한다.
       -뿐만아니라 그들은 너의 시스탬에 대해서 알고 있는것들이다
        그러나 그들이 알고 있는것에 대해서 일을한다.
     2)그래서 그들이 책임과 그들의 관계가 명확할때 첫번째의 명확한 역확을 가진
       다른 오브젝트를 찾는다.
2.너의 디자이인에서 연관된 키를 이해하고 중심오브젝트를 충분히 가진뒤에
     클래스와 인터페이스를 찾을것이다.
      1)일반적인 속성과 행동 그리고 일반적인 책임을 갖는 오브젝트가 무엇인지를
         명확히 해라

(5)Getting Started : Design Story

1.보다 쉽게 오브젝트를 찾을수 있게만든다.
     :너의 어플리케이션에 대해 stroy를 쓰는것은 쉽게 후보 오브젝트를 찾을수있는
     프래임워크를 만든다.
     1)이것은 적절하게 후보오브젝트를 정의할수 있게 하고 너의 story에 다양한
        관점을 제공한다.
     2)story는 오직 기술적것을 포함하지 않는다 하지만 아래 디자인은 소프트웨어에
        대한 관점을 가지는 목표들 있다.
       어떠것이 좋은 것인가?,하기위해 무슨 노력을하고 있는가?불확실한것들은
       무엇인가?
        -다양한 소스들,유즈케이스나 다른 요구사항,시스탬 아키택쳐,사용자들 등
          로부터 정보를 취합하도록 노력해라.

(6)Design Stroies : How to do it

1.대충 글을 써라:많게나 적게 한단락으로
     1)많은시간을 들여 정정하거나 다듬지 말아라
     2)어플리케이션의 특징은 무엇인가? 무엇을 해야하는가?
     3)실세계와 연결되어있는가?
     4)전에 비슷한것을 해본적이 있는가?
2.만약에 사람이 많은 디자인 팀이라면
     1)먼저 너의 자신의 이야기를 적고 다른사람들의 이야기와 합쳐라
3.각 이야기의 중요한 주제를 정의하도록 노력해라.

(7)Search Strategies

   1.디자인 스토리들은 후보자를 찾기위해 이끌어준다.
   2.후보오브젝트는 아래 카테고리들중 하나에 속할것이다.
     1)시스탬을 실행하는 일을한다.
     2)바로 영향을 미치거나 연결되어 어플리케이션에 일을한다.
     3)information은 소프트웨어를 통해 흐른다.
     4)making,control and/or coordination 활동들을 결정한다.
     5)Structure 과 그룹화된 오브젝트
     6)도메인 영역들
   3.위 카테고리말고 남아있는거은 무엇인가?

(8)Role Stereotypes

1.토론하기 전에,오브젝트는 명확한 역확을 가지고 있고 그역활은 대부분
   stereotypes과 매치될것이다.
     1)만약에 시스탬을 실행되도록 일한다면 , service provider를 찾아라
     2)시스탬 다른시스탬과 연결되어있다면, interfacers를 찾아라
     3)시스탬의 많은 이벤트를 관리한다면 ,controller를 찾아라
     4)시스탬의 많은 정보를 조작한다면, structure를 찾아라

(9)What's in a Name

1.후보 오브젝트는 명확한이름이 필요하다.
     -오브젝트의 이름을 말할때,디자이너들은 오브젝트의 역활에 대해서 무엇인지를
       예측할수 있어야한다.
2.오브젝트의 이름은 책임들의 적절한 이름으로 만들어야한다.
3.Wirfs-Brock 과 McKean은 후보 오브젝트이름을 정하는 몇가지 교수법을 알려준다.
     -한 어플리케이션에 동시에 복잡한 naming systems을 존재하는것을 적었다.

(10)Naming Heuristics

1.일반적인 이름을 선정해라
      1)책임들의 일반적인것과 행동들의 특별한 점을 둘다 고려한다.
        -Calendar vs. GregorianCalendar vs. JulianCalender
2.이름에는 오직 두드러지거나 표출된 사실들을 포함한다.
     -Timer vs.MillisecondTimerAccurateWithinPlusOrMinusTwoMilliseconds(x)
3.service providers들은 worker이름을 짓는다.
     -StringTokenizer, SystemClassLoader, AppletViewer, etc.
4.이름이 책임들은 폭넓게 가지고 있으면 추가적인 오브젝트를 적용한다.
     -AccountingService는 유용한 이름이긴 하지만 실질적으로 더 특징적인 서비스들로
      바꾸어져야한다.->PaymentService or TransferFundsService
     -일반적인 이름을 유지하기 위해서는 최소한 3가지의 특별한점을 생각해야된다.
       반면에 이름을 잊어버릴수있다.
     -전체의 지나치게 제한하는 않는 충분한 의미를 전달하는 이름을 골라라,
       이것은 마술이다.
5.현재 디자인 context에 적당한 이름을 골라라.
6.이름을 중복해서 쓰지 말아라
     -비록 OO언어에서 지원하긴하지만 쓰지말아라.
7.형용사를 추가하거나 유사어을 이용하여 이름의 중복을 피해라
8.빠르게 이해할수 있는 이름을 골라라.

(11)Describing Candidates

1.CRC카드를 이용하여 후보 오브젝트를 묘사해라
     -이름,description, role stereotypes 기록해라
2.후보오브젝트를 묘사할때는 패턴들을 사용해라

(12)Connecting Candidates

1.클러스트된 후보오브젝트들은 새로운것들을 찾고 명확한것을 정한는데 도움을 준다.
2.새로운 시야로 클러스트된 후보오브젝트들은 재정렬하는것은 자유다.
3.아래와 같이 클러스트하도록 노력해라.
      -application layer
      -use case
      -stereotype role
      -object neighborhood
      -abstraction level
      -application theme

(13)Looking for Common Ground

1.지난번에 다른 후보오브젝트를 묶는것을 했지만 이번에는 공통점을 찾는데
   노력할 시간이다.
2.공통점은 너가 classes and interfaces을 정의하는데 도움을 준다.
3.전략
      1)공통적인 규칙과 강력한 추상화를 찾아라
        -Car, Boat, Bike, Tractor ! Vechicle
      2)적당한 추상화의 레벨을 찾아라.
        -ChessMove vs. PawnMove, RookMove, etc.
      3)공통역활로 대신할수 있다면 후보오젝트는 버려라.
        -Book, CDs, DVDs, etc. ! InventoryItem

(14)Defending Candidates

1.왜 각각의 후보 오브젝트 가치를 유지해야하는지를 말할수있어야한다.
2.아래의 예라면 후보오브젝트를 유지할수있다.
      -좋은 이름을 가졌다.
      -정의하고 stereotype이 있다.
      -유즈케이스에서 사용할수 있음을 보여주었다.
      -하나 나 둘의 책임을 가지고 있다.
      -다른 오브젝트가 이 오브젝트를 이해할수 있다.
      -비슷한 후보오브젝트 로 부터 분리됬다.
3.아래와 같은 경우는 후보오브젝트를 버려라.
      -다른 후보오브젝트와 책임이 겹치는데 그책임이 다른 오브젝트가 더 좋은때.
      -모호함을 가질때
      -scope의 밖을 벗어난것 같은때
      -디자인으로 부터 추가된 가치가 없을때
      -별거아니거나,별로 똑똑하지 않거나, 필요한것을 만들기위해 너무 많을때.

CRC Card
사용자 삽입 이미지

원글:Finding Objects
Posted by 전용우
,
RDD분석 순서

(1)프로젝트 정의와 계획


(2)RDD Design

참고한곳:Overview of Responsibility-Driven Design
Posted by 전용우
,
요즘 회사에서 커서문제 때문에 말이 많다.
바인딩을 사용해서 좀 줄여보자.

1.객체를 생성한다
create or replace type bindTable
as table of number;
/

2.바인딩을 처리할 함수를  만든다
create or replace function parameterChangeIn(p_str in varchar2) return bindTable
as
l_str long default p_str||',';
l_n number;
l_data bindTable := bindTable();

begin
    loop
        l_n:= instr(l_str ,',');
        exit when (nvl(l_n,0)=0);
        l_data.extend;
        l_data(l_data.count) := ltrim(rtrim(substr(l_str,1,l_n-1)));
        l_str := substr(l_str,l_n+1);
    end loop;
    return l_data;
end;
/

3.바인딩변수를 선언한다.
variable bind_variable varchar2(30)
exec :bind_variable := '1,3,5,7,99'

4.테스트를 해본다.
 
select *
   from table (cast(parameterChangeIn(:bind_variable) as bindTable));

5.적용하기
 
select *
   from all_users
   where user_id in(select *
                            from table (cast(parameterChangeIn(:bind_variable) as bindTable)));

6.실질적으로 자바의적용할땐
StringBuffer strSQL = new StringBuffer();
strSQL.append(" select * ") ;
strSQL.append(" from all_users ") ;
strSQL.append(" where user_id in(select * ") ;
strSQL.append("                          from table (cast(parameterChangeIn(?) as bindTable)) ") ;
psmt = con.prepareStatement(strSQL.toString());
psmt.setString(1,'1,2,3,4,5');

원문)expert one-on-one Oracle

Posted by 전용우
,
사용자 삽입 이미지

Object



사용자 삽입 이미지

Roles, Responsibilities,Object,Collaborations,and Contract


Information holder knows and provides information.

Structurer maintains relationships between objects and information about
those relationships.

Service provider performs work and, in general, offers computing services.

Coordinator reacts to events by delegating tasks to others.

Controller takes decisions and closely directs others' actions.

Interfacer transforms information and requests between distinct parts of
our system.


Object Role Stereotypes



사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

Architectural Styles


Keyword : object,role,responsibility,collaboration,contract

참고:
1장을 위한 참고 그림 덧붙임
오브젝트 디자인
role stereotype
Posted by 전용우
,

Scope in Javascript

프로그래밍 2006. 12. 20. 15:21

요즘 prototype을 뜯어 보구 있는데 생각보다 벽[각주:1]이 높다..ㅡㅡ;

내가 제일 헤갈린것이 this의 scope였다.
모든 this가 같은 this인줄만 알았는데..완전 잘못알았다.
그래서 구글링을 하던중 아주 좋은 아티클을 본 덕분에 어느정도 감을 잡았다.

그래도 나는 나의 기억력을 알고 있기때문에 위의 아티클을 중심으로
일단 정리를 하도록 한다..ㅡㅡ;

이 아티클에서는 4개의 정도의 this를 설명하고 몇개는 this의 scope의 대한 얘기를 한다.

1.Calling an Object’s Method

<script type="text/javascript">                                             
  var deep_thought = {
   the_answer: 42,
    ask_question: function () {
      return this.the_answer;
    }
  };
 
  var the_meaning = deep_thought.ask_question();
</script>

즉,Object에서 method를 호출할때의 this는 호출한 본인을 뜻한다.
간단히 말하면 호출한 함수의 "."앞에의 Object를 의미한다.
위에서 the_meaning은 42가 나타난다.


2.Constructor

  function BigComputer(answer) {
    this.the_answer = answer;
    this.ask_question = function () {
       return this.the_answer;
    }
  }
 
  var deep_thought = new BigComputer(42);
  var the_meaning = deep_thought.ask_question();

new 키워드를 가지고 생성자를 사용하는 함수인경우의  this의 의미는 새로 생긴
object를 말한다.
위의 예를 들면 BigComputer의 바로 밑에 있는 this는 this.the_answer,this.ask_question들은 deep_thought을 지칭한다.[각주:2]
하지만 this.ask_question안의 this.the_answer는 좀 다른 의미를 가지고 있다.[각주:3]
2차 this는 다른 변수와 달리 scope chain[각주:4]에서 읽어 오는것이 아니라 단순히 deep_thought에서 읽어온다.
즉,2차 this는 현재 기본 context를 참고한다.
위의 같은경우는 하나의 context이기 때문에 상관없지만  아래의 예인 Complications의 경우는 context가 여러개여서 틀려진다.


3.Function Call

  function test_this() {
    return this;
  }
  var i_wonder_what_this_is = test_this();

이번경우는 아무것도 없이 this를 리턴하게 되면 window object가 반환된다.


4.Event Handler


이벤트 핸들러에서의 this는 종류가 두가지 이다.

첫번째로는 아래와 같이 이벤트 핸들러를 인라인으로 사용했을경우

  function click_handler() {
    alert(this); // alerts the window object
  }

...
<button id='thebutton' onclick='click_handler()'>Click me!</button>

이렇게 한다면 click_handler의 this는 생각했던 dom이 아니라 window object가 된다.


2번째 방법은 javascript에서 이벤트 핸들러를 정의한경우.

  function click_handler() {
    alert(this); // alerts the button DOM node
  }
 
  function addhandler() {
    document.getElementById('thebutton').onclick = click_handler;
  }
 
  window.onload = addhandler;
...
<button id='thebutton'>Click me!</button>

위와 같이 정의 한다면 click_handler의 this는 button의 dom객체가 된다.


5.Complications

function BigComputer(answer) {
  this.the_answer = answer;
  this.ask_question = function () {
  alert(this.the_answer);
  }
}
 
function addhandler() {
  var deep_thought = new BigComputer(42),
  the_button = document.getElementById('thebutton');

  the_button.onclick = deep_thought.ask_question;
}
 
window.onload = addhandler;

위는 좀 복잡하지만 자주쓰는 부분이므로 알아보자.
위의 예는 thebutton의 엘리먼트의 onclick이벤트에 addhandler를 추가하는 내용이다.
언뜻보기에는 큰문제가 없다.

예상대로라면 당연히 thebutton을 클릭할경우 '42'가 호출할것을 예상한다.
하지만 undefined가 나온다.위의 내용을 이해했다면[각주:5] 쉽게 알수 있을것이다.
이유는 현재 이벤트 핸들러의 context안에 BigComputer의 context가 있다.
그렇기 때문에 1차this는 scope chain에 의해서 deep_thought을 나타내고 2차this는 현재 기본context인 이벤트핸들러를 지칭한다.그래서
이벤트 핸들러의 the_answer를 찾게된다.하지만 없기 때문에 undefined가 나오는것이다.
(setTimeout의 함수롤 비슷한 행동을 가지고 있다.)


6.Manipulating Context With .apply() and .call()

그럼 위와 같이 event 나 setTimeout을 동작할때 native context[각주:6]
일단은 해결할수있는 메소드가 2개있다[각주:7]
이메소드는 this를 명확히 지칭해주므로 context을 고정할수 있다.

일단 간단한 예로 call,apply의 사용법을 알아보자.

var first_object = {
  num: 42
};
var second_object = {
  num: 24
};
 
function multiply(mult) {
  return this.num * mult;
}
 
multiply.call(first_object, 5); // returns 42 * 5
multiply.call(second_object, 5); // returns 24 * 5
......
multiply.apply(first_object, [5]); // returns 42 * 5
multiply.apply(second_object, [5]); // returns 24 * 5

먼저 call을 보면 의미는 multiply를 호출하는데 this의 대상은 first_object이고 파라메터는 5이다.[각주:8]
그렇기 때문에 그냥 multiply(5)를 하면 this.num 이 없어서 오류가 나지만 this를 first_object로 정했기 때문에 에러가 나지 않는다.
두분째의 apply는 call과 모드 같은 말이지만 파라메터에 차이가 있다.apply의 두번째인자는 해당함수의 파라메터를 뜻하는데 배열형태를 이룬다.
즉,파라메터가 유동적으로 변하거나 할때에 유용히 사용된다.

그럼  call을 가지고 아까의 문제를 해결해보자.

function addhandler() {
  var deep_thought = new BigComputer(42),
  the_button = document.getElementById('thebutton');
 
  the_button.onclick = deep_thought.ask_question.call(deep_thought);
}
위와 같이 call을 할때 this를 대신할 object를 넘겨주므로서 2차 this는 deep_thought을 참조하게 되고 정상적으로 출력이 된다.


7.The Beauty of .bind()

이와 같은 문제점을 해소하기 위해서 Prototype JavaScript framework 에서는
편리한 방법으로 아래와 같은 멋진 메소드를 제공한다.[각주:9]
Function.prototype.bind = function(obj) {
  var method = this,
  temp = function() {
    return method.apply(obj, arguments);
  };
 
  return temp;
}

multiply.call(first_object, 5); 이렇게 표현했던 방식이 multiply.bind(first_object); 으로 바뀐다.

원문:Scope in JavaScript

요즘 prototype.js을 공부하고 있는데 생각보다 어렵다.
할건 너무 많은데..생각만큼 속도가 안나네..

  1. 그누가 자바스트립트가 쉬운 언어라고 했던가... [본문으로]
  2. 해당this는 1차 this로 표현 [본문으로]
  3. 해당this는 2차 this로 표현 [본문으로]
  4. 참고:scope chain [본문으로]
  5. 결코 이해했을거란 생각을 안한다.내가 생각해도 글을 잘못쓰는것 같다.ㅡㅡ; 이해가 잘안된다면 원문을 읽기를 추천합니다. [본문으로]
  6. 자신의 context,위에서 보면 이벤트가 아닌 BigComputer의 context을 말함. [본문으로]
  7. 이것 이외에도 this 바꿔치기가 있습니다. [본문으로]
  8. 다 알고있겠지만 저같은 초보자분들을 위해.. [본문으로]
  9. bind 이외에도 bindAsEventListener가 있음. [본문으로]
Posted by 전용우
,

javascript를 사용하다보면 exception을 handing하고 싶은경우가 있다.
에러가 나면 ie에서 노랗게 경고메세지를 알리는경우가 있는데 그렇게하면 알기가 힘들다.
물론 각종 툴을 사용하면 알수가 있으나 그렇게 하는것보다 exception을 handing하면
좀더 효율적으로 작업을 할수가 있을것 같았는데 전혀 방법도 몰라 할수없었다.
이번기회에 exception을 공부할기회가 있어서 정리 하도록한다. ㅡㅡ;

javascript 역시 다른 언어 같이 exception이 있다.
그리고 try,catch,finally,thorw 역시 존재한다.

그래서 간단히 exception의 사용법을 알아 보도록하자.
기본적은 구문은 다른 언어와 같이..

try{
.........
}catch(e){
.........(throw expression;)
}finally{
.........
}

이런식으로 사용된다.
물론 알겠지만 간단히 설명하면
try구문에서 exception이 일어나면 catch문으로 exeption을 처리할수도 있고
throw을 던져 처리할수도 있다.
마지막으로 finally을 실행한다.
(finally는 자원의리소스 반납등을 할때 사용된다.
이부분은 잘사용하게 되면 메모리 릭현상을 방지할수 있다.)
일반적은 언어와 크게 차이 없음.


그리고 exception에는 javascript 1.5기준으로 하여 아래 6가지가 있다.

EvalError - 잘못된 방법으로 eval()을 사용했을때.
RangeError - 허락되는 숫자범위를 넘쳤을때.
ReferenceError - 허용되지 않는 참조를 사용했을때.
SyntaxError - 자바스크립트 파싱중 syntax에러 났을때.
TypeError - 사용할수 없는 변수를 썼을때.
URIError - encodeURI() 나 decodeURI()을 잘못된 방법으로 썻을때.

이 exception들은 name,message라는 2가지 프로퍼티를 갖고 있는데.
당연히도 name은 exception의 이름,message는 exception의 message를 말한다.

그리고 instanceof을 사용하여 exception을 구별해 사용하기도 한다.


만약에 사용자정의 exception을 가지고 만들고 싶다면.

function UserException (message) {
  this.message=message;
  this.name="UserException";
}
myUserException=new UserException("Value too high");
throw myUserException;

이런식으로 자신의 exception을 만들어서 사용할수도 있다.
(물론 이름은 맘대로 정해도 상관없음.)


요즘 갈수록 javascript의 사용이 늘고 거대화지면서 서버코드를 할때와 같이
exeption과 logging전략이 필요한것 같다.


참고한곳:
Core JavaScript 1.5 Guide:Exception Handling Statements:try...catch Statement
JavaScript Exception Handling
Posted by 전용우
,

datasource 넣기

프로그래밍 2006. 12. 16. 06:35
늘 유지보수만 하다가...친구부탁으로 간단히 뭐좀 만들려고 하는데..완전 삽질했다..
확실히 깨달은건..알고있다고 해서 다되는건 아니였다..ㅡㅡ;



1.반드시 C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib
  에다 ojdbc14.jar를 넣는다.(이클립스에서 가져오기하면 잘안됨..이걸로 삽질5시간..)

2.server.xml에 host 하부엘리먼트로 아래 코드넣는다

3.web.xml에는 아래 코드를 추가한다.

4.ConPoll을 만든다.
Posted by 전용우
,


1.변수는 블록레벨 범위가 없다.


2.기본형과 참조형


3.프로퍼티 정의방법.


4.Prototype 과 상속
5.인스턴스변수(메소드)와 클래스변수(메소드)

6.함수
7.super class 와 sub class
8.Garbage collection
9.Exception
10.Scope
Posted by 전용우
,

Tool
aptana:http://www.aptana.com/(강추-이클립스기반)
jsecilpse:http://www.interaktonline.com/Products/Eclipse/JSEclipse/Try-Download/
             (이클립스플러그인-위에꺼가 더좋은것 같음)
GTW : http://code.google.com/webtoolkit/

Javascript Library
Jquery : http://jquery.com/demo/thickbox/
moo.fx : http://www.moofx.mad4milk.net/
dojo toolkit : http://www.dojotoolkit.org/
mochikit : http://www.mochikit.com/about.html
JSPON(JavaScript Persistent Object Notation) : http://www.jspon.org/
qooxdoo : http://qooxdoo.org/
JavascriptLint : http://www.javascriptlint.com/
Yahoo! JavaScript Developer Center : http://developer.yahoo.com/javascript/
Prototype : http://prototype.conio.net/
script.aculo.us : http://script.aculo.us/
javascript manual :http://koxo.com/lang/js/
ajaxpattern : http://ajaxpatterns.org/
dom manual: http://developer.mozilla.org/en/docs/Gecko_DOM_Reference
                  http://developer.mozilla.org/ko/docs/Gecko_DOM_Reference

Javascript Articles
Script.aculo.us Behaviour Driven Development Testing :
http://ajaxian.com/archives/scriptaculous-behaviour-driven-development-testing

New in JavaScript 1.7 :
http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7
The Decorator Pattern for JavaScript :
http://beppu.lbox.org/articles/2006/08/22/the-decorator-pattern-for-javascript
SmoothMovingLayer:
http://hyeonseok.com/pmwiki/index.php/Javascript/SmoothMovingLayer
Transparent Messages in JavaScript:
http://ajaxian.com/archives/transparent-messages-in-javascript
http://firejune.com/index.php?pl=971
A flexible slideshow:
http://www.madb.net/slideshow/
http://smoothslideshow.jondesign.net/index.html
Lessons in JavaScript Performance Optimization:
http://ajaxian.com/archives/lessons-in-javascript-performance-optimization
bytefx: simple effects:
http://ajaxian.com/archives/bytefx-simple-effects
Upgraded jQuery Spy:
http://leftlogic.com/info/articles/jquery_spy2
Dynamic Graphics in the Browser:
http://ajaxian.com/archives/dynamic-graphics-in-the-browser
Yahoo! Browser-Based Authentication:
http://ajaxian.com/archives/yahoo-browser-based-authentication
Fresh Logic Studios Scripts: OO JS
http://ajaxian.com/archives/fresh-logic-studios-scripts-oo-js
Ajax MVC:
http://ajaxian.com/archives/ajax-mvc-so-to-speak
http://www.alexatnet.com/Blog/Index/2006-08-04/javascript-model-view-controller-with-dojo-toolkit
Adventures in JavaScript testing:
http://ajaxian.com/archives/adventures-in-javascript-testing-slides
Ajax & REST :
http://www-128.ibm.com/developerworks/java/library/wa-ajaxarch/
Eliminating async Javascript callbacks by preprocessing :
http://ajaxian.com/archives/eliminating-async-javascript-callbacks-by-preprocessing
IE + JavaScript Performance Recommendations :
http://blogs.msdn.com/ie/archive/2006/08/28/728654.aspx
Dramatically improved IE7 JavaScript performance :
http://ajaxian.com/archives/dramatically-improved-ie7-javascript-performance
http://ajaxian.com/archives/improved-javascript-performance-in-ie7
Scope in JavaScript :
http://www.digital-web.com/articles/scope_in_javascript/
Ajax services :
http://www.agmweb.ca/blog/index.php?p=50
Live Filter :
http://unspace.ca/discover/livefilter/
JavaScript control of throbber :
http://sandbox.sourcelabs.com/wikiality/throbber
Objectifying JavaScript :
http://www.digital-web.com/articles/objectifying_javascript/
Prototype Carousel Widget :
http://ajaxian.com/archives/prototype-carousel-widget
Tracking Ajax Requests in Analytics
http://www.ajax-blog.com/tracking-ajax-requests-in-analytics.html
jQuery Image Gallery: Transitions, thumbnails, reflections
http://ajaxian.com/archives/jquery-image-gallery-transitions-thumbnails-reflections
정규식
http://bluebreeze.co.kr/tag/정규식
Hacking Web 2.0 Applications with Firefox
http://www.securityfocus.com/infocus/1879
Usability for Rich Internet Applications(필히읽어보세요)
http://www.digital-web.com/articles/usability_for_rich_internet_applications/
AJAX Feedback Mechanism
http://www.ibegin.com/blog/p_ajax_feedback_mechanism.html
Making Javascript DOM a Piece of Cake with the graft() Function
http://schf.uc.org/articles/2006/10/15/making-javascript-dom-a-piece-of-cake-with-the-graft-function
Ajax Loding image
http://www.ajaxload.info/
Fixing the Back Button and Enabling Bookmarking for AJAX Apps
http://www.contentwithstyle.co.uk/Articles/38/fixing-the-back-button-and-enabling-bookmarking-for-ajax-apps
Tuning AJAX
http://www.xml.com/lpt/a/2005/11/30/tuning-ajax-performance.html
Ajax indicators
http://www.napyfab.com/ajax-indicators/

CSS Library
각종CSS : http://www.dynamicdrive.com/style/  
W3C 규격 번역문 :http://trio.co.kr/
Yahoo! Design Pattern Library : http://developer.yahoo.com/ypatterns/
Yahoo! UI Library (YUI) : http://developer.yahoo.com/yui/

CSS Articles
Architecting CSS:
http://www.digital-web.com/articles/architecting_css/
transcorners:
http://inviz.ru/moo/meet-transcorners
12 Lessons for Those Afraid of CSS and Standards:
http://ajaxian.com/archives/12-lessons-for-those-afraid-of-css-and-standards
A CSS Crossfader :
http://mikeomatic.net/?p=78
Push my button :
http://www.digital-web.com/articles/push_my_button/
Details on our CSS changes for IE7
http://blogs.msdn.com/ie/archive/2006/08/22/712830.aspx
폼 css
http://www.badboy.ro/articles/2005-07-23/index.php
테이블 css
http://icant.co.uk/csstablegallery/index.php?css=2

Posted by 전용우
,

초보 벗어나기  프로젝트 제2탄

자료구조와 알고리즘 공부하기



자료구조책표지
대학교때 심한 결석과 무분별한 땡땡이로 공부를 안한터....

너무나 소홀히 했던 기초다듬기을 해야겠다는 생각이 들어서..시작한 웹표준이 이어 두번째 공부









가.배열(Array)

  1. 모두 같은 자료형에 순서가 있게 구성된 집합.
  2. 인덱스로 접근가능.
  3. 연산속도
    3-1.중복을 허용할경우 검색은N번 비교,중복을 허용안할땐 N/2번 비교
    3-2.중복을 허용할경우 삽입은1번 옮김,중복을 허용안할땐 1번 옮김
    3-3.중복을 허용할경우 삭게은N번 비교후 N/2번 이상 옮김,중복을 허용안할땐 N/2번
         비교후 N/2번이상 옮김.

나.리스트(List)

  1. 고정된 길이의 자료들을 순차적으로 나열해 놓은 집합을 가리키는 자료구조의 추상적인개념
  2. 배열과 연결리스트(LinkedList)방식이 있음(흔한 말하는 리스트는 후자를 말함)
    2-1.배열은 인덱싱이 O(1)이고 연결리스트O(n)이다.
    2-2.배열의 자료삽입은 O(n),연결리스트는 O(1)이다.
    2-3.배열의 자료삭제는 O(n),연결리스트는 O(1)이다.
    2-4.배열의 지역성은 좋다,연결리스트는 나쁨.(연결성이란 밀집도를 뜻함.)
  3. 연결리스트의 종류
    3-1.단순연결리스트(singly linked-list):헤더를 기준으로 노드가 존재하며 각 노드에는
         데이터와 포인터로 구성되어있으며 단방향성을 가지고 있음.
    3-2.이중말단연결리스트(double-ended linked-list):단순연결리스트와 별다른점이 없으나
         헤더에 첫노드와 마지막노드의 포인터가 있음.
    3-3.이중연결리스트(double linked-list):단순연결리스트의 단점인 단방향을 제거하기 위해
        각노드에 앞노드,뒤노드의 포인터를 가지고 있음

다.스택과 큐(stack and queue)

  1. 스택(stack):후입선출방식(Last-In-First-Out)의 데이터구조
  2. 큐(queue):선입선출방식(First In First Out)의 데이터 구조
  3. 원형큐(circular queue):큐를 사용시 입력후 삭제하면 데이터의 공간이 생기는데 그것을 재사용하기에 힘듬.그래서 삭제된 공간을 재사용하기 위한 나온 큐.
  4. 데크(deque(double-ended queue)):스텍이나 큐와 다르게 이것은 앞뒤로
    입력과 출력이 가능.
  5. 우선순위 큐(priority queue):순서가 있는 큐.

라.탐색(search)

  1. 선형탐색
    1-1.일일이 탐색하기 때문에 시간이 양에 완전 비례한다.
    1-2.양이 작을때 유용.
  2. 이진탐색
    2-1.분할을 한다음에 찾기때문에 시간이 많이 단축됨.(log2n)
    2-2.하지만 순서대로 있어야 하기 때문에 삭제나 수정시 엄청난 수고가 필요.
  3. 이진트리탐색
  4. 그래프탐색

라.기본정렬(sorting)

  1. 버블정렬(bubble sort)
    1-1.처음항목에서 차례로 앞에 항목과 비교하여 정렬하는방법.
    1-2.제일 편한방식이긴하나 성능이 제일떨어짐
  2. 선택정렬(selection sort)
    2-1.하나의 기준으로 차례로 비교하여 정렬하는 방식
    2-2.버블정렬과 속도는 비슷하나 자리바꿈의정도가 적다.
  3. 삽입정렬(insert sort)
    3-1.어느정도 정렬된 상태에서 중간에 값이 나오면 일단 뒤에 항목을 뒤로 밀고 앞에
    끼워넣는 방법
    3-2.제일 효율적인 방법이나 어느정도 정렬된 상태에서 유리함.

ps.정렬테스트 페이지

라.개선된정렬(sorting)

  1. 쉘정렬(Shell Sort)
    1-1.삽입정렬의 단점을 극복하고 장점을 살린방법
    1-2.일정한 간격(크누스간격)을 두고 여러개의 배열을 구성하여 먼저 순서를정렬한다음에
         삽입정렬로 마무리하는것.
  2. 퀵정렬(Quick Sort)
    2-1.피벗이란 하나의 대표되는 수를 정하여 좌측엔 피벗보다 작은것들 오른쪽에는 높은걸들을 배치한다.
    2-2.그다음에 또다른 피벗을 정하고 재귀적은 호출로 계속하여 정렬한다.
    2-3.가장 빠른 정렬이다 하지만 중간값을 정확히 구하는게 관건
  3. 기수정렬(Radix Sort)
    3-1.음수가 아닌 숫자로만 이루어진 데이터구조에서 각자리를 비교하여 정렬하는 방식
    3-2.정렬시 숫자들을 정렬테이블을 이용하기 때문에 메모리 사용이 많음.

마.재귀(recursion)

  1. 자신의 함수를 다시 호출하는것
  2. 장점:간단히 표현가능,소스 보기 편함
  3. 단점:함수를 여러번 사용하기 때문에 메모리가 오버플로우가 생길수 있음.
  4. 참고문헌:재귀적 지역정렬을 이용한 프로그램 표절 탐색

Posted by 전용우
,