HaskellによるWebアプリ

http://tanakh.jp/hl/
darcs get http://tanakh.jp/repos/haskellitter/


Haskelltwitterのようなものを実装しました。
試験的に公開してみます。
皆様利用して感想など頂けると幸いです。
Web2.0的な素敵な背景は、tkngさんに作っていただきました。
ありがとうございます。
全体的なページのデザインは私が適当にポコポコ作ったので、ひどいです。


このシステムは日々の普通な使用にゆるゆると耐えてくれればよいかなと思っておりますが、
最低限のスケーラビリティは考えて設計されております。
投稿データ〜1000万程度まで保持できることを考え、
そのデータに対し現在提供しているあらゆるクエリをノータイムで返すことができます。
投稿、削除、星をつけるなどの操作からランキングをリアルタイムに更新します。
ページはすべてたどることができます。
削除した投稿も内部的なデータには残ります。
レンダリングの実装はバカですが、秒間100クエリ以上はさばけると思われます。


機能的にはtwitterのパクリですが、
思想の違いから友達機能はありません。
みんな友達です。
人が多くなるとたぶんとても使えたもんではなくなると思います。
ですので、人が少ないことが想定ですが、
もっとよい思想もあると思うので、その辺はおいおい考えます。


作っている途中でタイトルを変える機能とか、動画を見る機能とか、
良く分からない機能を社長にリクエストされたりしたので、
微妙に変な機能がついています。
タイトルを変えるのは %title ほげほげタイトル
とかで変わります。


以下、顛末でも書いておきます。
また、次回以降今回用いたHaskellのWebアプリケーションフレームワーク
HAppSの解説記事を書こうと思います。
日本語の資料はおろか、英語の資料も片手で数えるほどしか見つからなかったので、
たぶん有用な情報であると信じています。

そんなこんなで。


今やっている仕事が先週で一段落、もとい紛糾したので、
その間になにかつくるかねえということになった。
なんだかまあ気分転換になるものがよいよねということで、
ちょっと毛色の違ってスッキリしたものがいいかな。
いま社内のコミュニケーションには日々のSkypeチャットと
週ごとのExcelぽい表を使った進捗報告みたいなのがあるのだが、
Skypeチャットはなんか卑猥な高尚なやりとりが
盛んに行われており、大変にノイズが多く、
ログも残ってるんだかなんだか良く分からない。
週ごとの進捗だと粒度が荒い。
ちょうどTwitter的なものが社内システムにあるとよいよね、
ということでちょっくら"3時間"で作ることになったのであるが…。
(ええ、実際のところhaskellitterはのべ30時間ほどかかってますが…)


せっかくの機会なので、久しぶりに存分にHaskellと戯れてやるぞと息巻いて、
HaskellでWebアプリを書くにはどうするかなとまず調べ始めた。
といっても良く知られている?方法はそんなに多くなくて、
1、Network Text.XHtml あたりのライブラリを使って自前で書く
2、HAppS
3、WASH
4、HASP(HSP)
ぐらいだろうか。
自分でゴリゴリ書くのも車輪の再発明が大好きな私にとっては
別に何でもないのだが、
"3時間(笑)"かつ堅牢で可用なプログラムを1から書くのは
大変なので、今回は"使える"フレームワークを探すことにした。


WASHは昔コンパイルにめちゃくちゃ時間がかかった記憶があって、
あまりよい印象がない。
生成されるページもなんだかリンクをたどると爆発するっぽくて、
そのころから対して変わっている様子もない。
なんというか、そんなわけで今回は避けてみた。


HSPはなんだかビルドできなかった。
http://www.nabble.com/ANNOUNCE:-Haskell-Server-Pages-v-0.4-td16286741.html
この辺をみるとHTMLはおろかJavaScriptも埋め込めるみたいな感じで
おもしろそうではあるのだが…。


そんなわけでHAppSをみてみることにした。
http://happs.org/
とはいえ、本家からしてこのドキュメントのなさである。
どないせいと…。
でも、HAppSでかかれたサイトは実際にあるようなので、
頑張ってみることにした。


そんなこんなでいろいろ調べているとあっというまに3時間は経過した。
なんというドキュメントの無さ。
本当に指折り数えるほどしかないのだが。
それでもいろいろ試行錯誤して、
何日か潰して、さらに綺麗に書き直したい病を発病して
1から書き直して、今に至る。


と、いうわけで、こんなことを書いても何の役にも立たないので、
HAppSの説明に続きます。