<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel rdf:about="https://technological.blog.shinobi.jp/RSS/100/">
    <title>technological blog</title>
    <link>https://technological.blog.shinobi.jp/</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="https://technological.blog.shinobi.jp/RSS/" />
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
    <description>technological blog</description>
    <dc:language>ja</dc:language>
    <dc:date>2007-07-27T19:51:52+09:00</dc:date>
    <items>
    <rdf:Seq>
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E5%86%8D%E5%B8%B0%E3%81%99%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%867" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%866" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%865" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%864" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%863" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%862" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%861" />
      <rdf:li rdf:resource="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%A6%82%E8%A6%81" />
    </rdf:Seq>
    </items>
  </channel>

  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E5%86%8D%E5%B8%B0%E3%81%99%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E5%86%8D%E5%B8%B0%E3%81%99%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0</link>
    <title>Ocsigenで再帰するフォーム</title>
    <description>Ocsigenで再帰するフォームを作ってみた。

OcsigenのチュートリアルのActionというところを真似してみた。

作ってみたページの外観↓
再帰するフォーム(html)（入力しても意味ないよ）

以下はそのコード

open XHTML.M
open Eliom
o...</description>
    <content:encoded><![CDATA[Ocsigenで再帰するフォームを作ってみた。<br />
<br />
OcsigenのチュートリアルのActionというところを真似してみた。<br />
<br />
作ってみたページの外観↓<br />
<a href="//technological.blog.shinobi.jp/File/add.html" target="_blank">再帰するフォーム(html)</a>（入力しても意味ないよ）<br />
<br />
以下はそのコード<br />
<pre><code><br />
open XHTML.M<br />
open Eliom<br />
open Eliom.Xhtml<br />
open Lwt<br />
<br />
let list_mapi f l =<br />
  let rec local i = function<br />
    | [] -> []<br />
    | hd::tl -> f i hd :: local (i+1) tl<br />
  in<br />
    local 0 l<br />
<br />
let mylist = ref []<br />
<br />
let table_of_hitchart () =<br />
  table <br />
    (tr (td[pcdata "[トラック]"]) [td[pcdata "　　[曲名]"]])<br />
    (list_mapi (fun i s -><br />
		  tr (td[pcdata (string_of_int(i+1))]) [td[pcdata s]]) !mylist)<br />
<br />
let my_table = create_table ()<br />
<br />
<br />
<br />
let action_session = <br />
  new_service ~url:["add"] ~get_params:unit ()<br />
<br />
let connect_action = <br />
  new_post_coservice' ~post_params:(string "moji") ()<br />
    <br />
let disconnect_action = <br />
  Actions.register_new_post_coservice'<br />
    unit <br />
    (fun sp () () -> <br />
      close_session sp >>= <br />
      (fun () -> return []))<br />
<br />
let disconnect_box sp s = <br />
  post_form disconnect_action sp <br />
    (fun _ -> [p [submit_input s]]) ()<br />
<br />
let input_box sp moji = <br />
  [p [pcdata "曲目を追加する: "; <br />
      string_input moji]]<br />
<br />
let home_action sp () () = <br />
  let f = post_form connect_action sp (input_box sp) () in<br />
  return<br />
    (html<br />
       (head (title (pcdata "ADD")) [])<br />
       (body [h1 [pcdata "recursive form Example"];<br />
	      h2 [pcdata "再生する曲目リスト"];<br />
	      f;<br />
	      table_of_hitchart()]))<br />
    <br />
let _ = register ~service:action_session home_action<br />
<br />
let rec launch_session sp moji =<br />
  mylist := (moji :: !mylist);<br />
  set_session_data my_table sp moji<br />
<br />
let _ = Actions.register<br />
    connect_action<br />
    (fun sp () login -> <br />
      close_session sp >>=<br />
      (fun () -> launch_session sp login;<br />
        return []))<br />
</pre></code><br />
]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-27T19:51:52+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B</link>
    <title>Ocsigenでフォームを作ってみる</title>
    <description>Ocsigenで入力フォームを作ってみた。

こんなページができた: ページの外観(html)(ボタンは押しても意味ないよ。)

このページを生成するプログラムを以下のようにかいた。

open XHTML.M
open Eliom
open Eliom.Xhtml
open Lw...</description>
    <content:encoded><![CDATA[Ocsigenで入力フォームを作ってみた。<br />
<br />
こんなページができた: <a href="//technological.blog.shinobi.jp/File/form_pagesource.html" target="_blank">ページの外観(html)</a>(ボタンは押しても意味ないよ。)<br />
<br />
このページを生成するプログラムを以下のようにかいた。<br />
<pre><code><br />
open XHTML.M<br />
open Eliom<br />
open Eliom.Xhtml<br />
open Lwt<br />
<br />
let no_post_param_service = <br />
  register_new_service <br />
    ~url:["post"]<br />
    ~get_params:unit<br />
    (fun _ () () -> return<br />
      (html<br />
         (head (title (pcdata "")) [])<br />
         (body [h1 [pcdata <br />
                      "Version of the page without POST parameters"]])))<br />
<br />
let my_service_with_post_params = <br />
  register_new_post_service<br />
    ~fallback:no_post_param_service<br />
    ~post_params:(string "value1" ** string "value2")<br />
    (fun _ () (value1,value2) ->  return<br />
      (html<br />
         (head (title (pcdata value1)) [])<br />
         (body [h1 [pcdata value2]])))<br />
<br />
let form2 = register_new_service ["form2"] unit<br />
  (fun sp () () -> <br />
     let f =<br />
       (post_form my_service_with_post_params sp<br />
          (fun (chaine1, chaine2) -> <br />
            [p [pcdata "TITLE: ";<br />
                string_input chaine1];<br />
	     p [pcdata "BODY: ";<br />
		string_input chaine2];<br />
	     p [submit_input "GO"]]) ()) in<br />
     return<br />
       (html<br />
         (head (title (pcdata "form")) [])<br />
         (body [f])))<br />
<br />
</code></pre><br />
このフォームにはふたつの入力ボックスがある。<br />
<br />
例えば上のボックスに hugahuga 下のボックスに mugomugo と入力して、ボタンを押すと、タイトルが hugahuga で、本文が mugomugo であるようなページに遷移する。<br />
<br />
ちょうど、<a href="//technological.blog.shinobi.jp/File/hugamugo_pagesource.html" target="_blank">こんな感じのページ(html)</a>だ。<br />
<br />
ちなみに入力ボックス内にタグを入れられても、それは単なる文字列として扱い、入力によってページの構造を破壊されることを防いでいる。<br />
<a href="//technological.blog.shinobi.jp/File/tag_pagesource.html" target="_blank">タグを入れられても大丈夫！(html)</a>]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-20T14:09:10+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%867">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%867</link>
    <title>Ocsigen入門　手順7</title>
    <description>7. ブラウザで確認

ブラウザを起動してhttp://localhost/my_samples/helloにアクセスしてみる。

できた！

Ocsigenで生成されたページのソース(html)...</description>
    <content:encoded><![CDATA[7. ブラウザで確認<br />
<br />
ブラウザを起動してhttp://localhost/my_samples/helloにアクセスしてみる。<br />
<br />
できた！<br />
<br />
<a href="//technological.blog.shinobi.jp/File/hello_pagesource.html" target="_blank">Ocsigenで生成されたページのソース(html)</a>]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:48:11+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%866">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%866</link>
    <title>Ocsigen入門　手順6</title>
    <description>6. ocsigenを起動

# ocsigen
で、ocsigenを起動させた。</description>
    <content:encoded><![CDATA[6. ocsigenを起動<br />
<br />
# ocsigen<br />
で、ocsigenを起動させた。]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:45:04+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%865">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%865</link>
    <title>Ocsigen入門　手順5</title>
    <description>5. コンパイルして、ocsigen.confを設定

先ほどのファイルhello.mlを以下のようにコンパイルした。

$ ocamlc -I /usr/local/GODI/lib/ocaml/site-lib/ocsigen/ -c hello.ml

これで/home/sourc...</description>
    <content:encoded><![CDATA[5. コンパイルして、ocsigen.confを設定<br />
<br />
先ほどのファイルhello.mlを以下のようにコンパイルした。<br />
<br />
$ ocamlc -I /usr/local/GODI/lib/ocaml/site-lib/ocsigen/ -c hello.ml<br />
<br />
これで/home/source/ディレクトリ内にhello.cmoというファイルができあがった。<br />
<br />
そして/etc/ocsigen/にあるocsigen.confというocsigenの設定ファイルに以下の3行を追加した。<br />
<pre><code><br />
      &lt;site dir="my_samples" charset="iso-8859-1"&gt;<br />
        &lt;eliom module="/home/source/hello.cmo" /&gt;<br />
      &lt;/site&gt;<br />
</code></pre><br />
<br />
これでmy_samplesというディレクトリの中で、先ほど指定したプログラムによるページがみれるはずである。]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:44:21+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%864">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%864</link>
    <title>Ocsigen入門　手順4</title>
    <description>4. Ocsigenのライブラリを使ってプログラムを書く

例えば/home/sourceというディレクトリの中に以下のようなファイル test.ml を作成した。


open XHTML.M
open Eliom
open Eliom.Xhtml
open Lwt

let ...</description>
    <content:encoded><![CDATA[4. Ocsigenのライブラリを使ってプログラムを書く<br />
<br />
例えば/home/sourceというディレクトリの中に以下のようなファイル test.ml を作成した。<br />
<br />
<pre><code><br />
open XHTML.M<br />
open Eliom<br />
open Eliom.Xhtml<br />
open Lwt<br />
<br />
let _ = <br />
  register_new_service <br />
    ~url:["hello"]<br />
    ~get_params:unit<br />
    (fun _ () () -> <br />
      return <br />
        (html<br />
          (head (title (pcdata "Ocsigen")) [])<br />
          (body [h1 [pcdata "Hello Ocsigen!"]])))<br />
</code></pre><br />
<br />
これはタイトルが"Ocsigen"で、本文が"Hello Ocsigen!"であり、urlは /helloであるようなページの表示を目指して作ったプログラムである。<br />
<br />
このプログラムのソース: <a href="//technological.blog.shinobi.jp/File/test.ml" target="_blank">test.ml(ml)</a>]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:37:22+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%863">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%863</link>
    <title>Ocsigen入門　手順3</title>
    <description>3. Ocsigen0.99.1をインストール

そして、いよいよOcsigenをインストール。

READMEにしたがって以下のようにするとインストールできた。

# sh configure
# make depend
# make 
# make install...</description>
    <content:encoded><![CDATA[3. Ocsigen0.99.1をインストール<br />
<br />
そして、いよいよOcsigenをインストール。<br />
<br />
READMEにしたがって以下のようにするとインストールできた。<br />
<br />
# sh configure<br />
# make depend<br />
# make <br />
# make install]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:31:34+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%862">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%862</link>
    <title>Ocsigen入門　手順2</title>
    <description>2. ocaml, ocamlfindなどOcsigenに必要なものをインストール

GODIをインストールしたことによって、/usr/local/GODI/sbin/godi_consoleというコマンドが使えるようになった。このコマンドによって、簡単に必要なものをインストールできた。

...</description>
    <content:encoded><![CDATA[2. ocaml, ocamlfindなどOcsigenに必要なものをインストール<br />
<br />
GODIをインストールしたことによって、/usr/local/GODI/sbin/godi_consoleというコマンドが使えるようになった。このコマンドによって、簡単に必要なものをインストールできた。<br />
<br />
[ 47] pcre<br />
[ 87] findlib<br />
[111] ocaml-dbm<br />
[118] ocaml-src<br />
[119] ocaml-ssl<br />
[127] ocamlnet<br />
<br />
などを選んでインストールした。<br />
]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:29:33+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%861">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%861</link>
    <title>Ocsigen入門　手順1</title>
    <description>1. GODIをインストール

まずGODIをインストールした。

以下の手順でインストールが成功した。

$ su
# ./bootstrap --prefix /usr/local/GODI
# PATH=/usr/local/GODI/bin:/usr/local/GODI/s...</description>
    <content:encoded><![CDATA[1. GODIをインストール<br />
<br />
まずGODIをインストールした。<br />
<br />
以下の手順でインストールが成功した。<br />
<br />
$ su<br />
# ./bootstrap --prefix /usr/local/GODI<br />
# PATH=/usr/local/GODI/bin:/usr/local/GODI/sbin:PATH<br />
# export PATH<br />
# ./bootstrap_stage2<br />
<br />
(注意！：gccやg++などの基本的なものがないと失敗する。)]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:21:31+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
  <item rdf:about="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%A6%82%E8%A6%81">
    <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%A6%82%E8%A6%81</link>
    <title>Ocsigen入門　概要</title>
    <description>OcsigenはOCamlを使ったWeb Serverで、安全で質の高いWebアプリケーションが簡単に作れるらしい。
以上の理由よりOcsigenを導入してみようと思った。
OcsigenはOCamlを使うので、OCamlをインストールしなければならない。また、ocamlfindや、ocamln...</description>
    <content:encoded><![CDATA[OcsigenはOCamlを使ったWeb Serverで、安全で質の高いWebアプリケーションが簡単に作れるらしい。<br />
以上の理由よりOcsigenを導入してみようと思った。<br />
OcsigenはOCamlを使うので、OCamlをインストールしなければならない。また、ocamlfindや、ocamlnetなどの基本的なライブラリたちも必要らしい、のちのち便利なのでまず、これらをインストールしようと思った。<br />
OCamlたちをインストールするためにはGODIが便利である、と書いてあったので、まずGODIをインストールした。]]></content:encoded>
    <dc:subject>Ocsigen</dc:subject>
    <dc:date>2007-07-19T20:16:48+09:00</dc:date>
    <dc:creator>No Name</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name</dc:rights>
  </item>
</rdf:RDF>
