こんにちは、ゲストさん

Choklogトップ - ランダムブログ - ログイン - ヘルプ

2008/05/06 : 仙台市若林区役所周辺

image

image

image

image

image

若林区役所の周辺を散歩しました。

2008/05/06 : 仙台市若林区薬師寺

image

image

image

image

image

image

image

image

image

薬師寺に散歩に行きました。

私は高校一年生レベルの文章を書く

image

「帯」というサービスらしいです。


テキストエリアに日本語を打ち込むと、テキストを解析して難易度を表示してくれます。何をもって「難易度」としているかは、参照されている論文を読んでいないのでわかりません。語彙ベースかな?


面白いなあ。

善人になりたい

誰に対しても悪意なく接することができて、自分のことよりも他人のことを考えられる人間になりたい。そういう人間になることができたなら、死に際に「自分の人生には意味があった」と満足できるのではないか。

どう考えても自分は善人ではなくて、どこをどう変えれば善人になれるのかもよくわからない。

本当の善人は、「善人になりたい」などと願うことすらなく、自然に善人なのかもしれない。自分は善人に憧れるだけで、せいぜい努力しても偽善者にしかなれないのかもしれない。偽善者にしかなれないなら、死ぬまで偽善を貫きたい。善人をよく観察することから始めるべきなのか。スタート地点はどこだ。誰が善人なんだろう。

2008/04/29 : 武蔵野市/三鷹市

image

image

写真はすごいなあ。文章では絶対に伝えられないような、生々しさを表現できる。もっと上手に撮れればいいのだけれど。

2008/04/27 : 井の頭公園

image

地蔵がいました。

2008/04/24 : 井の頭公園

image

image

二枚目は光が散って、残念な感じ。

GREE勉強会「セルの海 マクロの空」

昨日(2008/04/23)、GREE勉強会に出席しました。Mew開発者の山本さんによるLispトークを聞くことができました。「GREEオープンソーステクノロジー勉強会」のサイトから、概要を引用します。


Lisperの僕にはそんな自覚はなかったのですが、Lispに憧れているプログラマもいらっしゃるようです。この講演では、Lispの基本データ型であるセルがなぜ一対のポインタなのか、そしてマクロを使ってどうLispを成長させていけるのかを説明することで、Lispプログラミングの雰囲気を伝えたいと思います。



ということで、にわかSchemerな僕は一も二もなく、この勉強会に飛びつくことにしました。以下は勉強会のレポートです。概ね、資料の通りにお話されていたので、併せて参照してもらえればと思います。また、記憶違いなどがあるかもしれないので、その際はご指摘お願いします。


なお、他の参加者のブログはこちらから参照できます。


--


1. Lispことはじめ

- 黒澤明監督はアカデミー賞の授賞式で、「僕はまだ映画がわからない」と言っていた
- 一方で、私はまだLispがわからない

- Lispの求人数はJavaの求人数の0.2%しかない
- IIJは和田さんと私で、二人もLisperがいる珍しい組織
- SchemeとHaskellとCのポインタがわかれば、Java歴5年の人に2日で追いつける

- 『Little Schemer』と『プログラミングGauche』を読めば、たいていは事足りる

amazon
『The Little Schemer』


amazon
『プログラミングGauche』


- Lispを学べば括弧は見えなくなる
- Lispを学べばインデントしか見えなくなる
- 括弧やインデントはエディタに任せる

2. セルはどうして2つのポインタなのか?

(print (cons 1 (cons 2 (cons 3 '())))) #=> (1 2 3)(print '(1 . (2 . (3 . ())))) #=> (1 2 3)(print '(1 2 3)) #=> (1 2 3)


- 上記の式は全て同じ結果を返す
- (だけど) これが入れ子構造になっているのを理解することが重要
- 入れ子構造になっているのを理解すれば再帰で処理しようと思える

(define member?    (lambda (a l)        (cond            ((null? l) #f)            ((eq? (car l) a) #t)            (else                (member? a (cdr l))))))(print (member? 2 '(1 2 3))) #=> #t(print (member? 4 '(1 2 3))) #=> #f


- 上記の式は再帰の例

(print (assoc "foo" '(("boo" "ワラの家")                    ("foo" "木の家")                    ("woo" "レンガの家"))))


- 二分木も簡単に表現できる
- 逆ポーランド記法も簡単に書ける(資料にコードが記述されています)

- 本質と効率をわけて考える
- Schemeには本質的に必要な物しかない
- 効率は問題になるまで考えない方がよい (from 『珠玉のプログラミング』)

amazon
『珠玉のプログラミング―本質を見抜いたア...』


3. Lispのマクロはどんな風に使うのか?

- 関数は小さく
- 副作用のある関数とない関数を分ける
- 再帰する(高階関数を使う)
- マクロを書く
- Cのマクロは嫌われもの、Lispのマクロはヒーロー
- 直交的なプログラミング(少数のオペレータを組み合わせて多様な意味を表現する)
- DRY(Don't Repeat Yourself)

(資料ではFizzBuzz問題を例にして、それを解くためにマクロで機能拡張をしていく様子が記述されています)

4. データと関数の区別がないとはどういうことか?

- Lispのインタプリタを書けば理解できる

(正直なところ、この辺りから僕(=mahata)の理解が曖昧です)
(ひたすらLispのevalを実装していきました)

- 『LISP 1.5 Programmer's Manual』はLisperなら一度は読むことになる本
- Lispには5つの関数(car,cdr,cons,eq,atom)と2つの特殊形式(quote,cond)しかない

amazon
『Lisp 1.5 Programmer's Manual』


(後は資料を確認してください : 説明できるほど理解できていない...)

5. 感想

Lisperから話を聞く機会など滅多にないので、今回の勉強会は、テーマ発表時からかなり楽しみにしていました。その期待は裏切られず、充実した時間を過ごすことができました。その一方で、資料に対して発表時間がやや短いように思えました。発表の後半はやや加速度がついてしまい、理解が浅くなってしまったように思えます(僕の事前知識が足りない、というのもある)。

もう少し、Lispの勉強をした後で、改めてお話を伺えればいいなあ。そんな機会に恵まれるかわからないけど。

Choklogの検索機能

1. 検索機能

Choklogの検索機能を実装しました。バックエンドはHyperEstraier*1です。

2. 検索インデクス生成

検索インデクスは次のように作られます。

- MySQLからのブログ記事を取得
- 取得したブログ記事を文書ドラフト*2の形式に直す
- 文書ドラフトをestcmd*3に渡す

上記の作業が一時間に一度ほどの頻度で発生(cron)します。従って、記事を新規投稿したり、記事を削除したりした場合、それが検索結果に反映されるまでに最大で1時間程度かかります。

HyperEstraierには差分更新の機能が備わっており、毎回インデクスを作り直すというのは非効率的です。しかし、Choklogはまだまだ記事数が少ないので、上記のような方法をとることにしました(検索インデクスを作り直す作業は数秒程度で終わります)。

3. 検索インタフェース

HyperEstraierには、各種プログラミング言語から利用するためのインタフェースが用意されています*2。しかし、Choklogのフロントエンド部でも使用しているPHP用のインタフェースはオフィシャルに提供されていません。そこで、RubyでRESTインタフェースを用意し、PHPからはそれを叩くことにしました。

HyperEstraier <-> REST(Ruby) <-> PHP


というようになっています。RESTのAPIは、後々「Choklog用検索API」として一般向けに公開します。少々お待ちください。

4. エセ検索連動広告

ハヤリなので、検索キーワード連動広告を用意しました。検索キーワードでAmazonのAPIを叩き、商品データがある場合に検索結果に広告を差し込みます。広告がコンテンツ(=検索結果)に馴染むので、それほどウザったくはならないかなと思います。

5. まとめ

大雑把すぎる説明ですが、だいたいこのような感じです。HyperEstraierは使っていてとても楽しいツールなので、機を見て深くハックしてみたいところです。がんばります。

改善案なども、広く募集いたします。「ここはこうした方がいい」というようなアイデアがあれば、お気軽にコメントやメッセージにて教えていただければと思います。よろしくお願いします。

*1: http://hyperestraier.sourceforge.net/index.ja.html
*2: http://hyperestraier.sourceforge.net/uguide-ja.html#formats
*3: http://hyperestraier.sourceforge.net/uguide-ja.html#estcmd

SNC-NET9ABK

購入する。


amazon
『サンワサプライ OAチェア SNC-NET9ABK』



ヨドバシカメラ吉祥寺店のOAチェアコーナーで、色々な椅子に座りながら、コストパフォーマンスを調べてきたのですが、3万円を割る価格で満足のいくものはコレを含めて二点しかありませんでした。ポイントとしては、

- リクライニングが柔らかい
- リクライニングに弾力がある(力をかけない状態で、背骨を押す感じがある)
- メッシュである
- ヘッドレストがある

ようなものです。

配送されてくるのが楽しみです。