아직 공식적인 발표는 없지만, 이미 정식 Rails 2.0이 배포되기 시작한 모양이다.

아직 너무 이른 탓인지 그냥 $ gem update 명령으로 갱신하려고 하면, activeresource가 설치 안 되는 문제를 보이지만, 다음과 같은 명령으로 무사히 설치할 수 있었다.

$ sudo gem install rails --source http://gems.rubyonrails.org

개인적으로 새로운 버전의 Rails를 설치하면, 갱신된 API도 함께 local에 저장해 놓고 살펴보려고 아래와 같이 새로운 project를 만들어서 rails 버전을 freezing 시킨 후 doc을 추출해 내는 과정을 거치는데, 여기서 문제가 발생.

$ rails new_project
...
$ cd new_project
...
$ rake rails:freeze:gems
Freezing to the gems for Rails 2.0.0
rake aborted!
uninitialized constant Gem::GemRunner

google을 통해 문제의 원인을 찾아보니, RubyGems이 갱신되면서 require rubygems 할 때 자동적으로 gem_runner를 require 해주지 않아서 생기는 문제란다.
앞으로 이 문제가 patch될 예정이라고 하는데, 당장은 아래와 같은 해결 방법을 소개하고 있다.

먼저 gems 디렉토리에 있는 gems/rails-2.0.0/lib/tasks/framework.rake 파일을 열고, 아래와 같이 require ‘rubygems/gem_runner’ 한 줄을 추가해 준다.

deps = %w(actionpack activerecord actionmailer activesupport activeresource)
require 'rubygems'
require 'rubygems/gem_runner'
Gem.manage_gems

patch 후에, $ rake doc:rails로 무사히 rails api를 추출해서 프로젝트 디렉토리 속 doc/app에 들어 있는 api 문서를 웹 브라우저의 책갈피에 등록 완료.

아직 Rails 1.2.x에서도 버벅이는데 새로운 버전이 나와버렸으니 슬쩍 마음만 조급해지는군.
Rails 2.0 Final Released! – Summary of Features

WebKit 3에 내장되어 있는 Web Inspector가 반가운 기능들로 갱신되었다는 소식이다.
특히나, 실시간으로 CSS 스타일을 수정할 수 있게 된 것과, 옆에 있는 Sidebar의 크기를 조절할 수 있게 된 것은 당장 Safari에도 적용되었으면 하는 기능. (Firebug에서는 예전부터 지원했던 기능이지만)

그나저나, WebKit에서도 이제 CSS2에 정의되어 있는 @font-face 규칙을 지원하기 시작하면서, 필요에 따라 내려받을 수 있는 다양한 종류의 공개된 TrueType 글꼴들로 디자이너들에게 표현의 자유도를 넓혀줄 수 있는 기틀은 마련되기 시작했지만, 저작권 문제와 기타 웹 브라우저들의 지원 사항등 여러가지 이유로 가까운 시기에 널리 사용될지는 아직 불투명.

Ruby on Rails Web Framework에 관심을 가진 사람은 Merb도 눈여겨 볼 만하다. 보통 Ruby on Rails보다 가벼운 아류 정도로 불리우는데, 가벼운 것은 맞지만, 여러 유용한 기능들까지 생략된 것으로 오해될 수도 있는데 절대 그렇지 않다.
장점이라면 평소 Ruby on Rails를 쓰면서 생길 수도 있는 몇몇 불만과 아쉬움들을 채워주면서, 동시에 가볍기 때문에 오히려 개발자의 선택 자유도를 더 넓혀줄 수 있다는 점이 마음에 든다. RoR의 ActiveRecord를 대체할 수 있는 ORMDataMapper와의 조합도 매력적이다.

아직 참고할 만한 Merb의 문서가 웹 상에 많이 소개되지는 않았지만, 시간이 지나면 이것도 금방 해결되리라 믿고, 또 하나의 좋은 선택이 될 수 있는 Ruby 기반 웹 어플리케이션 개발 프레임워크가 앞으로 많은 이들의 주목을 받을 듯.

CSS frameworks 중 하나로 많은 사람들로부터 주목받고 있는 blueprintcss에는 기초 작업으로 다양한 종류의 웹 브라우저들이 기본적으로 가지고 있는 저마다 다른 스타일을 기본값으로 초기화 하는 reset.css 정의 파일을 가지고 있다. 이 파일은 Eric Meyer씨가 제안했던 reset 스타일을 기반으로 하고 있는데, 이 곳에는 body의 line-height 값으로 단위가 생략된 1.5가 지정되어 있다.

단위가 생략된 line-height을 사용하면 객체에 지정되어 있는 글꼴의 원래 크기에 단위가 생략된 line-height 수치를 곱한 결과 값을 돌려주게 되는데, 이렇게 하면 글꼴 크기가 서로 다를 경우, line-height도 글꼴 크기와 비례한 값을 얻을 수 있게 된다.

그런데, 최근 A List Apart에 올라온 “How to Size Text in CSS” 제목의 글을 읽고 나서, 단위가 생략된 line-height을 쓸 경우, 서로 글꼴 크기가 다른 여러 column들을 보유한 layout을 디자인 할 경우 vertical rhythm과 관련해서 문제를 안고 있는 것을 알 수가 있다. vertical rhythm을 추구하는 디자인은 글꼴 크기에 관계없이 일정한 line-height을 갖게 하려는 것이기에 당연한 얘기일 것이다. 그래서, vertical rhythem을 고려한 디자인이라면, line-height 값으로 글꼴 크기 변화에도 자유로운 상대적 단위인 em을 써주면 예제 페이지에서 보여주는 바와 같이 모든 브라우저들에서 글꼴 크기에 상광없이 일정한 line-height 값을 얻을 수 있단다.

결국, 다양한 구조의 column layout 디자인을 쉽게 해주는 것이 blueprintcss framework의 사용 목적이라면, line-height 값도 상황에 따라 단위를 써주는 것이 좋을 듯하다.

웹 개발 과정에 있어서 웹 페이지 속 UI 동작을 구현하는데 필요한 기본적인 기능들을 모아놓은 JavaScript Library들이 제공되면서 개발자들의 손을 한 시름 덜어주게 되었고, 결국 남은 여력을 프로젝트에 더 집중하게 되면서 작업의 효율성을 증가시켜 주었듯이, 마찬가지로 웹 페이지의 기본 layout을 잡을 때 반복적으로 수행되던 CSS 작업에서도 빠른 작업 수행 속도를 붙여줄 수 있는 framework 형태의 여러 조력자들이 등장하고 있다.

개인적으로 JavaScript Library로는 jQuery를 그리고 CSS framework로는 blueprintcss를 주로 사용하게 되면서, 예전에 공개했던 HTML 문서 생성을 위한 TextMate용 snippet에도 작은 변화가 있었다.
여기에 그 바뀐 내용을 공개하면, 우선 아래는 HTML 4.01 Strict DocType을 위해 “page4” tab trigger로 지정된 HTML snippet이다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ko" dir="ltr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>${1:Title}</title>
    ${2:<link rel="stylesheet" href="${3:css/blueprint/}screen.css" type="text/css" media="screen, projection" />
    <link rel="stylesheet" href="$3print.css" type="text/css" media="print" />
    <!--[lt IE 7]><link rel="stylesheet" href="$3lib/ie.css" type="text/css" media="screen, projection"><![endif]-->
    }<style type="text/css" media="screen">
    /* <![CDATA[ */
 
    /* ]]> */
    </style> 
    ${4:<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
    }<script type="text/javascript">
    // <![CDATA[ 
        $0
    // ]]> 
    </script> 
  </head>
  <body id="${5:page}">
    <div class="container">
      <div class="column span-${6:24}">
        <h1>${7:Header}</h1>
      </div>
      <div class="column span-${8:20}">
        ${9:Main content}
      </div>
      <div class="column span-${10:4} last">
        ${11:Right sidebar}
      </div>
      ${12:<div class="column span-24">
        ${13:Footer}
      </div>}
    </div>
  </body>
</html>

기본적으로 지정되어 있는 HTML 문서의 구조는, 오른쪽에 작은 sidebar가 위치한 보편적인 2 column 구조로 위 아래에 Header와 Footer가 위치하고 있다.

다음은 같은 구조를 가진 XHTML 1.0 Strict DocType 문서를 위한 HTML snippet. tab trigger로 “page”가 지정되어 있다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" ${1:${2:xml:lang="ko"}${3: lang="ko"}} dir="ltr">
  <head>
    <meta http-equiv="Content-Type" content="${4:application/xhtml+xml}; charset=utf-8" />
    <title>${5:Title}</title>
    ${6:<link rel="stylesheet" href="${7:css/blueprint/}screen.css" type="text/css" media="screen, projection" />
    <link rel="stylesheet" href="$7print.css" type="text/css" media="print" />
    <!--[lt IE 7]><link rel="stylesheet" href="$7lib/ie.css" type="text/css" media="screen, projection"><![endif]-->
    }<style type="text/css" media="screen">
    /* <![CDATA[ */
 
    /* ]]> */
    </style> 
    ${8:<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
    }<script type="text/javascript">
    // <![CDATA[ 
      $0
    // ]]> 
    </script> 
  </head>
  <body id="${9:page}">
   <div class="container">
      <div class="column span-${10:24}">
        <h1>${11:Header}</h1>
      </div>
      <div class="column span-${12:20}">
        ${13:Main content}
      </div>
      <div class="column span-${14:4} last">
        ${15:Right sidebar}
      </div>
      ${16:<div class="column span-24">
        ${17:Footer}
      </div>}
    </div>
  </body>
</html>

간단한 것이지만, 손놀림을 덜 수 있는 또 하나의 꼼수다.