1.Caching with Instance Variables

User.find(session[:id]) 이렇게 사용하면 매번 쿼리를 날리지만
@current_user ||=  User.find(session[:id]) 이렇게 하므로서 없을때만  DB에 접속.

2.Dynamic find_by Methods

@tasks = Task.find(:all,:conditions => ['complete = ?',false])
이렇게 쓰는것을 아래 처럼 dynimic_find_by methdod를 이용하여 좀더 의미있게 바꿈
@tasks = Task.find_all_by_complete(false)

3.Find Through Association

htm에서
@project = Project.find(param[:id])
@tasks = Task.find(:all,:conditions => ['project_id =? AND complete = ? ',@project.id,false])
이런식으로 사용되는데 아래와 같이 바꿀수 있음
@tasks = @project.tasks.find_all_by_complete(false);

4.Move Find into Model


Task controller에서
@tasks = Task.find_all_by_complete(false,:order => 'created_at DESC)

이렇게 사용하는데 이것을 Task model의 클래스 매소드를 이용하여
def self.find_incomplete
  find_all_by_complete(false, :order => 'created_at DESC')
end

@tasks = Task.find_incomplete 이렇게 수정할수있고

project controller에서도
@tasks = Task.find_all_by_complete(false,:order => 'created_at DESC)
->@tasks = Task.find_incomplete
이렇게하면 좀더 의미있는 매소드로 만들수 있고 재사용하기 편함.

5.Using with scope(유용)

커스텀된 find메소드에 with_scope을 이용하여 파마메터를 전달하는 방법.

6.Shortcut Blocks with Symbol to_proc

블록사용을 좀더 쉽게하는 방법
find(:all).collect{|p| p.name}
이렇게 사용하는데
find(:all).collect(&:name)이렇게 사용하는거랑 같은 표현.

참고사이트:Railscasts

거의 애자일 레일즈에서 본내용인데 그냥 정리하는 차원에서 정리 좀 해야겠다.
나머지는 낼.

Posted by 전용우
,
레일즈의 액티브레코드를 다루다보면 당연히 conditions을 자주 사용하게 된다.

그런데 그냥 conditions절에 저수준의 sql문을 사용하다보면 불편할때가 많다.
그래서 가능하면 루비에서 지원하는 고수준의 conditions절을 사용하면 이런한 불편을 덜어낼것 같다.

나두 그냥 공부하다가 거의 저수준의 conditions절을 쓰는데 이영상을 보니깐 습관을 바꿔야겠다.레일즈가 똑똑하긴 하네..^_^

이젠 공부도 어느정도 끝났는데 뭐라도 한번 만들어봐야징!!


ps.레일즈에 관심 있는 분이라면 이곳에 한번 들어가서 보시면 좋을것 같습니다.
짧고 간단해서 보기도 싶고 영어로 하긴하지만 코드만으로 충분히 이해하기 쉬어서 볼만합니다


Posted by 전용우
,
요즘 데이터 표기법으로 사실상 표준인 json을 많이 사용하는것 같다.
물론 많은 보안 문제로 말이 많기는 하지만  올바르게 사용한다면 편리하고 괜찬은것 같다.
어떤사람은 기본적으로 브라우져에 파서가 있어야 한다고 하는것 보면 언젠가는 java에서도 xml처럼 json과 관련 파서가 기본으로 들어가지 않을까 싶다.

요즘 많은 자바관련 json유틸이 나오는것 보니깐 그런 생각이 드넹.
Posted by 전용우
,

루비의 symbol

프로그래밍 2007. 3. 12. 06:51

요즘시간이 생기면서 무엇을 할까 하다가..
그동안의 숙원이었던 루비를 공부하고 있는데...
:<- 심볼의 의미를 잘 몰랐다..상수 같다라는 의미같았는데...
어떨때 쓰는지도 모르겠고..ㅡㅡ;

근데 다행히 어떤분이 이것에 대해 번역하신 글이 있어서 이해하는데 큰도움이 됬다.

ps.원문은 링트가 깨져서 도저히 못찾았습니다.그래서 구글신의 도움으로 캐쉬된링크를 걸었으니 이해 바랍니다.

Posted by 전용우
,

1.5.1 rc가 나왔습니다.

자세한 내용은 이곳을 보면될것 같습니다..

다른 업데이트 별로 관심이 안가는데 그동안 메일링리스트에서 문제가 됬던.
1.4에서 1.5로 업그레이드할때 json.js를 같이 사용할경우 request가 작동이 안되는
문제가 있었는데. 그것이 해결됬네요.

문제의 원인으로는 prototype.js를 사용할경우 Object를 확장시킬경우 문제가 된다고 합니다.
그래서 json.js의 Object.toJSONString 매소드때문에 문제가 됬었는데
이번 버전에서는 json.js제공하는 것을 모두 제공하니 더이상 쓸필요가 없게 됬습니다.

저도 Json-lib을 공부하던중 json.js를 사용했는데 이상하게 안되서 몇일을 삽질하다가
메일링을 보고 해결했는데 다른 분도 이런경험이 있다면 json.js를 빼고 1.5.1 rc를 다운받아서 하시면 해결될겁니다.
보니 사용법은 똑같으나 한번 확인하실려면 이곳을 보시고 확인하시면 되겠습니당.

다운로드

ps.아 그리고 보니 이젠 encoding과 decoding도 같이 지원한다고 하네요.:)

Posted by 전용우
,

Input Fields and Labels 가독성,다양한 액션에 이은 오류 문제

음..그렇군..:)

ps.이런 문제는 이걸로 해결될수 있을까?


Posted by 전용우
,

파이어폭스에선 위에 두가지 이벤트를 제공한다.

첫번째 capturing 이벤트는 이벤트가 상위 노드부터 시작하여
하위노드로 내려가는 형식이다.

capturing


두번째 방식은 bubbling방식 이방법은 위에 capturing방식과 반대로
실행이 되는노드를 시작으로 상위노드로 올라가며 이벤트를 발생한다.

bubbling

이렇게 두가지의 이벤트가 있으며

 

document.getElementById("아이디").”이벤트” = “함수”;


위와 같이 일반적인 방식은 bubbling방식으로 작동한다.
그리고 capturing방식은 ie에선 작동을 하지 않는다.


만약 prototype.js에서 capturing방식을 사용하고 싶을때는
Event.observe(element, eventName, handler[, useCapture = false]);

위에 useCapture부분을 true로 바꾸어서 등록하면된다.

그리고 scriptaculous에서 drag&drop구현시 한노드가 여러 Droppables에 등록되어있고
해당 Droppables의 zone이 겹쳐있으면 하위 Droppables의 이벤트만 실행된다. 이점을
이용하면 보다 편리하게 장바구니를 구현할수 있다.물론 레이어가 겹쳐있어도 그중에 하나가  Droppables zone이면 Droppables의 이벤트는 실행된다.

혹,capturing 이나 bubbling을 하기 싫다면 ie에선 window.event.cancelBubble = true;
그이외는 event.stopPropagation() 으로 막을수 있다.

참고글:DOM Design Tricks II
Posted by 전용우
,

Dom Scripting

프로그래밍 2007. 2. 7. 02:41

Dom Scripting Book Image
Dom Scripting

이책은 일단 쉽고,빠르게 읽을수 있고,유용하며 재미있다.
조금이라도 javascript을 알고있다면 너무 쉽게 읽을수 있다.
(시간이 없다면 3~10장까지만 보면됨.)


이책에 내용을 요약하자면.

  • Graceful degradation
    (만약에 자바스크립트를 잘 사용하고 있다면 자바스크립트가 없어도 사용자는
    네비게이션을 할수 있다.)
  • Unobtrusive JavaScript
    (자바스크립트는 부과적인 기능을 하는것이다.)
  • Backwards compatibility
    (뒤떨어진 환경에서도 가능해야한다.)

물론 위의글은 모두 정답이다.당연하고 기초적이긴 하지만 지키기에는 많은 노력이 뒤받침이되야한다.지금껏 해왔던 습관들을 버려야하고 기타 개발여건도 받쳐줘야하고..

내생각은 처음부터 하면 좋지만 여건이 안되면 나중에라도 서버단만 리팩토링을 하는것이 아니라 프론트도 리팩토링을 하면서 바꾸면 될것 같다.
 



 

  1. var value = element.attribute=value;
    var value = element.getAttribute(attribute); 같음. [본문으로]
  2. element.attribute=value;
    element.setAttribute(attribute)=value; 같음. [본문으로]
  3. node.childNodes[0];
    node.firstChild; 같음. [본문으로]
  4. node.childNodes[node.childNodes.length-1];
    node.lastChild; 같음. [본문으로]
  5. previousSibling은 반대. [본문으로]
Posted by 전용우
,
<textarea cols="50" rows="3" onclick="javascript:select();">

Highlight this text

</textarea>


별다른 코딩없이 코드를 복사하기 위해서 하이라이트 기능주기.
input box등에도 사용가능.

예제:


원글:Click to Hightlight all text: It’s Easier than you think.
Posted by 전용우
,

드디어 정식으로 prototype 1.5가 나왔습니당.

1.4를 잘 안써봐서 1.5와 정확히 어떤기능이 추가 되었느지는 모르지만
굉장히 많은 기능들이 있습니다.:) String,Templete...등
Ajax부분을 제외하고 모든 부분을 보았는데 재미있고 유용한 기능들이 많습니다.
기존의 정리하던 1.5rc2를 마무리해야 된다는 압박이..ㅡ,.ㅡ;

홈페이지도 이쁘게 바뀌었어습니다
그리고 중요한건 prototype의 큰단점으로 있었던 드디어 document api를 만들었습니다.
설명도 잘되있고 아주 좋습니다.^^


Posted by 전용우
,