Mighttpdにて運用されています。Jekyllにインスパイアされて作られたものだそうです。HakyllはHaskellによって書かれ、Haskellによってページの構造を記述します。Pandocとはいろいろなドキュメントフォーマットのコンバータです。Haskellで書かれています。汎用的なフォーマットから自分の好みのものを利用できるpandocは非常に便利です。MighttpdとはHaskellで書かれたHTTPサーバです。軽量シンプル高性能で、nginxをも越えるパフォーマンスを叩き出します1。見ての通りHaskellづくしです。実証実験でもあります。その顛末をここに記しておこうと思います。pagesでサイトを作ろうと思っていました。まともなコンテンツを作る余裕がなく放置する日々が続きました。新しいページを立ち上げようと重い腰をあげたのでした。最初はそれを利用しようと考えました。ところが、Jekyllを使うのは私にはとても難しかったのです。思ったとおりに動作しなかったときに何が原因なのか特定するのがとても困難でした。何ができるかもよく分からない。普段私がドキュメントとしての型にどれだけ頼りきっているのかと言うことがよく分かりました。私の鈍い頭も理解し始めたわけです。それでHakyllです。記憶はあったので、どうせならそれを使おうということになりました。HakyllならバックエンドがpandocなのでさらにHaskell感upです。Haskellを目指そうかと相成りました。このページの運営がうまくいくのか。サーバが負荷で死んだりしたらHaskellはまだその域に達していなかったということで。Hakyllでサイトを構築するさて、前置きが長くなりましたが、ようやく本文です。Hakyllでのサイト構築はとても簡単です。Hakyllのインストール次のコマンドを実行するだけでインストールは完了です。同時にインストールされます。pandocこれを実行してから改めてhakyllをインストールし直します。大体どうすればいいのか分かると思います。間違っていたら大体型エラーが教えてくれます。Pandocのサポートする任意のフォーマットでページを記述することができます。現在のところPandocがサポートするのは以下のフォーマットです。markdownreStructuredTexttextileHTMLLaTeX私はmarkdownが好きなのでこのページはmarkdownで書いています。そのままHaskellのコードとして実行できるページなども書くことができます。書籍やドキュメントの作成にも便利です。Pandocによって各人が好みのフォーマットで原稿を書くことができました。ページコンパイラはArrowで処理をつないでいくのが大まかなところです。型が合えば、大体は変なことにならない安心感が素敵です。ドキュメントもしっかりしています。おかげでライブラリの使い方で迷うところはほとんどありませんでした。ページのデザインこれがとても大変でした。デザインセンスは0で、テーブルレイアウトしか書いたことがなかったのでした。なんだか全体的にTwitterになってしまったので止めました。Boilerplateを利用することにしました。ブラウザの互換性などにまつわるいろいろめんどい部分が省略できるようです。これが全然思ったとおりの位置に収まってくれなくて大変でした。これもtypoしても全然何も教えてくれないので困りました。marginを何回もmerginに間違えてその度に脱力感に襲われました。個人的にはCSSの方を何とかしてほしいと思いました。今回はMighttpdを使ってみることにしました。動作をしてくれるんじゃないかという期待を込めての選定です。Mighttpd紹介MighttpdはHaskellによって書かれたHTTPサーバです。CGIも扱えるようです。シンプルな分設定も簡単です。インストール&実行これもcabalからインストールできます。mighttpd2実行にはconfファイルとrouteファイルを指定してやります。あたりに設定のサンプルがあるはずなので、それを参考にすれば簡単だと思います。上に実装されています。Warp6という軽量・高速なHTTPサーバが用いられています。ここではWarpについて少し紹介したいと思います。軽量・高速HTTPサーバWarpHTTPサーバ(ないしはその他のWebサーバ)は並行に動作する必要があります。そのクライアントとの通信には時間がかかる可能性があるためです。リクエストごとにプロセスを起動させていました。プロセスを立てるのはかなりのオーバーヘッドです。スレッドを立てるというものがあります。小さいとは言えません。同時に多数のクライアントとのやりとりを行うのも難しいです。言うのも、スレッドを一つ立てるごとにある一定のメモリ空間を占有するからです。イベント駆動というものがもてはやされています。処理を行うというものです。node.jsといった最近流行りのサーバで利用されているようです。特徴で、これにより高速にソケットの監視が行えます。実際にはこれをさらにマルチスレッド化するなどされています。プログラミングモデルとしては後退したとも言えます。問題点は大きく次の二つです。それに悩まされるということでもあります。この問題も発生しなかったからともいわれます。コードの見通しが悪くなります。どちらかというとこちらが深刻な問題です。ハイパフォーマンスを達成できないものでしょうか?できるんです。処理系の作るスレッドです。Haskellのスレッドは非常に軽量で、1つあたり数百バイトしか消費しません7。コンテクストスイッチのオーバーヘッドもカーネルに入らないので非常に軽微です。CPUリソースを有効に利用することができます。HaskellのI/Oはすべて非同期で行われます。入出力の準備が完了したものから再度実行キューに投入されます。その問題は解決されました。簡潔で高速なHTTPサーバというわけです。実証するショーケースとしての役割も果たしていると言えます。今このブログが動作しているMighttpdと言うわけなのです。Haskellは何にでも使えるという感触が確かなものになりました。すべてに適しているとして自らをScalableプログラミング言語と称しました。Haskellもまさにそれであると思います。なんでもこなせる可能性を秘めています。その可能性が実際に発露してきているといえるでしょう。これはマーケティングの失敗何じゃないかと思います。実際には最も美しい命令型言語9という評もあるぐらいなのです。思いつつ、ここらで今回は終わりにしたいと思います。Bootswatch.。