<?xml version="1.0" encoding="UTF-8" ?>
<feed xml:lang="ja" xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
  <title type="text">technological blog</title>
  <subtitle type="html">technological blog</subtitle>
  <link rel="self" type="application/atom+xml" href="https://technological.blog.shinobi.jp/atom"/>
  <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/"/>
  <updated>2007-07-19T19:39:48+09:00</updated>
  <author><name>No Name</name></author>
  <generator uri="//www.ninja.co.jp/blog/" version="0.9">忍者ブログ</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
  <entry>
    <id>technological.blog.shinobi.jp://entry/11</id>
    <link rel="alternate" type="text/html" href="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" />
    <published>2007-07-27T19:51:52+09:00</published> 
    <updated>2007-07-27T19:51:52+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigenで再帰するフォーム</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![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>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/10</id>
    <link rel="alternate" type="text/html" href="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" />
    <published>2007-07-20T14:09:10+09:00</published> 
    <updated>2007-07-20T14:09:10+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigenでフォームを作ってみる</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![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>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/9</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%867" />
    <published>2007-07-19T20:48:11+09:00</published> 
    <updated>2007-07-19T20:48:11+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　手順7</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![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>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/8</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%866" />
    <published>2007-07-19T20:45:04+09:00</published> 
    <updated>2007-07-19T20:45:04+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　手順6</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[6. ocsigenを起動<br />
<br />
# ocsigen<br />
で、ocsigenを起動させた。]]> 
    </content>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/7</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%865" />
    <published>2007-07-19T20:44:21+09:00</published> 
    <updated>2007-07-19T20:44:21+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　手順5</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![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>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/6</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%864" />
    <published>2007-07-19T20:37:22+09:00</published> 
    <updated>2007-07-19T20:37:22+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　手順4</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![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>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/5</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%863" />
    <published>2007-07-19T20:31:34+09:00</published> 
    <updated>2007-07-19T20:31:34+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　手順3</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[3. Ocsigen0.99.1をインストール<br />
<br />
そして、いよいよOcsigenをインストール。<br />
<br />
READMEにしたがって以下のようにするとインストールできた。<br />
<br />
# sh configure<br />
# make depend<br />
# make <br />
# make install]]> 
    </content>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/4</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%862" />
    <published>2007-07-19T20:29:33+09:00</published> 
    <updated>2007-07-19T20:29:33+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　手順2</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![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>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/3</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%861" />
    <published>2007-07-19T20:21:31+09:00</published> 
    <updated>2007-07-19T20:21:31+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　手順1</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![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>
    <author>
            <name>No Name</name>
        </author>
  </entry>
  <entry>
    <id>technological.blog.shinobi.jp://entry/2</id>
    <link rel="alternate" type="text/html" href="https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%A6%82%E8%A6%81" />
    <published>2007-07-19T20:16:48+09:00</published> 
    <updated>2007-07-19T20:16:48+09:00</updated> 
    <category term="Ocsigen" label="Ocsigen" />
    <title>Ocsigen入門　概要</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[OcsigenはOCamlを使ったWeb Serverで、安全で質の高いWebアプリケーションが簡単に作れるらしい。<br />
以上の理由よりOcsigenを導入してみようと思った。<br />
OcsigenはOCamlを使うので、OCamlをインストールしなければならない。また、ocamlfindや、ocamlnetなどの基本的なライブラリたちも必要らしい、のちのち便利なのでまず、これらをインストールしようと思った。<br />
OCamlたちをインストールするためにはGODIが便利である、と書いてあったので、まずGODIをインストールした。]]> 
    </content>
    <author>
            <name>No Name</name>
        </author>
  </entry>
</feed>