Search Results for '루비'

7 POSTS

  1. 2008/09/05 Ruby에서 Comparable 구현 (2)
  2. 2008/08/27 Rails에서 OpenID 로그인 구현 (2)
  3. 2008/08/08 Rails 2.1로 21분만에 블로그 만들기
  4. 2008/07/24 웹 개발 2.0 루비 온 레일스 (5)
  5. 2008/07/12 Ruby URI Encoding
  6. 2008/05/18 ostream_iterator (2)
  7. 2008/04/06 나의 첫 Ruby 사용기 (4)

Ruby에서 Comparable 구현

2008/09/05 14:43

루비에서 Comparable 믹스인을 포함하면 클래스 비교 연산자(<, <=, ==, >=, >)와 between? 메서드가 추가된다. 이것을 가능하게 하기 위해서는 <=> 메서드만 있으면 된다. 즉, <=> 만 구현하고, Comparable 믹스인을 포함하면, 여섯개의 비교 함수를 얻을 수 있다.

each라는 반복자를 작성하고, Enumerable 모듈을 믹스인하면, map, include?, find_all 같은 메서드를 지원하게 된다. 그리고, <=> 메서드를 가지고 있으면, min, max, sort같은 메서드도 얻을 수 있다.

프로그래밍 루비 2판에서 발췌.


아래 두 링크를 참고해서 그대로 따라하면 된다.

로그인이 반드시 필요한 페이지들은, 컨트롤러 클래스 안에 before_filter :login_required 를 추가해주면 된다. 모든 페이지에 로그인이 필요하고, 몇몇 페이지만 그냥 보여줘도 된다면, ApplicationController에 추가해주고, 그냥 보여줘도 되는 페이지에만, skip_before_filter :login_required를 추가해주면 된다.

잡담: 하앍하앍. 이제, 로그인은 되는데, 로그아웃은 어떻게 하는거지? 사용자 정보는 또 어떻게 얻어오는거야? 아~ 정말 난감하다. Daum DevDay가 내일 모레인데, 아직껏 오픈API를 테스트 해보기는 커녕, 근처에도 못 가고 있다. 이번 행사에서 우리팀이 완성을 하면, 기적이 아닐런지?! 다같이 "벼락치기 레일스"같은 이름의 책을 써도 될 것 같다. 표지에는 "당신도 할 수 있다. 레일스 공부해서 몇 일만에 웹 서비스 만들기!" 정도로 써두고 말이지. 어때? 잘 팔릴 것 같지 않나?? 잘 나가면, 시리즈로 해도 될 듯. 벼락치기 PHP, 벼락치기 C++, 벼락치기 자바, 벼락치기 디자인패턴..

-- Jong10


Ruby on Rails 공식 사이트에는, 15분만에 블로그를 프로그래밍하는 유명한 동영상이 있다. 이는 Rails 1.2 대 버전을 기준으로 작성되었고, 大山님이 쓰신 책에 나오는 블로그 만드는 예제도 Rails 1.2.2를 기준으로 되어있다. Rails는 2.0을 넘기면서 적지 않은 부분이 바뀌어서 많은 사람들이 이 책을 보며 조금 헤메고 있다. (설마.. 나만 헤메나?!)

여튼, StudioEgo님이 알려주서서, 2.1로 블로그를 만드는 동영상을 다운받았다! 스캐폴딩에서 헤메이고, 다른 일들 때문에 몇일간 RoR을 완전 손 놓고 있었는데.. -_-;; 이 동영상을 보면서 따라해야겠다. 제주도(Daum Devday) 가려면 열심히 해야지.. ㅠㅠ

http://uzooro.tistory.com/7 로 가면, 해당 동영상을 볼 수 있고, AVI 파일로 된 원본도 받을 수 있다. 해상도도 꽤 괜찮다!! 다른 모니터에 풀화면으로 띄워놓고 따라해야겠다.


웹 개발 2.0 루비 온 레일스이 책大山님이 쓰신, 국내에선 이미 유명한 Ruby on Rails 입문서다. 요즘 읽은 책들중에는 가장 오래전부터 읽기 시작한 책인데, 다른 책들을 보다가 이제서야 거의 다 읽었다.

거의라는 표현은, 이 책의 하이라이트라 할 수 있는 마지막 7장을 아직 읽는 중이기 때문인데, 따라해보며 블로그를 만드는 7장을 어느 버전의 Rails로 할지 아직 결정하지 못 했다. 책에서 다루는 1.2.2 버전으로 할지, 최근에 나온 2.1 버전으로 할지 아직 고민중이다. 1년만에 1.2에서 2.1로 올라가다니, Rails의 버전업은 너무나도 빨라서 숨이 턱까지 차 오른다. (그만큼, 요즘은 Ruby와 Rails가 굉장한 주목을 받고 있긴 하다.)

여튼, 소개를 좀 하자면, Rails는 정말 so nice한 프레임워크다. Rails의 철학인 DRY(Do not Repeat Yourself)설정보다 관례가 더 편리하다는 Rails의 철학들은 코드를 통해 증명하고 있다. MVC 패턴도 잘 지켜져있고, ActiveRecord라는 (직접 SQL 구문을 사용할 필요가 없는) 깔끔한 ORM도 포함되어있다. ActiveRecord에서 클래스와 SQL의 항목간에 단수와 복수의 관계로 연결되는 모습은 충격이었다. 이런 요소들은 모두가 합쳐져서, 코드를 덜 치며, 우아하고, 쉽게 웹 어플리케이션을 만들 수 있는 요소가 된다. 이 곳에 올라온, 15분만에 블로그를 뚝딱 만드는 모습은 Ruby on Rails의 생산성을 표현하는 좋은 예이다. RoR에 익숙해지기만 하면, 훨씬 더 적은 코드로 다른 언어+프레임워크로 작성한 것과 같은 짓을 할 수 있을 법 하다.

아, 그래. 이것들은 Ruby on Rails에 대한 칭찬이고, 책에 대한 칭찬을 하자면, Ruby on Rails에 대한 입문서를 찾고 계셨다면 제대로 찾으신 거다. 바로 이 책이다. 이 책은 군더더기 없이 깔끔하게 설명이 되어있고, 타이핑하면서 따라할 수 있게 되어있고, 난이도도 어렵지 않으며, MVC모델, ORM 등에 대해서도 설명을 해주고, 루비에 대한 간단한(하지만, 이 책을 읽기에 충분한) 문법 설명도 있다. 한 문장으로 표현하면, Ruby on Rails 입문서로 훌륭하다. 별은 4개반. ★★★★☆

-- Jong10


Ruby URI Encoding

2008/07/12 22:15

루비로 장난감을 만들던 중에, URI의 인코딩과 관련하여 삽질을 하다가 간단한 해결책을 발견했다. 먼저, 아래는 URI.escape()를 사용하면서 정규식을 사용하는 샘플.

require 'uri'
val = URI.escape("시즌1", Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))

val이 "%EC%8B%9C%EC%A6%8C1"으로 바뀐다. 같은 내용을, CGI 라이브러리를 사용하면 훨씬 더 간단하게 할 수 있다.

require 'uri'
require 'cgi'
val = CGI.escape("시즌1")

이 단순한 걸 몰라서, URL을 UTF-8로 날리려고 계속 삽질했다. 무식하면 손발이 고생한다.

[참고]
- http://snippets.dzone.com/posts/show/1260
- http://www.ruby-doc.org/core/classes/URI.html
- http://badpopcorn.com/blog/2007/03/30/ruby-uri-percent-encoding/

-- Jong10


ostream_iterator

2008/05/18 23:23

지난 금요일, 학교에서 PL 수업 시간중에.. "루비는 열라 막 짱임. 과제를 날로 먹을 수 있음!" 뭐 이런 내용에 대해서 발표를 했더랬습니다. 그러면서 예로 들었던 코드가,

a = [99, "hello", "ruby", 2.17]
a.each { |x| puts x }

요렇게 한줄로, a 배열을 순차적으로 찍을 수 있다는 내용이 있었는데요. C++도 물론 C++0x에선 람다를 지원할 예정이기 때문에,

// vector<int> a일 경우에..
for_each(a.begin(), a.end(), [](int x) { cout << x << endl; } );

이렇게 람다를 섞으면, 한줄로 모든 항목을 한줄씩 뿜을 수 있긴 한데, 단지 출력만 할 경우라면, 이미 현재의 C++ 표준 문법에서도 가능한 더 깔끔한 방법이 있었습니다. ostream_iterator라는 녀석이 그것인데, 아래 코드는 위 코드와 같은 동작을 보입니다.

copy(a.begin(), a.end(), ostream_iterator<int>(cout, "\n"));

벡터가 아닌 int 배열이라면, 아래 처럼.. (배열도 시퀀셜 컨테이너에 적용되는 알고리즘들이 대부분 사용 가능합니다.)

int a = { 99, 123, 543, 12, -4, 6 };
copy(&a[0], &a[6], ostream_iterator<int>(cout, "\n"));

주의할 점이랄까, copy 알고리즘의 두번째 매개변수는 마지막 칸의 다음칸의 주소이기 때문에, &a[6]이 맞습니다. STL의 모든 알고리즘은 범위가 [a, b) 이거든요. b는 포함되지 않는.

-- Jong10

p.s. ostream_iterator는 오늘 처음 본 줄 알았는데.. TC++PL에 있더군요;; 기억이 없..=3=3


나의 첫 Ruby 사용기

2008/04/06 01:58

ruby 3일 전부터, 등하교길에 大山님의 웹 개발 2.0 루비 온 레일스를 읽기 시작했습니다. 그런데, 학교에서 Tokenizing하는 과제를 하나 던져주더군요. 한 줄을 읽어서, 예약어, 변수명, 숫자, 연산자 등등으로 쪼개어 화면에 찍어주는 간단한 과제입니다.

이래저래 몇번 해본 내용이고, 다른 과목에서도 비슷한 걸 해서, "또?!"하고 생각했었습니다만, 과목이 프로그래밍언어라서 그런지 교수님께서 떡밥을 던져주시더군요. "언어는 아무거나 써도 되요." 오오. 코딩하는 과제에 있어서 이보다 매력적인 조건이 또 뭐가 있겠어요? C++을 쓰면 훨~씬 편한데, 오직 C언어로만 하라는 다른 과목의 교수님은 정말 미웠다고요. -_-

게다가, 교수님께 따로 물어보니, 꼭 유한상태기계 방식으로 하진 않아도 된다고 하시길래, 루비에서 정규표현식으로 샤샤샥~해서 매우 짧은 코드를 만들기로 했습니다.

루비로 코딩을 해보는 것은 처음이었습니다만.. 곡괭이책(책버전/웹버전)을 뒤적여가면서 코드를 작성해나가는데, 이야아.. 자질구레한 것을 다 지원해주는 것이 참 마음에 들더군요. 처음 써보는 언어라서 라인수에 비해 굉장히 오래 걸리긴 했습니다만, C/C++로 했으면 150줄은 넘었을텐데, 처음 써 본 루비로 30줄로 끝내버려서 조금은 뿌듯합니다. (걸린 시간만 보면 500줄은 쓴 기분입니다만. -_-)

이런 말랑말랑한 언어들을 쓰다보면, 이렇게 문법이 유연한 native 언어도 있었으면 좋겠다는 생각을 자주 합니다. Haskell처럼 Script이면서 강타입인 언어가 있으면, native 컴파일 언어이면서 Duck타입인 언어도 있어야 하지 않겠어요? native로 컴파일 되면서, 말랑말랑한 뭐 그런 언어 없을까요? 뭐, py2exe 같은 것은 논외로 하고요.

-- Jong10