feedpath なかなか良い感じ。

kohata2006-05-04


はてなアンテナをしばらく使っていましたが、ちょっと飽きてきたので(使わせてもらっていてなんですが。。)RSSリーダーを使ってみようという気になり、気になっていたサイボウズfeedpathに乗りかえてみました。


なんにも知らず、Googleで"feedpath"と入れるところからだったのですが、無事到達。
無料でユーザー登録して使えるようで、一安心。
RSSフィードにタグ付けできるのが売りのようですね。ということは、ユーザー間でタグ情報を共有できるのかしら??


はてなアンテナに登録してあった50件弱くらいのサイトをひとつひとつブックマークレットを使って登録していく。カテゴリ(1階層)に分けて登録しておくことができますね。
これまで気にしてませんでしたが、全サイトRSSを配信してました。
はてなアンテナは、RSSフィードではなく、サイト巡回型です。はてなRSSというのもあるんですが、今回はスンマセン)


RSSフィードのリンクなんてどこにもないのにっ!というサイトもあったのですが、ページのソースをみてみると、にで指定してあったりして、へぇ〜という感じ。


慣れがないからか、ナビゲーションで迷うことがありますが、まずまずの使い心地ですね。
ほどよくあっさりリッチなUIに好感がもてます。


カテゴリ、またはフィードの横に未読件数が表示されます。当然(feedpath上で)読むと減るんですが、”更新”すると新たに配信されたフィードがあれば件数が増えます。
ひょっとしたら非同期で更新される(Ajaxの格好の使いどころだと思う)のかも知れませんが未確認です。


うーん、これなら、乗りかえてもいいかな。
メールと本質的にどう違うんじゃい、と思ってましたが、これは確かにいいかも。


使ってみた実感として、はてなアンテナはとても重宝しました。
RSSだと、更により痒いところに手が届く感じですね。


でも、前にRSSリーダー(昔のFeedReaderとかBulkNewsとか)を使ったときはイマイチ感が強かったのですが、ソフトが洗練されたのか、情報源がはてなアンテナを使う中で選別されているからか、良い感じです。

下地のない分野

アンビエント・ファインダビリティ ―ウェブ、検索、そしてコミュニケーションをめぐる旅

アンビエント・ファインダビリティ ―ウェブ、検索、そしてコミュニケーションをめぐる旅


会社の同僚に原書を見せてもらって、面白そうだったので、某カンファレンス会場の書籍売り場で訳書を見つけて買ってみました。


先日、同級生の結婚式に出席するため仙台往復の新幹線で読んだのですが、、
むずかしい。。。さらっと読める代物ではなさそうでした。


頭から読んでたら挫折しそうな勢いだったので、フォークソノミーを扱った章から読んでみた。。。かなり神経使って読んでも、どれほど理解できたのか。。そんな感じ。
原書に挑戦している同僚は偉い!


結局のところ、私にとっては全く不慣れな分野なのでしょう。
よく知っている分野であれば、、たとえば10冊、20冊の関連書すでに読んでいるとか、、範囲が広くても、マニアックな内容でも、英語であっても割と読めます。しかし、改めて知識が整理されたり、気づきをが得られるというようなことは多々ありますが、新しく獲得できる知識少ないようにも思えます。
そういう本は、読んでて退屈するか、気持ちよく読めるかのどちらかで、圧力を感じたり、脳に疲労を感じたりはあまりしないように思えます。


脳は使わないと皺がなくなっていくんだとか、嘘かホントかわからない話をよく聞かされましたが、不慣れな分野もつい避けてしまっていると、脳の運動の機会を失っているのかも知れません。
というわけで、、がんばって読むぞ。
マインドマップとかいいと思ってるんですけどね。。なかなか実践できていない。。

Grails Quick Start(5)

さて、ほぼ終わりに差し掛かっていた Quick Startチュートリアルですが、ひとつ飛ばしたのがありました。

Domain Classを作ったところで、アプリケーション動作時に簡易的にテストデータを用意する方法が説明されています。

具体的には、grails-app\conf\ApplicationBootStrap.groovy にテストデータを作るコードをあらかじめ書き込んでおくようです。
firstapp\grails-app\conf\ApplicationBootStrap.groovy:

class ApplicationBootStrap {
     @Property Closure init = { servletContext ->
     }
     @Property Closure destroy = {
     }
}


initクロージャに、以下のように記述します。

     @Property Closure init = { servletContext ->
         new Book(author:"Stephen King",title:"The Shining").save()
         new Book(author:"James Patterson",title:"Along Came a Spider").save()
     }

Bookオブジェクトを2つ作成して、それぞれsave()メソッドで永続化することで、データベースにデータが作成されるようですね。


アプリケーションを再起動して結果を確認してみると。。

おー、出た出た。


ちなみに、servletContext ->って何でしょうか? ここによれば、クロージャへの引数みたいなもののようですね。
アプリケーションフレームワークがこのロジックを呼び出すときに servletContext を渡してくれるんでしょうね。

結婚式

職場の同僚が結婚するというので、そして式にお呼ばれしたので、お祝いに行ってまいりました。
私自身は結婚式など挙げたことないのですが、去年3回、今年はお初です。来週は幼少の頃の同級生のが控えています。かなり巻き上げられてます。
写真は新郎。彼の雄姿に一気飲みで応えてきました。
奥さんになられるひとは、職場では見たこともないような輝かしい笑顔を振りまいておられました。
麗しのお二方、お幸せに!

Grails Quick Start(4)

つづきです。

Create the View

Viewは言わずもがな、画面のコンポーネントですな。
Viewは、、ここではコマンドで生成とかではなく、手書きするようですね。
grailsコマンドのヘルプには、”generate-views”というのがあるようですが、ドメインクラスのCRUD用のUIを自動で作ってくれるのかしら?
よくわからないので、手書きするとします。
ちなみに、grailsを引数なしで実行するとコマンドラインヘルプが表示されます。

>grails
help:
  [echo] Usage: grails [target]
  [echo]
  [echo] Targets:
  [echo] "create-app" - Create a new grails app
  [echo] "create-controller" - Create a new controller
  [echo] "create-service" - Create a new service
  [echo] "create-domain-class" - Create a new domain class
  [echo] "create-test-suite" - Create a new test suite
  [echo] "generate-controller" - Generates a controller from a domain class
  [echo] "generate-views" - Generates the views from a domain class
  [echo] "generate-all" - Generates the all artifacts from a domain class
  [echo] "test-app" - Run current app's unit tests
  [echo] "run-app" - Run the application locally and wait
  [echo] "create-webtest" - Create the functional test layout
  [echo] "run-webtest" - Run the functional tests for a running app

さて、横道にそれました。Viewでした。


”firstapp\grails-app\views”の下に、”book”というディレクトリを作ってその下に、gsp(Groovy Server Pages)ファイルを作るようです。
ディレクトリ”book”は、前に作った Controller の bookと関連するということなのでしょうね。
さらに、gspファイルは、Controllerで定義したクロージャ属性と名前で関連つけられるようです。
listというクロージャを定義してあったので、list.gspを作成します。


こんな感じ。
firstapp\grails-app\views\book\list.gsp:

<html>
<head>
    <title>Book list</title>
</head>
<body>
<h1>Book list</h1>
<table>
    <tr>
        <th>Title</th>
         <th>Author</th>
    </tr>

    <% books.each { %> 
        <tr>
             <td>${it.title}</td>
             <td>${it.author}</td>
        </tr>
    <% } %>
</table>
</body>
</html>

booksというのは、Controllerのロジックで作成されたMapの要素ですね。
ラベルでそのまま参照できるのですね。便利ですね。
booksの中身を表に出力している部分ですが、JSPとGroovyの記法を知っているとわかるのですが。。JSPはともかくGroovyは。。。


HTMLタグとJSPコードを除いて考えます。

    books.each {
      it.title
      it.author
    }

{ }で囲まれたコードはクロージャです。処理ブロックです。
上記のように、コレクションの each メソッドにクロージャを渡すと、イテレートしながら、クロージャを実行してくれます。it というのは、要素への参照ですね。
Java的に書くと、

    for(Iterator iter = books.iterator(); iter.hasNext(); ) {
      Book it = (Book)iter.next();
      it.getTitle();
      it.getAuthor();
    }

こんな感じ?


さてさて、画面出るかなー。
アプリを動かして確認してみましょう。

> cd firstapp
> grails run-app

ブラウザから、

http://localhost:8080/firstapp/book/list

どうだ。出た!
。。。地味だねー。でも出た。パチパチ。